Добавление расшифровки в стандартные и добавленные внешние отчеты со стандартной формой отчета на СКД

Описан способ добавления расшифровки отчета на СКД как встроенного в систему, так и добавленного внешнего отчета.

Как известно, подключаемый внешний отчет, если не указывать свою форму отчета, будет использовать общую формуОтчета из конфигурации,

Всем она хороша,но вот добавить свою расшифровку в такой отчет как я думал затруднительно, но разработчики позаботились и об этом.

Ниже предоставлен код который можно добавить в расширение либо в сам общий модуль "ОтчетыКлиентПереопределяемый", Он снабжен комментариями поэтому понять сто к чему можно будет из кода.

&После("ОбработкаДополнительнойРасшифровки")
Процедура NF_ОбработкаДополнительнойРасшифровки(ЭтаФорма, Элемент, Расшифровка, СтандартнаяОбработка)
ПолноеИмяОтчета = ЭтаФорма.НастройкиОтчета.ПолноеИмя;
КлючТекущегоВарианта = ЭтаФорма.КлючТекущегоВарианта;

МенюОтчетов  = Новый Массив;
МенюДействий = Новый Массив;

Если ПолноеИмяОтчета = "ВнешнийОтчет.РеестрОригиналов" Тогда
СтандартнаяОбработка  = Ложь;
Если КлючТекущегоВарианта = "РеестОригиналов" Тогда


// Расшифровать отчетом -> Себестоимость продаж
#Область АнализСебестоимостиТоваровРасширенный
ПараметрыОтчета = Новый Структура;
ПараметрыОтчета.Вставить("Имя",              "РеестрОригиналов");
ПараметрыОтчета.Вставить("Заголовок",        НСтр("ru = 'История документа'"));
ПараметрыОтчета.Вставить("ИмяОтчета",        "ВнешнийОтчет.РеестрОригиналов");
ПараметрыОтчета.Вставить("КлючВарианта",      "ИсторияОригиналов");
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//Указываются поля расшифровки которые могут быть переданы в открываемый отчет как отбор
// а так же для отбора показывать меню на данной строке или нет,
// или для замены параметров см ниже комментарии
ПоляРасшифровки  = Новый Массив;
ПоляРасшифровки.Добавить("Документ");
//ПоляРасшифровки.Добавить("СостояниеДокумента");
ПараметрыОтчета.Вставить("ПоляРасшифровки", ПоляРасшифровки);
//---------------------------------------------------------------------------------------

//++++++++++++++++++++++++++++++++++++++Параметры открываемого отчета++++++++++++++++++++++++++++++++++++++++++++++++
// В данном массиве указываются параметры текущего отчета которые будут переданы как параметр в открываемый отчет
// а так же для отбора показывать меню на данной строке или нет,
// или для замены параметров см выше комментарии
СписокПараметров = Новый Массив;
СписокПараметров.Добавить("Период");
СписокПараметров.Добавить("Тип");
ПараметрыОтчета.Вставить("СписокПараметров", СписокПараметров);
//----------------------------------------Параметры открываемого отчета------------------------------------------------
// В выше приведенных структурах нужно указать параметры отчета и поля расшифровки по которым будет анализироваться поведение
// расшифровки ( показывать доп меню или нет ), для замены параметров, ну и соответственно то что будет передано в открыаемый отчет как отборы
// и параметры

//+++++++++++++++++++++++++Замена параметров++++++++++++++++++++++++++++++++++++++++
//"ЗаменяющиеПараметры" Соответствие где ключ это значение заменяемого параметра, значение Структура
// в котором указывается "ключ" это имя и "значение" значение параметра текущего запроса
//"ЗаменаПараметров" - Структура Где ключ это имя  параметра который будет передан в открываемый отчет
//  Значение данной структура может быть либо строкой, либо соответствием см.выше "ЗаменяющиеПараметры" или Неопределено
//  если значение Неопределено то параметр будет удален из отборов, если строка то значение параметра будет искаться в отборах текущего отчета по имени
//  т.е "Значение элемента структуры = "Документ", тогда  значение параметра будет получено "ПараметрыОтбора[Элемент.Значение]" Где "ПараметрыОтбора"
// то что мы указали выше в структурах расшифровки и параметров ( важное замечание, они обязательно дожны присутствовать или в строке расшифровки или в параметрах,
// иначе они не попадут "ПараметрыОтбора"
// Помледний вариант соответствие, тут просто помимо проверки что есть такой элемент в параметрах отбора, он заменяется на то что указано в самом соответствии
ЗаменаПараметров = Новый Структура;
ЗаменяющиеПараметры = Новый Соответствие;

ЗаменяющиеПараметры.Вставить(0,Новый Структура("Тип",1));
ЗаменаПараметров.Вставить("Тип", ЗаменяющиеПараметры);
//ЗаменаПараметров.Вставить("Показатель_Родитель", Неопределено);
//ЗаменаПараметров.Вставить("ДинамическаяГруппировкаПоТипуАнализа", "СтруктураПредприятия_Организация");
ПараметрыОтчета.Вставить("ЗаменаПараметров", ЗаменаПараметров);
//-------------------------Замена параметров------------------------------------------------------------------
//++++++++++++++++++++++++++Блок для отбора показа меню+++++++++++++++++++++++++++++++++++++++++++++++++++
// Данный блок служит для отбора показывать меню или нет по выбранной расшифровке ,
//    ключ структуры "Необходимые параметы" должен быть так же добавлен в массив "ПоляРасшифровки" если параметр идет в самой расшифровке.
// "НеобходимыеЗначенияПараметра" Массив - перечисляются значения параметров при которм будет показано меню.
// "НеобходимыеПараметры" Структура;Ключи - Имена параметров, Значения-Неопределено( тогда значения параметра не проверяется, главное что бы он присутсвовал),
//   ИЛИ массив "НеобходимыеЗначенияПараметра" ( тогда помимо того что параметр присутвовать должен но и значение должно быть одним из тех что будут в данном массиве)
НеобходимыеЗначенияПараметра = Новый Массив;
НеобходимыеЗначенияПараметра.Добавить(0);
НеобходимыеПараметры = Новый Структура;
НеобходимыеЗначенияПараметра1 = Новый Массив;
НеобходимыеЗначенияПараметра1.Добавить(ПредопределенноеЗначение("Перечисление.NF_ВариантыПолученияДокументовОтПоставщика.ДокументыПолучены"));
НеобходимыеПараметры = Новый Структура;
НеобходимыеПараметры.Вставить("Тип", НеобходимыеЗначенияПараметра);
НеобходимыеПараметры.Вставить("Документ");
ПараметрыОтчета.Вставить("НеобходимыеПараметры", НеобходимыеПараметры);
//---------------------------------------Блок для отбора показа меню--------------------------------------------------
МенюОтчетов.Добавить(ПараметрыОтчета);
#КонецОбласти
КонецЕсли;
КонецЕсли;
Если МенюОтчетов.Количество() > 0
ИЛИ МенюДействий.Количество() > 0 Тогда
ПараметрыРасшифровки = Новый Структура;
ПараметрыРасшифровки.Вставить("МенюОтчетов",  МенюОтчетов);
ПараметрыРасшифровки.Вставить("МенюДействий", МенюДействий);
ПараметрыРасшифровки.Вставить("Расшифровка",  Расшифровка);

КомпоновкаДанныхКлиент.ОбработкаРасшифровкиСДополнительнымМеню(ЭтаФорма, ПараметрыРасшифровки, СтандартнаяОбработка);
КонецЕсли;

КонецПроцедуры

Все тестировалось на 1С ERP 2.2.4

Платформа 8.3.10

4 Comments

  1. user619273_alevtina

    Воспользуюсь. Спасибо.

    Reply
  2. VitaliyTokarev

    Спасибо!!!!

    Reply
  3. narutouzumaki_13

    Не подскажете, что скрывается здесь «КомпоновкаДанныхКлиент.ОбработкаРасшифровкиСДополнительнымМеню(ЭтаФорма, ПараметрыРасшифровки, СтандартнаяОбработка);»?

    Reply
  4. bmk74

    (3)Ну собственно там, идет обработка того что в коде приведено, они ищет в отчете поля, сравнивает с тем что прописали вы, в случае удачного сосоставления он добавляет пункт меню в расшифровку стандартную и обраьотчик

    ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(
    ДанныеРасшифровки,
    Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы));
    
    ОбработкаРасшифровки.ПоказатьВыборДействия(
    ОписаниеОповещения,
    Расшифровка,,
    ДополнительноеМеню)
    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *