Как добавить колонки с остатками и ценами в справочник Номенклатура в 1С:УТ 11?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

Разберем ситуацию, с которой сталкиваются многие разработчики при попытке расширить функционал справочника Номенклатура в типовых конфигурациях, таких как 1С:Управление торговлей 11. Часто при попытке вывести актуальные данные по остаткам и ценам через Динамический список возникает ошибка: Параметр с указанным именем не найден. Давайте выясним, почему так происходит и как правильно настроить запрос.

Причины возникновения ошибки

Основная причина заключается в том, что Динамический список работает с данными через механизм виртуальных таблиц. Если в модуле формы или команды вы пытаетесь установить значение параметра (например, &КонецПериода), а в тексте самого запроса этот параметр не определен корректно, система выдаст исключение. Более того, при работе с расширениями важно, чтобы структура полей соответствовала физической структуре регистров накопления и сведений конкретной конфигурации.

Шаг 1: Правильная настройка параметров виртуальной таблицы

Рассмотрим подробнее процесс настройки параметров через конструктор. Если вы используете конструктор запросов, важно не просто добавить соединение с таблицей, а передать параметры внутрь виртуальной таблицы.

  1. Откройте свойства Динамического списка в конфигураторе.
  2. Перейдите в текст запроса и нажмите кнопку Конструктор запросов.
  3. Выберите нужный регистр (например, ЦеныНоменклатуры.СрезПоследних или СвободныеОстатки.Остатки).
  4. Над таблицей найдите кнопку Параметры виртуальной таблицы.
  5. В поле Период впишите &КонецПериода. Именно этот способ позволяет 1С понимать, что параметр должен быть передан в запрос.

Шаг 2: Оптимизация текста запроса

Проанализируем структуру запроса. Главная ошибка — попытка вывести данные, не учитывая правильную последовательность соединений и наличие параметров. Рассмотрим пример того, как должен выглядеть запрос для корректной работы:


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

Обратите внимание: мы используем ЛЕВОЕ СОЕДИНЕНИЕ, чтобы список номенклатуры отображался полностью, даже если для некоторых позиций нет цен или остатков.

Шаг 3: Устранение ошибки «Поле не найдено»

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

Рекомендации по отладке

Чтобы избежать подобных сложностей в будущем, следуйте этим советам:

Во-первых, начинайте с самого простого запроса. Сначала выведите список товаров, затем добавьте одну колонку с ценой, проверьте работоспособность. Только после этого добавляйте остатки.

Во-вторых, используйте Конструктор запросов. Он автоматически учитывает синтаксис 1С и помогает избежать опечаток в именах таблиц и полей.

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

Надеемся, что эти шаги помогут вам успешно настроить вывод остатков и цен. Если ошибка сохраняется, внимательно проверьте имена полей в выбранной виртуальной таблице — чаще всего причина скрывается именно там.

← На главную