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