Разработка и Конфигурация · 11 мин
Что значит ЗНАЧ в 1С и как использовать ЗНАЧЕНИЕ в запросах
Что значит ЗНАЧ в 1С: сокращение ключевого слова ЗНАЧЕНИЕ в языке запросов, синтаксис, примеры с перечислениями и предопределёнными элементами, типичные ошибки.
Запрос «знач 1с» почти всегда означает одно: пользователь встретил в тексте запроса или модуля слово ЗНАЧ (или ЗНАЧЕНИЕ) и хочет понять, что оно делает. Это ключевое слово встроенного языка запросов 1С:Предприятия, которое позволяет обратиться к конкретному значению объекта конфигурации — предопределённому элементу справочника, значению перечисления, пустой ссылке — напрямую по имени, без параметров и дополнительных соединений таблиц.
Конструкция записывается как ЗНАЧЕНИЕ(ИмяТипа.ИмяЗначения), а ЗНАЧ — это просто сокращённое написание, которое платформа принимает как синоним. Оба варианта работают одинаково, выбор между ними — вопрос стиля команды. В английском синтаксисе аналогом служит ключевое слово VALUE.
Ниже разобрано, где именно применяется ЗНАЧЕНИЕ, как правильно строить путь к значению, какие ошибки возникают чаще всего и когда вместо ЗНАЧЕНИЕ лучше использовать параметр запроса.
Что означает ключевое слово ЗНАЧЕНИЕ в языке запросов
Язык запросов 1С похож на SQL, но работает не с физическими таблицами, а с объектами метаданных: справочниками, документами, перечислениями, регистрами. Чтобы сослаться на конкретное значение, известное на этапе разработки конфигурации, используется функция ЗНАЧЕНИЕ. Она вычисляется на стороне СУБД при выполнении запроса и возвращает ссылку или значение примитивного типа.
Сокращение ЗНАЧЕНИЕ до ЗНАЧ допустимо во всех контекстах, где работает полная форма: в консоли запросов, в тексте модуля, в конструкторе запроса. Платформа распознаёт оба написания, потому что встроенный язык допускает сокращения ключевых слов до уникального префикса. Тем не менее в командной разработке обычно договариваются об одном варианте, чтобы код выглядел единообразно.
Синтаксис: как строится путь к значению
Общий формат вызова выглядит так: ЗНАЧЕНИЕ(ВидОбъекта.ИмяОбъекта.ИмяЗначения). Количество частей зависит от того, к чему вы обращаетесь. Для перечисления нужны три части: тип, имя перечисления, имя значения. Для пустой ссылки — две части: тип и имя объекта плюс служебное слово ПустаяСсылка.
Типичные варианты записи:
ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС20)— значение перечисления;ЗНАЧЕНИЕ(Справочник.Валюты.Рубль)— предопределённый элемент справочника с именем «Рубль»;ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)— пустая ссылка справочника;ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)— системное значение вида движения;ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Касса)— предопределённый счёт плана счетов.
Имена указываются так, как они заданы в конфигураторе, а не как отображаются пользователю. Если предопределённый элемент в конфигураторе называется ОсновнойСклад, а пользователь видит наименование «Центральный склад», в запросе нужно писать именно ОсновнойСклад. Это одна из самых частых причин ошибок.
Типичные сценарии использования
Фильтрация по значению перечисления
Самый частый случай — отбор документов или записей регистра по конкретному значению перечисления. Например, выбрать все реализации со ставкой НДС 20%:
ВЫБРАТЬ
РеализацияТоваровУслугТовары.Ссылка КАК Документ,
РеализацияТоваровУслугТовары.Сумма КАК Сумма
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ГДЕ
РеализацияТоваровУслугТовары.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС20)
Проверка на пустую ссылку
ЗНАЧЕНИЕ с ПустаяСсылка применяется, чтобы отобрать строки, где реквизит не заполнен, либо чтобы подставить пустую ссылку в результат запроса для единообразия типов:
ВЫБРАТЬ
Номенклатура.Ссылка КАК Товар
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
Предопределённые элементы справочников
Если в конфигурации есть предопределённый элемент, например валюта «Рубль» или склад «ОсновнойСклад», к нему удобно обращаться через ЗНАЧЕНИЕ, не передавая ссылку параметром и не ища её по наименованию:
ВЫБРАТЬ
ТоварыНаСкладах.Номенклатура КАК Номенклатура,
ТоварыНаСкладах.ВНаличииОстаток КАК Остаток
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = ЗНАЧЕНИЕ(Справочник.Склады.ОсновнойСклад)) КАК ТоварыНаСкладах
- 1Откройте консоль запросов или конструктор запроса в модуле
- 2Определите, к какому значению нужно обратиться: перечисление, предопределённый элемент или пустая ссылка
- 3Уточните точные имена в конфигураторе: имя объекта метаданных и имя значения
- 4Запишите конструкцию ЗНАЧЕНИЕ(Тип.Объект.Значение) в условии ГДЕ или в списке полей
- 5Выполните запрос и убедитесь, что отбор сработал и тип поля соответствует ожиданиям
Когда ЗНАЧЕНИЕ подходит, а когда лучше параметр
ЗНАЧЕНИЕ работает только со значениями, известными на уровне конфигурации: их имена зашиты в метаданные. Если нужное значение создаётся пользователем в режиме предприятия — например, конкретный контрагент, договор или склад, добавленный в базу вручную, — обратиться к нему через ЗНАЧЕНИЕ нельзя. Такие значения передаются в запрос параметрами.
Есть и второй аргумент в пользу параметров: гибкость. Запрос с условием СтавкаНДС = &СтавкаНДС можно переиспользовать для любой ставки, меняя только значение параметра. Запрос с жёстко вписанным ЗНАЧЕНИЕ придётся править в коде при каждом изменении логики. Поэтому правило простое: константные, неизменные в рамках конфигурации значения — через ЗНАЧЕНИЕ, переменные данные — через параметры.
ЗНАЧЕНИЕ или параметр запроса
Подходит для значений перечислений, предопределённых элементов, пустых ссылок. Не требует установки параметров, но жёстко привязан к конфигурации.
Подходит для любых значений, включая созданные пользователем элементы. Требует вызова УстановитьПараметр, но делает запрос универсальным.
Худший вариант: наименование могут переименовать, и запрос молча перестанет находить данные. Используйте только как временное решение.
Типичные ошибки и как их диагностировать
Чаще всего конструкция ЗНАЧЕНИЕ вызывает ошибку «Поле не найдено» или «Неверные параметры в операции сравнения» по трём причинам. Первая — указано пользовательское наименование вместо имени предопределённого элемента. Вторая — опечатка в имени перечисления или значения: платформа проверяет путь при компиляции запроса и сразу сообщает о проблеме. Третья — попытка сослаться на обычный (не предопределённый) элемент справочника, которого в метаданных просто нет.
Отдельный случай — сравнение несовместимых типов. Если реквизит имеет составной тип, а вы сравниваете его с ЗНАЧЕНИЕ одного конкретного типа, запрос выполнится, но результат может отличаться от ожидаемого из-за неявного приведения. Для составных реквизитов надёжнее комбинировать условие по типу через ВЫРАЗИТЬ или проверку ССЫЛКА.
Особенности и ограничения
ЗНАЧЕНИЕ доступно не только в запросах из модулей, но и в текстах запросов динамических списков, СКД, виртуальных таблиц регистров. Однако в схеме компоновки данных с произвольными настройками пользователю часто удобнее отборы через параметры — они видны в интерфейсе настроек, тогда как ЗНАЧЕНИЕ «спрятано» в тексте запроса и не редактируется без конфигуратора.
Ещё одно ограничение: при переименовании предопределённого элемента в конфигураторе все запросы с ЗНАЧЕНИЕ на это имя нужно обновить вручную. Платформа не выполняет автоматический рефакторинг текстов запросов, поэтому перед переименованием стоит сделать поиск по имени элемента по всем модулям конфигурации.
Как проверить, что запрос работает правильно
Быстрее всего отладить конструкцию в консоли запросов толстого клиента или в типовой консоли кода: вставьте текст запроса, выполните и посмотрите, возвращаются ли строки. Если результат пустой, проверьте условие по частям: сначала уберите фильтр с ЗНАЧЕНИЕ, убедитесь, что данные вообще есть, затем верните условие и сверьте фактическое значение поля в выборке с тем, что подставляет ЗНАЧЕНИЕ.
Полезный приём — вывести само значение в список полей: добавьте строку ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС20) КАК Проверка и сравните её с реальным значением реквизита в данных. Если типы или представления различаются, причина найдена.
Контрольные точки
Путь в ЗНАЧЕНИЕ совпадает с именами метаданных
Ошибка «Поле не найдено» — проверьте имена в конфигураторе
Возвращаются строки с нужным значением
Пустой результат при наличии данных — несовпадение типов или значений
Запрос работает как раньше
Элемент переименовали или удалили — нужно обновить текст запроса
Частые вопросы
Чем ЗНАЧ отличается от ЗНАЧЕНИЕ в 1С?
Ничем функционально: ЗНАЧ — допустимое сокращение ключевого слова ЗНАЧЕНИЕ. Платформа обрабатывает оба варианта одинаково. В командной разработке обычно выбирают одну форму и придерживаются её во всех модулях.
Можно ли через ЗНАЧЕНИЕ обратиться к обычному элементу справочника?
Нет. Конструкция работает только с предопределёнными элементами, созданными в конфигураторе, значениями перечислений, пустыми ссылками и системными значениями. Обычные элементы, заведённые пользователями, передаются в запрос параметром.
Почему запрос с ЗНАЧЕНИЕ возвращает пустой результат, хотя данные есть?
Наиболее вероятные причины — несовпадение типов сравниваемых полей, сравнение с наименованием вместо ссылки или то, что в данных используется другое значение перечисления. Выведите фактическое значение поля в выборку и сравните его с результатом ЗНАЧЕНИЕ.
Работает ли ЗНАЧЕНИЕ в СКД и динамических списках?
Да, ключевое слово доступно в текстах запросов наборов данных СКД и в запросах динамических списков. Но для пользовательских отборов в отчётах удобнее параметры: они отображаются в настройках и доступны для изменения без доработки конфигурации.
Как записать пустую ссылку через ЗНАЧЕНИЕ?
Формат: ЗНАЧЕНИЕ(Справочник.ИмяСправочника.ПустаяСсылка) — аналогично для документов, планов видов характеристик и других ссылочных типов. Такая конструкция используется для проверки реквизитов на незаполненность и для подстановки пустого значения в результат запроса.
Что будет, если переименовать предопределённый элемент?
Все запросы, где элемент используется через ЗНАЧЕНИЕ со старым именем, начнут выдавать ошибку при выполнении. Перед переименованием выполните глобальный поиск старого имени по модулям, схемам СКД и текстам динамических списков.
Что важно запомнить
ЗНАЧ — сокращение ключевого слова ЗНАЧЕНИЕ языка запросов 1С. Оно подставляет значение по имени метаданных: ЗНАЧЕНИЕ(Перечисление.Имя.Значение), ЗНАЧЕНИЕ(Справочник.Имя.ПредопределённыйЭлемент), ЗНАЧЕНИЕ(Тип.Имя.ПустаяСсылка). Для пользовательских данных используйте параметры, а при переименовании предопределённых элементов проверяйте все тексты запросов.