Каталог решений - Экспресс-отладка дополнительных отчетов и обработок

Экспресс-отладка дополнительных отчетов и обработок

Экспресс-отладка дополнительных отчетов и обработок

В наличии

Еще никогда отладка дополнительных обработок не была такой простой.

Категория:

Описание

 

Бочка меда

После публикации пришлось самому испытать свои доработки и стало понятно как сделать жизнь еще легче (например, чтобы для отладки в новых базах не приходилось каждый раз создавать доп реквизит и не указывать путь к доп обработке вручную). Теперь для отладки после подключения расширения нужно всего:

1) загрузить нужную обработку для отладки из каталога, который доступен пользователю сервера 1С;

2) установить Режим отладки в доп обработке.

 

Чтобы отладка заработала в вашей конфигурации:

1. Добавьте в расширение общий модуль ИнтеграцияПодсистемБСП

&Перед("ПриСозданииВнешнейОбработки")
Процедура _ПриСозданииВнешнейОбработки(Знач Ссылка, СтандартнаяОбработка, Результат)
	_СоздатьВнешнююОбработку(Ссылка, СтандартнаяОбработка, Результат, Ложь)
КонецПроцедуры

&Перед("ПриПодключенииВнешнейОбработки")
Процедура _ПриПодключенииВнешнейОбработки(Знач Ссылка, СтандартнаяОбработка, Результат)
	_СоздатьВнешнююОбработку(Ссылка, СтандартнаяОбработка, Результат);
КонецПроцедуры

Процедура _СоздатьВнешнююОбработку(Знач Ссылка, СтандартнаяОбработка, Результат, ТолькоИмя = Истина)

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

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

 

2. чтобы не мучить себя добавлением в каждой новой базе необходимого доп реквизита

Процедура СоздатьПутьКФайлу() Экспорт

	Если ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.
			НайтиПоРеквизиту("Имя", "_ПутьКФайлуВнешнейОбработки").Пустая() Тогда
			
		Попытка
		
			_ПутьКФайлу = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.СоздатьЭлемент();
			_ПутьКФайлу.Наименование = "Путь к файлу внешней обработки";
			_ПутьКФайлу.ТипЗначения = Новый ОписаниеТипов("Строка");
			_ПутьКФайлу.Виден = Истина;
			_ПутьКФайлу.Доступен = Истина;
			_ПутьКФайлу.Заголовок = "Путь к файлу внешней обработки";
			_ПутьКФайлу.ЗаголовокЯзык1 = _ПутьКФайлу.Заголовок;
			_ПутьКФайлу.ЗаголовокЯзык2 = _ПутьКФайлу.Заголовок;
			_ПутьКФайлу.Имя = "_ПутьКФайлуВнешнейОбработки";
			_ПутьКФайлу.ИдентификаторДляФормул = _ПутьКФайлу.Имя;
			_ПутьКФайлу.НаборСвойств = Справочники.НаборыДополнительныхРеквизитовИСведений.НайтиПоНаименованию("Дополнительные отчеты и обработки");
			_ПутьКФайлу.ВидСвойств = Перечисления.ВидыСвойств.ДополнительныеРеквизиты;
			СтрокаН = _ПутьКФайлу.ЗависимостиДополнительныхРеквизитов.Добавить();
			СтрокаН.ЗависимоеСвойство = "Виден";
			СтрокаН.НаборСвойств =  _ПутьКФайлу.НаборСвойств;
			СтрокаН.Реквизит =  "Публикация";
			СтрокаН.Условие =  "Равно";
			СтрокаН.Значение =  Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.РежимОтладки;
			_ПутьКФайлу.Записать();
			
			НаборСвойств = _ПутьКФайлу.НаборСвойств.ПолучитьОбъект();
			СтрокаН = НаборСвойств.ДополнительныеРеквизиты.Добавить();
			СтрокаН.Свойство = _ПутьКФайлу.Ссылка;
			СтрокаН.ИмяПредопределенногоНабора = "Справочник_ДополнительныеОтчетыИОбработки";
			НаборСвойств.Записать();
		
		Исключение
			ОбщегоНазначения.СообщитьПользователю(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
		КонецПопытки;
		
	КонецЕсли;

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

 

Ложка дёгтя

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

Экспресс-отладка дополнительных отчетов и обработок

Экспресс-отладка дополнительных отчетов и обработок

В наличии

Расширение: 1) помогает быстро отладить дополнительные отчеты и обработки, указав только путь к файлу; 2) не изменяет структуру метаданных конфигурации; 3) содержит минимум доработок типовых конфигураций.

Категория:

Описание

На Инфостарте уже есть подобные публикации. Данное решение сделано с минимумом изменений типовых конфигураций. Все изменения приведены для ERP 2.5.17.155 и УТ 11.5.17.155. Для использования отладки в дополнительных отчетах и обработках нужно подменить файл, хранящийся в справочнике, на указанный нами файл. Попробуем сделать это максимально просто.

 

1. Изменяем ОбщийМодуль.ДополнительныеОтчетыИОбработки

&ИзменениеИКонтроль("ПодключитьВнешнююОбработку")
Функция _ПодключитьВнешнююОбработку(Ссылка)

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

КонецФункции

&ИзменениеИКонтроль("ОбъектВнешнейОбработки")
Функция _ОбъектВнешнейОбработки(Ссылка)

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

КонецФункции

 

2. Изменяем ОбщийМодуль.ДополнительныеОтчетыИОбработкиВызовСервера

&ИзменениеИКонтроль("ПодключитьВнешнююОбработку")
Функция _ПодключитьВнешнююОбработку(Ссылка)

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

КонецФункции

 

3. Устанавливаем вид публикации Режим отладки и указываем путь к файлу

В прикрепленных файлах расширений в общих макетах содержится подробная инструкция для настройки отладки.

 

Другие публикации:

— Доработка отчета "Связанные документы" (структура подчиненности) для вывода объектов из любого расширения

has been added to your cart:
Оформление заказа