Еще раз про отладку внешних печатных форм в Управляемом приложении

21.11.16

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

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

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

Итак в модуле внешней обработки мы имеем процедуру:

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
          УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
        КоллекцияПечатныхФорм,
        "СчетНаОплату", "Счет на оплату",
        ПечатьСчетДоговор(МассивОбъектов));
  КонецПроцедуры

Процедура стандартная, она вызывает функцию формирования табличного документа  ПечатьСчетДоговор(МассивОбъектов), эту самую функцию нам и нужно вызвать из добавленой формы и показать результат.

добавляем в отчет реквизит СсылкаНаОбъект того типа что нам нужен здесь, один в один как в толстом клиенте. Создаем форму - реквизит на ней добавится автоматом. Добавляем на форме кнопку - Печать, привязываем к ней команду Печать и создаем автоматом процедуру на сервере и на клиенте.

&НаСервере
Функция Команда1НаСервере()
    массив1= Новый Массив();
    Массив1.Добавить(Объект.СсылкаНаОбъект);
    ОбработкаОбъект= РеквизитФормыВЗначение("Объект");
    Возврат ОбработкаОбъект.ПечатьСчетДоговор(массив1);

    // Вставить содержимое обработчика.
КонецФункции

&НаКлиенте
Процедура Команда1(Команда)
    Команда1НаСервере().Показать();
КонецПроцедуры

Здесь немного уже доработано руками. Во первых процедуру на сервере заменяем на функцию. На клиенте сответственно дописываем метод Показать(). Мы же хотим увидеть сформированный табличный документ? В функции Команда1НаСервере() мы вытягиваем табличный документ - напрямую обращаемся к функции модуля ПечатьСчетДоговора(...) - и передаем этот табличный документ на клиента, понятно что сервер нам его не покажет. РеквизитФормыВЗначение(..) нужен чтоб перегнать объект в состояние - когда его процедуры(модуля) может увидеть клиент, как пишет 1с получаем объект прикладного типа, иначе ничего не получится. 

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

Функция ПечатьСчетДоговор(МассивОбъектов) Экспорт

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

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

Вступайте в нашу телеграмм-группу Инфостарт

Отладка печать управляемое приложение

См. также

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

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

14.05.2025    5492    DeerCven    15    

57

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

21.05.2024    46579    dimanich70    83    

165

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

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

1 стартмани

18.03.2024    6887    6    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

12.02.2024    57746    atdonya    31    

68

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

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

30.11.2023    8659    ke.92@mail.ru    17    

68

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

28.08.2023    22861    YA_418728146    8    

174
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. NeviD 21.11.16 11:53 Сейчас в теме
Можно эмулировать БСП-шный вызов процедуры Печать.
Тогда печатная форма будет выводиться в стандартную форму для печатных форм, со всеми её плюсами.

&НаСервере
Функция СформироватьНаСервере(ОбъектыПечати)

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

&НаКлиенте
Процедура Сформировать(Команда)
	
	Если Не ЗначениеЗаполнено(Объект.СсылкаНаОбъект) Тогда
		Возврат;
	КонецЕсли;
	
	ОбъектыПечати = Новый СписокЗначений;
	ОбъектыПечати.Добавить(Объект.СсылкаНаОбъект);
	
	МассивПечатныхФорм = СформироватьНаСервере(ОбъектыПечати);
	
	УправлениеПечатьюКлиент.ПечатьДокументов(МассивПечатныхФорм, ОбъектыПечати, ЭтаФорма);	

КонецПроцедуры
Показать
indefinitumX; mangy; Yan_Malyakov; hottik; Swamt; houpl; user1671693; LeXXeR; TimkoNzt; BarsukM; alex_makhnov; evvakra; Wolex; Maito; Jenya78; Chronic; KindLion; messulete; СергейК; +19 Ответить
2. artfa 58 23.11.16 12:03 Сейчас в теме
в форме
&НаСервере
Функция ПечатьНаСервере()
    МассивОбъектов = Новый Массив;
    МассивОбъектов.Добавить(Объект.СсылкаНаОбъект);
    ОбработкаОбъект = РеквизитФормыВЗначение("Объект");

	СтруктураТипов = ОбщегоНазначенияУТ.СоответствиеМассивовПоТипамОбъектов(МассивОбъектов);

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

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

&НаКлиенте
Процедура Печать(Команда)
	ПечатьНаСервере();
КонецПроцедуры
Показать

в модуле
Функция СформироватьПечатнуюФормуСчетНаОплату(СтруктураТипов, ОбъектыПечати, ПараметрыПечати, КомплектыПечати = Неопределено) Экспорт
3. BigClock 23.11.16 15:39 Сейчас в теме
(2) artfa,
Ваше решение требует скопировать текст функции "СоответствиеМассивовПоТипамОбъектов" из УТ
В других конфигурациях на основе БСП функции с таким именем нет, или, возможно, она называется по-другому.

(1) NeviD,
спасибо.
4. rasswet 82 11.01.17 08:22 Сейчас в теме
интересная идея спасибо.
5. edip 18.01.17 23:13 Сейчас в теме
Используя идею отсюда, можно сделать так:

в процедуре ДополнительныеОтчетыИОбработки.ПечатьПоВнешнемуИсточнику находим строки
	ВнешняяОбработкаОбъект = ПолучитьОбъектВнешнейОбработки(Ссылка);
	
	Если ВнешняяОбработкаОбъект = Неопределено Тогда
		ВызватьИсключение СтрШаблон(

ставим точку останова по условию на строку
Если ВнешняяОбработкаОбъект = Неопределено Тогда

в условии пишем код
ВнешниеОбработки.Создать("C:\Отладка\ОбработкаПечатнаяФорма.epf", Ложь).Отладка(ВнешняяОбработкаОбъект)

в модуль обработки добавляем функцию Отладка
Функция Отладка(ОбработкаОбъект) Экспорт
	
	ОбработкаОбъект = ЭтотОбъект;
	Возврат Ложь;
	
КонецФункции

В результате при проверке условия переменной ВнешняяОбработкаОбъект присваивается объект нашей внешней обработки из файла C:\Отладка\ОбработкаПечатнаяФорма.epf и можно спокойно ее отлаживать.
evvakra; pavlov_a; Vida; messulete; clev; Rain88; +6 Ответить
6. A_kryl 162 19.01.17 08:44 Сейчас в теме
(5)
ДополнительныеОтчетыИОбработки
Это же правка конфигурации? Как еще один вариант...
7. edip 19.01.17 13:37 Сейчас в теме
(6) Никакой правки конфигурации. В нужном месте точка останова с условием и одна дополнительная функция в модуле отлаживаемой внешней обработки.
8. Vida 18 09.02.19 20:57 Сейчас в теме
(5) Не останавливается по точке останова с условием. Поставила выше без условия, тоже не останавливается. Странно. Не доходит до туда?
10. user618694_dlypisem 06.05.20 11:19 Сейчас в теме
(8) У меня такая ситуация возникала, когда файлы внешней обработки на диске и элемента справочника "Внешние отчеты о обработки" были одинаковые. Попробуйте изменить обработку на диске, но не обновляйте ее в справочнике.
9. A_kryl 162 11.02.19 09:07 Сейчас в теме
Стандартная отладка. У меня было - что как внешняя обработка работает, а присоединенная вываливается с ошибкой. Оказалось что накосячил в описании обработки. Больше проблем не было.
11. Cosmit 15.03.21 18:30 Сейчас в теме
у меня на форме вот так получилось

&НаКлиенте
Процедура ПечатьОбъекта(Команда)
    ПечатьСчетаНаСервере();
КонецПроцедуры

&НаСервере
Функция ПечатьСчетаНаСервере()
    
    ОбъектОбработка = РеквизитФормыВЗначение("Объект");
    
    Метадан = ОбъектОбработка.ПолучитьМетаданные();
    
    МассивОбъектов        = Новый Массив;
    МассивОбъектов.Добавить(Объект.СсылкаНаОбъект);
    ОбъектыПечати         = Новый СписокЗначений;
    ПараметрыВывода       = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода();    
    КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм(СокрЛП(Метадан.Имя));    
    
    ОбъектОбработка.Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
    
    ЭтаФорма.ТабДокумент.Очистить();
    ЭтаФорма.ТабДокумент.Вывести(КоллекцияПечатныхФорм[0].ТабличныйДокумент);
    
КонецФункции
Показать
user1549132; +1 Ответить
12. user1549132 2 05.03.22 16:11 Сейчас в теме
13. пользователь 03.10.24 11:23
Сообщение было скрыто модератором.
...
Для отправки сообщения требуется регистрация/авторизация