|
Влияет ли режим отладки внешней ПФ на передачу параметров? | ☑ | ||
---|---|---|---|---|
0
НоваяВолна
11.03.25
✎
12:14
|
Есть самописная обработка ГрупповаяПечать, которая заполняется Заказами Клиента, по кнопке формирует Реализации и Счета-Фактуры, а по кнопке Печать выводит на принтер весь комплект документов на тех печатных формах, которые нужны контрагенту.
Мне надо добавить групповую печать "новому"контрагенту (Магнит в данном случае). Список печатных форм другой, как и макеты ПФ. Поэтому создал внешнюю ПФ Товарно-транспортной накладной, сначала привязав её к Реализации (для проверки, что работает, она РАБОТАЕТ), а потом отвязал от объекта. Проблема: Мне нужно отлаживать одновременно и внешнюю ПФ и обработку ГрупповойПечати. Поэтому во внешнюю ПФ ставлю код отладки: + Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт ВО = ВнешниеОбработки.Создать("D:\ГрупповаяПечатьДляМагнита\ПечатьТТН_Магнит.epf", Ложь); ВО.Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода); Возврат; ПараметрыПечати = Новый Структура; Макет = ЭтотОбъект.ПолучитьМакет("ПФ_MXL_ТТН"); Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ПечатьТТН_Магнит") Тогда УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ПечатьТТН_Магнит", "Товарно-транспортная накладная", СформироватьПечатнуюФормуТТН(МассивОбъектов, ОбъектыПечати, ПараметрыПечати), , Макет); КонецЕсли; ОбщегоНазначенияБП.ЗаполнитьДополнительныеПараметрыПечати(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода); КонецПроцедуры Начинаю отлаживать и ... не получаю ТабличныйДокумент именно для этой ПФ, для других внешних ПФ всё работает. |
|||
1
Ёпрст
11.03.25
✎
12:20
|
(0) кто где зачем? - хз
Но вот это - полный пэ: ""D:\ГрупповаяПечатьДляМагнита\П" |
|||
2
НоваяВолна
11.03.25
✎
12:30
|
(1) Хочешь сказать, что путь обрезать до D:\Test\ПечатьТТН_Магнит.epf и поможет? Сомневаюсь. Сама ПФ по этому пути норм отлаживается
|
|||
3
Gucci76
11.03.25
✎
12:38
|
В момент отладки этот код должен быть закомментирован
ВО = ВнешниеОбработки.Создать("D:\ГрупповаяПечатьДляМагнита\ПечатьТТН_Магнит.epf", Ложь); ВО.Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода); Возврат; |
|||
4
Ёпрст
11.03.25
✎
12:40
|
(2) ё...само использование абсолютных путей в коде - полный пэ.
|
|||
5
Gucci76
11.03.25
✎
12:44
|
(4) Так это для отладки. Оно временно.
|
|||
6
Мультук
гуру
11.03.25
✎
12:49
|
(0)
1) Это на сервере путь ? "D:\ГрупповаяПечатьДляМагнита\ПечатьТТН_Магнит.epf Сервер (юзер от которго работает сервис 1С), хоть видит его ? 2) Наверное, ВО.Печать(...) делает совсем не то же самое, что Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ПечатьТТН_Магнит") Тогда УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ПечатьТТН_Магнит", "Товарно-транспортная накладная", СформироватьПечатнуюФормуТТН(МассивОбъектов, ОбъектыПечати, ПараметрыПечати), , Макет); КонецЕсли; |
|||
7
mikecool
11.03.25
✎
12:50
|
а сервер этот путь видит?
|
|||
8
НоваяВолна
11.03.25
✎
12:59
|
(7) сервер видит
|
|||
9
DrZombi
гуру
11.03.25
✎
13:03
|
(0) У вас БСП?
То тогда все просто. И не очень. Код для БП 3.0.167... 1. Пишите расширение. В Справочник "ДополнительныеОтчетыИОбработки" дописываете реквизитики - "СОГ_ПолныйПутьДляОтладки" (Строка 1000) - "СОГ_ИспользоватьОтладку" (Булево) Выводите их на форму элемента, желательно из расширения выводить програмно, надолго хватит 2. В общий модуль "ДополнительныеОтчетыИОбработки" в расширении ПодключитьВнешнююОбработку(Ссылка)&Вместо("ПодключитьВнешнююОбработку") Функция СОГ_ПодключитьВнешнююОбработку(Ссылка) Экспорт //Периодически смотреть, что бы 1С чего не поменяли :) СтандартнаяОбработка = Истина; Результат = Неопределено; ИнтеграцияПодсистемБСП.ПриПодключенииВнешнейОбработки(Ссылка, СтандартнаяОбработка, Результат); Если Не СтандартнаяОбработка Тогда Возврат Результат; КонецЕсли; // Проверка корректности переданных параметров. Если ТипЗнч(Ссылка) <> Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки") Или Ссылка = Справочники.ДополнительныеОтчетыИОбработки.ПустаяСсылка() Тогда Возврат Неопределено; КонецЕсли; // Подключение #Если ТолстыйКлиентОбычноеПриложение Тогда ИмяОбработки = ПолучитьИмяВременногоФайла(); ХранилищеОбработки = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "ХранилищеОбработки"); ДвоичныеДанные = ХранилищеОбработки.Получить(); ДвоичныеДанные.Записать(ИмяОбработки); Возврат ИмяОбработки; #КонецЕсли Вид = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "Вид"); Если Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет Или Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет Тогда Менеджер = ВнешниеОтчеты; Иначе Менеджер = ВнешниеОбработки; КонецЕсли; //+ Попытка Если ТипЗнч(Ссылка) = Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки") Тогда ПараметрыЗапуска = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, "БезопасныйРежим, ХранилищеОбработки, СОГ_ПолныйПутьДляОтладки, СОГ_ИспользоватьОтладку"); Если ПараметрыЗапуска.СОГ_ИспользоватьОтладку = Истина и НЕ ПустаяСтрока(ПараметрыЗапуска.СОГ_ПолныйПутьДляОтладки) Тогда АдресВоВременномХранилище = СокрЛП(ПараметрыЗапуска.СОГ_ПолныйПутьДляОтладки); //Указывать сетевой путь, т.к. обработка запускается с Сервера... пФайл = Новый Файл(АдресВоВременномХранилище); Если НЕ (пФайл.Существует() и пФайл.ЭтоФайл()) Тогда //Нет файла, либо не доступен... АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ПараметрыЗапуска.ХранилищеОбработки.Получить()); КонецЕсли; Иначе АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ПараметрыЗапуска.ХранилищеОбработки.Получить()); КонецЕсли; Иначе //- ПараметрыЗапуска = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, "БезопасныйРежим, ХранилищеОбработки"); АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ПараметрыЗапуска.ХранилищеОбработки.Получить()); //+ КонецЕсли; Исключение //Добавлено в исключение, чтобы восстановить работоспособность... ПараметрыЗапуска = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, "БезопасныйРежим, ХранилищеОбработки"); АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ПараметрыЗапуска.ХранилищеОбработки.Получить()); КонецПопытки; //- Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда МодульРаботаВБезопасномРежиме = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежиме"); ИспользуютсяПрофилиБезопасности = МодульРаботаВБезопасномРежиме.ИспользуютсяПрофилиБезопасности(); Иначе ИспользуютсяПрофилиБезопасности = Ложь; КонецЕсли; ЕстьРазрешения = Ложь; Если ИспользуютсяПрофилиБезопасности Тогда МодульРаботаВБезопасномРежимеСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежимеСлужебный"); БезопасныйРежим = МодульРаботаВБезопасномРежимеСлужебный.РежимПодключенияВнешнегоМодуля(Ссылка); Если БезопасныйРежим = Неопределено Тогда БезопасныйРежим = Истина; КонецЕсли; Иначе БезопасныйРежим = ПолучитьФункциональнуюОпцию("СтандартныеПодсистемыВМоделиСервиса") Или ПараметрыЗапуска.БезопасныйРежим; Если БезопасныйРежим Тогда РежимСовместимости = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "РежимСовместимостиРазрешений"); ЗапросРазрешений = Новый Запрос( "ВЫБРАТЬ ПЕРВЫЕ 1 | ДополнительныеОтчетыИОбработкиРазрешения.НомерСтроки, | ДополнительныеОтчетыИОбработкиРазрешения.ВидРазрешения |ИЗ | Справочник.ДополнительныеОтчетыИОбработки.Разрешения КАК ДополнительныеОтчетыИОбработкиРазрешения |ГДЕ | ДополнительныеОтчетыИОбработкиРазрешения.Ссылка = &Ссылка"); ЗапросРазрешений.УстановитьПараметр("Ссылка", Ссылка); ЕстьРазрешения = Не ЗапросРазрешений.Выполнить().Пустой() И РежимСовместимости = Перечисления.РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок.Версия_2_2_2; Если ЕстьРазрешения Тогда БезопасныйРежим = Ложь; КонецЕсли; КонецЕсли; КонецЕсли; ЗаписатьПримечание(Ссылка, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Подключение, %1 = ""%2"".'"), "БезопасныйРежим", БезопасныйРежим)); //+ Если Не ПустаяСтрока(АдресВоВременномХранилище) и Не ЭтоАдресВременногоХранилища(АдресВоВременномХранилище) Тогда ИмяОбработки = Менеджер.Создать(АдресВоВременномХранилище,Ложь); ИмяОбработки = ИмяОбработки.Метаданные().Имя; Иначе //- ИмяОбработки = Менеджер.Подключить(АдресВоВременномХранилище, , БезопасныйРежим, ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений()); КонецЕсли; //- //+ // Стер часть кода, т.к. вызывала ошибку работы ... и переполнения памяти!!! Возврат ИмяОбработки; КонецФункции |
|||
10
Gucci76
11.03.25
✎
13:13
|
(9) В (0) намного проще (если отлаживать на сервере)
|
|||
11
DrZombi
гуру
11.03.25
✎
13:19
|
(10) У меня на долго и намного интересней, если засматриваться на скрытые возможности БСП :)
|
|||
12
Gucci76
11.03.25
✎
13:21
|
(0) Кеш может надо почистить. (раз другие ВПФ отлаживаются, а одна не хочет, то может зависло в кеше)
|
|||
13
Gucci76
11.03.25
✎
14:51
|
(11) Не спорю. Но в части простоты в (0) просто изумительно )))
|
|||
14
НоваяВолна
11.03.25
✎
17:38
|
(4)
ВО = ВнешниеОбработки.Создать("D:\ГрупповаяПечатьДляМагнита\ПечатьТТН_Магнит.epf", Ложь); ВО.Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода); Возврат; Этот код - отладочный! Во время выполнения внешней обработки формируется временный файл, поэтому поймать и отладить его невозможно. Тут идет создание внешней обработки по конкретному пути, дальше вызывается процедура Печать из файла в базе и командой Возврат; запускается код файла по указанному пути (открытого в конфигураторе). В таком виде обработку надо загрузить в базу, а перед выполнением (чтобы Цикл убрать) код в конфигураторе комментируется. Получается вот так: Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт // ВО = ВнешниеОбработки.Создать("D:\ГрупповаяПечатьДляМагнита\ПечатьТТН_Магнит.epf", Ложь); // ВО.Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода); // Возврат; ПараметрыПечати = Новый Структура; Макет = ЭтотОбъект.ПолучитьМакет("ПФ_MXL_ТТН"); Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ПечатьТТН_Магнит") Тогда УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ПечатьТТН_Магнит", "Товарно-транспортная накладная", СформироватьПечатнуюФормуТТН(МассивОбъектов, ОбъектыПечати, ПараметрыПечати), , Макет); КонецЕсли; ОбщегоНазначенияБП.ЗаполнитьДополнительныеПараметрыПечати(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода); КонецПроцедуры Ставится точка останова в любом месте и вперед... Прыгай по точкам |
|||
15
Gucci76
11.03.25
✎
17:26
|
(0) А что означает в названии темы "режим отладки" ?
Это параметр запуска 1С? Или просто факт отладки обработки? |
|||
16
НоваяВолна
11.03.25
✎
17:36
|
(15) факт отладки обработок (двух)
|
|||
17
Gucci76
11.03.25
✎
18:11
|
(16) Просто есть такой режим запуска. В ЗУП он отменяет выполнение в фоне (как в других не знаю)
Для отладки очень удобно
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |