Подключаем внешнюю печатную форму в режиме отладчика

0. VID1234 60 23.03.20 16:07 Сейчас в теме
Всем привет. Долго мучался с подключением внешних печатных форм (далее ВПФ), а именно их отладкой, т.е. при подключении ВПФ, зачастую она не открывается сразу или не выводится на печать, восстанавливать без отладчика сложно и долго, а поставив точку останова, она попросту не подключается к отладчику, поэтому здесь я покажу, что сделал я.

Перейти к публикации

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. nomad_irk 48 23.03.20 16:14 Сейчас в теме
(0) Т.е. добавить форму в обработке с полем выбора нужного вида объекта и кнопкой, выполняющим формирование печатной формы, не получилось?
Sedaiko; Бэнни; +2 Ответить
2. VID1234 60 23.03.20 16:15 Сейчас в теме
3. VmvLer 23.03.20 16:37 Сейчас в теме
очередной костыль и по коду ясно, что только в толстом клиенте, почему только в толстом - мне лень его запускать, да и забыл когда использовал.

РежимОтладки и увеличенный пулл портов отладки, иногда F11 - решают задачу отладки на 100%.

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

просто бросаем этот код в расширяемый модуль(указано в комментах),
никаких полей и шамантва больше не нужно

и доп.отчет (обработку) можно отладить из файла, указав имя файла в поле
"комментарий" этой обработки. Первый вариант можно записать как болванку.


#Область Расш1_ОтладкаВнешнихОбъектовБСП_ОбщийМодуль_ДополнительныеОтчетыИОбработки

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

&Вместо("ПриПолученииРегистрационныхДанных")
Процедура Расш1ПриПолученииРегистрационныхДанных(Объект, РегистрационныеДанные, ПараметрыРегистрации, РезультатРегистрации)
	
	ПродолжитьВызов(Объект, РегистрационныеДанные, ПараметрыРегистрации, РезультатРегистрации);
	
	// Расширяем метод основной конфигурации если у внешнего объекта включен режим отладки и указано имя файла объекта отладки в поле "Комментарий".
	ОбъектОтладкиФайлПолноеИмя = Расш1ПолучитьПолноеИмяФайлаВнешнегоОбъектаОтладки(Объект.Ссылка);
	Если НЕ ПустаяСтрока(ОбъектОтладкиФайлПолноеИмя) Тогда
		
		ВнешнийОбъект = ПолучитьВнешнийОбъектОтладки(Объект.Ссылка, ОбъектОтладкиФайлПолноеИмя);  // Получаем внешний объект отладки по имени файла
		ВнешнийОбъектМетаданные = ВнешнийОбъект.Метаданные();
		
		СведенияОВнешнейОбработке = ВнешнийОбъект.СведенияОВнешнейОбработке();
		ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(РегистрационныеДанные, СведенияОВнешнейОбработке, Истина);
		
		// ≪✔▼ СКОПИРОВАННЫЙ БЛОК КОДА из окончания метода основной конфигурации ▼≫
		Если РегистрационныеДанные.Наименование = Неопределено ИЛИ РегистрационныеДанные.Информация = Неопределено Тогда
			Если РегистрационныеДанные.Наименование = Неопределено Тогда
				РегистрационныеДанные.Наименование = ВнешнийОбъектМетаданные.Представление();
			КонецЕсли;
			Если РегистрационныеДанные.Информация = Неопределено Тогда
				РегистрационныеДанные.Информация = ВнешнийОбъектМетаданные.Комментарий;
			КонецЕсли;
		КонецЕсли;
		
		Если ТипЗнч(РегистрационныеДанные.Вид) <> Тип("ПеречислениеСсылка.ВидыДополнительныхОтчетовИОбработок") Тогда
			РегистрационныеДанные.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок[РегистрационныеДанные.Вид];
		КонецЕсли;
		
		РегистрационныеДанные.Вставить("ХранилищеВариантов");
		Если РегистрационныеДанные.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет
			Или РегистрационныеДанные.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет Тогда
			Если ВнешнийОбъектМетаданные.ХранилищеВариантов <> Неопределено Тогда
				РегистрационныеДанные.ХранилищеВариантов = ВнешнийОбъектМетаданные.ХранилищеВариантов.Имя;
			КонецЕсли;
		КонецЕсли;
		
		РегистрационныеДанные.Команды.Колонки.Добавить("ВариантЗапуска");
		
		Для Каждого КомандаОписание Из РегистрационныеДанные.Команды Цикл
			КомандаОписание.ВариантЗапуска = Перечисления.СпособыВызоваДополнительныхОбработок[КомандаОписание.Использование];
		КонецЦикла;
		
		#Если ТолстыйКлиентОбычноеПриложение Тогда
			РезультатРегистрации.ИмяОбъекта = ВнешнийОбъектМетаданные.Имя;
		#КонецЕсли
		// ≪✔▲ СКОПИРОВАННЫЙ БЛОК КОДА из окончания метода основной конфигурации ▲≫
		
	КонецЕсли;
	
КонецПроцедуры

Функция Расш1ПолучитьПолноеИмяФайлаВнешнегоОбъектаОтладки(Ссылка)

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

	Возврат  ОбъектОтладкиФайлПолноеИмя;
	
КонецФункции 

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

#КонецОбласти
Показать



Насчет код попроще я погарячился, главное когда мне надо отладить внешний отчет/ обработку я просто пишу имя файла(доступное на сервере, например \\....) в комментарий элемента справочника внешних отчетов и в этом же элементе жму кнопку Отладка - всё.
По завершении отладки стираю путь, отжимаю кнопку и заливаю новую версию в элемент.

Этот код я тут кидал ранее и то, что автор пришел к той же методике не удивительно - другие пути более сложны.
Правда, мне лень разбираться почему почему у автора толстый клиент и много воды.
Dimasik2007; +1 Ответить
6. VID1234 60 23.03.20 17:15 Сейчас в теме
4. nomad_irk 48 23.03.20 17:00 Сейчас в теме
Просто оставлю это здесь.......
Прикрепленные файлы:
ВПФ_БолванкаСВозможностьюОтладки.epf
jobkostya1c8; Sedaiko; work.sable; adeich; Il; wowik; +6 Ответить
5. VID1234 60 23.03.20 17:15 Сейчас в теме
7. davdykin 24 23.03.20 17:25 Сейчас в теме
я дела практически такое же расширение, но я перехватил добавление файла печатной формы во внешние доработки, и сохранял его путь в коментарий, а потом создавал обработку из этого пути, таким образом не меняя расширение можно отлаживать любое количество печатных форм.
8. VID1234 60 23.03.20 17:29 Сейчас в теме
9. v_id 98 23.03.20 20:27 Сейчас в теме
10. VID1234 60 24.03.20 14:09 Сейчас в теме
(9) Спасибо. Я только встретил такую фишку, попробую.
11. leosoft 146 24.03.20 14:23 Сейчас в теме
12. v_id 98 24.03.20 15:20 Сейчас в теме
13. leosoft 146 24.03.20 15:42 Сейчас в теме
(12) Понятно, про эти инструменты я знаю, спасибо.
Оставьте свое сообщение
Вопросы с вознаграждением