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