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

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

Добавление новой табличной части (ТЧ) в типовой документ — одна из самых частых задач при адаптации конфигурации под нужды конкретного бизнеса. Однако, работая с типовым решением, мы всегда должны помнить о последующих обновлениях. Если внести изменения «в лоб», каждое обновление превратится в трудоемкий процесс сравнения и объединения. В этой статье мы разберем современные подходы, которые позволяют добавить функционал максимально «чисто».

Выбор стратегии: расширение или основная конфигурация?

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

  1. Добавление в основную конфигурацию: классический метод, требующий снятия объекта с поддержки (или установки режима «Редактируется с сохранением поддержки»).
  2. Использование расширения конфигурации (Метаданные): создание ТЧ непосредственно в объекте внутри расширения.
  3. Программное создание: создание реквизита и элемента управления формой исключительно кодом во время работы приложения.

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

Способ 1. Добавление ТЧ через расширение (Метаданные)

Этот способ считается наиболее правильным для версий платформы 8.3.11 и выше. Он позволяет сохранить основную конфигурацию на полной поддержке. Разберем этот процесс по шагам.

Шаг 1. Создание расширения. Сначала мы создаем новое расширение (или используем существующее). Важно убедиться, что назначение расширения установлено в значение «Адаптация» или «Дополнение».

Шаг 2. Заимствование документа. Находим нужный типовой документ в дереве конфигурации, нажимаем правую кнопку мыши и выбираем «Добавить в расширение». Теперь документ доступен нам для модификации.

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

Анализируем риски: стоит помнить, что данные табличных частей, созданных в расширении, хранятся в СУБД в отдельных таблицах. Если расширение будет удалено из базы, все данные в этой ТЧ будут безвозвратно потеряны. Простое отключение расширения данные не удаляет, но риск остается.

Способ 2. Программный вывод ТЧ на форму

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

Для программного добавления таблицы на форму мы используем процедуру, которую вызываем в событии ПриСозданииНаСервере. Рассмотрим пример кода:


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

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

Что делать, если ТЧ нужна без изменения структуры БД?

Иногда задача стоит иначе: пользователю нужна таблица на форме для промежуточных расчетов, данные которой не нужно записывать в базу. В этом случае мы вообще не трогаем метаданные документа. Мы создаем Реквизит формы.

Разберем, как это сделать программно с помощью метода ИзменитьРеквизиты():


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

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

Бизнес-логика и проведение документа

Добавить визуальную таблицу — это только первый этап. Если данные из новой ТЧ должны формировать движения по регистрам (например, влиять на остатки), нам необходимо вмешаться в процесс проведения.

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

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

Подведение итогов

Мы выяснили, что оптимальный путь для современного разработчика 1С — это комбинированный подход:

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

← На главную