При переносе внешних печатных форм или обработок из конфигурации «Бухгалтерия предприятия 3.0» (БП) в «Бухгалтерию государственного учреждения 2.0» (БГУ) разработчики часто сталкиваются с тем, что привычные общие модули и функции отсутствуют. Одним из самых популярных инструментов в БП является функция БухгалтерскийУчётПереопределяемый.СведенияОЮрФизЛице, которая возвращает готовую структуру с реквизитами (ИНН, КПП, наименование, адреса). В БГУ 2.0 архитектура получения данных построена иначе. Рассмотрим подробно, какими методами можно заменить этот функционал, разберем программный код и проанализируем типичные ошибки.
Наиболее точным функциональным эквивалентом для разработчика в БГУ 2.0 является общий модуль ФормированиеПечатныхФорм. Проанализируем его основную функцию СведенияОЮрФизЛице. Она спроектирована специально для заполнения параметров макетов печати.
Рассмотрим пример вызова этой функции:
// Определяем объект (Контрагент или Организация), дату и нужные поля
ОбъектДанных = СсылкаНаДокумент.Контрагент;
ДатаСведений = СсылкаНаДокумент.Дата;
СписокПолей = "НаименованиеПолное,ИНН,КПП,ЮридическийАдрес,Телефоны";
// Получаем структуру данных
Сведения = ФормированиеПечатныхФорм.СведенияОЮрФизЛице(ОбъектДанных, ДатаСведений, СписокПолей);
// Теперь данные можно использовать для заполнения параметров макета
ОбластьМакета.Параметры.ИннКлиента = Сведения.ИНН;
Важный нюанс: в отличие от БП 3.0, состав полей в возвращаемой структуре БГУ может зависеть от версии конфигурации и БСП. Рекомендуем предварительно проверить доступные поля через отладчик, вызвав метод с пустым списком полей или изучив код функции в конфигураторе.
Как показала практика обсуждений на форумах, часто предлагается использовать модуль ЭлектронныеДокументыБГУ. Этот метод удобен тем, что он является «всеядным» и корректно обрабатывает как юридические лица, так и индивидуальных предпринимателей или физических лиц. Посмотрим, как правильно вызвать этот метод, чтобы не допустить падения системы.
Разберем по шагам правильный алгоритм:
// 1. Создаем структуру-контейнер
СведенияОбУчастнике = Новый Структура;
// 2. Вызываем метод.
// Параметры: Ссылка, Структура (куда писать), Дата, ЭтоОрганизация (Ложь для контрагента)
ЭлектронныеДокументыБГУ.ПолучитьДанныеЮрФизЛица(
СсылкаНаДокумент.Контрагент,
СведенияОбУчастнике,
СсылкаНаДокумент.Дата,
Ложь
);
// Теперь СведенияОбУчастнике заполнены реквизитами
Внимательно проанализируем ситуацию с ошибкой «Поле объекта недоступно для записи (Дата)», которая часто встречается у начинающих программистов. Она возникает, если вместо структуры во второй параметр передать дату документа. Система пытается записать результат (структуру) в переменную даты, что приводит к исключению. Всегда проверяйте типы передаваемых аргументов!
В БГУ 2.0 широко применяется объектный подход. Многие справочники имеют экспортные методы в своих модулях менеджера. Например, для получения данных контрагента можно обратиться напрямую к справочнику Контрагенты.
Выясним, как это реализовать программно:
СтруктураКонтрагента = Новый Структура;
// Обязательно добавляем ссылку на объект в структуру параметров
СтруктураКонтрагента.Вставить("СсылкаНаОбъект", СсылкаНаДокумент.Контрагент);
// Можно добавить поля для ФизЛица, если это актуально
СтруктураКонтрагента.Вставить("Фамилия", "");
СтруктураКонтрагента.Вставить("Имя", "");
СтруктураКонтрагента.Вставить("Отчество", "");
Справочники.Контрагенты.ПолучитьДанныеКонтрагента(СтруктураКонтрагента);
// После выполнения метода структура заполнится данными
Для нашей собственной организации в БГУ используется аналогичный подход:
Справочники.Организации.ПолучитьДанныеОрганизации(Организация, Дата)
Одной из главных проблем при переносе кода является получение строкового представления адреса. В БГУ адреса могут храниться в различных форматах (включая JSON или XML в зависимости от версии БСП). Чтобы получить красивую строку для печати, мы должны использовать специализированный модуль УправлениеКонтактнойИнформацией.
Рассмотрим пример получения юридического адреса:
ВидАдреса = Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента;
ПредставлениеАдреса = УправлениеКонтактнойИнформацией.ПредставлениеКонтактнойИнформацииОбъекта(
СсылкаНаДокумент.Контрагент,
ВидАдреса,
СсылкаНаДокумент.Дата
);
Этот способ гарантирует, что вы получите актуальный адрес на дату документа, даже если контрагент его менял в истории.
Если нам не нужны сложные форматированные данные (например, только ИНН и КПП), использование тяжелых функций формирования сведений может замедлить работу обработки. В этом случае проанализируем использование универсального метода БСП.
// Получаем только то, что действительно нужно
Данные = ОбщегоНазначенияБГУ.ЗначенияРеквизитовОбъекта(
СсылкаНаДокумент.Контрагент,
"ИНН, КПП, НаименованиеПолное"
);
// Использование
ТекстИнн = Данные.ИНН;
Этот метод работает значительно быстрее, так как выполняет прямой запрос к базе данных без инициализации сложных объектов и выполнения тяжелых алгоритмов формирования «печатных» представлений.
Подведем итог нашего анализа. Если вы адаптируете печатную форму из БП в БГУ:
ФормированиеПечатныхФорм.СведенияОЮрФизЛице.ЭлектронныеДокументыБГУ.ПолучитьДанныеЮрФизЛица, но помните о предварительном создании структуры.УправлениеКонтактнойИнформацией.Справочники.БанковскиеСчета.ПолучитьДанныеБанковскогоСчета(БанковскийСчет, Дата).Применяя эти методы в зависимости от конкретной задачи, вы сможете создать надежную и быстродействующую печатную форму, полностью совместимую со стандартами разработки в 1С:БГУ 2.0.