При переходе от старых конфигураций на обычных формах (например, Управление торговлей 10.3) к современным управляемым решениям на базе БСП (Бухгалтерия предприятия КОРП 3.0) многие разработчики сталкиваются с рядом трудностей. Наиболее острыми становятся вопросы архитектурного характера (почему в коде появляются конструкции с жестко заданными GUID) и проблемы со скоростью кастомизации стандартных бухгалтерских отчетов, таких как Оборотно-сальдовая ведомость (ОСВ) или Карточка счета.
В этой статье мы подробно разберем, зачем разработчики фирмы «1С» используют привязку к GUID в программном коде, выясним причины ошибок при попытке выгрузить ОСВ во внешний отчет и рассмотрим наиболее эффективные методики доработки таких отчетов.
---
Многих специалистов удивляет и даже возмущает конструкция вида Новый УникальныйИдентификатор("627a6fb8-872a-11e3-bb87-005056c00008"), встречающаяся, например, в модуле менеджера справочника ИдентификаторыОбъектовМетаданных. На первый взгляд это напоминает плохой тон программирования (так называемый «hardcode»), аналогичный поиску элементов по коду или наименованию.
Давайте проанализируем ситуацию и выясним, почему в данном случае использование GUID полностью оправдано и необходимо:
СвойстваКоллекцийОбъектовМетаданных оперирует системными коллекциями платформы (Роли, Графики работы, Бизнес-процессы и др.). Эти коллекции не являются физическими объектами базы данных, для них в конфигураторе нельзя просто создать стандартные «Предопределенные элементы». Чтобы система могла ссылаться на них как на элементы справочника в механизмах разграничения прав доступа (RLS) или подсистеме настроек пользователей, им сопоставляются элементы справочника с заранее известными GUID.Для наглядности рассмотрим, как программно получить ссылку на объект по его уникальному идентификатору:
ИдентификаторОбъекта = Новый УникальныйИдентификатор("627a6fb8-872a-11e3-bb87-005056c00008");
СсылкаНаЭлемент = Справочники.ИдентификаторыОбъектовМетаданных.ПолучитьСсылку(ИдентификаторОбъекта);
Таким образом, использование фиксированных GUID для служебных справочников — это не ошибка разработчиков, а архитектурная необходимость для стабильной работы БСП и механизмов интеграции.
---
Попытка скопировать стандартную ОСВ во внешний файл отчета (.erf) и запустить его в пользовательском режиме обычно заканчивается ошибкой следующего вида:
Ошибка при выполнении функции ОбщегоНазначения.ИдентификаторОбъектаМетаданных(). Объект метаданных не найден по полному имени "ВнешнийОтчет.ОборотноСальдоваяВедомость".
Выясним причину этой проблемы. Все типовые отчеты в Бухгалтерии предприятия 3.0 тесно интегрированы с подсистемами БСП. При открытии и формировании отчета система обращается к общим модулям (например, БухгалтерскиеОтчетыВызовСервера.СформироватьОтчет), передавая туда контекст отчета. Механизмы БСП пытаются определить настройки, права и структуру отчета, обращаясь к справочнику ИдентификаторыОбъектовМетаданных по полному имени объекта. Так как внешнего отчета нет в структуре метаданных самой конфигурации, система выдает исключение и прекращает работу.
---
Рассмотрим два основных и наиболее эффективных метода решения этой задачи.
Использование механизма расширений — это современный стандарт доработки конфигураций 1С. Он позволяет изменять логику типовых отчетов, не снимая основную конфигурацию с поддержки и сохраняя возможность простого обновления.
Разберем по шагам, как доработать ОСВ через расширение:
Адаптация или Дополнение.Отчет.ОборотноСальдоваяВедомость), нажмите на него правой кнопкой мыши и выберите пункт Добавить в расширение.Важный совет по ускорению отладки: Многие программисты ошибочно полагают, что при любом изменении в расширении нужно полностью перезапускать сеанс «1С:Предприятия». Это не так! Если вы изменяете только программный код в модулях (не добавляя новые реквизиты в базу данных), платформа поддерживает динамическое обновление. Вам достаточно применить изменения в конфигураторе расширения, а в пользовательском режиме просто закрыть форму отчета и открыть ее заново. Изменения вступят в силу мгновенно, что существенно ускорит процесс разработки.
---
Если вам по каким-то причинам жизненно необходимо сделать отчет именно внешним файлом (например, для передачи клиенту во «Фреш» без возможности установки расширений), придется выполнить глубокий рефакторинг кода инициализации отчета.
Проанализируем алгоритм адаптации:
ОборотноСальдоваяВедомость как внешний отчет (.erf).ПриКомпоновкеРезультата. Установите параметр СтандартнаяОбработка в значение Ложь. Это отключит стандартный механизм формирования отчета платформой и позволит нам полностью управлять процессом.Рассмотрим пример кода, который необходимо разместить в модуле объекта внешнего отчета:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
// Инициализируем схему и настройки компоновки данных
СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
НастройкиОтчета = КомпоновщикНастроек.ПолучитьНастройки();
// Выполняем компоновку макета без обращения к общим серверным модулям БСП
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиОтчета, ДанныеРасшифровки);
// Инициализируем процессор компоновки и выводим результат в табличный документ
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры
Используя этот подход, мы полностью изолируем отчет от жестких проверок БСП на принадлежность к метаданным конфигурации, и отчет сможет без проблем открываться и формироваться как стандартный внешний файл.
---
Программирование в современных конфигурациях уровня КОРП требует понимания внутренних механизмов платформы и Библиотеки стандартных подсистем.
Использование жестко заданных GUID — это осознанное архитектурное решение для обеспечения стабильности РИБ и механизмов безопасности. Для быстрой и комфортной разработки сложных бухгалтерских отчетов всегда отдавайте предпочтение расширениям конфигурации — это сбережет ваше время, избавит от написания «костылей» обхода БСП и позволит проводить отладку без постоянного перезапуска клиентского сеанса 1С.