Как правильно программировать и дорабатывать отчеты (ОСВ, Карточка счета) в 1С:Бухгалтерия КОРП 3.0?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

При переходе от старых конфигураций на обычных формах (например, Управление торговлей 10.3) к современным управляемым решениям на базе БСП (Бухгалтерия предприятия КОРП 3.0) многие разработчики сталкиваются с рядом трудностей. Наиболее острыми становятся вопросы архитектурного характера (почему в коде появляются конструкции с жестко заданными GUID) и проблемы со скоростью кастомизации стандартных бухгалтерских отчетов, таких как Оборотно-сальдовая ведомость (ОСВ) или Карточка счета.

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

---

Часть 1. Разбор полетов: жестко заданные GUID в коде БСП

Многих специалистов удивляет и даже возмущает конструкция вида Новый УникальныйИдентификатор("627a6fb8-872a-11e3-bb87-005056c00008"), встречающаяся, например, в модуле менеджера справочника ИдентификаторыОбъектовМетаданных. На первый взгляд это напоминает плохой тон программирования (так называемый «hardcode»), аналогичный поиску элементов по коду или наименованию.

Давайте проанализируем ситуацию и выясним, почему в данном случае использование GUID полностью оправдано и необходимо:

  1. Обслуживание системных коллекций платформы. Функция СвойстваКоллекцийОбъектовМетаданных оперирует системными коллекциями платформы (Роли, Графики работы, Бизнес-процессы и др.). Эти коллекции не являются физическими объектами базы данных, для них в конфигураторе нельзя просто создать стандартные «Предопределенные элементы». Чтобы система могла ссылаться на них как на элементы справочника в механизмах разграничения прав доступа (RLS) или подсистеме настроек пользователей, им сопоставляются элементы справочника с заранее известными GUID.
  2. Обеспечение ссылочной целостности в распределенных базах (РИБ). Если бы уникальные идентификаторы для системных объектов генерировались динамически при первом запуске информационной базы у каждого клиента, то в распределенной системе (РИБ) возник бы хаос. При первом же обмене данными базы заполнились бы дублями, а настройки прав доступа «слетели» бы из-за несовпадения GUID. Жесткая фиксация идентификатора в коде гарантирует, что на любом компьютере в любой точке страны этот системный элемент будет иметь строго один и тот же GUID.
  3. Защита от изменений пользователем. В отличие от наименования или кода, которые пользователь (даже случайно или по незнанию) может отредактировать в пользовательском режиме, уникальный идентификатор (GUID) записанного объекта изменить штатными методами невозможно. Поиск по GUID гарантирует 100% точность нахождения нужного системного элемента.

Для наглядности рассмотрим, как программно получить ссылку на объект по его уникальному идентификатору:


ИдентификаторОбъекта = Новый УникальныйИдентификатор("627a6fb8-872a-11e3-bb87-005056c00008");
СсылкаНаЭлемент = Справочники.ИдентификаторыОбъектовМетаданных.ПолучитьСсылку(ИдентификаторОбъекта);

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

---

Часть 2. Почему не получается просто сохранить ОСВ как внешний отчет?

Попытка скопировать стандартную ОСВ во внешний файл отчета (.erf) и запустить его в пользовательском режиме обычно заканчивается ошибкой следующего вида:

Ошибка при выполнении функции ОбщегоНазначения.ИдентификаторОбъектаМетаданных(). Объект метаданных не найден по полному имени "ВнешнийОтчет.ОборотноСальдоваяВедомость".

Выясним причину этой проблемы. Все типовые отчеты в Бухгалтерии предприятия 3.0 тесно интегрированы с подсистемами БСП. При открытии и формировании отчета система обращается к общим модулям (например, БухгалтерскиеОтчетыВызовСервера.СформироватьОтчет), передавая туда контекст отчета. Механизмы БСП пытаются определить настройки, права и структуру отчета, обращаясь к справочнику ИдентификаторыОбъектовМетаданных по полному имени объекта. Так как внешнего отчета нет в структуре метаданных самой конфигурации, система выдает исключение и прекращает работу.

---

Часть 3. Способы быстрой доработки бухгалтерских отчетов в БП КОРП 3.0

Рассмотрим два основных и наиболее эффективных метода решения этой задачи.

Метод №1. Использование расширений конфигурации (рекомендуемый способ)

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

Разберем по шагам, как доработать ОСВ через расширение:

  1. Создайте новое расширение в конфигураторе (меню Конфигурация -> Расширения конфигурации -> Добавить).
  2. Установите у расширения назначение Адаптация или Дополнение.
  3. В дереве метаданных основной конфигурации найдите нужный отчет (например, Отчет.ОборотноСальдоваяВедомость), нажмите на него правой кнопкой мыши и выберите пункт Добавить в расширение.
  4. Добавьте в расширение форму отчета и схему компоновки данных (СКД), если планируется изменение структуры вывода данных.
  5. Внесите необходимые изменения в макет компоновки или код формы внутри расширения.

Важный совет по ускорению отладки: Многие программисты ошибочно полагают, что при любом изменении в расширении нужно полностью перезапускать сеанс «1С:Предприятия». Это не так! Если вы изменяете только программный код в модулях (не добавляя новые реквизиты в базу данных), платформа поддерживает динамическое обновление. Вам достаточно применить изменения в конфигураторе расширения, а в пользовательском режиме просто закрыть форму отчета и открыть ее заново. Изменения вступят в силу мгновенно, что существенно ускорит процесс разработки.

---

Метод №2. Адаптация отчета под работу во внешнем файле (сложный путь)

Если вам по каким-то причинам жизненно необходимо сделать отчет именно внешним файлом (например, для передачи клиенту во «Фреш» без возможности установки расширений), придется выполнить глубокий рефакторинг кода инициализации отчета.

Проанализируем алгоритм адаптации:

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

Рассмотрим пример кода, который необходимо разместить в модуле объекта внешнего отчета:


Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    
    // Инициализируем схему и настройки компоновки данных
    СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
    НастройкиОтчета = КомпоновщикНастроек.ПолучитьНастройки();
    
    // Выполняем компоновку макета без обращения к общим серверным модулям БСП
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиОтчета, ДанныеРасшифровки);
    
    // Инициализируем процессор компоновки и выводим результат в табличный документ
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
    
КонецПроцедуры

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

---

Резюме

Программирование в современных конфигурациях уровня КОРП требует понимания внутренних механизмов платформы и Библиотеки стандартных подсистем.

Использование жестко заданных GUID — это осознанное архитектурное решение для обеспечения стабильности РИБ и механизмов безопасности. Для быстрой и комфортной разработки сложных бухгалтерских отчетов всегда отдавайте предпочтение расширениям конфигурации — это сбережет ваше время, избавит от написания «костылей» обхода БСП и позволит проводить отладку без постоянного перезапуска клиентского сеанса 1С.

← На главную