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