Содержание
рубрики: Запросы | Дата: 28 Январь, 2016
Достаточно часто встречаются ситуации когда в запросе надо получить предопределенное значение какого-либо объекта (справочника, плана видов расчета и т.д.), либо значение перечисления, либо пустую ссылку. Такая возможность в языке запросов 1С8 реализована при помощи функции ЗНАЧЕНИЕ.
Сразу перейдем к примеру. У нас есть периодический регистр сведений ОценкиСайтов. Измерение Сайт имеет тип Справочник.Сайты, а ресурс Оценка представлен перечислением ОценкиСайта.
В свою очередь справочник Сайты содержит предопределенный элемент – Профессия1С.
Выберем из регистра все записи где в поле Сайт содержится наш предопределенный элемент.
Это можно сделать вот таким запросом:
Другой пример. Перечисление ОценкиСайта содержит следующие значения: Низкая, Средняя, Высокая.
Выберем все записи, где оценка Высокая:
И наконец выберем записи где сайт не указан, т.е. где измерение Сайт – пустая ссылка
Конечно все эти запросы можно реализовать и с использованием параметров запроса. Но когда запрос объемом в несколько экранов гораздо удобней читать его если использовалась функция ЗНАЧЕНИЕ, чем пролистывать весь текст вверх или вниз в поисках параметра.
В статье рассмотрен один из способов передачи значений предопределенных элементов в запрос.
Для передачи в запрос значений перечислений и значений предопределенных элементов ссылочного типа можно воспользоваться:
- параметрами запроса;
- функцией ЗНАЧЕНИЕ( ) .
Рассмотрим второй вариант, на мой взгляд, он более красивый.
При помощи функции ЗНАЧЕНИЕ можно обратиться к:
- значениям перечислений;
- значениям пустых ссылок;
- предопределенным элементам:
- справочников;
- планов видов характеристик;
- планов счетов;
- планов видов расчетов;
В параметр ИмяЗначения передается строка, которая может иметь один из следующих видов:
Перечисление. .ЗначениеПеречисления
Перечисление. .ПустаяСсылка
Справочник. .
Справочник. .ПустаяСсылка
ПланВидовХарактеристик. .
ПланВидовХарактеристик. .ПустаяСсылка
ПланСчетов. .
ПланСчетов. .ПустаяСсылка
ПланВидовРасчета. .
ПланВидовРасчета. .ПустаяСсылка
БизнесПроцесс. .ТочкаМаршрута.
БизнесПроцесс. .ТочкаМаршрута.ПустаяСсылка
Вот несколько примеров с фрагментами запросов, иллюстрирующие использование функции Значение:
ГДЕ ТаблицаКИ.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон)
ГДЕ ВидыКИ.Родитель = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.СправочникПользователи)
ВЫБРАТЬ ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) КАК Ссылка
ГДЕ РеализацияТоваровУслугТовары.ЗаказКлиента <> ЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка)
ВЫБРАТЬ ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.НДФЛ) КАК СчетУчета
ГДЕ Задание.ЗадачаИсточник = ЗНАЧЕНИЕ(Задача.ЗадачаИсполнителя.ПустаяСсылка)
ВЫБОР КОГДА РасчетыСКлиентами.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) ТОГДА
РасчетыСКлиентами.Сумма
ИНАЧЕ
0
КОНЕЦ
Остались вопросы?
Спросите в комментариях к статье.
Предопределенные значения объектов конфигурации отличный способ заполнить 1с распространенными значениями, а в бухгалтерских конфигурациях в плане счетов без этого не обойтись, ведь набор счетов жестко регламентирован.
Как же работать с предопределенными значениями?
В коде модулей обращение к таким элементам производится через менеджер объекта, например:
Ссылка = ПланыСчетов . Хозрасчетный . Продукция ;
В языке запросов это производится аналогично, но с использованием функции запросов ЗНАЧЕНИЕ().
Функция значение предназначена для получения ссылки на предопределенные значения справочников, перечислений, планов видов характеристик, планов счетов, планов видов расчетов, точек маршрутов бизнес процессов, к системным перечислениям.
Примеры использования ЗНАЧЕНИЕ():
Ссылка справочника:
Для проверки на пустое значение справочника:
Справочник.Контрагенты КАК Контрагенты
Для получения перечислений:
Ссылка.Владелец КАК Контрагент
Справочник.ДоговорыКонтрагентов КАК Договор
ИЛИ Договор.ВидДоговора = ЗНАЧЕНИЕ (Перечисление.ВидыДоговоровКонтрагентов.ПустаяСсылка)
План видов характеристик:
Счет в плане счетов:
ВЫБРАТЬ ЗНАЧЕНИЕ (ПланСчетов.Хозрасчетный.Товары) КАК СчетТоваров
Системные перечисления:
ВЫБРАТЬ
ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) КАК Расход,
ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) КАК Приход,
ЗНАЧЕНИЕ(ВидДвиженияБухгалтерии.Дебет) КАК Дебет,
ЗНАЧЕНИЕ(ВидДвиженияБухгалтерии.Кредит) КАК Кредит,
ЗНАЧЕНИЕ(ВидСчета.Активный) КАК Активный,
ЗНАЧЕНИЕ(ВидСчета.Пассивный) КАК Пассивный,
ЗНАЧЕНИЕ(ВидСчета.АктивноПассивный) КАК АктивноПассивный
Аналог функции ЗначениеЗаполнено() в запросе
- В явном виде функции на заполнение нет, но возможна проверка на несовпадение, например:
ГДЕ НЕ ОсновнойДоговорКонтрагента = ЗНАЧЕНИЕ(Справочник.ДоговорыКонтрагента.ПустаяСсылка)
- проверка на невхождение в список:
ГДЕ НЕ ОсновнойДоговорКонтрагента В (ЗНАЧЕНИЕ(Справочник.ДоговорыКонтрагента.ПустаяСсылка), НЕОПРЕДЕЛЕНО, NULL,"")
То есть, если значение не пустое или не входит в список пустых, его можно считать заполненным.
Ошибки при использовании ЗНАЧЕНИЕ()
При неверном синтаксисе параметра функции возникает ошибка «Неверные параметры».
- указание во множественном числе (например «Справочники» вместо «Справочник»)
- не верное имя предопределенного или его отсутствие
Недопустима передача в ЗНАЧЕНИЕ параметра вот так:
Выйдет ошибка «Ожидается параметр»:
Функция как раз предназначена для ухода от параметров для предопределенных в метаданных ссылках.
Не требуется указание параметра функции в кавычках: это вызовет ошибку «Ожидается имя»
Реклама — двигатель всеобщей дебилизации населения.