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

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

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

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

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

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

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

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

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

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


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

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



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

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

// Функция формирует табличный документ с печатными формами актов об обказании услуг
// для каждой строки табличной части
//
// Возвращаемое значение:
//  Табличный документ - печатные формы актов
//
Функция ПечатьАктовОбОказанииУслуг(МассивОбъектов, ОбъектыПечати)

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

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


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


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

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


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


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

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

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

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

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


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

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

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