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