8.х Печать макета (несколько страниц в одном окне)

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Legion, 10 мар 2010.

  1. TopicStarter Overlay
    Legion
    Offline

    Legion Опытный в 1С

    Регистрация:
    3 мар 2009
    Сообщения:
    57
    Симпатии:
    1
    Баллы:
    29
    Доброго времени суток, подскажите пожалуйста с такой проблемой: печатаю макет
    Код:
    Пока Выборка.Следующий() Цикл
    
    ТабДокумент = Новый ТабличныйДокумент;
    ......................
    ......................
    ТабДокумент.Вывести(ОбластьМакета);
    
    УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, 1, ложь,  ОбщегоНазначения.СформироватьЗаголовокДокумента(СсылкаНаОбъект));
    
    КонецЦикла;
    
    И соответственно открывается куча окон(т.к. в цикле), а как сделать чтобы все страницы вывести в одном окне?
  2. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Код:
    ТабДокумент = Новый ТабличныйДокумент;
    Пока Выборка.Следующий() Цикл
    
    //......................
    //......................
    ТабДокумент.Вывести(ОбластьМакета);
    КонецЦикла;
    УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, 1, ложь,  ОбщегоНазначения.СформироватьЗаголовокДокумента(СсылкаНаОбъект));
    
    Имейте ввиду, что такой код будет работать только для одинаковых макетов! В случае различия колонок, например, нужно будет делать намного все сложнее!
  3. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    BabySG, про разрыв страницы забыл...
  4. ASh
    Offline

    ASh Опытный в 1С

    Регистрация:
    10 сен 2008
    Сообщения:
    568
    Симпатии:
    0
    Баллы:
    26
    Разделители страниц тут не причем, они новые окна не создают.
  5. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Думаю, что автору нужна была сама идея :)
  6. TopicStarter Overlay
    Legion
    Offline

    Legion Опытный в 1С

    Регистрация:
    3 мар 2009
    Сообщения:
    57
    Симпатии:
    1
    Баллы:
    29
    Ну и теперь выводит только последний элемент. Так я и использую один и тот же макет. Если вывести функцию печати документа за цикл, то она печатает последнее значение табдокумента, а как сделать чтобы весь этот цикл распечатать в одном окне?
  7. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Так сам табличный документ (создание) вынесли за рамки цикла?

    Покажите полностью код.
  8. TopicStarter Overlay
    Legion
    Offline

    Legion Опытный в 1С

    Регистрация:
    3 мар 2009
    Сообщения:
    57
    Симпатии:
    1
    Баллы:
    29
    Пардон, слона то я и не приметил. Осталось теперь только выводить каждый экземпляр макета на отдельной странице, сразу что-то не нашёл как это сделать :(
  9. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Была подсказка - вам необходимо добавить в конце цикла разделитель страниц. Смотрите в табличном документе (справке)
  10. Annie
    Offline

    Annie Опытный в 1С Команда форума

    Регистрация:
    10 фев 2010
    Сообщения:
    949
    Симпатии:
    23
    Баллы:
    29
    Похожая проблема: пытаюсь из Формы Документа распечатать несколько различных документов на одной странице
    (возможна ли реализация без обработки?), ну и соответственно, происходит печать одного и того же документа
    в n-экземплярах.
    Подскажите, пожалуйста, что не так:
    Код:
    Процедура Печать(Элемент)
    
    ОбщийТабДок = Новый ТабличныйДокумент;
    Кол = 0;
    ВыборкаДоков = Документы.Исходящие.Выбрать();
    
    Пока ВыборкаДоков.Следующий() Цикл
    
    Кол = Кол + 1;
    
    ТабДок = Новый ТабличныйДокумент;
    Макет = Документы.Исходящие.ПолучитьМакет("Печать");
    
    //Должность
    Выборка = Справочники.Респонденты.Выбрать(КомуДолжность);
    ОбластьДолжность = Макет.ПолучитьОбласть("ОбластьДолжность");
    Пока Выборка.Следующий() Цикл
    ОбластьДолжность.Параметры.Заполнить(Выборка);
    КонецЦикла;
    ТабДок.Вывести(ОбластьДолжность);
    
    // Заголовок
    Область = Макет.ПолучитьОбласть("Заголовок");
    Область.Параметры.Заполнить(ЭтотОбъект);
    ТабДок.Вывести(Область);
    
    // Подвал
    Подвал = Макет.ПолучитьОбласть("Подвал");
    Подвал.Параметры.Заполнить(ЭтотОбъект);
    ТабДок.Вывести(Подвал);
    
    Подпись = Макет.ПолучитьОбласть("Подпись");
    Подпись.Параметры.Заполнить(ЭтотОбъект);
    ТабДок.Вывести(Подпись);
    
    Если Кол = 1 Тогда
    ОбщийТабДок.Вывести(ТабДок);
    Иначе
    Входит = ОбщийТабДок.ПроверитьВывод(ТабДок);
    Если НЕ Входит Тогда
    ОбщийТабДок.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЕсли; 
    
    ОбщийТабДок.Вывести(ТабДок);
    
    КонецЕсли; 
    
    КонецЦикла;
    
    ОбщийТабДок.ОтображатьСетку = Ложь;
    ОбщийТабДок.Защита = Ложь;
    ОбщийТабДок.ТолькоПросмотр = Ложь;
    ОбщийТабДок.ОтображатьЗаголовки = Ложь;
    ОбщийТабДок.Показать();
    КонецПроцедуры
    
    
    
  11. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Код:
     Пока ВыборкаДоков.Следующий() Цикл
    
    Кол = Кол + 1;
    
    ТабДок = Новый ТабличныйДокумент;
    
    Заменить на:
    Код:
    ТабДок = Новый ТабличныйДокумент;
    Пока ВыборкаДоков.Следующий() Цикл
    
    Кол = Кол + 1;
    
    Прочитав более внимательно тему - давно бы исправили :)
  12. Annie
    Offline

    Annie Опытный в 1С Команда форума

    Регистрация:
    10 фев 2010
    Сообщения:
    949
    Симпатии:
    23
    Баллы:
    29
    BabySG, не помогает...
  13. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Да, макет тоже за цикл надо вынести и показывайте, что у вас в итоге получилось.
  14. Annie
    Offline

    Annie Опытный в 1С Команда форума

    Регистрация:
    10 фев 2010
    Сообщения:
    949
    Симпатии:
    23
    Баллы:
    29
    Делаю так:
    Код:
    ТабДок = Новый ТабличныйДокумент;
    Макет = Документы.Исходящие.ПолучитьМакет("Печать");
    Пока ВыборкаДоков.Следующий() Цикл
    Кол = Кол + 1;
    ...
    
    
    Получаю:
    [​IMG]
  15. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Вообще, я имел ввиду код, ну да ладно :)

    А по сути:
    Код:
    Область.Параметры.Заполнить(ЭтотОбъект);
    
    Вы одним и тем же документом заполняете все время, а надо брать из выборки, т.е.:
    Код:
    Область.Параметры.Заполнить(Выборка);
    

Поделиться этой страницей