Имя: Пароль:
1C
1С v8
Вызов процедуры печати из обработки
0 1C2020
 
10.04.20
11:46
Помогите, пожалуйста, начинающему.
Есть документ Поступление товаров с конструктором печати в модуле менеджера. Из команды формы обработки нужно вызвать эту процедуру. Чувствую, что ошибка прям на поверхности, а увидеть не могу. С таким кодом при нажатии на команду не происходит вообще ничего.

В модуле формы обработки:

&НаКлиенте
Процедура Печать(Команда)
    
        
    ПечатьНаСервере();
    
КонецПроцедуры

&НаСервере
Процедура ПечатьНаСервере()
    
    ТабДок = Документы.ПоступлениеТоваров.ПолучитьМакет("Печать");
    Ссылка = Новый Массив;
    Ссылка.Добавить(Документы.ПоступлениеТоваров.ПолучитьСсылку());
    Документы.ПоступлениеТоваров.Печать(ТабДок, Ссылка);
        
КонецПроцедуры


В модуле менеджера документа:


Процедура Печать(ТабДок, Ссылка) Экспорт
    //{{_КОНСТРУКТОР_ПЕЧАТИ(Печать)
    Макет = Документы.ПоступлениеТоваров.ПолучитьМакет("Печать");
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ПоступлениеТоваров.Дата,
    |    ПоступлениеТоваров.Номер,
    |    ПоступлениеТоваров.Поставщик,
    |    ПоступлениеТоваров.Склад,
    |    ПоступлениеТоваров.СуммаДокумента,
    |    ПоступлениеТоваров.Товары.(
    |        НомерСтроки,
    |        Номенклатура,
    |        Количество,
    |        Цена,
    |        Сумма
    |    ),
    |    Контрагенты.Код КАК КодКонтрагента
    |ИЗ
    |    Документ.ПоступлениеТоваров КАК ПоступлениеТоваров
    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
    |        ПО ПоступлениеТоваров.Поставщик = Контрагенты.Ссылка
    |ГДЕ
    |    ПоступлениеТоваров.Ссылка В(&Ссылка)";
    Запрос.Параметры.Вставить("Ссылка", Ссылка);
    Выборка = Запрос.Выполнить().Выбрать();

    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    Шапка = Макет.ПолучитьОбласть("Шапка");
    ОбластьТоварыШапка = Макет.ПолучитьОбласть("ТоварыШапка");
    ОбластьТовары = Макет.ПолучитьОбласть("Товары");
    Подвал = Макет.ПолучитьОбласть("Подвал");

    ТабДок.Очистить();

    ВставлятьРазделительСтраниц = Ложь;
    Пока Выборка.Следующий() Цикл
        Если ВставлятьРазделительСтраниц Тогда
            ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
        КонецЕсли;

        ТабДок.Вывести(ОбластьЗаголовок);

        Шапка.Параметры.Заполнить(Выборка);
        ТабДок.Вывести(Шапка, Выборка.Уровень());

        ТабДок.Вывести(ОбластьТоварыШапка);
        ВыборкаТовары = Выборка.Товары.Выбрать();
        Пока ВыборкаТовары.Следующий() Цикл
            ОбластьТовары.Параметры.Заполнить(ВыборкаТовары);
            ТабДок.Вывести(ОбластьТовары, ВыборкаТовары.Уровень());
        КонецЦикла;

        Подвал.Параметры.Заполнить(Выборка);
        ТабДок.Вывести(Подвал);

        ВставлятьРазделительСтраниц = Истина;
    КонецЦикла;
    //}}
КонецПроцедуры
1 Momus
 
10.04.20
11:50
ТабДок остается на сервере. Его нужно передать на клиент и показать()
2 GGDots
 
10.04.20
11:52
Конечно ничего не происходит. Ты просто в серверных процедурах работаешь с табличным документов и все. Тебе нужно в итоге вернуть табличныйдокумента на КЛИЕНТ и там уже его показать.
3 GGDots
 
10.04.20
11:57
Ссылка = Новый Массив;
    Ссылка.Добавить(Документы.ПоступлениеТоваров.ПолучитьСсылку());

И ссылку ты просто получаешь новую - пустую?
4 GGDots
 
10.04.20
11:59
И ТабДок = Документы.ПоступлениеТоваров.ПолучитьМакет("Печать"); У тебя макет а не табличный документ. Довольно таки странный код на первый взгляд.
5 GGDots
 
10.04.20
12:03
Если не справишься, напиши, могу помочь - че то немного скучно на удаленке)
6 1C2020
 
10.04.20
12:11
(5) Спасибо большое! Сейчас буду пробовать
7 GGDots
 
10.04.20
12:41
(6) Посмотри примерный алгоритм работы с табличным документом и макетов: https://craft1c.ru/1s-tablichnyjj-dokument/
Ну я прям уверен должен справиться!
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший