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

27.09.18

Разработка - Универсальные функции

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

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

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

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

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

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

Платформа 8.3.10

СКД Расшифровка

См. также

Универсальные функции Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

21.05.2024    18761    dimanich70    81    

141

Универсальные функции Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    3975    3    John_d    11    

57

Универсальные функции Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    16297    atdonya    23    

56

Универсальные функции Программист Платформа 1С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    5361    ke.92@mail.ru    16    

65

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    14184    YA_418728146    7    

166

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    3458    53    progmaster    8    

4

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    18318    164    sapervodichka    112    

135
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. user619273_alevtina 30.12.18 18:18 Сейчас в теме
Воспользуюсь. Спасибо.
2. VitaliyTokarev 222 20.09.19 16:37 Сейчас в теме
3. mrChOP93 99 28.10.19 14:35 Сейчас в теме
Не подскажете, что скрывается здесь "КомпоновкаДанныхКлиент.ОбработкаРасшифровкиСДополнительнымМеню(ЭтаФорма, ПараметрыРасшифровки, СтандартнаяОбработка);"?
4. bmk74 239 05.11.19 17:49 Сейчас в теме
(3)Ну собственно там, идет обработка того что в коде приведено, они ищет в отчете поля, сравнивает с тем что прописали вы, в случае удачного сосоставления он добавляет пункт меню в расшифровку стандартную и обраьотчик

ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(
									    ДанныеРасшифровки, 
									    Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы));
	
    ОбработкаРасшифровки.ПоказатьВыборДействия(
		    ОписаниеОповещения, 
		    Расшифровка,,
		    ДополнительноеМеню)
mrChOP93; +1 Ответить
5. ratinc 23.04.20 20:59 Сейчас в теме
Отличный способ подключить расшифровку.
Но есть нюанс )))
У меня иногда не подхватывает форму внешнего отчета
Ошибка при вызове метода контекста (ОткрытьФорму)
		ОткрытьФорму(ПараметрыОтчета.ИмяОтчета + ".Форма", ПараметрыФормы);
по причине:
Неизвестное имя формы. Имя: 
LomayaZakat; +1 Ответить
6. bmk74 239 24.04.20 15:31 Сейчас в теме
(5)Да есть такое если открываемый отчет тоже внешний "ВнешнийОтчет.", и это не тот же самый отчет, то выдает такую ошибку, при том, если тот же отчет сначала открыть, не через расшифровку , а просто , а потом через расшифровку...то он откроется нормально, с чем это связано... не совсем понятно...
LomayaZakat; +1 Ответить
7. ratinc 26.04.20 23:43 Сейчас в теме
(6) Я тоже заметил что если сначала открыть отчет который используется для расшифровки, то потом вопросов с ним в этом сеансе не возникает.
Необходимо как то победить эту проблему. Пользователи жутко избалованные)))
Не хотят запускать предварительно отчет расшифровки
21. LomayaZakat 10.04.24 10:51 Сейчас в теме
(7)Удалось как то решить проблему?
22. HAMMER_59 252 11.07.24 15:40 Сейчас в теме
(21) Я бы просто добавил отчет для расшифровки в расширение.
Но если не охота про простому, нужно смотреть как стандартно открываются внешние отчеты. Скорее всего через вызов сервера и прочие сложности.
8. Cthulhu 1 17.09.20 16:47 Сейчас в теме
"развести" ч/з обработку ожидания не получится?..
9. Aliya_St 19.04.22 14:46 Сейчас в теме
Подскажите, пожалуйста. Делаю расшифровку отчета. Все процедуры аналогичны (я так понимаю, тут за основу брался типовой механизм). Проблема с полями расшифровки: в одном отчете это "Номенклатура", а в другом "АналитикаНоменклатуры.Номенклатура". Делаю замену реквизитов аналогично другим похожим ситуациям (так же описано и у вас тут), но отчет расшифровка не сопоставляет поля и соответственно не выставляет отбор по номенклатуре, пишет "в отборе используются несуществующие поля". Может где-то что-то я не учла? Никак не могу разобраться с этим.
10. Rollam 08.07.22 17:20 Сейчас в теме
А почему массив МенюДействий остается пустым?
Как добавить своё действие и связать его с отчетом из массива МенюОтчетов?
11. bmk74 239 19.07.22 11:31 Сейчас в теме
(10) Честно уже и забыл что там куда...но вроде как меню действий настраивается для того что бы вы могли например провести или записать документ из отчета, его в принципе не нужно связывать, так как меню отчетов нужно именно для того что бы открыть другой отчет, а меню действий что бы, что то сделать с данными который выводит вам сам отчет...
12. newvideo 03.08.22 12:13 Сейчас в теме
"Как известно, подключаемый внешний отчет, если не указывать свою форму отчета, будет использовать общую формуОтчета из конфигурации"
-мой внешний отчет не использует форму, но никакого подключения общей формы не происходит, общая форма с множеством кнопочек (сумма, дискетка, почта), а у меня простые кнопки "сформировать", "Варианты", "Настройки" и всё

Видимо это зависит от версии БСП.
15. bmk74 239 04.08.22 18:32 Сейчас в теме
(12)Форма настраиваемая.. и она может быть и с кнопочками и без..все зависит от переданных в нее параметров...фантастики не бывает
13. newvideo 03.08.22 13:21 Сейчас в теме
Добавил в отчет форму стандартную, вроде отладчик попал в модуль и в расширение, но дальше вообще темный лес,
Есть в отчете строки организации и ресурсы кол-во человек. В запросе также есть сотрудники, которые не выведены в отчете. Необходимо в отчете расшифровке отобразить сотрудников. По коду много описания и комментариев но ничего не понятно. Добавил код, но при расшифровке отчета по одной организации запускается отчет (вариант2), где выводится список всех сотрудников (т.е. без параметров), а как параметры то передать?
в комментариях написано:
//Указываются поля расшифровки которые могут быть переданы в открываемый отчет как отбор
// В данном массиве указываются параметры текущего отчета которые будут переданы как параметр в
// В выше приведенных структурах нужно указать параметры отчета и поля расшифровки по которым будет анализироваться

ну и как понять где отбор, где параметры, а где структуры параметров, а где параметры отбора структур параметров?
Что в первом блоке указывается? Организация или сотрудники?
Что во втором блоке? Параметры?
Прописал организацию во втором блоке, но никакого отбора по организации не происходит.
16. bmk74 239 04.08.22 18:34 Сейчас в теме
(13)Читайте внимательнее , там конечно мудрено все...но разобраться можно
14. newvideo 03.08.22 14:01 Сейчас в теме
Поля отбора нужно прописывать и в ПоляРасшифровки и в СписокПараметров, тогда отбор по "Организации" отработает, причем нужно следить за регистром наименований - "организация" с маленькой буквой не прокатит.

"ЗаменаПараметров" не понял что это такое.
17. bmk74 239 04.08.22 18:38 Сейчас в теме
(14)Там вроде это и написано...
Я же говорю читайте внимательнее,
Замена, это значит что параметр с именем например Организация( в тек отчете), будет передан в другой отчет с именем( которое вы пропишите в данной структуре)
18. newvideo 04.08.22 23:06 Сейчас в теме
прочитал внимательно 10 раз, но не могу догадаться, что в параметр нужно передать те же поля, что и в отборы.
Я понимаю под параметрами "Период" или какие-то значения для параметров в запросе. Что отбор является параметром как то не увязывается, на то он и имеет другое название. В третьем блоке комментов написано:
//----------------------------------------Параметры открываемого отчета-----------------------------------------------
// В выше приведенных структурах нужно указать параметры отчета и поля расшифровки по которым будет анализироваться поведение
// расшифровки ( показывать доп меню или нет ), для замены параметров

Но выше по тексту нет никаких структур, есть ниже. Или то что мы вставляем выше в массив и есть структура? Похоже просто на строковый тип. А комментарий со знаками "----------------" оказывается означает закрытие комментария со знаками "+++++++++++++++++++" и не имеет отношение с блоку с заменой параметров, иначе мы имеем третий набор параметров.

Ладно, возможно людям всё понятно, возможно я один такой темный, подскажите пожалуйста, если я хочу передать в отчет расшифровки именно значение параметра, например "период = ТекущаяДата()", как и где это прописать? Период нужно прописать в СписокПараметров или это замена параметра или это замещающий параметр?
19. bmk74 239 06.08.22 19:54 Сейчас в теме
(18)Вы правы в том что параметры СКД. это то что задается в запросе, ну или на закладке параметры, отборы это уже настройки СКД и накладываются они уже после выполнения запроса( как правило, есть там исключение, когда сам запрос правиться СКД ).
Не совсем понял что вы имеете ввиду под "период = ТекущаяДата()"... так вы ничего не передадите, можно передать уже вычисленное значение в текущем отчете
Да и там как раз в примере это есть
СписокПараметров = Новый Массив;
СписокПараметров.Добавить("Период");
СписокПараметров.Добавить("Тип");
ПараметрыОтчета.Вставить("СписокПараметров", СписокПараметров);
Если в открываемом отчете будет параметр Период... то он передаст это значение из текущего отчета
И да в поля расшифровки добавляются именно "Поля текущего отчета(колонки выводимые)", и вот значения из этих полей( по выбранной строке) будут переданы как отбор в открываемый отчет, не как параметр
20. nvs_tomsk 16.01.24 08:59 Сейчас в теме
Решаю аналогичную задачу.
Моя реализация, с дальнейшей возможностью переопределения других событий общей формы отчета:
1. Добавляем в отчет произвольную форму "ОбщаяФормаОтчетаПереопределяемая"

2. В форме пишем процедуру:
&НаКлиенте
Процедура ОбработкаРасшифровки(ФормаОтчета, Элемент, Расшифровка, СтандартнаяОбработка) Экспорт
	СтандартнаяОбработка = Ложь;
	Сообщить("Расшифровка");
КонецПроцедуры


3. В модуле отчета добавляем 2 процедуры, в результате в общей форме отчета будет 2 реквизита "я_ИмяФормыПереопределенныхСобытий" и "я_ПереопределенныеСобытияФормы":
Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт
	Настройки.События.ПриСозданииНаСервере = Истина;
КонецПроцедуры


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


4. дополняем процедуру общего модуля: ОтчетыКлиентПереопределяемый.ОбработкаРасшифровки (проверяем наличие формы с переопределяемыми событиями, проверяем переопределяется ли событие "ОбработкаРасшифровки" и при необходимости вызываем событие уже в самой форме отчета):
Процедура ОбработкаРасшифровки(ФормаОтчета, Элемент, Расшифровка, СтандартнаяОбработка) Экспорт
	
	//++ НЕ ГОСИС
	ОтчетыУТКлиентПереопределяемый.ОбработкаРасшифровки(ФормаОтчета, Элемент, Расшифровка, СтандартнаяОбработка);
	
	//++ НЕ УТ
	ОтчетыУПКлиентПереопределяемый.ОбработкаРасшифровки(ФормаОтчета, Элемент, Расшифровка, СтандартнаяОбработка);
	//-- НЕ УТ
	
	ОтчетыКлиентЛокализация.ОбработкаРасшифровки(ФормаОтчета, Элемент, Расшифровка, СтандартнаяОбработка);
	
	//+++
	Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(ФормаОтчета, "я_ИмяФормыПереопределенныхСобытий")
		И ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(ФормаОтчета, "я_ПереопределенныеСобытияФормы")
		И ТипЗнч(ФормаОтчета.я_ПереопределенныеСобытияФормы) = Тип("ФиксированныйМассив")
		И ФормаОтчета.я_ПереопределенныеСобытияФормы.Найти("ОбработкаРасшифровки") <> Неопределено Тогда
		
		ПереопределеннаяФорма = ПолучитьФорму(ФормаОтчета.ИмяФормы + "." + ФормаОтчета.я_ИмяФормыПереопределенныхСобытий);
		ПереопределеннаяФорма.ОбработкаРасшифровки(ФормаОтчета, Элемент, Расшифровка, СтандартнаяОбработка);
	КонецЕсли;
	//---
	
	//-- НЕ ГОСИС
	
КонецПроцедуры
Показать


Теперь для любых отчетов, где необходимо переопределить обработку расшифровки - не требуется вмешательство ОтчетыКлиентПереопределяемый.ОбработкаРасшифровки
Оставьте свое сообщение