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