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