Коллеги, добрый день!
Тэги
Кто пользовался УНФ 1.6 наверное видел, что в этой конфигурации расположение внешних отчетов несколько отличается от привычного многим. Команды "Дополнительные отчеты" как например в БП 3.0 или УТ 11 в УНФ 1.6 - нет. Вместо этого (если включена функциональная опция "Использовать дополнительные отчеты и обработки") при входе в подраздел "Отчеты" присутствует кнопка "Внешние" (см. рис.1).
Для того, чтобы добавленный нами в конфигурацию внешний отчет появился в перечне внешних отчетов, у него должен быть установлен соответствующий "Тэг" (см. рис.2).
Немного про "Тэги" отчетов: "Тэги" в отчетах УНФ 1.6 используются как для определения местоположения отчета в разделе программы (есть теги соответствующие наименованиям разделов: "Продажи", "Закупки", "Зарплата" и т.д.), так и для быстрого поиска необходимого отчета (теги: "Запасы", "Заказы" и т.д.) (см. рис.3). Список всех отчетов и установленных для них тегов хранится в регистре сведений "Настройки варианта отчетов УНФ" (см. рис.4), увидеть который можно через "Все функции". И наша задача заключается в том, чтобы при добавлении внешнего отчета в этот регистр сведений записался нужный нам "Тег". Конечно же можно просто вручную указать "Тэг" в этом регистре сведений, но при таком варианте каждый раз при добавлении/обновлении внешнего отчета, нужно не забывать заходить в регистр сведений и указывать "Тэг".
Итак приступим, допустим у нас есть какой-то готовый внешний отчет на СКД, для начала нужно создать реквизит отчета "ЭтоОтчетУНФ" с типом булево (см. рис. 5). Далее заходим в модуль объекта и после обязательной функции "СведенияОВнешнейОбработке" (описывая сведения о внешней обработке/отчете можно по-старинке вручную заполнить "параметры регистрации", а можно с помощью общего модуля "ДополнительныеОтчетыИОбработки", в моём случае с помощью общего модуля), создаём экспортную процедуру "ПриОпределенииНастроекОтчета", в которой указываем "Теги" либо для конкретных вариантов отчета свои, либо для всех вариантов общие.
Пример кода, указываем теги для определённых вариантов отчета:
Процедура ПриОпределенииНастроекОтчета(НастройкиОтчета, НастройкиВариантов) Экспорт
//Указываем "Теги" для варианта отчета "Основной"
НастройкиВариантов["Основной"].Теги = НСтр("ru = 'Продажи,CRM'");
//Указываем "Теги" для варианта отчета "Подробный"
НастройкиВариантов["Подробный"].Теги = НСтр("ru = 'Продажи,CRM'");
КонецПроцедуры
Пример кода, указываем теги для всех вариантов отчета:
Процедура ПриОпределенииНастроекОтчета(НастройкиОтчета, НастройкиВариантов) Экспорт
Для Каждого НастройкиТекВарианта Из НастройкиВариантов Цикл
//Указываем "Теги" для всех вариантов отчета
НастройкиТекВарианта.Значение.Теги = НСтр("ru = 'Продажи,CRM'");
КонецЦикла;
КонецПроцедуры
В моём примере два варианта отчета: "Основной" и "Подробный" (см. рис. 6), и нет необходимости указывать разные "тэги", для разных вариантов отчета, поэтому будем использовать второй вариант.
Изображение образца отчета
Теперь разберёмся с изображениями образцов для внешних отчетов. Для того, чтобы добавить изображение образца в отчете нужно добавить макет с типом "Двоичные данные" (см. рис. 7). Далее нужно загрузить, заранее подготовленное изображение, в макет "Двоичные данные". Для этого кликаем два раза по макету, в появившемся окне жмём "Загрузить из файла" (см. рис. 8), указываем картинку и жмём "ОК". Изображение должно быть размером 580 x 366 пикселей, формат может быть: PNG или JPG, без разницы.
Далее, чтобы программа поняла, что ваше изображение нужно показывать пользователю в режиме "Предприятие" можно пойти двумя путями:
1ый - указать имя макета образца следующим образом "Образец" + Имя варианта отчета.
Например, у нас два варианта отчета: "Основной" и "Подробный", и мы хотим для каждого варианта отдельную картинку, поэтому добавляем два макета типа "Двоичные данные", в каждый загружаем своё изображение и называем макеты "ОбразецОсновной" и "ОбразецПодробный" соответственно. Больше никаких "строк кода" не надо, всё уже заранее описано в общих модулях, при загрузке внешнего отчета в базу, у каждого варианта отчета будет своё изображение.
2ой - указать имя макета образца в, ранее описанной, экспортной процедуре "ПриОпределенииНастроекОтчета".
Пример кода, указываем имя макета для определённых вариантов отчета:
Процедура ПриОпределенииНастроекОтчета(НастройкиОтчета, НастройкиВариантов) Экспорт
//Указываем "Изображение образца" для варианта отчета "Основной"
НастройкиВариантов["Основной"].Вставить("ИмяМакетаОбразца", "ОбразецОсновной");
//Указываем "Изображение образца" для варианта отчета "Подробный"
НастройкиВариантов["Подробный"].Вставить("ИмяМакетаОбразца", "Подробный");
КонецПроцедуры
Пример кода, указываем имя макета для всех вариантов отчета:
Процедура ПриОпределенииНастроекОтчета(НастройкиОтчета, НастройкиВариантов) Экспорт
Для Каждого НастройкиТекВарианта Из НастройкиВариантов Цикл
//Указываем "Изображение образца" для всех вариантов отчета
НастройкиТекВарианта.Значение.ИмяМакетаОбразца = "ОбразецОсновной";
КонецЦикла;
КонецПроцедуры
В прилагаемом отчете, для варианта отчета "Основной" указано имя макета образца "ОбразецОсновной", то есть отработает общий модуль и для этого варианта изображение будет "выводиться само", а для варианта отчета "Подробный" указано имя макета образца "Подробный", поэтому для второго варианта отчета назначаем имя макета в процедуре "ПриОпределенииНастроекОтчета".
ЭтоОтчетУНФ
Далее, в тело модуля объекта (в самом конце модуля объекта внешнего отчета после всех процедур и функций) нужно для ранее созданного реквизита "ЭтоОтчетУНФ" установить значение "Истина":
ЭтоОтчетУНФ = Истина;
Очень важный момент!
В конфигураторе, в свойствах отчета (Действия - Свойства) не забываем указать "Хранилище вариантов" (см. рис. 9). Иначе, при добавлении отчета, программа будет ругаться, что не заполнено это свойство и отчет не будет виден.
После всего проделанного, когда внешний отчет будет добавлен в базу, в регистре сведений "Настройки варианта отчетов УНФ", для нашего отчета появятся теги: Продажи, CRM. Соответственно наш отчет будет виден в подразделе "Отчеты" в таких разделах как: "Продажи" и "CRM", а также каждый вариант отчета будет иметь собственное изображение (см. рис. 10).
Пример кода из модуля объекта целиком:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиОтчет();
ПараметрыРегистрации.Версия = "1.0";
ПараметрыРегистрации.Наименование = "Анализ состояний заказов покупателей";
ПараметрыРегистрации.Информация = "Анализ состояний заказов покупателей";
Возврат ПараметрыРегистрации;
КонецФункции
Процедура ПриОпределенииНастроекОтчета(НастройкиОтчета, НастройкиВариантов) Экспорт
//Указываем "Теги" для варианта отчета "Основной"
//НастройкиВариантов["Основной"].Теги = НСтр("ru = 'Продажи,CRM'");
//не используем, так как добавляем "Тэги" для всех вариантов ниже
//Указываем "Теги" для варианта отчета "Подробный"
//НастройкиВариантов["Подробный"].Теги = НСтр("ru = 'Продажи,CRM'");
//не используем, так как добавляем "Тэги" для всех вариантов ниже
//Указываем "Изображение образца" для варианта отчета "Основной"
//НастройкиВариантов["Основной"].Вставить("ИмяМакетаОбразца", "ОбразецОсновной");
//не используем, так как с указанным именем макета отработает Общий модуль
//Указываем "Изображение образца" для варианта отчета "Подробный"
НастройкиВариантов["Подробный"].Вставить("ИмяМакетаОбразца", "Подробный");
Для Каждого НастройкиТекВарианта Из НастройкиВариантов Цикл
//Указываем "Теги" для всех вариантов отчета
НастройкиТекВарианта.Значение.Теги = НСтр("ru = 'Продажи,CRM'");
//Указываем "Изображение образца" для всех вариантов отчета
//НастройкиТекВарианта.Значение.ИмяМакетаОбразца = "ОбразецОсновной";
//не используем, так как для каждого варианта отчета выводим своё изображение
КонецЦикла;
КонецПроцедуры
ЭтоОтчетУНФ = Истина;
В качестве примера, прилагаю внешний отчет.
Про отчет: одному из клиентов очень важна корректность установки "Состояний" у заказов покупателей (на продажу), чтобы заказ покупателя был "успешно завершен", только когда полностью оплачен и отгружен. А так как в УНФ никак не контролируются состояния заказов покупателей и вручную можно установить что угодно, был написан этот простенький отчет.
Отчет тестировался на конфигурации УНФ 1.6, версии: 1.6.17.174; 1.6.18.88; 1.6.18.98; 1.6.18.168; 1.6.19.137.
Изменения начиная с версии УНФ 1.6.26.124
(возможно и раньше)
Коллеги, с недавних пор, в УНФ произошли небольшие изменения. Теперь "тэги" не влияют на расположение отчета в том или ином разделе. В настоящее время, "тэги" используются только для поиска отчета. Расположение отчета в разделах определяется при добавлении и сохранении отчета в программу. Но чтобы это можно было сделать, необходимо внести небольшие исправления в код экспортной функции "СведенияОВнешнейОбработке()" модуля объекта внешнего отчета. А именно, необходимо в параметрах регистрации указать, что вид дополнительной обработки/отчета теперь "ВидОбработкиДополнительныйОтчет()". Далее, всё остается без изменений.
Приведу сразу пример всего кода из модуля объекта нашего отчета:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет();
ПараметрыРегистрации.Версия = "2.0";
ПараметрыРегистрации.Наименование = "Анализ состояний заказов покупателей";
ПараметрыРегистрации.Информация = "Анализ состояний заказов покупателей";
Возврат ПараметрыРегистрации;
КонецФункции
Процедура ПриОпределенииНастроекОтчета(НастройкиОтчета, НастройкиВариантов) Экспорт
//Указываем "Теги" для варианта отчета "Основной"
//НастройкиВариантов["Основной"].Теги = НСтр("ru = 'Продажи,CRM'");
//не используем, так как добавляем "Тэги" для всех вариантов ниже
//Указываем "Теги" для варианта отчета "Подробный"
//НастройкиВариантов["Подробный"].Теги = НСтр("ru = 'Продажи,CRM'");
//не используем, так как добавляем "Тэги" для всех вариантов ниже
//Указываем "Изображение образца" для варианта отчета "Основной"
//НастройкиВариантов["Основной"].Вставить("ИмяМакетаОбразца", "ОбразецОсновной");
//не используем, так как с указанным именем макета отработает Общий модуль
//Указываем "Изображение образца" для варианта отчета "Подробный"
НастройкиВариантов["Подробный"].Вставить("ИмяМакетаОбразца", "Подробный");
Для Каждого НастройкиТекВарианта Из НастройкиВариантов Цикл
//Указываем "Теги" для всех вариантов отчета
НастройкиТекВарианта.Значение.Теги = НСтр("ru = 'Продажи,CRM'");
//Указываем "Изображение образца" для всех вариантов отчета
//НастройкиТекВарианта.Значение.ИмяМакетаОбразца = "ОбразецОсновной";
//не используем, так как для каждого варианта отчета выводим своё изображение
КонецЦикла;
КонецПроцедуры
ЭтоОтчетУНФ = Истина;
После вышеуказанных изменений, при добавлении дополнительного отчета в базу, необходимо нажать кнопку "Записать" на вкладке "Варианты отчета" (см. рис. 11). Далее для каждого варианта отчета, нужно указать в его расположение в разделах программы (см. рис. 12).
В качестве примера прилагаю обновленный вариант отчета.
Отчет тестировался на конфигурации УНФ 1.6, версии: 1.6.26.124; 1.6.26.132.