Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Отримання друкованої форми Видаткової в УВП (серверна)
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
Inkognito
"Управление производственным предприятием для Украины", редакция 1.3 (1.3.86.1) - серверна
Отримання друкованої форми (ТабДок) видаткової:

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

            
            Если КоллекцияПечатныхФорм <> Неопределено Тогда // обрабатываем полученный набор табличных документов
                Для каждого СтрокаКоллекции Из КоллекцияПечатныхФорм Цикл
                    Если СтрокаКоллекции.ТабличныйДокумент <> Неопределено Тогда
                        ТабДок= СтрокаКоллекции.ТабличныйДокумент;
                    КонецЕсли;
                КонецЦикла;
            КонецЕсли;


Чудово працює в локальній базі. В серверній видає помилку:
Ошибка при вызове метода контекста (СформироватьПечатныеФормы): Попытка передачи с сервера клиенту мутабельного значения 5-го параметра метода СформироватьПечатныеФормы ().


Також невдалими є спроби:
Выполнить("УправлениеПечатью.СформироватьПечатныеФормы(ИмяМенеджераПечати, ИменаМакетов, ПараметрКоманды, , , , );");  
Выполнить("УправлениеПечатью.СформироватьПечатныеФормы(ИмяМенеджераПечати, ИменаМакетов, ПараметрКоманды);");


Profi_1C77
Inkognito @ Сегодня, 12:50 необходимо зарегистрироваться для просмотра ссылки ,
Она у вас запускается в тонком клиенте, Вам нужно выбрать базу :
Нажать Изменить - Делее - Основной режим запуска Толстый Клиент вместо Авто
Slon747
На сервер не можна передавати об'ект.
У вас в ПараметрКоманды масив. А в масиві знДок.
Якого типу знДок?
Inkognito
Цитата(Profi_1C77 @ 12.03.25, 14:20) необходимо зарегистрироваться для просмотра ссылки
Она у вас запускается в тонком клиенте, Вам нужно выбрать базу :
Нажать Изменить - Делее - Основной режим запуска Толстый Клиент вместо Авто

Потрібне рішення без зміни властивостей конфігурації

Цитата(Slon747 @ 12.03.25, 14:28) необходимо зарегистрироваться для просмотра ссылки
в ПараметрКоманды масив. А в масиві знДок.
Якого типу знДок?

ДокументСсылка
Profi_1C77
Цитата(Inkognito @ 12.03.25, 16:08) необходимо зарегистрироваться для просмотра ссылки
Потрібне рішення без зміни властивостей конфігурації


УПП она в обычных формах, т.е толстый клиент, т.е "сервер"
Inkognito
Цитата(Profi_1C77 @ 12.03.25, 16:38) необходимо зарегистрироваться для просмотра ссылки
УПП она в обычных формах, т.е толстый клиент, т.е "сервер"

Змінив "Автоматично" на "Тоствий клієнт", не допомогло.
Потрібно саме на рівні коду внести зміни, щоб користувачам зовсім не потрібно нічого було змінювати.
xlmel
УправлениеПечатью.СформироватьПечатныеФормы - это, насколько я помню, из БСП и модуль серверный.
Код такого вызова обычно находится в процедуре с контекстом &НаКлиенте в УФ. Если это действительно УФ, то можно попробовать перенести вызов с клиента на сервер, и вернуть ТабДок на клиент.
Если это не УФ, то сделать в модуле объекта обработки функцию с вызовом (это гарантированно контекст сервера) и вернуть готовый ТабДок

P.S. А зачем Вы добавляете Выполнить в стоку вызова функции?
Slon747
Цитата(xlmel @ 12.03.25, 18:16) необходимо зарегистрироваться для просмотра ссылки
Код такого вызова обычно находится в процедуре с контекстом &НаКлиенте в УФ. Если это действительно УФ

УПП вся на обычных формах.
Думаю, где клиент, а где сервер, зависит от галочек общих модулей.
xlmel
Цитата(Slon747 @ 12.03.25, 19:11) необходимо зарегистрироваться для просмотра ссылки
УПП вся на обычных формах.
Думаю, где клиент, а где сервер, зависит от галочек общих модулей.

В УТ я включал возможность управляемых форм в обычном приложении просто установив в конфигураторе в свойствах конфигурации галочку Использовать управляемые формы в обычном приложении. Думаю, что в УПП она тоже доступна.
Приведенный топикстартером код находится, скорее всего, в форме во внешней обработке. Поэтому, я думаю, что простое создание экспортной функции в модуле объекта обработки, перенос туда всего этого вызова и возврат в исходную процедуру табличного документа может решить проблему.
Inkognito
Цитата(xlmel @ 12.03.25, 20:02) необходимо зарегистрироваться для просмотра ссылки
установив в конфигураторе в свойствах конфигурации галочку Использовать управляемые формы в обычном приложении

Нажаль, не допомогло.
Цитата(xlmel @ 12.03.25, 20:02) необходимо зарегистрироваться для просмотра ссылки
Приведенный топикстартером код находится, скорее всего, в форме во внешней обработке.

Так, зовнішня обробка.
Цитата(xlmel @ 12.03.25, 20:02) необходимо зарегистрироваться для просмотра ссылки
создание экспортной функции в модуле объекта обработки, перенос туда всего этого вызова и возврат в исходную процедуру табличного документа может решить проблему.

Нажаль, не допомогло.
xlmel
Если можно, то дайте полный текст функции из модуля объекта и текст процедуры вызова. Так очень трудно что-то советовать
Profi_1C77
Цитата(Inkognito @ 12.03.25, 12:50) необходимо зарегистрироваться для просмотра ссылки
Чудово працює в локальній базі. В серверній видає помилку:

Это как то странно, учитывая что в даже в Толстом клиенте запускали.
Вероятно придется переносить "много" в общий модуль с обработки
да и команда Выполнить..... XLMEL верно написал - дайте код для понимания
Inkognito
необходимо зарегистрироваться для просмотра ссылки
Процедура СохрДокумент()
    
    ТабДок = Получить_ПФ_Реализации(Документ);

    ФайлВыгрузки = КаталогДокументов() + "Видаткова " + Документ.Номер + " від " +  Формат( Документ.Дата, "ДФ=dd-MM-yyyy");    
    ТабДок.Записать(ФайлВыгрузки, ТипФайлаТабличногоДокумента.PDF);    
        
КонецПроцедуры

Функция Получить_ПФ_Реализации(знДок)
    
    Если ИмяБазы = "УПП" или ИмяБазы = "УСО" или ИмяБазы = "УСХ" тогда
        ИмяМенеджераПечати = "Документ.РеализацияТоваровУслуг"; // имя менеджера документа
        ИменаМакетов       = "Накладная"; // список макетов для печати (можно один, можно списком)
        ПараметрКоманды = Новый Массив;
        ПараметрКоманды.Добавить(знДок);  
        
        ПараметрыПечати= Неопределено;
        КоллекцияПечатныхФорм= Неопределено;
        ОбъектыПечати= Неопределено;  
        ПараметрыВывода= Неопределено;
        Выполнить("УправлениеПечатью.СформироватьПечатныеФормы(ИмяМенеджераПечати, ИменаМакетов, ПараметрКоманды, Неопределено, КоллекцияПечатныхФорм, Неопределено, Неопределено);");  
        Если КоллекцияПечатныхФорм <> Неопределено Тогда // обрабатываем полученный набор табличных документов
            Для каждого СтрокаКоллекции Из КоллекцияПечатныхФорм Цикл
                Если СтрокаКоллекции.ТабличныйДокумент <> Неопределено Тогда
                    ТабДок= СтрокаКоллекции.ТабличныйДокумент;
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;
    Иначе
        ТабДок= Документ.ПолучитьОбъект().ПечатьДокумента();
    КонецЕсли;  

Возврат ТабДок;
    
КонецФункции


Проблема саме УПП (та схожих) конфігураціях. Розробники винесли функцію в модуль менеджера (замість модуля обекта).
Выполннить() зроблено для того, щоб обробка нормально відкрилась в не УППшних конфігураціях, оскільки в них цей модуль відсутній
xlmel
За наведеним кодом важко визначити контекст для процедури та функції. Судячи з того, що немає функції слова Експорт, підозрюю, що вони знаходяться в одному контексті.
Хіба Виконати не викликає помилку за відсутності даного модуля? Чи може краще використовувати Попытка ... Исключение ... КонецПопытки?

P.S. Скажіть, наскільки добре 1С формує PDF-файли з табличного документа зараз. Свого часу, коли писав формування друкованих форм для Вчасно, відмовився від цього варіанту, зважаючи на те, що якість була моторошною
Inkognito
1) Всі функції в модулі зовнішньої обробки.
2) Обробка не відкриється на БУ, УТП, оскільки немає УправлениеПечатью.СформироватьПечатныеФормы() Якщо треба уніфікований код, для всіх конфігурацій, то треба взяти в Выполнить("")
3) Так, саме для Вчасно і робиться цей код. І саме на серверній 1С:УПП отримати друковану форму не виходить. А в клієнта саме такий випадок. Все ОК, друкована форма всюди коректна.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.