Как реализовать связь по типу в табличной части справочника 1С?

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

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

Реализация «Связи по типу» в управляемых формах

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

  1. Подготовка реквизитов: Убедитесь, что реквизит в шапке и соответствующий реквизит в табличной части имеют составной тип данных, включающий все необходимые виды ссылок (например, СправочникСсылка.Организации, СправочникСсылка.Контрагенты).
  2. Настройка элемента формы: В дереве элементов управляемой формы найдите поле табличной части, которое должно быть связано с шапкой. В свойствах этого поля найдите пункт СвязьПоТипу.
  3. Установка источника: В качестве значения свойства СвязьПоТипу выберите реквизит из шапки формы. Теперь при изменении значения в шапке платформа будет автоматически приводить тип в колонке табличной части к выбранному значению.
  4. Ограничение выбора: Чтобы пользователь не мог вручную сменить тип через стандартный диалог выбора, установите флаг ВыборТипа в значение Ложь (снимите галку) в свойствах элемента управления табличной части.

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

Реализация механизма в обычных формах

В обычных формах механизм СвязьПоТипу как свойство элемента управления отсутствует. Здесь нам потребуется программное вмешательство. Для реализации функционала необходимо использовать два ключевых события: ПриИзменении в реквизите шапки и ПриНачалеДобавления для табличной части.

Суть подхода заключается в принудительном приведении типов при каждом изменении основного реквизита. Рассмотрим пример реализации:

В событии ПриИзменении реквизита шапки нам нужно пройтись по всем строкам табличной части и очистить их или привести к новому типу:


Процедура РеквизитШапкиПриИзменении(Элемент)
    Для Каждого Стр Из ЭлементыФормы.ТабличнаяЧасть1.Значение Цикл
        Стр.РеквизитТабЧасти = ТипЗнч(РеквизитШапки); 
        // Здесь можно реализовать логику очистки, если текущий тип не совпадает
    КонецЦикла;
КонецПроцедуры

Важно помнить и о процессе добавления новых строк. Если пользователь добавит строку, когда в шапке уже выбрано значение, тип новой строки должен соответствовать типу шапки. Для этого используем обработчик ПередНачаломДобавления или ПриНачалеДобавления:


Процедура ТабличнаяЧасть1ПередНачаломДобавления(Элемент, Отказ, Копирование)
    Если ЗначениеЗаполнено(РеквизитШапки) Тогда
        // Принудительно устанавливаем пустую ссылку нужного типа
        ТипЗначения = ТипЗнч(РеквизитШапки);
        // Дополнительная логика инициализации новой строки
    КонецЕсли;
КонецПроцедуры

Рекомендации и контроль данных

При работе с программным приведением типов учитывайте следующие нюансы:

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

← На главную