Как получить данные из дополнительных сведений и вывести макет печати в 1С:Бухгалтерия 3.0

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

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

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

Особенности хранения данных в регистре «Дополнительные сведения»

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

Рассмотрим структуру этого регистра:

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

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

Получение данных через запрос

Для создания отчета «Книга учета ПСА» нам необходимо соединить таблицу документов с таблицей дополнительных сведений. Проанализируем пример кода, который позволяет эффективно собрать данные:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	ПоступлениеТоваровУслуг.Ссылка КАК Документ,
    |	ПоступлениеТоваровУслуг.Дата КАК Дата,
    |	ДополнительныеСведения.Значение КАК НомерПСА
    |ИЗ
    |	Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
    |		ПО ПоступлениеТоваровУслуг.Ссылка = ДополнительныеСведения.Объект
    |ГДЕ
    |	ПоступлениеТоваровУслуг.Дата МЕЖДУ &НачалоПериода И &КонецПериода
    |	И ДополнительныеСведения.Свойство = &СвойствоНомерПСА";

Запрос.УстановитьПараметр("НачалоПериода", Объект.НачалоПериода);
Запрос.УстановитьПараметр("КонецПериода", КонецДня(Объект.КонецПериода));
// Свойство нужно найти по наименованию или уникальному идентификатору
Запрос.УстановитьПараметр("СвойствоНомерПСА", ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Номер ПСА (Сведения)"));

РезультатЗапроса = Запрос.Выполнить();

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

Работа с макетами в управляемом приложении

Часто при разработке возникает ошибка: Метод объекта не обнаружен (ПолучитьМакет). Разберем ситуацию. В управляемых формах выполнение кода разделено на клиентскую и серверную части. На клиенте (процедура &НаКлиенте) мы работаем с данными формы, а не с самим объектом метаданных. У объекта Объект (который является типом ДанныеФормыСтруктура) на клиенте действительно нет метода ПолучитьМакет().

Рассмотрим по шагам, как правильно организовать вывод макета:

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

Посмотрим на пример правильной реализации в модуле формы внешней обработки:


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

&НаКлиенте
Процедура Сформировать(Команда)
    ТабДок = СформироватьОтчетНаСервере();
    ТабДок.Показать("Книга учета ПСА");
КонецПроцедуры

Ключевым моментом здесь является использование функции РеквизитФормыВЗначение("Объект"). Она создает полноценный экземпляр обработки на стороне сервера, у которого доступны все методы, включая ПолучитьМакет().

Использование функций БСП для получения дополнительных сведений

Если в вашей конфигурации используется «Библиотека стандартных подсистем» (БСП), что актуально для «Бухгалтерии предприятия 3.0», можно использовать готовые функции общего модуля УправлениеСвойствами. Это позволит сделать код более надежным и универсальным.

Проанализируем пример использования функции БСП:


// Получение значения конкретного свойства для объекта
ЗначениеСвойства = УправлениеСвойствами.ЗначениеСвойстваОбъекта(СсылкаНаДокумент, "НомерПСА");

// Если нужно получить все дополнительные сведения сразу
ТаблицаСвойств = УправлениеСвойствами.ПолучитьЗначенияСвойств(Новый Массив(СсылкаНаДокумент));

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

Итоги и рекомендации

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

Реализовав эти подходы, вы сможете создать гибкий и отказоустойчивый инструмент для учета ПСА, который будет корректно работать в среде управляемого приложения «1С:Предприятие 8.3».

← На главную