8.х Печатные формы всех документов в одном окне.

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

  1. TopicStarter Overlay
    SergeyF
    Offline

    SergeyF Опытный в 1С

    Регистрация:
    1 фев 2007
    Сообщения:
    1.378
    Симпатии:
    0
    Баллы:
    26
    Есть задание:
    Есть обработка, которая выводит на печать документы "РеализацияТоваров" за определенный интервал.
    Код:
    Процедура КнопкаВыполнитьНажатие(Кнопка)
    Выборка=Документы.РеализацияТоваров.Выбрать(ДатаНачала,ДатаОкончания);
    Пока Выборка.Следующий() Цикл
    ДокОбъект=Выборка.ПолучитьОбъект();
    ДокОбъект.Печать();
    КонецЦикла;
    КонецПроцедуры
    
    Процедура ВыбПериодНажатие(Элемент)
    НастройкаПериода = Новый НастройкаПериода;
    НастройкаПериода.УстановитьПериод(ДатаНачала, ?(ДатаОкончания='0001-01-01', ДатаОкончания, КонецДня(ДатаОкончания)));
    НастройкаПериода.РедактироватьКакИнтервал = Истина;
    НастройкаПериода.РедактироватьКакПериод = Истина;
    НастройкаПериода.ВариантНастройки = ВариантНастройкиПериода.Период;
    Если НастройкаПериода.Редактировать() Тогда
    ДатаНачала = НастройкаПериода.ПолучитьДатуНачала();
    ДатаОкончания = НастройкаПериода.ПолучитьДатуОкончания();
    КонецЕсли;
    КонецПроцедуры
    
    
    
    
    
    Каждая позиция выборки преобразуется в "Документ.Объект.Имя" и от данного объекта вызывается метод "Печать()".

    Основной вопрос в том, как объект "ТабличныйДокумент" создавать вне процедуры "Печать" и передавать его в качестве параметра .
  2. TopicStarter Overlay
    SergeyF
    Offline

    SergeyF Опытный в 1С

    Регистрация:
    1 фев 2007
    Сообщения:
    1.378
    Симпатии:
    0
    Баллы:
    26
    Решение представляется таким:
    Код:
    Процедура КнопкаВыполнитьНажатие(Элемент)
    ТабДок=Новый ТабличныйДокумент;
    Сформировать(ТабДок);
    ТабДок.Показать();
    КонецПроцедуры
    Процедура Сформировать(ТабДок)    
    Выборка=Документы.РеализацияТоваров.Выбрать(ДатаНачала,ДатаОкончания);
    Пока Выборка.Следующий()Цикл
    ДокОбъект=Выборка.ПолучитьОбъект();
    ДокОбъект.Печать(ТабДок);
    КонецЦикла;
    КонецПроцедуры 
    
    
    Но при нажатии кнопки "Выполнить" выводится сообщение об ошибке:
    Чего не так делаю? :unsure:
  3. Kaboom
    Offline

    Kaboom Опытный в 1С

    Регистрация:
    2 июл 2007
    Сообщения:
    158
    Симпатии:
    0
    Баллы:
    26
    Процедуру Печать() нужно переписать на Печать(ТабДок) ну и далее по тексту процедуры.
  4. TopicStarter Overlay
    SergeyF
    Offline

    SergeyF Опытный в 1С

    Регистрация:
    1 фев 2007
    Сообщения:
    1.378
    Симпатии:
    0
    Баллы:
    26
    Спасибо, помогло. :unsure:
  5. TopicStarter Overlay
    SergeyF
    Offline

    SergeyF Опытный в 1С

    Регистрация:
    1 фев 2007
    Сообщения:
    1.378
    Симпатии:
    0
    Баллы:
    26
    Результата не добился, хотя условия выполнены.
    Объект "ТабличныйДокумент" создается вне процедуры печать, передается, как параметр, но печатная форма формируется в отдельных окнах, а надо в одном. :unsure:
  6. BabySG
    Offline

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

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

    Kaboom Опытный в 1С

    Регистрация:
    2 июл 2007
    Сообщения:
    158
    Симпатии:
    0
    Баллы:
    26
    Предполагаю у вас так
    Код:
    Процедура Печать(ТабДок)
    ТабДок = Новый ТабличныйДокумент;
    ....
    КонецПроцедуры
    
    Хотя нужно
    Код:
    Процедура Печать(ТабДок)
    ТабДок.Очистить();
    ....
    КонецПроцедуры
    
    Тоесть, проверьте не создается ли у вас в процедуре печати каждый раз новый табличный документ.
  8. TopicStarter Overlay
    SergeyF
    Offline

    SergeyF Опытный в 1С

    Регистрация:
    1 фев 2007
    Сообщения:
    1.378
    Симпатии:
    0
    Баллы:
    26
    Да, именно так.
    Процедура берется из документа "Реализация товаров."
    Код:
    Процедура Печать() Экспорт
    ТабДок = Новый ТабличныйДокумент;
    Макет = Документы.РеализацияТоваров.ПолучитьМакет("Печать");
    // Заголовок
    Область = Макет.ПолучитьОбласть("Заголовок");
    ТабДок.Вывести(Область);
    // Шапка
    Шапка = Макет.ПолучитьОбласть("Шапка");
    Шапка.Параметры.Заполнить(ЭтотОбъект);
    ТабДок.Вывести(Шапка);
    // Товары
    Область = Макет.ПолучитьОбласть("ТоварыШапка");
    ТабДок.Вывести(Область);
    ОбластьТовары = Макет.ПолучитьОбласть("Товары");
    Для Каждого ТекСтрокаТовары Из Товары Цикл
    ОбластьТовары.Параметры.Заполнить(ТекСтрокаТовары);
    ТабДок.Вывести(ОбластьТовары);
    КонецЦикла;
    ТабДок.ОтображатьСетку = Ложь;
    ТабДок.Защита = Истина;
    ТабДок.ТолькоПросмотр = Истина;
    ТабДок.ОтображатьЗаголовки = Ложь;
    ТабДок.Показать();
    КонецПроцедуры
    
    
    
    
    
  9. Kaboom
    Offline

    Kaboom Опытный в 1С

    Регистрация:
    2 июл 2007
    Сообщения:
    158
    Симпатии:
    0
    Баллы:
    26
    Тогда нужно сделать так:

    Код:
    Процедура Печать(ТабДок = 0) Экспорт
    Если ТипЗнч(ТабДок) <> Тип("ТабличныйДокумент") Тогда
    ТабДок = Новый ТабличныйДокумент;
    Иначе
    ТабДок.Очистить();
    КонецЕсли;
    ...  
    КонецПроцедуры
    
  10. TopicStarter Overlay
    SergeyF
    Offline

    SergeyF Опытный в 1С

    Регистрация:
    1 фев 2007
    Сообщения:
    1.378
    Симпатии:
    0
    Баллы:
    26
    {Обработка.ПечатьРасходных.Форма.Форма(2,12)}: Переменная не определена (ТабличныйДокумент)
    ТабДок = <<?>>ТабличныйДокумент;
    {Документ.РеализацияТоваров(2,25)}: Переменная не определена (ТабличныйДокумент)
    Если Тип(ТабДок) <> <<?>>ТабличныйДокумент Тогда
  11. Kaboom
    Offline

    Kaboom Опытный в 1С

    Регистрация:
    2 июл 2007
    Сообщения:
    158
    Симпатии:
    0
    Баллы:
    26
    Уже исправил :unsure:
  12. StarLight
    Offline

    StarLight Опытный в 1С

    Регистрация:
    28 июл 2009
    Сообщения:
    212
    Симпатии:
    0
    Баллы:
    26
    У меня вот тоже такая же проблема, которую уже час разрешить не могу.

    Код:
    Процедура Печать(ТабДок = 0) Экспорт
    Если ТипЗнч(ТабДок) <> Тип("ТабличныйДокумент") Тогда
    ТабДок = Новый ТабличныйДокумент;
    Иначе
    ТабДок.Очистить();
    КонецЕсли;
    Макет = Документы.РеализацияТоваров.ПолучитьМакет("Печать");
    // Заголовок
    Область = Макет.ПолучитьОбласть("Заголовок");
    ТабДок.Вывести(Область);
    // Шапка
    Шапка = Макет.ПолучитьОбласть("Шапка");
    Шапка.Параметры.Заполнить(ЭтотОбъект);
    ТабДок.Вывести(Шапка);
    // Товары
    Область = Макет.ПолучитьОбласть("ТоварыШапка");
    ТабДок.Вывести(Область);
    ОбластьТовары = Макет.ПолучитьОбласть("Товары");
    Для Каждого ТекСтрокаТовары Из Товары Цикл
    ОбластьТовары.Параметры.Заполнить(ТекСтрокаТовары);
    ТабДок.Вывести(ОбластьТовары);
    КонецЦикла;
    // Подвал
    Подвал = Макет.ПолучитьОбласть("Подвал");
    Подвал.Параметры.Заполнить(ЭтотОбъект);
    ТабДок.Вывести(Подвал);
    
    ТабДок.ОтображатьСетку = Ложь;
    ТабДок.Защита = Истина;
    ТабДок.ТолькоПросмотр = Истина;
    ТабДок.ОтображатьЗаголовки = Ложь;
    ТабДок.Показать();
    
    КонецПроцедуры
    
    и опять в конце ТабДок.Показать() и у меня все документы накладываются один на один и в итоге последний проведенный входит в табличный документ. Подскажите, пожалуйста, как это обойти?
  13. DmitryS
    Offline

    DmitryS Опытный в 1С

    Регистрация:
    20 июл 2007
    Сообщения:
    119
    Симпатии:
    0
    Баллы:
    26
    Вы же каждый раз при печати очередного документа очищаете результат печати предыдущего. Что если вместо "ТабДок.Очистить", попробовать "ТабДок.ВывестиГоризонтальныйРазделительСтраниц()"

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