Разберем ситуацию, с которой сталкиваются многие разработчики при попытке расширить функционал справочника Номенклатура в типовых конфигурациях, таких как 1С:Управление торговлей 11. Часто при попытке вывести актуальные данные по остаткам и ценам через Динамический список возникает ошибка: Параметр с указанным именем не найден. Давайте выясним, почему так происходит и как правильно настроить запрос.
Основная причина заключается в том, что Динамический список работает с данными через механизм виртуальных таблиц. Если в модуле формы или команды вы пытаетесь установить значение параметра (например, &КонецПериода), а в тексте самого запроса этот параметр не определен корректно, система выдаст исключение. Более того, при работе с расширениями важно, чтобы структура полей соответствовала физической структуре регистров накопления и сведений конкретной конфигурации.
Рассмотрим подробнее процесс настройки параметров через конструктор. Если вы используете конструктор запросов, важно не просто добавить соединение с таблицей, а передать параметры внутрь виртуальной таблицы.
Динамического списка в конфигураторе.Конструктор запросов.ЦеныНоменклатуры.СрезПоследних или СвободныеОстатки.Остатки).Параметры виртуальной таблицы.Период впишите &КонецПериода. Именно этот способ позволяет 1С понимать, что параметр должен быть передан в запрос.Проанализируем структуру запроса. Главная ошибка — попытка вывести данные, не учитывая правильную последовательность соединений и наличие параметров. Рассмотрим пример того, как должен выглядеть запрос для корректной работы:
ВЫБРАТЬ
СпрНоменклатура.Ссылка КАК Ссылка,
СпрНоменклатура.Код КАК Код,
СпрНоменклатура.Наименование КАК Наименование,
ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
СвободныеОстаткиОстатки.ВНаличииОстаток КАК ВНаличииОстаток
ИЗ
Справочник.Номенклатура КАК СпрНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&КонецПериода, ) КАК ЦеныНоменклатурыСрезПоследних
ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = СпрНоменклатура.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СвободныеОстатки.Остатки(&КонецПериода, ) КАК СвободныеОстаткиОстатки
ПО СвободныеОстаткиОстатки.Номенклатура = СпрНоменклатура.Ссылка
ГДЕ
НЕ СпрНоменклатура.ЭтоГруппа
Обратите внимание: мы используем ЛЕВОЕ СОЕДИНЕНИЕ, чтобы список номенклатуры отображался полностью, даже если для некоторых позиций нет цен или остатков.
Если после внесения правок вы видите ошибку Поле не найдено, это сигнал, что структура вашего регистра отличается от стандартной. В 1С:УТ 11 структура виртуальных таблиц может меняться в зависимости от версии. Важно проверить названия ресурсов и измерений в метаданных:
Номенклатура или, например, Товар.Характеристика).Чтобы избежать подобных сложностей в будущем, следуйте этим советам:
Во-первых, начинайте с самого простого запроса. Сначала выведите список товаров, затем добавьте одну колонку с ценой, проверьте работоспособность. Только после этого добавляйте остатки.
Во-вторых, используйте Конструктор запросов. Он автоматически учитывает синтаксис 1С и помогает избежать опечаток в именах таблиц и полей.
В-третьих, если вы работаете в расширении, убедитесь, что все заимствованные объекты доступны для использования в запросе и имеют необходимые права доступа.
Надеемся, что эти шаги помогут вам успешно настроить вывод остатков и цен. Если ошибка сохраняется, внимательно проверьте имена полей в выбранной виртуальной таблице — чаще всего причина скрывается именно там.