Коллеги, добрый день!
Кто пользовался УНФ 1.6 наверное видел, что в этой конфигурации расположение внешних отчетов несколько отличается от привычного многим. Команды "Дополнительные отчеты" как например в БП 3.0 или УТ 11 в УНФ 1.6 — нет. Вместо этого (если включена функциональная опция "Использовать дополнительные отчеты и обработки") при входе в подраздел "Отчеты" присутствует кнопка "Внешние" (см. рис.1).
Для того, чтобы добавленный нами в конфигурацию внешний отчет появился в перечне внешних отчетов, у него должен быть установлен соответствующий "Тэг" (см. рис.2).
Немного про "Тэги" отчетов: "Тэги" в отчетах УНФ 1.6 используются как для определения местоположения отчета в разделе программы (есть теги соответствующие наименованиям разделов: "Продажи", "Закупки", "Зарплата" и т.д.), так и для быстрого поиска необходимого отчета (теги: "Запасы", "Заказы" и т.д.) (см. рис.3). Список всех отчетов и установленных для них тегов хранится в регистре сведений "Настройки варианта отчетов УНФ" (см. рис.4), увидеть который можно через "Все функции". И наша задача заключается в том, чтобы при добавлении внешнего отчета в этот регистр сведений записался нужный нам "Тег". Конечно же можно просто вручную указать "Тэг" в этом регистре сведений, но при таком варианте каждый раз при добавлении/обновлении внешнего отчета, нужно не забывать заходить в регистр сведений и указывать "Тэг".
Итак приступим, допустим у нас есть какой-то готовый внешний отчет на СКД, для начала нужно создать реквизит отчета "ЭтоОтчетУНФ" с типом булево (см. рис. 5). Далее заходим в модуль объекта и после обязательной функции "СведенияОВнешнейОбработке" (описывая сведения о внешней обработке/отчете можно по-старинке вручную заполнить "параметры регистрации", а можно с помощью общего модуля "ДополнительныеОтчетыИОбработки", в моём случае с помощью общего модуля), создаём экспортную процедуру "ПриОпределенииНастроекОтчета", в которой указываем "Теги" либо для конкретных вариантов отчета свои, либо для всех вариантов общие.
Пример кода, указываем теги для одного варианта отчета:
Процедура ПриОпределенииНастроекОтчета(НастройкиОтчета, НастройкиВариантов) Экспорт
//Указываем "Теги" для одного варианта отчета - "Основной"
НастройкиВариантов["Основной"].Теги = НСтр("ru = 'Продажи,CRM'");
КонецПроцедуры
Пример кода, указываем теги для всех вариантов отчета:
Процедура ПриОпределенииНастроекОтчета(НастройкиОтчета, НастройкиВариантов) Экспорт
//Указываем "Теги" для всех вариантов отчета
Для Каждого НастройкиТекВарианта Из НастройкиВариантов Цикл
НастройкиТекВарианта.Значение.Теги = НСтр("ru = 'Продажи,CRM'");
КонецЦикла;
КонецПроцедуры
В моём примере всего один вариант отчета — "Основной" (см. рис. 6), поэтому можно использовать любой из вариантов.
Далее в самом конце модуля объекта внешнего отчета после всех процедур и функций, нужно для ранее созданного реквизита "ЭтоОтчетУНФ" установить значение "Истина":
ЭтоОтчетУНФ = Истина;
Очень важный момент: в конфигураторе, в свойствах отчета (Действия — Свойства) не забываем указать "Хранилище вариантов" (см. рис. 7). Иначе, при добавлении отчета, программа будет ругаться, что не заполнено это свойство и отчет не будет виден.
После всего проделанного, когда внешний отчет будет добавлен в базу, в регистре сведений "Настройки варианта отчетов УНФ", для нашего отчета появятся теги: Продажи, CRM. Соответственно наш отчет будет виден в подразделе "Отчеты" в таких разделах как: "Продажи" и "CRM" (см. рис. 8).
Пример кода из модуля объекта целиком:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиОтчет();
ПараметрыРегистрации.Версия = "1.0";
ПараметрыРегистрации.Наименование = "Анализ состояний заказов покупателей";
ПараметрыРегистрации.Информация = "Анализ состояний заказов покупателей";
Возврат ПараметрыРегистрации;
КонецФункции
Процедура ПриОпределенииНастроекОтчета(НастройкиОтчета, НастройкиВариантов) Экспорт
//Указываем "Теги" для одного варианта отчета - "Основной"
//НастройкиВариантов["Основной"].Теги = НСтр("ru = 'Продажи,CRM'"); //не используем
//Указываем "Теги" для всех вариантов отчета
Для Каждого НастройкиТекВарианта Из НастройкиВариантов Цикл
НастройкиТекВарианта.Значение.Теги = НСтр("ru = 'Продажи,CRM'");
КонецЦикла;
КонецПроцедуры
ЭтоОтчетУНФ = Истина;
В качестве примера, прилагаю внешний отчет.
Про отчет: одному из клиентов очень важна корректность установки "Состояний" у заказов покупателей (на продажу), чтобы заказ покупателя был "успешно завершен", только когда полностью оплачен и отгружен. А так как в УНФ никак не контролируются состояния заказов покупателей и вручную можно установить что угодно, был написан этот простенький отчет.
Отчет тестировался на конфигурации УНФ 1.6, версии: 1.6.17.174; 1.6.18.88; 1.6.18.98; 1.6.18.168.
Что-то не получается. Версия 1.6.17.174. Глобальным поиском не нашел даже вызов процедуры «ПриОпределенииНастроекОтчета»
(1) Процедура «ПриОпределенииНастроекОтчета» находится в модуле объекта почти каждого отчета в конфигурации УНФ, и аналогичную нужно создать в модуле объекта внешнего отчета.
Ага. Прошу прощения, в поиске стояли фильтры, поэтому сначала ничего не нашел. Разобрался, вот этот текст я у вас прозевал: «для начала нужно создать реквизит отчета «ЭтоОтчетУНФ» с типом булево».
Создал реквизит, теперь все работает.
Большое спасибо!
(3) пожалуйста))
Ага, тоже на первом заходе пропустил про доп реквизит…
Сейчас «без гонки» внимательно перечитал и всё получилось!
Для справки: проверял сейчас на версии 1.6.9.36
Спасибо тебе добрый человек! думал уже я такой, а не лыжи…
В параметры регистрации для отчетов, команды передавать не обязательно, поэтому, если быть более кратким, то:
Показать
(7) Не совсем так, таблицу команд всё равно необходимо создать, но вот заполнять, действительно не обязательно.
В функции «СведенияОВнешнейОбработке», таблица как раз и создаётся.
Спасибо