Печать через обработку заполнения табличной части
Добрый день.
Стоит задача - через внешнюю обработку к документу системы ERP (последний релиз) создать договор в справочнике, новая ссылка должна проставиться на реквизите формы. После чего должна сформироваться печатная форма по новому элементу.
Делаем через внешнюю обработку ТЧ, получаем такой код:
В процедуре ЗаписьНовогоДоговораКонтрагента создается новый элемент и формируется ПФ в виде табличного документа. Вопрос, как вывести данный табличный документ на экран пользователю?
Стоит задача - через внешнюю обработку к документу системы ERP (последний релиз) создать договор в справочнике, новая ссылка должна проставиться на реквизите формы. После чего должна сформироваться печатная форма по новому элементу.
Делаем через внешнюю обработку ТЧ, получаем такой код:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта();
ПараметрыРегистрации.Версия = "1.0";
ПараметрыРегистрации.Назначение.Добавить("Документ.ЗаказКлиента");
ПараметрыРегистрации.Вставить("БезопасныйРежим", ложь);
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = НСтр("ru = 'Формирование счета договора (внешняя) команда'");
НоваяКоманда.Идентификатор = "СформироватьСчетДоговора";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
НоваяКоманда.ПоказыватьОповещение = Истина;
Возврат ПараметрыРегистрации;
КонецФункции
// Интерфейс для выполнения команд обработки.
Процедура ВыполнитьКоманду(ИмяКоманды, ОбъектыНазначения, ПараметрыВыполнения) Экспорт
ПараметрыРегистрации = СведенияОВнешнейОбработке();
ПараметрыРегистрации.Команды.Колонки.Идентификатор.Имя = "ИмяКоманды";
ЭтаКоманда = ПараметрыРегистрации.Команды.Найти(ИмяКоманды, "ИмяКоманды");
Если ЭтаКоманда = Неопределено Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Команда ""%1"" не поддерживается обработкой ""%2""'"),
ИмяКоманды,
Метаданные().Представление()
);
КонецЕсли;
Если ИмяКоманды = "СформироватьСчетДоговора" Тогда
СформироватьСчетДоговора(ОбъектыНазначения, ПараметрыВыполнения, ЭтаКоманда);
КонецЕсли;
// Имитация длительной операции для клиент-серверного режима.
Если НЕ ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда
ДатаОкончания = ТекущаяДата() + 4;
Пока ДатаОкончания > ТекущаяДата() Цикл
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Процедура СформироватьСчетДоговора(ОбъектыНазначения, ПараметрыВыполнения, ЭтаКоманда)
//УстановитьБезопасныйРежим(ЛОжь);
Для Каждого ЭлементОбъектНазначения Из ОбъектыНазначения Цикл
ОбъектНазначения = ЭлементОбъектНазначения.ПолучитьОбъект();
СтрокаСообщ = ПроверкаЗаполнения(ОбъектНазначения);
Если ЗначениеЗаполнено(СтрокаСообщ) тогда
Сообщить(СтрокаСообщ);
Продолжить;
Конецесли;
НужныйДоговорСсылка = ЗаписьНовогоДоговораКонтрагента(ОбъектНазначения);
Если ЗначениеЗаполнено(НужныйДоговорСсылка) тогда
ОбъектНазначения.Договор = НужныйДоговорСсылка;
ОбъектНазначения.Записать();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
ПоказатьВ процедуре ЗаписьНовогоДоговораКонтрагента создается новый элемент и формируется ПФ в виде табличного документа. Вопрос, как вывести данный табличный документ на экран пользователю?
По теме из базы знаний
- Обработка для пробития чека на ФР из документа реализация товаров и услуг
- Внешняя печать ценников для УТ 10.3 (через внешние обработки и из документа "Поступление товаров и услуг")
- Заполнение заказа покупателя из Excel
- Заполнение бланка Excel-Заказа поставщику данными. 1С: ERP2.4
- Не спеша, эффективно и правильно – путь разработки. Часть 3. Практика
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Если Вам нужно взаимодействовать с пользователем из обработки - то нужно для обработки создать основную форму, в ней располагается "дежурная" клиентская процедура, которая выполняет команду:
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
// создание договора, установка элемента в реквизит формы "ВладелецФормы.Объект.Договор = ..."
// формирование табличного документа не сервере, показ формы на клиенте
КонецПроцедуры
Показать
Вы собираетесь проставлять реквизит в форму, значит вам нужна открытая форма, а значит нужен клиент. Задача решается стандартными методами.
Создается обработка по заполнению объекта, перед заполнением нужного реквизиты формы формируется объект и печатная форма.
Создается обработка по заполнению объекта, перед заполнением нужного реквизиты формы формируется объект и печатная форма.
......................
Если ИмяКоманды = "СформироватьСчетДоговора" Тогда
<b>Коллекция = Неопределено;</b>
СформироватьСчетДоговора(ОбъектыНазначения, ПараметрыВыполнения, ЭтаКоманда, <b>Коллекция </b>);
Если Коллекция.Количество() >0 Тогда
УправлениеПечатьюКлиент.ПечатьДокументов(Коллекция,Неопределено,ЭтаФорма);
КонецЕсли;
КонецЕсли;
..............................
Процедура СформироватьСчетДоговора(ОбъектыНазначения, ПараметрыВыполнения, ЭтаКоманда, Коллекция)
//УстановитьБезопасныйРежим(ЛОжь);
Для Каждого ЭлементОбъектНазначения Из ОбъектыНазначения Цикл
ОбъектНазначения = ЭлементОбъектНазначения.ПолучитьОбъект();
СтрокаСообщ = ПроверкаЗаполнения(ОбъектНазначения);
Если ЗначениеЗаполнено(СтрокаСообщ) тогда
Сообщить(СтрокаСообщ);
Продолжить;
Конецесли;
НужныйДоговорСсылка = ЗаписьНовогоДоговораКонтрагента(ОбъектНазначения ,Коллекция);.
Показать///////////////
// В ЗаписьНовогоДоговораКонтрагента необходимо добавить код
// Коллекция = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм("идентификатор");
// УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(Коллекция,"идентификатор","Синоним", ТабДОк); //ТабДОк Твоя печатная Форма, //идентификатор- уникальное значение
// КоллекцияМассив = ОбщегоНазначения.ТаблицаЗначенийВМассив(Коллекция);
///////////////
Если ЗначениеЗаполнено(НужныйДоговорСсылка) тогда
ОбъектНазначения.Договор = НужныйДоговорСсылка;
ОбъектНазначения.Записать();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Показать
(15) Тут вообще подход другой должен быть:
ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовКлиентскогоМетода();
В открытой форме ловить ее владельца, это и будет форма заполняемого документа. Затем на сервере создает договор, заполняем на клиенте реквизит формы.
А затем уже выводим наш новый договор на печать.
Писать код я не буду, я это только за деньги делаю )
ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовКлиентскогоМетода();
В открытой форме ловить ее владельца, это и будет форма заполняемого документа. Затем на сервере создает договор, заполняем на клиенте реквизит формы.
А затем уже выводим наш новый договор на печать.
Писать код я не буду, я это только за деньги делаю )
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот