Версия для печати темы (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