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