Версия для печати темы (https://pro1c.org.ua/index.php?s=83d0608bf224cd0ea21186ffb4a8aeee&showtopic=67786)
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Отримання друкованої форми Видаткової в УВП (серверна)
Автор: Inkognito 12.03.25, 12:50
"Управление производственным предприятием для Украины", редакция 1.3 (1.3.86.1) - серверна
Отримання друкованої форми (ТабДок) видаткової:
ИмяМенеджераПечати = "Документ.РеализацияТоваровУслуг"; // имя менеджера документа
ИменаМакетов = "Накладная";
ПараметрКоманды = Новый Массив;
ПараметрКоманды.Добавить(знДок);
ПараметрыПечати= Неопределено;
КоллекцияПечатныхФорм= Неопределено;
ОбъектыПечати= Неопределено;
ПараметрыВывода= Неопределено;
Выполнить("УправлениеПечатью.СформироватьПечатныеФормы(ИмяМенеджераПечати, ИменаМакетов, ПараметрКоманды, Неопределено, КоллекцияПечатныхФорм, Неопределено, Неопределено);");
Если КоллекцияПечатныхФорм <> Неопределено Тогда // обрабатываем полученный набор табличных документов
Для каждого СтрокаКоллекции Из КоллекцияПечатныхФорм Цикл
Если СтрокаКоллекции.ТабличныйДокумент <> Неопределено Тогда
ТабДок= СтрокаКоллекции.ТабличныйДокумент;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Чудово працює в локальній базі. В серверній видає помилку:
Ошибка при вызове метода контекста (СформироватьПечатныеФормы): Попытка передачи с сервера клиенту мутабельного значения 5-го параметра метода СформироватьПечатныеФормы ().
Також невдалими є спроби:
Выполнить("УправлениеПечатью.СформироватьПечатныеФормы(ИмяМенеджераПечати, ИменаМакетов, ПараметрКоманды, , , , );");
Выполнить("УправлениеПечатью.СформироватьПечатныеФормы(ИмяМенеджераПечати, ИменаМакетов, ПараметрКоманды);");
Автор: Profi_1C77 12.03.25, 14:20
Inkognito @ Сегодня, 12:50
,
Она у вас запускается в тонком клиенте, Вам нужно выбрать базу :
Нажать Изменить - Делее - Основной режим запуска Толстый Клиент вместо Авто
Автор: Slon747 12.03.25, 14:28
На сервер не можна передавати об'ект.
У вас в ПараметрКоманды масив. А в масиві знДок.
Якого типу знДок?
Автор: Inkognito 12.03.25, 16:08
Цитата(Profi_1C77 @ 12.03.25, 14:20)
Она у вас запускается в тонком клиенте, Вам нужно выбрать базу :
Нажать Изменить - Делее - Основной режим запуска Толстый Клиент вместо Авто
Потрібне рішення без зміни властивостей конфігурації
Цитата(Slon747 @ 12.03.25, 14:28)
в ПараметрКоманды масив. А в масиві знДок.
Якого типу знДок?
ДокументСсылка
Автор: Profi_1C77 12.03.25, 16:38
Цитата(Inkognito @ 12.03.25, 16:08)
Потрібне рішення без зміни властивостей конфігурації

УПП она в обычных формах, т.е толстый клиент, т.е "сервер"
Автор: Inkognito 12.03.25, 16:47
Цитата(Profi_1C77 @ 12.03.25, 16:38)
УПП она в обычных формах, т.е толстый клиент, т.е "сервер"
Змінив "Автоматично" на "Тоствий клієнт", не допомогло.
Потрібно саме на рівні коду внести зміни, щоб користувачам зовсім не потрібно нічого було змінювати.
Автор: xlmel 12.03.25, 18:16
УправлениеПечатью.СформироватьПечатныеФормы - это, насколько я помню, из БСП и модуль серверный.
Код такого вызова обычно находится в процедуре с контекстом &НаКлиенте в УФ. Если это действительно УФ, то можно попробовать перенести вызов с клиента на сервер, и вернуть ТабДок на клиент.
Если это не УФ, то сделать в модуле объекта обработки функцию с вызовом (это гарантированно контекст сервера) и вернуть готовый ТабДок
P.S. А зачем Вы добавляете Выполнить в стоку вызова функции?
Автор: Slon747 12.03.25, 19:11
Цитата(xlmel @ 12.03.25, 18:16)
Код такого вызова обычно находится в процедуре с контекстом &НаКлиенте в УФ. Если это действительно УФ
УПП вся на обычных формах.
Думаю, где клиент, а где сервер, зависит от галочек общих модулей.
Автор: xlmel 12.03.25, 20:02
Цитата(Slon747 @ 12.03.25, 19:11)
УПП вся на обычных формах.
Думаю, где клиент, а где сервер, зависит от галочек общих модулей.
В УТ я включал возможность управляемых форм в обычном приложении просто установив в конфигураторе в свойствах конфигурации галочку Использовать управляемые формы в обычном приложении. Думаю, что в УПП она тоже доступна.
Приведенный топикстартером код находится, скорее всего, в форме во внешней обработке. Поэтому, я думаю, что простое создание экспортной функции в модуле объекта обработки, перенос туда всего этого вызова и возврат в исходную процедуру табличного документа может решить проблему.
Автор: Inkognito 12.03.25, 20:58
Цитата(xlmel @ 12.03.25, 20:02)
установив в конфигураторе в свойствах конфигурации галочку Использовать управляемые формы в обычном приложении
Нажаль, не допомогло.
Цитата(xlmel @ 12.03.25, 20:02)
Приведенный топикстартером код находится, скорее всего, в форме во внешней обработке.
Так, зовнішня обробка.
Цитата(xlmel @ 12.03.25, 20:02)
создание экспортной функции в модуле объекта обработки, перенос туда всего этого вызова и возврат в исходную процедуру табличного документа может решить проблему.
Нажаль, не допомогло.
Автор: xlmel 13.03.25, 13:16
Если можно, то дайте полный текст функции из модуля объекта и текст процедуры вызова. Так очень трудно что-то советовать
Автор: Profi_1C77 13.03.25, 18:54
Цитата(Inkognito @ 12.03.25, 12:50)
Чудово працює в локальній базі. В серверній видає помилку:
Это как то странно, учитывая что в даже в Толстом клиенте запускали.
Вероятно придется переносить "много" в общий модуль с обработки
да и команда Выполнить..... XLMEL верно написал - дайте код для понимания
Автор: Inkognito 14.03.25, 9:22
КодПроцедура СохрДокумент()
ТабДок = Получить_ПФ_Реализации(Документ);
ФайлВыгрузки = КаталогДокументов() + "Видаткова " + Документ.Номер + " від " + Формат( Документ.Дата, "ДФ=dd-MM-yyyy");
ТабДок.Записать(ФайлВыгрузки, ТипФайлаТабличногоДокумента.PDF);
КонецПроцедуры
Функция Получить_ПФ_Реализации(знДок)
Если ИмяБазы = "УПП" или ИмяБазы = "УСО" или ИмяБазы = "УСХ" тогда
ИмяМенеджераПечати = "Документ.РеализацияТоваровУслуг"; // имя менеджера документа
ИменаМакетов = "Накладная"; // список макетов для печати (можно один, можно списком)
ПараметрКоманды = Новый Массив;
ПараметрКоманды.Добавить(знДок);
ПараметрыПечати= Неопределено;
КоллекцияПечатныхФорм= Неопределено;
ОбъектыПечати= Неопределено;
ПараметрыВывода= Неопределено;
Выполнить("УправлениеПечатью.СформироватьПечатныеФормы(ИмяМенеджераПечати, ИменаМакетов, ПараметрКоманды, Неопределено, КоллекцияПечатныхФорм, Неопределено, Неопределено);");
Если КоллекцияПечатныхФорм <> Неопределено Тогда // обрабатываем полученный набор табличных документов
Для каждого СтрокаКоллекции Из КоллекцияПечатныхФорм Цикл
Если СтрокаКоллекции.ТабличныйДокумент <> Неопределено Тогда
ТабДок= СтрокаКоллекции.ТабличныйДокумент;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Иначе
ТабДок= Документ.ПолучитьОбъект().ПечатьДокумента();
КонецЕсли;
Возврат ТабДок;
КонецФункции
Проблема саме УПП (та схожих) конфігураціях. Розробники винесли функцію в модуль менеджера (замість модуля обекта).
Выполннить() зроблено для того, щоб обробка нормально відкрилась в не УППшних конфігураціях, оскільки в них цей модуль відсутній
Автор: xlmel 14.03.25, 10:43
За наведеним кодом важко визначити контекст для процедури та функції. Судячи з того, що немає функції слова Експорт, підозрюю, що вони знаходяться в одному контексті.
Хіба Виконати не викликає помилку за відсутності даного модуля? Чи може краще використовувати Попытка ... Исключение ... КонецПопытки?
P.S. Скажіть, наскільки добре 1С формує PDF-файли з табличного документа зараз. Свого часу, коли писав формування друкованих форм для Вчасно, відмовився від цього варіанту, зважаючи на те, що якість була моторошною
Автор: Inkognito 14.03.25, 10:59
1) Всі функції в модулі зовнішньої обробки.
2) Обробка не відкриється на БУ, УТП, оскільки немає УправлениеПечатью.СформироватьПечатныеФормы() Якщо треба уніфікований код, для всіх конфігурацій, то треба взяти в Выполнить("")
3) Так, саме для Вчасно і робиться цей код. І саме на серверній 1С:УПП отримати друковану форму не виходить. А в клієнта саме такий випадок. Все ОК, друкована форма всюди коректна.
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua