При разработке печатных форм для конфигураций на платформе 1С:Предприятие часто возникает ситуация, когда разработчик добавляет новый «реквизит» через пользовательский интерфейс (используя механизм дополнительных реквизитов и сведений), а затем пытается обратиться к нему в коде модуля как к обычному полю объекта: СсылкаНаДокумент.ИмяРеквизита. В результате система выдает ошибку, сообщая об отсутствии такого поля. Давайте разберемся, почему так происходит и как правильно получать такие данные.
Первое, что необходимо усвоить — это архитектурная разница между этими двумя типами данных:
Библиотеки стандартных подсистем (БСП). Данные этих реквизитов хранятся не в таблице самого документа, а в специализированных регистрах сведений ДополнительныеСведения или ДополнительныеРеквизитыИСведения. Именно поэтому стандартная запись через точку не работает — в структуре объекта документа такого поля просто не существует.Чтобы программно получить значение дополнительного реквизита, необходимо воспользоваться методами подсистемы управления свойствами. Рассмотрим наиболее распространенный способ обращения к таким данным.
Для того чтобы получить значение, используйте метод УправлениеСвойствами.ЗначениеСвойства. Этот метод позволяет корректно «достать» информацию из регистра сведений, где хранятся дополнительные данные.
Пример использования кода для вставки в печатную форму:
// Получаем значение свойства по ссылке на объект и наименованию свойства
ЗначениеИсполнителя = УправлениеСвойствами.ЗначениеСвойства(СсылкаНаДокумент, "Исполнитель");
// Далее присваиваем полученное значение параметру макета
ОбластьСтрокаТЧ.Параметры.Исполнитель = ЗначениеИсполнителя;
Если же вам необходимо обращаться к свойству более строго, опираясь на план видов характеристик, можно использовать поиск свойства по наименованию:
// Поиск ссылки на свойство в плане видов характеристик
СвойствоИсполнитель = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Исполнитель");
// Получение значения с использованием найденной ссылки
ЗначениеИсполнителя = УправлениеСвойствами.ЗначениеСвойства(СсылкаНаДокумент, СвойствоИсполнитель);
При работе с печатными формами часто требуется перенести данные из табличной части (ТЧ) документа в макет. Рассмотрим пошагово, как это правильно реализовать.
СтрокаТЧ.ТабличныйДокумент.Пример реализации заполнения:
// Получаем табличную часть документа
Для Каждого Стр Из СсылкаНаДокумент.Товары Цикл
// Заполняем параметры области
ОбластьСтрокаТЧ.Параметры.Наименование = Стр.Номенклатура;
ОбластьСтрокаТЧ.Параметры.Количество = Стр.Количество;
// Выводим строку в печатную форму
ТабДок.Вывести(ОбластьСтрокаТЧ);
КонецЦикла;
Если вы уверены, что используете правильный метод, но данные все равно не выводятся, проверьте следующие моменты:
F7 (Обновить конфигурацию базы данных). Без этого изменения не попадут в структуру БД, и код выдаст ошибку Поле объекта не обнаружено.В заключение рекомендуем всегда обращаться к типовым печатным формам в вашей конфигурации как к эталону. Анализируя встроенные макеты (например, счета или акты), вы сможете увидеть, как разработчики фирмы «1С» решают задачи получения данных, и применять эти практики в своих проектах.