Как вывести табличную часть справочника на форму записи регистра сведений в обычных формах 1С?

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При разработке конфигураций в обычных формах 1С нередко возникает задача отобразить данные табличной части справочника прямо на форме записи регистра сведений. К примеру, если запись регистра хранит настройки для конкретного пользователя или организации, разработчику может потребоваться вывести связанные с этим объектом табличные данные на экран.

Выясним причину, почему платформа не позволяет сделать это в один клик. Регистр сведений не имеет собственных табличных частей. Реквизит формы с типом СправочникСсылка содержит только ссылку на объект и не хранит строки его табличных частей в контексте формы. Из-за этого элемент управления ТабличноеПоле нельзя напрямую связать с табличной частью через ссылочный реквизит.

Рассмотрим подробно основные практические способы решения этой задачи.

Способ 1. Использование реквизита формы типа СправочникОбъект

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

  1. Откроем форму записи регистра сведений и добавим реквизит формы с типом СправочникОбъект.<ИмяСправочника> (например, ОбъектСправочника).
  2. Разместим на форме элемент управления ТабличноеПоле и в свойстве Данные укажем путь к табличной части созданного реквизита (например, ОбъектСправочника.СоставНастроек).
  3. В обработчиках событий формы ПриОткрытии и ПриИзменении реквизита-ссылки пропишем код для получения объекта.

Посмотрим на пример процедуры для инициализации объекта справочника:


Процедура ИнициализироватьОбъектСправочника()
    Если ЗначениеЗаполнено(Запись.Пользователь) Тогда
        ОбъектСправочника = Запись.Пользователь.ПолучитьОбъект();
    Иначе
        ОбъектСправочника = Неопределено;
    КонецЕсли;
КонецПроцедуры

Обратите внимание: если пользователь редактирует строки табличной части на форме записи регистра, эти изменения нужно вручную сохранить в базе данных. В обработчик события формы ПередЗаписью или ПриЗаписи добавим явный вызов метода Записать():


Процедура ПередЗаписью(Отказ, Замещение)
    Если ОбъектСправочника <> Неопределено И ОбъектСправочника.Модифицированность() Тогда
        Попытка
            ОбъектСправочника.Записать();
        Исключение
            Сообщить(ОписаниеОшибки());
            Отказ = Истина;
        КонецПопытки;
    КонецЕсли;
КонецПроцедуры

Способ 2. Выгрузка табличной части в ТаблицуЗначений

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

  1. Добавим на форму записи регистра сведений реквизит формы с типом ТаблицаЗначений (например, ТЧСправочника).
  2. Свяжем элемент управления ТабличноеПоле с реквизитом ТЧСправочника.
  3. При открытии формы или изменении поля ввода ссылочного реквизита выгрузим табличную часть справочника в созданный реквизит.

Рассмотрим пример кода для загрузки данных и автоматического формирования колонок в табличном поле:


Процедура ОбновитьТабличнуюЧасть()
    Если ЗначениеЗаполнено(Запись.Пользователь) Тогда
        ТЧСправочника = Запись.Пользователь.СоставНастроек.Выгрузить();
    Иначе
        ТЧСправочника.Очистить();
    КонецЕсли;
    
    // Автоматически формируем колонки в табличном поле
    ЭлементыФормы.ТабличноеПолеТЧ.СоздатьКолонки();
КонецПроцедуры

Использование метода СоздатьКолонки() позволяет избавиться от ручной настройки элементов управления в дизайнере формы, так как платформа создаст их автоматически по структуре таблицы значений.

Альтернативные архитектурные решения

Если вывод табличной части на форму записи усложняет логику работы, проанализируем альтернативные варианты проектирования:

1. Интерактивный переход к форме элемента. Для поля ввода реквизита справочника включим свойство КнопкаОткрытия. В обработчике события Открытие вызовем форму элемента справочника через ПолучитьФорму(). Пользователь сможет просматривать и редактировать табличную часть в ее родном контексте.

2. Перенос данных в отдельный регистр сведений. Если строки табличной части хранят настройки, специфичные именно для записи регистра сведений, логичнее вынести эти данные в подчиненный или отдельный регистр сведений. Измерениями такого регистра будут выступать элемент справочника и ключ настройки.

← На главную