1С запрос заполнено значение

1С запрос заполнено значение

В статье рассмотрен один из способов передачи значений предопределенных элементов в запрос.

Для передачи в запрос значений перечислений и значений предопределенных элементов ссылочного типа можно воспользоваться:

  1. параметрами запроса;
  2. функцией ЗНАЧЕНИЕ( ) .

Рассмотрим второй вариант, на мой взгляд, он более красивый.

При помощи функции ЗНАЧЕНИЕ можно обратиться к:

  • значениям перечислений;
  • значениям пустых ссылок;
  • предопределенным элементам:
  • справочников;
  • планов видов характеристик;
  • планов счетов;
  • планов видов расчетов;
  • значениям точек маршрута бизнес-процессов;
  • значениям системных перечислений ( ВидДвиженияНакопления , ВидСчета , ВидДвиженияБухгалтерии ).
  • В параметр ИмяЗначения передается строка, которая может иметь один из следующих видов:

    Перечисление. .ЗначениеПеречисления
    Перечисление. .ПустаяСсылка

    Справочник. .
    Справочник. .ПустаяСсылка

    ПланВидовХарактеристик. .
    ПланВидовХарактеристик. .ПустаяСсылка

    ПланСчетов. .
    ПланСчетов. .ПустаяСсылка

    ПланВидовРасчета. .
    ПланВидовРасчета. .ПустаяСсылка

    БизнесПроцесс. .ТочкаМаршрута.
    БизнесПроцесс. .ТочкаМаршрута.ПустаяСсылка

    Вот несколько примеров с фрагментами запросов, иллюстрирующие использование функции Значение:

    ГДЕ ТаблицаКИ.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон)

    ГДЕ ВидыКИ.Родитель = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.СправочникПользователи)
    ВЫБРАТЬ ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) КАК Ссылка

    ГДЕ РеализацияТоваровУслугТовары.ЗаказКлиента <> ЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка)

    ВЫБРАТЬ ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.НДФЛ) КАК СчетУчета

    ГДЕ Задание.ЗадачаИсточник = ЗНАЧЕНИЕ(Задача.ЗадачаИсполнителя.ПустаяСсылка)

    ВЫБОР КОГДА РасчетыСКлиентами.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) ТОГДА
    РасчетыСКлиентами.Сумма
    ИНАЧЕ
    0
    КОНЕЦ

    Остались вопросы?
    Спросите в комментариях к статье.

    Предопределенные значения объектов конфигурации отличный способ заполнить 1с распространенными значениями, а в бухгалтерских конфигурациях в плане счетов без этого не обойтись, ведь набор счетов жестко регламентирован.

    Как же работать с предопределенными значениями?

    В коде модулей обращение к таким элементам производится через менеджер объекта, например:

    Ссылка = ПланыСчетов . Хозрасчетный . Продукция ;

    В языке запросов это производится аналогично, но с использованием функции запросов ЗНАЧЕНИЕ().
    Функция значение предназначена для получения ссылки на предопределенные значения справочников, перечислений, планов видов характеристик, планов счетов, планов видов расчетов, точек маршрутов бизнес процессов, к системным перечислениям.

    [qu_note note_color=»#fdc8b2″]При этом имя вида объекта указывается в запросе в единственном числе.[/qu_note]

    Примеры использования ЗНАЧЕНИЕ():

    Ссылка справочника:

    Для проверки на пустое значение справочника:

    Справочник.Контрагенты КАК Контрагенты

    Для получения перечислений:

    Ссылка.Владелец КАК Контрагент

    Справочник.ДоговорыКонтрагентов КАК Договор

    ИЛИ Договор.ВидДоговора = ЗНАЧЕНИЕ (Перечисление.ВидыДоговоровКонтрагентов.ПустаяСсылка)

    План видов характеристик:

    Счет в плане счетов:

    ВЫБРАТЬ ЗНАЧЕНИЕ (ПланСчетов.Хозрасчетный.Товары) КАК СчетТоваров

    Системные перечисления:

    ВЫБРАТЬ
    ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) КАК Расход,
    ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) КАК Приход,
    ЗНАЧЕНИЕ(ВидДвиженияБухгалтерии.Дебет) КАК Дебет,
    ЗНАЧЕНИЕ(ВидДвиженияБухгалтерии.Кредит) КАК Кредит,
    ЗНАЧЕНИЕ(ВидСчета.Активный) КАК Активный,
    ЗНАЧЕНИЕ(ВидСчета.Пассивный) КАК Пассивный,
    ЗНАЧЕНИЕ(ВидСчета.АктивноПассивный) КАК АктивноПассивный

    Аналог функции ЗначениеЗаполнено() в запросе

    • В явном виде функции на заполнение нет, но возможна проверка на несовпадение, например:

    ГДЕ НЕ ОсновнойДоговорКонтрагента = ЗНАЧЕНИЕ(Справочник.ДоговорыКонтрагента.ПустаяСсылка)

    • проверка на невхождение в список:

    ГДЕ НЕ ОсновнойДоговорКонтрагента В (ЗНАЧЕНИЕ(Справочник.ДоговорыКонтрагента.ПустаяСсылка), НЕОПРЕДЕЛЕНО, NULL,"")

    То есть, если значение не пустое или не входит в список пустых, его можно считать заполненным.

    Ошибки при использовании ЗНАЧЕНИЕ()

    При неверном синтаксисе параметра функции возникает ошибка «Неверные параметры».

    • указание во множественном числе (например «Справочники» вместо «Справочник»)
    • не верное имя предопределенного или его отсутствие

    Недопустима передача в ЗНАЧЕНИЕ параметра вот так:

    Читайте также:  Смарт браслет айфон на руке

    Выйдет ошибка «Ожидается параметр»:

    Функция как раз предназначена для ухода от параметров для предопределенных в метаданных ссылках.

    Не требуется указание параметра функции в кавычках: это вызовет ошибку «Ожидается имя»

    Любые издержки на рекламную кампанию:
    — больше, чем может позволить себе клиент;
    — меньше, чем ожидали люди из творческого отдела;
    — примерно такие, которых с ужасом опасались бухгалтеры.

    Запрос.Текст = "ВЫБРАТЬ | усЕдиницыХранения.Ссылка |ИЗ | Справочник.усЕдиницыХранения КАК усЕдиницыХранения // Пример 1. сравнение с не заполненным булевым значением: |ГДЕ | усЕдиницыХранения.РазрешитьОтборИзРезервнойЗоны = Ложь // Пример 2. но если это булево определено, то лучше так: // условие на отрицательное булево: |ГДЕ | НЕ усЕдиницыХранения.РазрешитьОтборИзРезервнойЗоны // Пример 3. выборка по условию не заполненного поля, имеющего тип "справочник конкретного типа" |ГДЕ | усЕдиницыХранения.АктивнаяОбластьОтбора = ЗНАЧЕНИЕ(Справочник.усОбластиОтбора.ПустаяСсылка) // Пример 3а. выборка по условию не заполненного поля, имеющего тип "документ конкретного типа" |ГДЕ | НашРегистрСведений.Документ = ЗНАЧЕНИЕ(Документ.НашДокумент.ПустаяСсылка) // Пример 3б. выборка по условию не заполненного поля, имеющего тип "документы разных типов" (составное поле) |ГДЕ | (НашРегистрСведений.Документ = ЗНАЧЕНИЕ(Документ.НашДокумент1.ПустаяСсылка) | ИЛИ НашРегистрСведений.Документ = ЗНАЧЕНИЕ(Документ.НашДокумент2.ПустаяСсылка) | ИЛИ. (и т.д. — последовательно перечисляем условия для всех возможных типов этого составного поля)) // Пример 4. или наоборот, если нужно выбрать заполненное значение типа "строка", то поможет условие: |ГДЕ | усЕдиницыХранения.Наименование > """" // Пример 5. если нужно выбрать документы конкретного типа, при составном типе данных, например в регистре "ВыполняемыеЗадания" ресурс "Задание" имеет составной тип, среди значений которого возможен документ "Отбор" |ГДЕ | ВЫРАЗИТЬ(РегистрСведенийВыполняемыеЗадания.Задание КАК Документ.Отбор) ССЫЛКА Документ.Отбор // Пример 5а. Еще аналогичный пример, когда нужно выбрать документы конкретного типа | ВЫБОР | КОГДА ВЫРАЗИТЬ(агСоответствиеДокументов.ДокументБУ КАК Документ.ПоступлениеТоваровУслуг) ССЫЛКА Документ.ПоступлениеТоваровУслуг | ТОГДА ""ПоступлениеТоваровУслуг"" | КОГДА ВЫРАЗИТЬ(агСоответствиеДокументов.ДокументБУ КАК Документ.РеализацияТоваровУслуг) ССЫЛКА Документ.РеализацияТоваровУслуг | ТОГДА ""РеализацияТоваровУслуг"" | ИНАЧЕ """" | КОНЕЦ КАК ВидДокумента // Пример 6. выбор по условию не определенного значения: |ГДЕ | СохраненныеНастройки.Пользователь = НЕОПРЕДЕЛЕНО // Пример 7. выбор по виду движения "Приход" регистра накопления, "Расход" — аналогично): |ГДЕ | РегТоварыВРознице.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) // Пример 8. Как в запросе указать, что выполнять запрос не нужно (например, нужно программно в зависимости от какого-то условия вернуть пустой результат запроса — Запрос.Текст = СтрЗаменить(Запрос.Текст, "ГДЕ Док.Ссылка = &ДокументСсылка", "ГДЕ ЛОЖЬ");). Для этого достаточно добавить условие "Где Ложь". Кстати, независимо от объема запрашиваемых в выборке данных, такой запрос будет выполнен мгновенно. |ГДЕ ЛОЖЬ // Пример 9. Проверка на то, что результат выполнения запроса содержит данные: Если НЕ Запрос.Выполнить().Пустой() Тогда // Пример 10. выбор по условию не заполненной даты: |ГДЕ | тбСтроки.ДатаОтмены = ДАТАВРЕМЯ(1, 1, 1)

    В языке запросов 1С часто требуется проверить: является ли значение пустой ссылкой.
    Пустая ссылка — это такое значение ссылочных объектов, когда оно имеет этот же тип, но само значение не выбрано.

    Читайте также:  Как отвязать свой номер от страницы

    На языке программирования 1С данное значение можно получить через менеджеры объекта.

    • Перечисления.Пол.ПустаяСсылка(),
    • Справочники.Организации.ПустаяСсылка(),
    • ПланыСчетов.Хозрасчетный.ПустаяСсылка(),
    • ПредопредленноеЗначение(«ПланСчетов.Хозрасчетный.ПустаяСсылка»)

    Как же в запросе 1С сравнить на пустое значение

    Для этого у нас есть несколько вариантов в зависимости от требований задачи:

    1.Если требуется получить значение пустого типа.

    Воспользуемся функцией ЗНАЧЕНИЕ()

    Выбрать
    ЗНАЧЕНИЕ (Перечисление.Пол.ПустаяСсылка)//Без вопроса в единственном числе

    Либо через переданный в запрос параметр:
    Выбрать
    &ПустойПараметрНужногоТипа

    2. Если требуется сравнить со значением не составного типа:

    Выбрать
    Значение(Перечисление.Пол.ПустаяСсылка)<>Значение(Перечисление.Пол.Мужской) как ЭтоБулевоИстина

    Выбрать
    Выбор когда &ПустойПараметрНужногоТипа ИЛИ Значение(Перечисление.Пол.Мужской) Тогда Истина Иначе Ложь Конец как ЭтоНеЖенскийПол

    3. Если требуется проверка составного значения:

    В этом случае значение

    • может быть неопределенного типа (очищено или ни разу не выбрано)
    • пустой ссылкой любого из типов (выбран тип, но не выбрано значение)
    • выбранным значением любого из типов (выбрано значение)

    В этом случае обычно первые два варианта считаются пустым значением, но пустыми ссылками являются только вторые.

    //Мы инициализировали массив заполненных значений и сравнили его с пустым

    Выбор когда ЗНАЧЕНИЕ(Значение(Перечисление.Пол.ПустаяСсылка) в (Значение(Перечисление.Пол.Мужской),Значение(Перечисление.Пол.Женский)) ИЛИ Есть NULL Тогда Истина Иначе Ложь конец ЗначениеПустое

    //Мы инициализировали массив пустых ссылок и проверили вхождение в него нашего «неизвестного» значения

    Выбор когда ЗНАЧЕНИЕ(Значение(Перечисление.Пол.Мужской) в (Значение(Перечисление.Пол.ПустаяСсылка),Значение(Справочник.Контрагенты.ПустаяСсылка)) Тогда Истина Иначе Ложь конец ЗначениеПустое

    Также мы можем передать массив параметром

    Выбрать Выбор когда ЗНАЧЕНИЕ(Значение(Перечисление.Пол.ПустаяСсылка) в (&МассивВсехПустыхСсылок) Тогда Истина Иначе Ложь конец ЗначениеПустое

    Про перечисление в запросе 1С.

    Запрос . Текст = "ВЫБРАТЬ | усЕдиницыХранения.Ссылка |ИЗ | Справочник.усЕдиницыХранения КАК усЕдиницыХранения // Пример 1. сравнение с не заполненным булевым значением: |ГДЕ | усЕдиницыХранения.РазрешитьОтборИзРезервнойЗоны = Ложь // Пример 2. но если это булево определено, то лучше так: // условие на отрицательное булево: |ГДЕ | НЕ усЕдиницыХранения.РазрешитьОтборИзРезервнойЗоны // Пример 3. выборка по условию не заполненного поля, имеющего тип "справочник конкретного типа" |ГДЕ | усЕдиницыХранения.АктивнаяОбластьОтбора = ЗНАЧЕНИЕ(Справочник.усОбластиОтбора.ПустаяСсылка) // Пример 3а. выборка по условию не заполненного поля, имеющего тип "документ конкретного типа" |ГДЕ | НашРегистрСведений.Документ = ЗНАЧЕНИЕ(Документ.НашДокумент.ПустаяСсылка) // Пример 3б. выборка по условию не заполненного поля, имеющего тип "документы разных типов" (составное поле) |ГДЕ | (НашРегистрСведений.Документ = ЗНАЧЕНИЕ(Документ.НашДокумент1.ПустаяСсылка) | ИЛИ НашРегистрСведений.Документ = ЗНАЧЕНИЕ(Документ.НашДокумент2.ПустаяСсылка) | ИЛИ. (и т.д. — последовательно перечисляем условия для всех возможных типов этого составного поля)) // Пример 4. или наоборот, если нужно выбрать заполненное значение типа "строка", то поможет условие: |ГДЕ | усЕдиницыХранения.Наименование > """" // Пример 5. если нужно выбрать документы конкретного типа, при составном типе данных, например в регистре "ВыполняемыеЗадания" ресурс "Задание" имеет составной тип, среди значений которого возможен документ "Отбор" |ГДЕ | ВЫРАЗИТЬ(РегистрСведенийВыполняемыеЗадания.Задание КАК Документ.Отбор) ССЫЛКА Документ.Отбор // Пример 5а. Еще аналогичный пример, когда нужно выбрать документы конкретного типа | ВЫБОР | КОГДА ВЫРАЗИТЬ(агСоответствиеДокументов.ДокументБУ КАК Документ.ПоступлениеТоваровУслуг) ССЫЛКА Документ.ПоступлениеТоваровУслуг | ТОГДА ""ПоступлениеТоваровУслуг"" | КОГДА ВЫРАЗИТЬ(агСоответствиеДокументов.ДокументБУ КАК Документ.РеализацияТоваровУслуг) ССЫЛКА Документ.РеализацияТоваровУслуг | ТОГДА ""РеализацияТоваровУслуг"" | ИНАЧЕ """" | КОНЕЦ КАК ВидДокумента // Пример 6. выбор по условию не определенного значения: |ГДЕ | СохраненныеНастройки.Пользователь = НЕОПРЕДЕЛЕНО // Пример 7. выбор по виду движения "Приход" регистра накопления, "Расход" — аналогично): |ГДЕ | РегТоварыВРознице.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) // Пример 8. Как в запросе указать, что выполнять запрос не нужно (например, нужно программно в зависимости от какого-то условия вернуть пустой результат запроса — Запрос.Текст = СтрЗаменить(Запрос.Текст, "ГДЕ Док.Ссылка = &ДокументСсылка", "ГДЕ ЛОЖЬ");). Для этого достаточно добавить условие "Где Ложь". Кстати, независимо от объема запрашиваемых в выборке данных, такой запрос будет выполнен мгновенно. |ГДЕ ЛОЖЬ // Пример 9. Проверка на то, что результат выполнения запроса содержит данные: Если НЕ Запрос . Выполнить (). Пустой () Тогда // Пример 10. выбор по условию не заполненной даты: |ГДЕ | тбСтроки.ДатаОтмены = ДАТАВРЕМЯ(1, 1, 1)

    Читайте также:  How to remove mail ru

    Предопределенные значения объектов конфигурации отличный способ заполнить 1с распространенными значениями, а в бухгалтерских конфигурациях в плане счетов без этого не обойтись, ведь набор счетов жестко регламентирован.

    Как же работать с предопределенными значениями?

    В коде модулей обращение к таким элементам производится через менеджер объекта, например:

    В языке запросов это производится аналогично, но с использованием функции запросов ЗНАЧЕНИЕ().
    Функция значение предназначена для получения ссылки на предопределенные значения справочников, перечислений, планов видов характеристик, планов счетов, планов видов расчетов, точек маршрутов бизнес процессов, к системным перечислениям.

    При этом имя вида объекта указывается в запросе в единственном числе.

    Примеры использования ЗНАЧЕНИЕ():

    Для проверки на пустое значение справочника:

    Справочник.Контрагенты КАК Контрагенты

    Для получения перечислений:

    Справочник.ДоговорыКонтрагентов КАК Договор

    ИЛИ Договор.ВидДоговора = ЗНАЧЕНИЕ (Перечисление.ВидыДоговоровКонтрагентов.ПустаяСсылка)

    План видов характеристик:

    Счет в плане счетов:

    ВЫБРАТЬ ЗНАЧЕНИЕ (ПланСчетов.Хозрасчетный.Товары) КАК СчетТоваров

    ВЫБРАТЬ
    ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) КАК Расход,
    ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) КАК Приход,
    ЗНАЧЕНИЕ(ВидДвиженияБухгалтерии.Дебет) КАК Дебет,
    ЗНАЧЕНИЕ(ВидДвиженияБухгалтерии.Кредит) КАК Кредит,
    ЗНАЧЕНИЕ(ВидСчета.Активный) КАК Активный,
    ЗНАЧЕНИЕ(ВидСчета.Пассивный) КАК Пассивный,
    ЗНАЧЕНИЕ(ВидСчета.АктивноПассивный) КАК АктивноПассивный

    Аналог функции ЗначениеЗаполнено() в запросе

    • В явном виде функции на заполнение нет, но возможна проверка на несовпадение, например:

    ГДЕ НЕ ОсновнойДоговорКонтрагента = ЗНАЧЕНИЕ(Справочник.ДоговорыКонтрагента.ПустаяСсылка)

    • проверка на невхождение в список:

    ГДЕ НЕ ОсновнойДоговорКонтрагента В (ЗНАЧЕНИЕ(Справочник.ДоговорыКонтрагента.ПустаяСсылка), НЕОПРЕДЕЛЕНО, NULL,"")

    То есть, если значение не пустое или не входит в список пустых, его можно считать заполненным.

    Ошибки при использовании ЗНАЧЕНИЕ()

    При неверном синтаксисе параметра функции возникает ошибка «Неверные параметры».

    • указание во множественном числе (например «Справочники» вместо «Справочник»)
    • не верное имя предопределенного или его отсутствие

    Недопустима передача в ЗНАЧЕНИЕ параметра вот так:

    Выйдет ошибка «Ожидается параметр»:

    Функция как раз предназначена для ухода от параметров для предопределенных в метаданных ссылках.

    Не требуется указание параметра функции в кавычках: это вызовет ошибку «Ожидается имя»

    Ссылка на основную публикацию
    0Xc000007b что это за ошибка как исправить
    При активации приложений на компьютере пользователь может столкнуться с ошибкой, сопровождающейся кодом 0xc000007b. Давайте разберемся в её причинах и в...
    Adblock detector