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

21.11.16

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

См. также

GUID в 1С 8.3 - как с ними быть

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

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

12.02.2024    4353    atdonya    22    

41

Переоткрытие внешних обработок

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

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

30.11.2023    3891    ke.92@mail.ru    16    

60

Валидация JSON через XDTO (включая массивы)

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

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

28.08.2023    8570    YA_418728146    6    

139

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

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

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

2 стартмани

22.08.2023    2025    21    progmaster    7    

3

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Инструментарий разработчика Универсальные функции Платформа 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    16022    131    sapervodichka    112    

129

Система контроля ведения учета [БСП]

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

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    7203    quazare    8    

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

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

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

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

КонецПроцедуры
Показать
indefinitum000; 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 160 19.01.17 08:44 Сейчас в теме
(5)
ДополнительныеОтчетыИОбработки
Это же правка конфигурации? Как еще один вариант...
7. edip 19.01.17 13:37 Сейчас в теме
(6) Никакой правки конфигурации. В нужном месте точка останова с условием и одна дополнительная функция в модуле отлаживаемой внешней обработки.
8. Vida 15 09.02.19 20:57 Сейчас в теме
(5) Не останавливается по точке останова с условием. Поставила выше без условия, тоже не останавливается. Странно. Не доходит до туда?
10. user618694_dlypisem 06.05.20 11:19 Сейчас в теме
(8) У меня такая ситуация возникала, когда файлы внешней обработки на диске и элемента справочника "Внешние отчеты о обработки" были одинаковые. Попробуйте изменить обработку на диске, но не обновляйте ее в справочнике.
9. A_kryl 160 11.02.19 09:07 Сейчас в теме
Стандартная отладка. У меня было - что как внешняя обработка работает, а присоединенная вываливается с ошибкой. Оказалось что накосячил в описании обработки. Больше проблем не было.
11. Cosmit 15.03.21 18:30 Сейчас в теме
у меня на форме вот так получилось

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

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