В процессе доработки типовых конфигураций на платформе 1С:Предприятие 8.1 часто возникает задача расширения функционала стандартной обработки Подбор номенклатуры. Мы часто сталкиваемся с вопросом: как добавить свою колонку в табличную часть, чтобы она корректно отображала дополнительные данные? Давайте разберем этот процесс по шагам, учитывая специфику работы табличных полей.
Первая трудность, с которой встречаются многие разработчики — это выбор правильного элемента управления. В обработке Подбор номенклатуры существует несколько режимов работы, которые переключаются страницами панели ПанельНоменклатураДляПодбора. Если ваша задача предполагает работу с отбором по справочнику, то вам необходимо работать не с табличной частью НоменклатураДляПодбора, а с табличным полем СправочникНоменклатура.
Важно: Убедитесь, что вы работаете именно с тем элементом формы, который отображается в нужном вам режиме. Часто бывает, что разработчик пытается изменить одну таблицу, тогда как на экране пользователю видна совершенно другая.
После того как мы определили верное табличное поле, мы можем добавить в него новую колонку. Проще всего это сделать программно в модуле формы. Для этого используем метод Колонки.Добавить() для соответствующего элемента управления. Рассмотрим пример:
ЭлементыФормы.СправочникНоменклатура.Колонки.Добавить("МояКолонка", "Заголовок колонки");
Однако простого добавления недостаточно, так как табличное поле типа СправочникСписок не является классической табличной частью. Оно лишь отображает данные из базы, и пустая колонка сама по себе не заполнится данными.
Так как наш список номенклатуры — это динамическая выборка, наиболее эффективным способом вывода данных в новую колонку является использование события ПриВыводеСтроки элемента управления СправочникНоменклатура. Этот механизм позволяет нам «на лету» подставлять нужные значения при отрисовке каждой строки таблицы.
Давайте проанализируем, как реализовать заполнение данными:
ПриВыводеСтроки у элемента СправочникНоменклатура.ОформлениеСтроки.ОформлениеСтроки.ДанныеСтроки.Ссылка), чтобы получить необходимые сведения (например, остатки или дополнительные реквизиты).УстановитьТекст() или прямого обращения к ячейке.Пример реализации:
Процедура СправочникНоменклатураПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
// Получаем значение для нашей колонки
// Важно: избегайте тяжелых запросов внутри этого события для сохранения скорости
ЗначениеДляВывода = ПолучитьМоиДанные(ДанныеСтроки.Ссылка);
// Заполняем ячейку
ОформлениеСтроки.Ячейки.МояКолонка.УстановитьТекст(ЗначениеДляВывода);
КонецПроцедуры
Поскольку событие ПриВыводеСтроки срабатывает для каждой отрисовываемой строки при скроллинге списка, выполнение сложных запросов к базе данных непосредственно в этом обработчике может критически замедлить работу всей формы подбора.
Что мы рекомендуем для повышения скорости:
Соответствие или ТаблицуЗначений при открытии формы, а затем просто обращайтесь к этому кэшу в событии ПриВыводеСтроки.ЭлементУправления некорректно. Для обычного отображения текста достаточно просто создать колонку, как показано выше.Теперь вы знаете, как правильно интегрировать свою информацию в типовой механизм Подбор номенклатуры. Помните, что аккуратная доработка с учетом производительности — залог стабильной работы системы и легкости последующих обновлений конфигурации.