Имя: Пароль:
1C
1С v8
Печать документа по ссылке
0 Dmitry_333
 
24.05.18
20:54
Доброго всем вечера!

Написал вот код печати документа, сделал, как пишут, обращение к процедуре Печать() менеджера объекта, параметры завел согласно тем видам, что в этой процедуре.

СсылкаНаДокумент = Документы.РеализацияТоваровУслуг.НайтиПоНомеру("0000-000033", ТекущаяДата());
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(СсылкаНаДокумент);
КоллекцияПечатныхФорм = Новый ТаблицаЗначений;
КоллекцияПечатныхФорм.Колонки.Добавить("ИмяВРЕГ");
КоллекцияПечатныхФорм.Колонки.Добавить("ИмяМакета");
Строка = КоллекцияПечатныхФорм.Добавить();
Строка.ИмяВРЕГ = "РАСХОДНАЯНАКЛАДНАЯ";
Строка.ИмяМакета = "РасходнаяНакладная";

ОбъектыПечати = Новый СписокЗначений;
ОбъектыПечати.Добавить(СсылкаНаДокумент, "Документ_1");

Документы.РеализацияТоваровУслуг.Печать(МассивОбъектов, Ложь, КоллекцияПечатныхФорм, ОбъектыПечати, Ложь);

Но все заканчивается ошибкой
{ОбщийМодуль.УправлениеПечатью.Модуль(54)}: Поле объекта не обнаружено (ТабличныйДокумент)
ОписаниеПечатнойФормы.ТабличныйДокумент = ТабличныйДокумент;

Подскажите, пожалуйста, чего не хватает.
И вообще, может все можно проще сделать и я лишнего нагородил?
1 Cyberhawk
 
24.05.18
23:30
Ну как бы КоллекцияПечатныхФорм у тебя кустарная, обрезанная. Там и хранятся табдоки, если чо
2 AlvlSpb
 
25.05.18
00:54
(0) КоллекцияПечатныхФорм = Новый ТаблицаЗначений;
ТЗ это явно не ТабДок
Создавайте макет (таб док) в форме и обращайтесь к нему
3 Dmitry_333
 
25.05.18
10:20
(2) Поясните пожалуйста, что значит создать макет, ведь я пытаюсь распечатать стандартный документ, макет которого уже создан и хранится в конфе.
4 Dmitry_333
 
25.05.18
10:38
Переписал вот так. Теперь ошибки не выдает, но и на печать ничего не выходит.

СсылкаНаДокумент = Документы.РеализацияТоваровУслуг.НайтиПоНомеру("0000-000033", ТекущаяДата());
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(СсылкаНаДокумент);
КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм("РасходнаяНакладная");

ПараметрыВывода = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода();

ОбъектыПечати = Новый СписокЗначений;

Документы.РеализацияТоваровУслуг.Печать(МассивОбъектов,,КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
5 ildary
 
25.05.18
10:53
(4) вот как делал я (возможно не оптимально, но работает):

    СсылкаНаВПФ      = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию( НаимОтчета, Истина );
    
    ТабДокиМассив    = Новый Массив;
    ПараметрыВывода = Неопределено;
    
    Парам = Новый Структура;
    Парам.Вставить( "ИдентификаторКоманды", ИдОтчета );
    Парам.Вставить( "ОбъектыНазначения"   , ОбъектыПечати );
    
    КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм( ИдОтчета );
    
    МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль( "ДополнительныеОтчетыИОбработки" );
    МодульДополнительныеОтчетыИОбработки.ПечатьПоВнешнемуИсточнику( СсылкаНаВПФ, Парам, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода );
    
    Для Каждого Стр Из КоллекцияПечатныхФорм Цикл
        
        ТабДок = Стр.ТабличныйДокумент;
        
        СтруктураПечати = Новый Структура;
        СтруктураПечати.Вставить( "ТабДок", ТабДок );
        
        ТабДокиМассив.Добавить( СтруктураПечати );
        
    КонецЦикла;
6 ildary
 
25.05.18
10:55
Ну и вызов:

            ТабДокиМассив = ЗаполнитьТабличныеДокументы( МассивЗаказКл, НаимОтчета, ИдОтчета ); //здесь генерируются таб.доки
        Для Каждого ТабДок Из ТабДокиМассив Цикл //тут вывод таб.доков на экран
            
            СтруктураКоллекции.ТабличныйДокумент = ТабДок.ТабДок;
            
            УправлениеПечатьюКлиент.ПечатьДокументов( Коллекция,, ЭтаФорма );
            
        КонецЦикла;
7 ildary
 
25.05.18
10:55
Где ЗаполнитьТабличныеДокументы() - это текст в (5)
8 Dmitry_333
 
25.05.18
11:01
ilbary, благодарю. Буду пробовать.
9 ildary
 
25.05.18
11:01
На здоровье, только я ilDary.
10 Dmitry_333
 
25.05.18
11:31
Извини, ilDary
11 Dmitry_333
 
25.05.18
14:17
Прохожу отладчиком выполнение кода из (4), в модуле менеджера все ок, табличный документ создается и заполняется, но на выходе ничего. Может где-то еще параметр упущен?
12 Cyberhawk
 
25.05.18
17:08
Кончай говнокодить уже. Как делать правильно Я сказал выше.
13 Dmitry_333
 
25.05.18
18:15
В общем все решилось. Обращение к модулю менеджера была ошибкой, нужно было сразу стучаться в общий модуль "УправлениеПечатьюКлиент".
Вот так заработало:

&НаКлиенте
Процедура ОбработкаКоманды()
    
МассивОбъектов = ПечатьНаСервере();
    
УправлениеПечатьюКлиент.ВыполнитьКомандуПечатиНаПринтер("Документ.РеализацияТоваровУслуг", "РасходнаяНакладная", МассивОбъектов, Новый Структура("Тип", "РасходнаяНакладная"));
        
КонецПроцедуры

&НаСервере

Функция ПечатьНаСервере()    
    
СсылкаНаДокумент = Документы.РеализацияТоваровУслуг.НайтиПоНомеру("0000-000033", ТекущаяДата());
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(СсылкаНаДокумент);

Возврат МассивОбъектов

КонецФункции
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший