Имя: Пароль:
1C
 
Вывод печатной формы с внешней обработки
0 A1nurich
 
04.10.23
15:25
Пытаюсь вывести макет на печать, но почему-то процедура печать не запускается и поэтому выводится просто пустая страница. Вот код:

СведенияОВнешнейОбработке()
Функция СведенияОВнешнейОбработке() Экспорт

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

Возврат ПараметрыРегистрации;

КонецФункции


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


ДобавитьКоманду(...)
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = Представление;
НоваяКоманда.Идентификатор = Идентификатор;
НоваяКоманда.Использование = Использование;
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры


Печать()
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

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

КонецПроцедуры // Печать


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

ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ДоговорПоПоставкам";

МакетОбработки = ПолучитьМакет("Макет_ДоговорПоставки");

ОбластьШапки = МакетОбработки.ПолучитьОбласть("Шапка");
Сообщить("123");
ОбластьШапки.Вставить("Пункт0_2","-");
ОбластьШапки.Параметры.Пункт0_2 = "-";
ТабличныйДокумент.Вывести(ОбластьШапки);

ТабличныйДокумент.АвтоМасштаб = Истина;

Возврат ТабличныйДокумент;

КонецФункции
1 Волшебник
 
04.10.23
15:23
Сделайте код поменьше и добейтесь, что он просто вызывается, а потом уже добавляйте плюшки типа
ОбластьШапки.Вставить("Пункт0_2","-");
2 A1nurich
 
04.10.23
15:24
(1) Да я вот целый день пытаюсь добиться этого, поэтому уже решился написать в форум :(
3 yzimin
 
04.10.23
15:33
Именно процедура печать() не исполняется или всё-таки функция СформироватьПечатнуюФорму?
4 yzimin
 
04.10.23
15:35
ДобавитьКоманду(ТаблицаКоманд, "Договор-Поставки (Внешняя)", "ДоговорПоПоставкам", "ОткрытиеФормы", Истина, "ПечатьMXL");

замени ОткрытиеФормы на ВызовСерверногоМетода
5 A1nurich
 
04.10.23
15:45
(3) я пробовал вставлять в них "Сообщить("123");
Чтобы проверить вызывается ли она или нет
6 A1nurich
 
04.10.23
15:46
(4) Попробовал, ничего не поменялось
7 Гена
 
04.10.23
15:50
(6) а какая конфигурация и релиз?
8 A1nurich
 
04.10.23
15:55
(7) 1С:Предприятие 8.3
УТ 11
9 Гена
 
04.10.23
16:02
Я просто наткнулся в последних релизах на какие-то изменения в коде именно для внешних отчётов/обработок. Не для моего ума было разобраться, но, например, также перестала работать команда Печать пока не поменяли
КомандаПечати.Использование =
ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
на
ТипКомандыВызовСерверногоМетода()

Вот почему я бы рекомендовал прислушаться к замечанию в (4)
10 A1nurich
 
04.10.23
16:05
(9) Но другие внешние обработки работают же, там также стоит ОткрытиеФормы
11 Garykom
 
04.10.23
16:11
>СформироватьПечатнуюФорму(МассивОбъектов[0], ОбъектыПечати));

"МассивОбъектов[0]" - мдя...
12 yzimin
 
04.10.23
16:20
(6) с "ОткрытиеФормы" - 100% гарантированное не будет работать.
Делай ещё раз "ВызовСерверногоМетода" и ставь точку остановки в Печать()
13 A1nurich
 
04.10.23
16:22
(12) а разве во внешней обработке она работает ? Ю_Ю
14 СвинТуз
 
04.10.23
16:27
Тут надо либо трусы надеть, либо крестик снять ...
Могу ошибаться.
15 A1nurich
 
04.10.23
16:27
Нефига, реально сработало. Поставил "МодульДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();" И "ВызовСерверногоМетода". Спасибо большое !!!
16 СвинТуз
 
04.10.23
16:28
1. ДобавитьКоманду(ТаблицаКоманд, "Договор-Поставки (Внешняя)", "ДоговорПоПоставкам", "ОткрытиеФормы", Истина, "ПечатьMXL");

"ОткрытиеФормы"

2. Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт


Форму то создал?
17 Гена
 
04.10.23
16:30
(12) А не разбирались, что там такое поменялось в кишочках, что теперь надо вместо открытия формы ставить вызов СМ?
18 yzimin
 
04.10.23
16:30
(13) У тебя в конечном итоге исполняется ВнешнийОбъект.Печать, где ВнешнийОбъект это подключенная твоя внешняя обработка

Процедура Печать() находится в модуле объекта обработки, поэтому и нужен вызов серверного метода.
19 A1nurich
 
04.10.23
16:32
(18) не, я про точку остановки говорил
20 yzimin
 
04.10.23
16:36
(17) Лично я ещё с УТ 11.1 всегда писал "ВызовСерверногоМетода". Зачем вообще в команде указывать расположение процедуры Печать() в "ОткрытиеФормы", если по факту она находится у вас в модуле обработки?
21 AlexeyKh
 
04.10.23
16:42
для отладки обработок ВПФ, в ней создают свою форму
с реквизитом ДокументСсылка - ноужного типа и кнопкой Печать
которая как раз и вызывает процедуру модуля
Объект.Печать(...);
в таком виде отлично отлаживается.
22 yzimin
 
04.10.23
16:42
(19) точку остановки можно поставить в общем модуле ДополнительныеОтчетыИОбработки, там уже смотреть
23 A1nurich
 
04.10.23
16:44
(22) Хорошо, спасибо
24 Гена
 
04.10.23
17:16
(20) ну УТ у меня нет, я заметил изменения в БП 142
Ладно.