Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Печать() на УФ: как перетащить из модуля Команды в обычные, типовые механизмы?

Печать() на УФ: как перетащить из модуля Команды в обычные, типовые механизмы?
Я
   DenYuliya
 
11.02.19 - 14:50
Добрый день.
Подскажите, плиз, что-то у меня затуп((((.
Конфа и документ не типовые.
Печать производится из Команды документа.
А мне надо сделать так, чтобы при печати определенной печатной формы вызывался стандартный механизм печати.
Если точнее - то к макету мне надо прикорячить типовую команду "Отправить сообщение", а она, в свою очередь, добавляется типовыми механизмами в Общей форме "Печать документов",
которая вызывается из процедуры Печать() в модуле менеджера документа...
Уф...надеюсь, понятно объяснила?

Так вот, как это сделать-то по-умному?

Как-то из модуля Команды вызывать функцию, находящуюся в модуле Менеджера, в ней формировать табДок и передавать его в типовую Печать()?
Вызывать из модуля Команды процедуру Печать(), находящуюся в модуле менеджера?
Сразу к общим модулям обращаться, передавая сформированный в модуле менеджера Табок?

Помогите, плиз? У меня уже мозг вскипел с этими комбинациями(((
 
 
   runoff_runoff
 
1 - 11.02.19 - 14:53
&НаСервере
Процедура ...()
   FIXXXL
 
2 - 11.02.19 - 14:53
смотри как открывается общая форма печати, передавай нужные параметры...
   DenYuliya
 
3 - 11.02.19 - 14:56
(2) я третий день в эту хрень смотрю. У меня же вопрос не в том, как открывается стандартная форма печати.
   DenYuliya
 
4 - 11.02.19 - 14:57
(1) и?
   DenYuliya
 
5 - 11.02.19 - 14:58
(2) Как правильно переделать Печать(), осуществляемую из Модуля Команды в типовую Печать() из модуля менеджера?
   novichok79
 
6 - 11.02.19 - 15:07
(5) типа такого? модуль менеджера реализациятоваровуслуг в КА 1.1:

// Сформировать печатные формы объектов

//
// ВХОДЯЩИЕ:

//   МассивОбъектов  - Массив    - Массив ссылок на объекты которые нужно распечатать
//

// ИСХОДЯЩИЕ:
//   КоллекцияПечатныхФорм - Таблица значений - Сформированные табличные документы

//   ОшибкиПечати          - Список значений  - Ошибки печати  (значение - ссылка на объект, представление - текст ошибки)
//   ОбъектыПечати         - Список значений  - Объекты печати (значение - ссылка на объект, представление - имя области в которой был выведен объект)

//   ПараметрыВывода       - Структура        - Параметры сформированных табличных документов
//

Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    
    ПараметрыВывода.ДоступнаПечатьПоКомплектно = Истина;
    
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "Акт") Тогда
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "Акт", "Акт выполненных работ (вал.)", ПечатьАктаОбОказанииУслуг(МассивОбъектов, ОбъектыПечати, Ложь));
    КонецЕсли;
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "АктРуб") Тогда
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "АктРуб", "Акт выполненных работ (руб.)", ПечатьАктаОбОказанииУслуг(МассивОбъектов, ОбъектыПечати, Истина));
    КонецЕсли;
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "Накладная") Тогда
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "Накладная", "Расходная накладная (вал.)", ПечатьДокумента(МассивОбъектов, ОбъектыПечати, Ложь));
    КонецЕсли;
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "НакладнаяРуб") Тогда
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "НакладнаяРуб", "Расходная накладная (руб.)", ПечатьДокумента(МассивОбъектов, ОбъектыПечати, Истина));
    КонецЕсли;
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "М15") Тогда
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "М15", "М-15 (Накладная)", ПечатьМ15(МассивОбъектов, ОбъектыПечати));
    КонецЕсли;
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ТОРГ12_БезУслуг") Тогда
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ТОРГ12_БезУслуг", "ТОРГ-12 (Товарная накладная)", ПечатьТОРГ12(МассивОбъектов, ОбъектыПечати, Истина));
    КонецЕсли;
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ТОРГ12") Тогда
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ТОРГ12", "ТОРГ-12 (Товарная накладная с услугами)", ПечатьТОРГ12(МассивОбъектов, ОбъектыПечати, Ложь));
    КонецЕсли;
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "УниверсальныйПередаточныйДокумент") Тогда
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "УниверсальныйПередаточныйДокумент", 
            "Универсальный передаточный документ", ПечатьУниверсальныхПередаточныхДокументов(МассивОбъектов, ОбъектыПечати));
    КонецЕсли;
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "АктНаПередачуПрав") Тогда
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "АктНаПередачуПрав", "Акт на передачу прав", ПечатьАктаНаПередачуПрав(МассивОбъектов, ОбъектыПечати));
    КонецЕсли;

КонецПроцедуры
   DenYuliya
 
7 - 11.02.19 - 15:15
Сейчас это работает так:печать всех макетов происходит из модуля Команды.

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    
    ТабДок = Новый ТабличныйДокумент;

    отказ = ложь;
    Заголовок="";
    ПечатьНаСервере(ТабДок, ПараметрКоманды, отказ, Заголовок);
    
    Если отказ Тогда
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Для этого вида движения нет печатной формы!'"), , );
    Иначе
        ТабДок.ТолькоПросмотр  = ложь;
        ТабДок.ОтображатьСетку = Ложь;
        ТабДок.АвтоМасштаб = Истина;
        ТабДок.Показать(Заголовок);
    КонецЕсли;    
КонецПроцедуры

&НаСервере
Процедура ПечатьНаСервере(ТабДок, Док, отказ, 
    Если Док.ВидДвижения = Перечисления.ВидДвиженияБланков.Поступление Тогда
        ПечатьАктаПоступления(ТабДок, Док);
    ИначеЕсли Док.ВидДвижения = Перечисления.ВидДвиженияБланков.Уничтотожение Тогда
        ПечатьАктаУничтожения(ТабДок, Док);
    ИначеЕсли Док.ВидДвижения = Перечисления.ВидДвиженияБланков.Перемещение Тогда
        ПечатьАктаПеремещения(ТабДок, Док);        
    Иначе
        отказ = истина;
КонецЕсли;
    
КонецПроцедуры

&НаСервере    
Процедура ПечатьАктаПоступления(ТабДок, Док)    
///тут код заполнения макета

 ТабДок.Вывести();
КонецПроцедуры


&НаСервере    
Процедура ПечатьАктаУничтожения(ТабДок, Док)
///тут код заполнения макета

 ТабДок.Вывести();
КонецПроцедуры

&НаСервере    
Процедура ПечатьАктаПеремещения(ТабДок, Док)
///тут код заполнения макета

 ТабДок.Вывести();
КонецПроцедуры



А мне надо, чтобы печать макета Акта перемещения происходила типовыми средствами, из Печать() в модуле менеджера.

В типовых доках это выглядит так:
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "Акты") Тогда
    УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "Акты", "Акты об оказании услуг",
    ПечатьАктовОбОказанииУслуг(МассивОбъектов, ОбъектыПечати),,"Документ.ОказаниеУслуг.ПФ_MXL_Акт");
    КонецЕсли;
    
    ОбщегоНазначенияБП.ЗаполнитьДополнительныеПараметрыПечати(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);    
    
КонецПроцедуры

// Функция формирует табличный документ с печатными формами актов об обказании услуг

// для каждой строки табличной части
//

// Возвращаемое значение:
//  Табличный документ - печатные формы актов

//
Функция ПечатьАктовОбОказанииУслуг(МассивОбъектов, ОбъектыПечати)

///тут код заполнения макета


Возврат ТабДок;


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


Так вот: как мне процедуру  ПечатьАктаПеремещения(ТабДок, Док) из модуля Команды переделать в типовую, аналогичную 

Функция ПечатьАктовОбОказанииУслуг(МассивОбъектов, ОбъектыПечати)  ?


Как, блин, это правильно сделать, что откуда вызывать и что куда передавать?
   DenYuliya
 
8 - 11.02.19 - 15:17
(6) да, типа того. Я знаю, как выглядит процедура Печать() в модуле менеджера.
Я не могу допереть, как вместо печати из Модуля команды при определенном условие начать использовать Печать() из модуля менеджера?
   novichok79
 
9 - 11.02.19 - 15:19
УправлениеПечатьюКлиент.ВыполнитьКомандуПечати("Документ.РеализацияТоваровУслуг", "Накладная", 
        ПараметрКоманды, ПараметрыВыполненияКоманды.Источник, Неопределено);


???
   novichok79
 
10 - 11.02.19 - 15:20
странновато как-то
 
 Рекламное место пустует
   novichok79
 
11 - 11.02.19 - 15:20
я бы перехватывал вызов общей формы печати, это поверхносто если посмотреть на задачу
   DenYuliya
 
12 - 11.02.19 - 15:24
У меня затык между тремя вариантами, не понимаю, как правильно?
1) Вызывать из модуля команды процедуру типовую Печать(), находящуюся в модуле менеджера, примерно так:

&НаСервере
Процедура ПечатьНаСервере(ТабДок, Док, отказ, Заголовок="Печать документа Движения Бланков")
    
    Заголовок = "Печать: Движения Бланков "+Док.Номер;
    
    Если Док.ВидДвижения = Перечисления.ВидДвиженияБланков.Поступление Тогда
        ПечатьАктаПоступления(ТабДок, Док);
    ИначеЕсли Док.ВидДвижения = Перечисления.КонтВидДвиженияБланков.Инвентаризация Тогда    
        Документы.КонтДвижениеБланков.Печать(,,,,)
        //ПечатьИнвентаризация(ТабДок, Док);    

    Иначе
        отказ = истина;
    КонецЕсли;
    
КонецПроцедуры

Но тогда возникает вопрос, как все эти параметры печати заполнить?

2) Переходить из модуля менеджера к процедуре модуля менеджера, заполняющую ТабДок, а ее уже вызывать из Печать(), примерно так:

&НаСервере
Процедура ПечатьНаСервере(ТабДок, Док, отказ, Заголовок="Печать документа Движения Бланков")
    
    Заголовок = "Печать: Движения Бланков "+Док.Номер;
    
    Если Док.ВидДвижения = Перечисления.ВидДвиженияБланков.Поступление Тогда
        ПечатьАктаПоступления(ТабДок, Док);
    ИначеЕсли Док.ВидДвижения = Перечисления.ВидДвиженияБланков.Инвентаризация Тогда    
        Документы.ДвижениеБланков.ЗаполнениеИнвентаризацииДляПечати()
//ПечатьИнвентаризация(ТабДок, Док);    

Иначе
 отказ = истина;
КонецЕсли;
    
КонецПроцедуры


3) Сразу из модуля Команды вызывать процедуры из общего модуля, отвечающие за прикорячивание ОтправкиСообщения, модуль менеджера вообще не трогать (если так можно)
   DenYuliya
 
13 - 11.02.19 - 15:26
(10) что именно странновато? Не спорю, может надо как-то по-другому, а я не знаю?

(11) "я бы перехватывал вызов общей формы печати" - это вызывал бы Печать() в модуле менеджера из модуля команды?
   DenYuliya
 
14 - 11.02.19 - 15:27
(11), а, наверное это то, что в (9)? Не заметила сообщение.
Это в моем корявом объяснение третий вариант в (12)
   DenYuliya
 
15 - 11.02.19 - 15:30
Мне-то все равно, лишь бы работало)). Я просто совсем не понимаю, как надо, что за сверь такой - "модуль команды", и нафига он нужен.
Не, ну очевидные вещи "что такое команда" я понимаю, конечно, но никогда с ними не работала и не понимаю, зачем это сделано через Команду, а не через модуль менеджера/объекта/формы.
   novichok79
 
16 - 11.02.19 - 15:41
(15) потому что команду можно воткнуть куда угодно. не?
   novichok79
 
17 - 11.02.19 - 15:42
(13) сделал бы свою форму печати и вызывал ее из команды, или условий накрутил в модуле команды непосредственно.
   novichok79
 
18 - 11.02.19 - 15:42
это всего-лишь предположения, как бы делал я, а как бы удалось реализовать - хз
   DenYuliya
 
19 - 11.02.19 - 15:49
(15) да не знаю я, что вы у меня спрашиваете, будто я сижу и за что-то агитирую))).
Я прям чес слово не знаю, потому и спрашиваю. Без сарказма.
Насчет "куда угодно" - мне казалось, что она из формы вызывается, а не откуда угодно.
   DenYuliya
 
20 - 11.02.19 - 15:50
(17) нет, мне надо именно типовую форму печати вызывать.
   novichok79
 
21 - 11.02.19 - 16:12
(19) куда угодно - это типа задел на будущее. форма - это множество элементов, элемент - команда. все логично, по-моему.
   МимохожийОднако
 
22 - 11.02.19 - 16:15
(15) Не надо задаваться вопрос "Почему?" Достаточно понять точку, в которой надо вносить минимальные изменения для решения задачи.
   Garykom
 
23 - 11.02.19 - 16:18
>Конфа и документ не типовые.

Пофиг как делать, лишь бы работало как надо.
Потом переделаете если будет глаза мозолить.
   DenYuliya
 
24 - 11.02.19 - 16:28
(22), (23) - я уже с логики сбилась, это к чему?
У меня нет никаких предпочтений, я именно не знаю, как правильно сделать-то?
   DenYuliya
 
25 - 11.02.19 - 16:33
Собственно, правильный ответ в (9) , он же мой третий вариант.
Сделаю, выложу листинг.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует