Как добавить колонку в табличную часть документа через расширение в 1С?

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

При доработке типовых конфигураций 1С часто возникает необходимость добавить новое поле в табличную часть документа — например, колонку Вес в табличную часть Товары документа ЗаказКлиента. Главное требование при этом — сохранить типовую конфигурацию на поддержке и выполнить доработку с помощью механизма расширений.

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

Интерактивный способ решения через Конфигуратор

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

  1. Заимствование метаданных в расширение:

    Добавим в расширение документ ЗаказКлиента. Затем откроем структуру объекта в расширении и заимствуем табличную часть Товары.

  2. Создание реквизита табличной части:

    В табличной части Товары внутри расширения создадим новый реквизит Вес (или с префиксом, например МойПрефикс_Вес). Для корректного хранения данных укажем нужный тип, например, Число с требуемой длиной и точностью.

  3. Вывод реквизита на форму:

    Заимствуем форму документа в расширение. В правой панели редактора формы (дерево реквизитов) раскроем ветку Объект -> Товары и найдем созданный реквизит Вес. Перетащим его мышью в левую панель (элементы формы) внутрь таблицы Товары в нужное место среди существующих колонок.

Программный способ вывода колонки на форму

Проанализируем альтернативный вариант. Чтобы лишний раз не заимствовать форму документа целиком (что упрощает дальнейшие обновления основной конфигурации при изменении структуры типовой формы), элемент формы можно сформировать программно.

В этом случае реквизит табличной части Вес создается в метаданных расширения интерактивно, а вывод элемента на форму выполняется в модуле формы расширения с помощью аннотации &После("ПриСозданииНаСервере").

Посмотрим на пример кода модуля формы в расширении:


&После("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    
    // Проверяем, существует ли уже элемент формы
    Если Элементы.Найти("ТоварыВес") = Неопределено Тогда
        
        // Получаем родительский элемент - таблицу формы
        РодительЭлемента = Элементы.Товары;
        
        // Создаем новый элемент формы (поле ввода)
        НовыйЭлемент = Элементы.Добавить("ТоварыВес", Тип("ПолеФормы"), РодительЭлемента);
        НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
        НовыйЭлемент.ПутьКДанным = "Объект.Товары.Вес";
        НовыйЭлемент.Заголовок = "Вес (кг)";
        
    КонецЕсли;

КонецПроцедуры

Важные особенности платформы и ограничения

Выясним ключевые нюансы и потенциальные подвохи при работе с реквизитами в расширениях:

  1. Режим совместимости платформы: Добавление реквизитов объектов и табличных частей, данные которых хранятся в базе данных, поддерживается начиная с платформы 8.3.14. Если режим совместимости основной конфигурации установлен ниже этой версии, хранить данные нового реквизита в БД через расширение не получится.
  2. Права доступа (Роли): Созданный в расширении реквизит по умолчанию недоступен пользователям. Чтобы колонка отображалась на форме и была доступна для ввода, необходимо добавить в расширение роль с правами на чтение и изменение этого реквизита и назначить её пользователям.
  3. Использование префиксов: Для предотвращения конфликтов имён при обновлениях конфигурации или подключении сторонних расширений рекомендуется давать реквизитам уникальные имена с префиксом, например НашПрефикс_Вес.
  4. Риск потери данных: Данные созданных реквизитов физически записываются в таблицы базы данных. В случае удаления расширения из информационной базы данные в колонке Вес будут безвозвратно утеряны.

Альтернативные подходы без расширения структуры БД

Рассмотрим случаи, когда менять структуру базы данных не требуется или нежелательно:

В типовых конфигурациях (таких как «Управление торговлей», ERP, «Комплексная автоматизация») включен механизм Дополнительных реквизитов и сведений на базе БСП. Он позволяет добавить новую колонку в табличную часть документа непосредственно в пользовательском режиме без программирования и изменения структуры базы данных.

← На главную