0. VID1234 39 23.03.20 16:07 Сейчас в теме

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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



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

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

Вакансии

Product Owner (Менеджер по продукту 1С)
Москва
зарплата от 100 000 руб. до 170 000 руб.
Полный день

Тим лид по разработке 1С (Team Lead 1С)
Москва
зарплата от 100 000 руб. до 200 000 руб.
Полный день

Программист, аналитик, эксперт 1С
Санкт-Петербург
По совместительству

Программист 1С
Новосибирск
зарплата от 30 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 100 000 руб. до 150 000 руб.
Полный день