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