Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 11:45

Внешняя печатная форма не отображается в пользовательском режиме

Автор Амал, 03 июн 2017, 08:47

0 Пользователей и 1 гость просматривают эту тему.

Амал

Добрый день.
Я только учусь. Создал ВПФ для документа "КадровыйПеревод" и загрузил её в БП 3.0 (учебная). Она успешно загрузилась, но её нет в разделе "макеты печатных форм", а также в разделе "сотрудники", когда выбираю "печать". Я так понимаю, что она не привязалась ни к одному объекту. В чём причина? Подскажите пожалуйста.

Вот код:

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

//Функция СведенияОВнешнейОбработке() ссылается еще на одну процедуру и функцию:

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

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

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

Функция СформироватьПечатнуюФорму(СсылкаНаДокумент, ОбъектыПечати)
   
   ТабличныйДокумент = Новый ТабличныйДокумент;
   МакетОбработки = ПолучитьМакет("МакетКадровыйПеревод");
   
   //заполняем шапку
   ОбластьШапка = МакетОбработки.ПолучитьОбласть("Шапка");
   ОбластьШапка.Параметры.ДатаСоставления = Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy; ДЛФ=DD");
   ОбластьШапка.Параметры.НомерДокумента = СсылкаНаДокумент.Номер;
   ОбластьШапка.Параметры.ДатаДокумента = СсылкаНаДокумент.Дата;
   //выводим шапку в табличный документ
   ТабличныйДокумент.Вывести(ОбластьШапка);
   
   //заполняем Область "Сотрудник"
   
   ОбластьСотрудник = МакетОбработки.ПолучитьОбласть("Сотрудник") ;
   
   ОбластьСотрудник.Параметры.ФИОСотрудника = СсылкаНаДокумент.КадровыйПеревод.Сотрудник;
   ОбластьСотрудник.Параметры.ПричинаПеревода = СсылкаНаДокумент.КадровыйПеревод.ПричинаПеревода;
   ОбластьСотрудник.Параметры.ОснованиеПеревода = СсылкаНаДокумент.КадровыйПеревод.ОснованиеПеревода;
   
   ТабличныйДокумент.Вывести(ОбластьСотрудник);
   
   
   
   ТабличныйДокумент.АвтоМасштаб = Истина;
   
   Возврат ТабличныйДокумент;
   
КонецФункции

pavl_vs

Амал, подозреваю, что Вы некорректно выполнили подключение ВПФ.
Непонятно, например, почему ожидали увидеть ее макет в разделе Макеты печатных форм?
ЦитироватьЯ так понимаю, что она не привязалась ни к одному объекту. В чём причина?
Потому, что Вы её "не привязали".
ЦитироватьОна успешно загрузилась
Как Вы поняли, что это так? Куда она загрузилась?

Короче так - обработка работает и вызывается она, как и задумывалось, из документа Кадровый перевод в котором под кнопкой Печать появилось подменю:
- Кадровое перемещение; // ваша ВПФ
- Приказ о переводе (Т-5). // то что было в оригинале

!!! Подключать нужно через Дополнительные отчеты и обработки при установленном флажке!!!
По этому поводу в Интернете достаточно описаний с картинками и видео.

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


Амал

ЦитироватьКак Вы поняли, что это так? Куда она загрузилась?

Вот скриншоты ниже (с КП по КП5).

Изменил код:

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

ПараметрыРегистрации = Новый Структура;
МассивНазначений = Новый Массив;

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

ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду(ТаблицаКоманд, "Кадровое перемещение", "КадровоеПеремещение", "ВызовСерверногоМетода", Истина, "ПечатьMXL");
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);

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

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

//Функция СведенияОВнешнейОбработке() ссылается еще на одну процедуру и функцию:

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

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

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

КонецПроцедуры

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

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

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

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

ТабличныйДокумент = Новый ТабличныйДокумент;
МакетОбработки = ПолучитьМакет("МакетКадровыйПеревод");

//заполняем шапку
ОбластьШапка = МакетОбработки.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.НомерДокумента = СсылкаНаОбъект.Номер;
ОбластьШапка.Параметры.ДатаДокумента = СсылкаНаОбъект.Дата;
//выводим шапку в табличный документ
ТабличныйДокумент.Вывести(ОбластьШапка);

//заполняем Область "Сотрудник"

ОбластьСотрудник = МакетОбработки.ПолучитьОбласть("Сотрудник") ;

ОбластьСотрудник.Параметры.ФИОСотрудника = СсылкаНаОбъект.Сотрудник;
ОбластьСотрудник.Параметры.ПричинаПеревода = СсылкаНаОбъект.ПричинаПеревода;
ОбластьСотрудник.Параметры.ОснованиеПеревода = СсылкаНаОбъект.ОснованиеПеревода;

ТабличныйДокумент.Вывести(ОбластьСотрудник);



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

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

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


Не могу до конца понять алгоритм построения кода для ВПФ. Если мы берём реквизит из документа "КадровыйПеревод", то почему в коде (так объясняли в одном из видео уроке - прописывается (СсылкаНаОбъект.Номер)

ОбластьШапка.Параметры.НомерДокумента = СсылкаНаОбъект.Номер;
ОбластьШапка.Параметры.ДатаДокумента = СсылкаНаОбъект.Дата;


А не так (Документы.КадровыйПеревод.Номер):

ОбластьШапка.Параметры.НомерДокумента = Документы.КадровыйПеревод.Номер;
ОбластьШапка.Параметры.ДатаДокумента = Документы.КадровыйПеревод.Дата;


Нужно же брать реквизиты из этого документа.

Вот макет мной созданный (ниже прикрепил файл "макет")



Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск