Значение в запросе 1С: функция ЗНАЧЕНИЕ() с примерами

Дата: 21.09.2026 07:06:43
Запросы
Язык запросов
Предопределенные данные
Перечисления
Пустая ссылка
Комментарий:
0
Платформа:
8.3
Конфигурация:
Любая
Формы:
Любые

Значение в запросе 1С задают функцией ЗНАЧЕНИЕ(): она позволяет прямо в тексте запроса сослаться на значение перечисления, предопределённый элемент справочника, пустую ссылку, счёт или вид движения регистра. Без неё каждую такую константу пришлось бы передавать параметром. Ниже — синтаксис, список допустимых вариантов с примерами, работа в конструкторе и частые ошибки. Язык запросов в целом разобран в статье о синтаксисе запросов 1С.

Значение в запросе 1С: синтаксис функции ЗНАЧЕНИЕ()

У функции один аргумент — полное имя значения, записанное без кавычек:

ЗНАЧЕНИЕ(<Вид объекта>.<Имя объекта>.<Имя значения>)

Три правила, из-за которых возникает большая часть ошибок:

  • вид объекта пишется в единственном числе: Справочник, Перечисление, ПланСчетов. Не Справочники и не Перечисления, как в коде модуля;
  • для предопределённого элемента указывается его имя из конфигуратора, а не наименование и не код. Для перечисления — имя значения, а не синоним, который видит пользователь;
  • аргумент — константа, известная на момент разбора запроса. Платформа подставляет ссылку ещё до обращения к СУБД, поэтому внутрь нельзя передать ни параметр, ни поле, ни выражение.

Писать функцию можно везде, где допустимо выражение: в списке полей, в ГДЕ, в условиях соединения, внутри ВЫБОР, ЕСТЬNULL() и В (...), в параметрах виртуальных таблиц.

Что можно передать в ЗНАЧЕНИЕ(): полный список

Что нужно получитьКак записатьПример
Значение перечисленияПеречисление.Имя.ИмяЗначенияЗНАЧЕНИЕ(Перечисление.СтатусыЗаказов.Закрыт)
Предопределённый элемент справочникаСправочник.Имя.ИмяПредопределенногоЗНАЧЕНИЕ(Справочник.Склады.Основной)
Предопределённый вид характеристикиПланВидовХарактеристик.Имя.ИмяПредопределенногоЗНАЧЕНИЕ(ПланВидовХарактеристик.СвойстваОбъектов.Цвет)
Предопределённый счётПланСчетов.Имя.ИмяПредопределенногоЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетныеСчета)
Предопределённый вид расчётаПланВидовРасчета.Имя.ИмяПредопределенногоЗНАЧЕНИЕ(ПланВидовРасчета.Начисления.Оклад)
Пустая ссылкаВид.Имя.ПустаяСсылкаЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка)
Точка маршрута бизнес-процессаБизнесПроцесс.Имя.ТочкаМаршрута.ИмяТочкиЗНАЧЕНИЕ(БизнесПроцесс.Задание.ТочкаМаршрута.Выполнить)
Вид движения регистра накопленияВидДвиженияНакопления.Приход, ВидДвиженияНакопления.РасходЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
Вид движения регистра бухгалтерииВидДвиженияБухгалтерии.Дебет, ВидДвиженияБухгалтерии.КредитЗНАЧЕНИЕ(ВидДвиженияБухгалтерии.Дебет)
Вид счётаВидСчета.Активный, ВидСчета.Пассивный, ВидСчета.АктивноПассивныйЗНАЧЕНИЕ(ВидСчета.Пассивный)

Пустая ссылка есть у любого ссылочного типа: справочника, документа, перечисления, плана видов характеристик, плана счетов, плана видов расчёта, бизнес-процесса, задачи, плана обмена. Предопределённые элементы бывают только у справочников, планов видов характеристик, планов счетов и планов видов расчёта. У документов их нет, поэтому ЗНАЧЕНИЕ(Документ...) принимает только ПустаяСсылка.

Имена в примерах условные: у каждой конфигурации свои перечисления и свои предопределённые. Точное имя берите в конфигураторе — в свойствах значения перечисления или в окне предопределённых элементов справочника (колонка «Имя»).

Примеры по каждому варианту

Перечисления: условие, список значений, поле выборки

Самый частый случай — отбор документов по статусу. Если подходят несколько статусов, их перечисляют через В:

ВЫБРАТЬ
	Заказы.Ссылка КАК Заказ,
	Заказы.Статус КАК Статус
ИЗ
	Документ.ЗаказКлиента КАК Заказы
ГДЕ
	Заказы.Проведен
	И Заказы.Статус В (ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказов.КОтгрузке),
			ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказов.Закрыт))

Значение можно вернуть и колонкой результата, в том числе системное перечисление вроде вида движения. Так удобно помечать, из какой части объединения пришла строка:

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

ОБЪЕДИНИТЬ ВСЕ

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

Предопределённые элементы справочников

Чтобы получить значение предопределённого в запросе, пишите его имя после имени справочника. Пример — остатки только по основному складу. Условие стоит в параметрах виртуальной таблицы, поэтому отбор выполняется до расчёта остатков, а не после:

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

Параметр &НаДату здесь остаётся параметром: дата меняется от запуска к запуску, её нет в метаданных. Для дат-констант в тексте запроса есть свой литерал, подробнее — в статье о датах в запросе.

Пустая ссылка и NULL

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

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

После левого соединения в полях присоединённой таблицы может оказаться NULL, и сравнение с пустой ссылкой его не поймает. Замените его пустой ссылкой прямо в запросе:

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

Теперь в колонке «Склад» всегда ссылка одного типа, а не NULL. Её можно сравнивать со ссылками в следующих условиях и соединениях (сравнение с NULL истину не даёт), а в коде безопасно читать её реквизиты: у пустой ссылки реквизит вернёт значение по умолчанию, у NULL будет ошибка. ЗначениеЗаполнено() вернёт Ложь в обоих случаях. Незаполненное поле составного типа обычно хранит Неопределено, его сравнивают с литералом НЕОПРЕДЕЛЕНО.

Счета, виды счетов и виды движения бухгалтерии

В бухгалтерских запросах через ЗНАЧЕНИЕ() указывают предопределённые счета. Чтобы захватить счёт вместе с субсчетами, используйте В ИЕРАРХИИ. Имена ниже — из плана счетов «Хозрасчетный» БП 3.0; в другой конфигурации сверьтесь с конфигуратором:

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

Поле Вид у плана счетов имеет тип ВидСчета, его значения тоже получают через функцию:

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

ВидДвиженияБухгалтерии.Дебет и .Кредит встречаются в двух местах. У регистров бухгалтерии без поддержки корреспонденции вместо пары СчетДт/СчетКт есть один счёт и поле ВидДвижения. У регистров с корреспонденцией то же поле есть в таблице значений субконто РегистрБухгалтерии.<Имя>.Субконто: оно показывает, к какой стороне проводки, Дт или Кт, относится субконто. Пример — контрагенты, которые встречались в дебете проводок за период (вид субконто из БП 3.0):

ВЫБРАТЬ РАЗЛИЧНЫЕ
	Субконто.Значение КАК Контрагент
ИЗ
	РегистрБухгалтерии.Хозрасчетный.Субконто КАК Субконто
ГДЕ
	Субконто.Период МЕЖДУ &НачалоПериода И &КонецПериода
	И Субконто.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияБухгалтерии.Дебет)
	И Субконто.Вид = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты)

Поля Активность в этой таблице нет. Если отключённые проводки нужно исключить, соедините её с основной таблицей регистра по полям Регистратор и НомерСтроки.

Точки маршрута бизнес-процесса

Задачи хранят точку маршрута, на которой их создали. Невыполненные задачи конкретного этапа выбирают так (имена из БСП, подсистема «Бизнес-процессы и задачи»):

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

Полный пример: приход и расход товаров с отборами через ЗНАЧЕНИЕ()

Функция возвращает таблицу по складам и товарам: сколько пришло и сколько ушло за период. В одном запросе собраны четыре варианта функции: вид движения, предопределённый элемент, пустая ссылка и значение перечисления.

// Приход и расход товаров по складам за период из основной таблицы регистра.
// Размещение: общий модуль с флагом «Сервер» или модуль менеджера:
// объект Запрос на клиенте недоступен.
// Имена объектов условные: регистр остатков ТоварыНаСкладах,
// перечисление СтатусыНоменклатуры, предопределённый склад Транзитный.
Функция ПриходИРасходТоваров(НачалоПериода, КонецПериода) Экспорт

	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	Движения.Склад КАК Склад,
	|	Движения.Номенклатура КАК Номенклатура,
	|	СУММА(ВЫБОР
	|			КОГДА Движения.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
	|				ТОГДА Движения.Количество
	|			ИНАЧЕ 0
	|		КОНЕЦ) КАК Приход,
	|	СУММА(ВЫБОР
	|			КОГДА Движения.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
	|				ТОГДА Движения.Количество
	|			ИНАЧЕ 0
	|		КОНЕЦ) КАК Расход
	|ИЗ
	|	РегистрНакопления.ТоварыНаСкладах КАК Движения
	|ГДЕ
	|	Движения.Период МЕЖДУ &НачалоПериода И &КонецПериода
	|	И Движения.Активность
	|	И Движения.Склад <> ЗНАЧЕНИЕ(Справочник.Склады.Транзитный)
	|	И Движения.Номенклатура <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
	|	И Движения.Номенклатура.Статус <> ЗНАЧЕНИЕ(Перечисление.СтатусыНоменклатуры.Архивный)
	|
	|СГРУППИРОВАТЬ ПО
	|	Движения.Склад,
	|	Движения.Номенклатура";

	Запрос.УстановитьПараметр("НачалоПериода", НачалоДня(НачалоПериода));
	Запрос.УстановитьПараметр("КонецПериода", КонецДня(КонецПериода));

	Возврат Запрос.Выполнить().Выгрузить();

КонецФункции

Что здесь важно:

  • ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) внутри ВЫБОР раскладывает движения на две колонки. Поле ВидДвижения есть только в основной таблице регистра остатков; у оборотного регистра его нет.
  • Движения.Активность отсекает отключённые движения. Виртуальные таблицы делают это сами, основная таблица — нет.
  • ЗНАЧЕНИЕ(Справочник.Склады.Транзитный) исключает служебный склад. Если такого предопределённого в вашей конфигурации нет, запрос не выполнится: см. раздел об ошибках.
  • Сравнение с ПустаяСсылка отбрасывает движения с незаполненной номенклатурой, которые остаются после ручных корректировок.
  • Движения.Номенклатура.Статус — обращение к реквизиту через точку. Платформа добавит неявное соединение со справочником; подробнее о том, чем это грозит, — в статье о ссылках в запросе.

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

Конструктор запроса понимает ЗНАЧЕНИЕ() и сохраняет её в тексте, но при отборе через перетаскивание поля по умолчанию создаёт параметр. Чтобы вписать значение вместо параметра:

  1. На вкладке «Условия» перенесите поле в список условий. Конструктор подставит сравнение вида Статус = &Статус.
  2. Отметьте флажок «Произвольное» — условие превратится в редактируемый текст.
  3. Замените &Статус на ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказов.Закрыт) и нажмите «ОК».

Если значение нужно как колонка, добавьте на вкладке «Таблицы и поля» новое поле и впишите функцию в редакторе произвольного выражения. Запрос с ЗНАЧЕНИЕ() не требует параметров, поэтому его удобно проверять в консоли запросов — вставили текст и выполнили.

Что нельзя передать в ЗНАЧЕНИЕ() и когда нужен параметр

Функция работает только с тем, что описано в конфигурации. Не подходят:

  • обычные элементы справочников: валюта USD или склад «Москва», заведённые пользователем, предопределёнными не являются;
  • параметры и переменные: ЗНАЧЕНИЕ(&Статус) — ошибка, пишите просто &Статус;
  • поля таблиц и выражения;
  • строки, числа, даты — у них свои литералы;
  • значения констант, настройки пользователей, реквизиты организации — всё, что хранится в данных.

Правило простое: если имя значения видно в дереве метаданных, используйте ЗНАЧЕНИЕ(). Если значение появляется только в данных или зависит от пользователя, передавайте его параметром:

// Общий модуль с флагом «Сервер». Имена объектов условные.
Функция ОткрытыеЗаказыВВалюте(Валюта) Экспорт

	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	Заказы.Ссылка КАК Заказ
	|ИЗ
	|	Документ.ЗаказКлиента КАК Заказы
	|ГДЕ
	|	Заказы.Проведен
	|	И Заказы.Валюта = &Валюта
	|	И Заказы.Статус <> ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказов.Закрыт)";

	Запрос.УстановитьПараметр("Валюта", Валюта);

	Возврат Запрос.Выполнить().Выгрузить();

КонецФункции

В коде модуля функции ЗНАЧЕНИЕ() нет. Её аналог во встроенном языке — метод ПредопределенноеЗначение(), который принимает то же имя, но строкой в кавычках. Метод доступен и на клиенте, и на сервере. В примере видимость поля «Причина отмены» задаёт одна процедура без контекста. Её вызывают и при создании формы, и при изменении статуса, поэтому у открытого отменённого заказа поле видно сразу:

// Модуль формы документа. Имена объектов условные.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	УстановитьВидимостьПричиныОтмены(ЭтотОбъект);

КонецПроцедуры

&НаКлиенте
Процедура СтатусПриИзменении(Элемент)

	УстановитьВидимостьПричиныОтмены(ЭтотОбъект);

КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьВидимостьПричиныОтмены(Форма)

	ЗаказОтменен = (Форма.Объект.Статус = ПредопределенноеЗначение("Перечисление.СтатусыЗаказов.Отменен"));
	Форма.Элементы.ПричинаОтмены.Видимость = ЗаказОтменен;

КонецПроцедуры
СпособГде работаетЧто принимает
ЗНАЧЕНИЕ(...)только текст запросаимя без кавычек: перечисления, предопределённые, пустые ссылки, точки маршрута, системные перечисления
&Параметртекст запросалюбое значение, установленное через УстановитьПараметр()
ПредопределенноеЗначение("...")код на клиенте и на сервереимя строкой: перечисления, предопределённые, пустые ссылки, точки маршрута

Типичные ошибки

  • Имя не найдено. Опечатка, синоним вместо имени, обычный элемент вместо предопределённого или предопределённый, который удалили из конфигурации при обновлении. Запрос падает при разборе с ошибкой «Неверные параметры», а в тексте ошибки маркер <<?>> стоит у аргумента функции. Типичный случай — доработанный отчёт после обновления типовой.
  • Множественное число. ЗНАЧЕНИЕ(Перечисления.СтатусыЗаказов.Закрыт) — привычка из кода модуля. В запросе вид объекта всегда в единственном числе.
  • Имя в кавычках. ЗНАЧЕНИЕ("Перечисление.СтатусыЗаказов.Закрыт") — путаница с ПредопределенноеЗначение(). В запросе строка в кавычках остаётся строкой, и запрос не разберётся.
  • ЗНАЧЕНИЕ() в коде модуля. Во встроенном языке такой функции нет, модуль не скомпилируется. Для строки Х = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказов.Закрыт); проверка синтаксиса покажет «Переменная не определена (Перечисление)» и «Процедура или функция с указанным именем не определена (ЗНАЧЕНИЕ)». В коде используйте ПредопределенноеЗначение() или менеджер: Перечисления.СтатусыЗаказов.Закрыт (на сервере).
  • NULL вместо пустой ссылки. Условие = ЗНАЧЕНИЕ(...ПустаяСсылка) не срабатывает для строк, у которых нет пары в левом соединении. Используйте ЕСТЬNULL() или проверку ЕСТЬ NULL.
  • Предопределённый элемент есть в конфигурации, но пропал из данных. Его удалили, очистили у него свойство ИмяПредопределенныхДанных или это узел обмена, куда предопределённые ещё не загрузились. Обращение к такому элементу заканчивается ошибкой «Предопределенный элемент отсутствует в данных», а при дублях — «Предопределенный элемент не уникален». Текст запроса здесь не поможет: верните элементу значение ИмяПредопределенныхДанных или уберите лишний дубль.

Частые вопросы

Можно ли передать в ЗНАЧЕНИЕ() параметр или переменную?

Нет, аргумент должен быть известен при разборе запроса. Если имя значения становится известно только во время работы, получите ссылку в коде через ПредопределенноеЗначение("Перечисление.СтатусыЗаказов." + ИмяСтатуса) и передайте её параметром.

Что быстрее: ЗНАЧЕНИЕ() или параметр?

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

Работает ли ЗНАЧЕНИЕ() в СКД и динамическом списке?

Да. Запрос набора данных в СКД и произвольный запрос динамического списка — обычный текст на языке запросов, функция в нём работает так же. В отборах пользовательских настроек СКД значение выбирают из списка, функция там не нужна.

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

У справочников, планов видов характеристик, планов счетов и планов видов расчёта есть стандартное поле Предопределенный с типом «Булево». Условие ГДЕ Таблица.Предопределенный вернёт только их.

Как получить предопределённый элемент в коде, если его может не быть в данных?

Прямое обращение через менеджер и ПредопределенноеЗначение() вызывают исключение. В БСП для этого есть функция ОбщегоНазначенияКлиентСервер.ПредопределенныйЭлемент(): она принимает полное имя строкой и вместо ошибки возвращает Неопределено. В старых редакциях БСП её может не быть — проверьте общий модуль в своей конфигурации.

Когда проще заказать

Если отчёт после обновления типовой падает с ошибкой «Неверные параметры» или запросы нужно переделать под новые статусы и предопределённые элементы, это обычная доработка отчёта, и её можно поручить исполнителю. Подробнее — на странице доработки отчётов и обработок 1С. Разместите задачу — оценка бесплатная, ответ в течение рабочего дня.

По теме

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

Станьте частью сообщества!
Войдите или зарегистрируйтесь, и вы сможете участвовать в обсуждениях.


1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.