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

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Промышленность, строительство и АПК
← На главную

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

Понимание архитектуры данных: реквизиты vs свойства ссылки

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

Проблема часто заключается в путанице между СправочникСсылка и свойствами этого справочника. Если в вашей табличной части есть реквизит с типом СправочникСсылка.Номенклатура, то сам объект Номенклатура содержит в себе такие данные, как Код, Наименование или Артикул. Это не самостоятельные реквизиты вашей таблицы, а атрибуты объекта, на который вы ссылаетесь. Попытка добавить Код как отдельный реквизит в саму табличную часть документа является избыточной и логически неверной.

Правильное использование «точечной нотации»

Если вам нужно просто отобразить данные, например Код или Наименование товара, прямо в строке документа, используйте путь к данным через ссылку. Рассмотрим, как это работает:

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

Таким образом, система автоматически будет «подтягивать» значение Код из выбранного товара. Однако помните: такие поля, как правило, доступны только для чтения, так как они являются отображением свойств другого объекта.

Как обеспечить редактируемость и синхронизацию?

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

Разберем типичный сценарий: при выборе товара в ТЧ нам нужно заполнить дополнительные поля. Для этого используем обработчик события ПриИзменении поля Товар:


&НаКлиенте
Процедура ТоварыТоварПриИзменении(Элемент)
    ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
    Если ТекущиеДанные.Товар <> Неопределено Тогда
        // Получаем данные из справочника программно
        ДанныеТовара = ПолучитьДанныеТовараНаСервере(ТекущиеДанные.Товар);
        ТекущиеДанные.КодТовара = ДанныеТовара.Код;
        ТекущиеДанные.Наименование = ДанныеТовара.Наименование;
    КонецЕсли;
КонецПроцедуры

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


&НаСервереБезКонтекста
Функция ПолучитьДанныеТовараНаСервере(СсылкаНаТовар)
    Возврат ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СсылкаНаТовар, "Код, Наименование");
КонецФункции

Основные ошибки при работе с расширениями

Работая в 1С:ERP через расширения, важно помнить следующие правила:

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

← На главную