Как правильно добавить новый столбец в табличную часть документа через расширение?

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

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

Вариант 1: Добавление реквизита в табличную часть через расширение

Это наиболее предпочтительный и «чистый» способ, если данные должны быть неразрывно связаны со строкой документа. Платформа 1С позволяет добавлять новые реквизиты в существующие объекты метаданных непосредственно внутри расширения.

Преимущества:

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

Как это реализовать:

  1. В расширении откройте структуру документа и добавьте новый реквизит в нужную табличную часть.
  2. На форме документа программно добавьте колонку в табличную часть, чтобы связать её с созданным реквизитом. Для этого в обработчике события ПриСозданииНаСервере выполните следующий код:

// Пример программного добавления колонки
ЭлементКолонки = Элементы.Добавить("ВашНовыйРеквизит", Тип("ПолеФормы"), Элементы.Товары);
ЭлементКолонки.Вид = ВидПоляФормы.ПолеВвода;
ЭлементКолонки.ПутьКДанным = "Объект.Товары.ВашНовыйРеквизит";

Вариант 2: Использование регистра сведений для хранения данных

Если вы хотите избежать внесения изменений в структуру объекта (например, чтобы максимально упростить процесс обновления основной конфигурации), можно использовать независимый РегистрСведений.

Когда стоит выбирать этот метод:

Особенности реализации:

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

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

Советы по производительности и обновляемости

Чтобы обновление конфигурации в будущем проходило как можно более гладко, придерживайтесь следующих рекомендаций:

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

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

← На главную