Имя: Пароль:
1C
1С v8
Печать подвала с последними двумя строками таблицы
,
0 StackOverflow
 
10.08.18
09:57
Всем привет.
Самописная конфа, много печатных форм. Просят чтобы подвал печатался с двумя последними строками таблицы, если он не помещается на текущий лист. Подскажите пожалуйста, как получше реализовать. Хочу сделать без подсчета строк с использованием метода ПроверитьВывод()

Проблема в том что во множестве печатных форм в одну и ту же переменную ОбластьМакета поэтапно присваиваются разные значения, сначала Область строка, потом область Итого, потом область Подвал.

вот кусок кода с моей проверкой, помещается ли строка таблицы на текущий лист, а вот как дальше сделать, чтобы печатало подвал с двумя последними строками таблицы пока не соображу. Подскажите пожалуйста, братцы =)

....

ОбластьМакета = Макет.ПолучитьОбласть("Строка");
    Ном=0;
    Для Каждого Тек Из ВремТаб Цикл  
        Серия=СокрЛП(Тек.Серия);
        
        Ном=Ном+1;
        ОбластьМакета.Параметры.Заполнить(Тек);
        ОбластьМакета.Параметры.Номер                       = Ном;                      
        ОбластьМакета.Параметры.ПредставлениеТовара         = ПредставлениеТовара(Тек);
        ОбластьМакета.Параметры.Производитель                = Тек.Производитель;
        ОбластьМакета.Параметры.КодЕдиницыИзмерения            = Тек.Единица.Код;
        ОбластьМакета.Параметры.ЕдиницаИзмерения            = Тек.Единица.Наименование;
        ОбластьМакета.Параметры.Количество                    = Тек.Количество;
        ОбластьМакета.Параметры.Брутто                        = Тек.Брутто;
        ОбластьМакета.Параметры.Нетто                        = Тек.Нетто;
        ОбластьМакета.Параметры.Цена                        = Формат(Тек.ЦенаПокупателя, "ЧДЦ="+СокрЛП(Док.Округление));//+?(Число(Док.Валюта.Код)=810,"2","4"));
        ОбластьМакета.Параметры.Стоимость                    = Тек.СуммаПокупателя;
        ОбластьМакета.Параметры.Акциз                        = "-";
        ОбластьМакета.Параметры.СтавкаНДС                    = ?(Тек.НДСПокупателя>0,Тек.СтавкаНДС,"0%");
        ОбластьМакета.Параметры.СуммаНДС                    = Тек.НДСПокупателя;
        ОбластьМакета.Параметры.Всего                        = Тек.СуммаПокупателя + Тек.НДСПокупателя;
        ОбластьМакета.Параметры.КодСтраны                    = Тек.СтранаПроисхождения.Код;
        ОбластьМакета.Параметры.ПредставлениеСтраны            = Тек.СтранаПроисхождения.Сокращение;
        ОбластьМакета.Параметры.ПредставлениеГТД            = Тек.НомерГТД;
        ОбластьМакета.Параметры.Серия                       = Тек.Серия;
        ОбластьМакета.Параметры.СрокГодности                = Тек.ГоденДо;
        
                        
        //Проверка помещается ли на страницу//
        Если Не ТабДокумент.ПроверитьВывод(ОбластьМакета) Тогда
        Сообщить("Документ не умещается на страницу!");
        ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
        КонецЕсли;
        
        ТабДокумент.Вывести(ОбластьМакета);
        
        // увеличим итоги по дукументу
        ИтогоСумма=ИтогоСумма+Тек.СуммаПокупателя;
        ИтогоСуммаНДС=ИтогоСуммаНДС+Тек.НДСПокупателя;
        ИтогоНетто=ИтогоНетто+Тек.Нетто;
        ИтогоБрутто=ИтогоБрутто+Тек.Брутто;
        ИтогоКоличество=ИтогоКоличество+Тек.Количество;
        ИтогоКолМест=ИтогоКолМест+Тек.КолМест;
        ИтогоСумма2=ИтогоСумма2+Тек.Сумма;
    КонецЦикла;
    
    // Выводим подвал документа
    ОбластьМакета = Макет.ПолучитьОбласть("Итого");
    ОбластьМакета.Параметры.ИтогоСумма      = ИтогоСумма;
    ОбластьМакета.Параметры.ИтогоСуммаНДС   = ИтогоСуммаНДС;
    ОбластьМакета.Параметры.ИтогоВсего      = ИтогоСуммаНДС+ИтогоСумма;
    ОбластьМакета.Параметры.ИтогоНетто      = ИтогоНетто;
    ОбластьМакета.Параметры.ИтогоБрутто     = ИтогоБрутто;
    ОбластьМакета.Параметры.ИтогоКоличество = ИтогоКоличество;
    ОбластьМакета.Параметры.ИтогоКолМест    = ИтогоКолМест;
    ТабДокумент.Вывести(ОбластьМакета);
    
    Если Док.Скидка Тогда
        ОбластьМакета = Макет.ПолучитьОбласть("Скидка");
        ОбластьМакета.Параметры.ИтогоСкидка = ИтогоСуммаНДС + ИтогоСумма - ИтогоСумма2;
        ОбластьМакета.Параметры.ИтогоКОплате= ИтогоСумма2;
        ТабДокумент.Вывести(ОбластьМакета);
    КонецЕсли;
    
    
    // Выводим подвал документа
    ОбластьМакета = Макет.ПолучитьОбласть("Подвал");
    ТабДокумент.Вывести(ОбластьМакета);
    
    // Зададим параметры макета
    ТабДокумент.ПолеСверху              = 5;
    ТабДокумент.ПолеСлева               = 5;
    ТабДокумент.ПолеСнизу               = 5;
    ТабДокумент.ПолеСправа              = 5;
    ТабДокумент.РазмерКолонтитулаСверху = 0;
    ТабДокумент.РазмерКолонтитулаСнизу  = 0;
    ТабДокумент.АвтоМасштаб             = Истина;
    ТабДокумент.ОриентацияСтраницы      = ОриентацияСтраницы.Ландшафт;
    ТабДокумент.ОтображатьСетку         = Ложь;
    ТабДокумент.ОтображатьЗаголовки     = Ложь;
    
ну и так далее...
1 Малыш Джон
 
10.08.18
10:03
(0) параллельно с областью вывода, на которую проверяешь этот вывод, формируй отдельно массив из областей-строк, и если после проверки вывода, оказывается что на следующую страницу переносится только подвал, то формируй область вывода из массива без двух последних строк
2 1c_asadi
 
10.08.18
12:21
(0)             Счётчик = Счётчик + 1;
        МассивОбластей = Новый Массив;
        
        Если Счётчик = Данные.Количество() Тогда
            МассивОбластей.Добавить(Макет.ПолучитьОбласть("ОбластьУсловия"));
            МассивОбластей.Добавить(Макет.ПолучитьОбласть("ОбластьИтого"));
            МассивОбластей.Добавить(Макет.ПолучитьОбласть("ОбластьПодписи"));
        КонецЕсли;                     
                
        Область.Параметры.НомерСтроки = Область.Параметры.НомерСтроки+1;
        Область.Параметры.Товар = Строка.Номенклатура;
        Область.Параметры.ЕдиницаИзмерения = Строка.ЕдиницаИзмерения;
        Область.Параметры.Количество = Строка.Количество;
        Область.Параметры.Цена = Формат(Строка.Цена/1.18,"ЧДЦ=2");
        Область.Параметры.Стоимость = Формат(Строка.Сумма - Строка.СуммаНДС,"ЧДЦ=2");
        Область.Параметры.НДС = Формат(Строка.СуммаНДС,"ЧДЦ=2");
        Область.Параметры.СтоимостьСНДС = Формат(Строка.Сумма,"ЧДЦ=2");
        
        МассивОбластей.Добавить(Область);         
        Если НЕ ТабличныйДокумент.ПроверитьВывод(МассивОбластей) Тогда
            ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
            Область1 = Макет.ПолучитьОбласть("ОбластьШапка");
            ТабличныйДокумент.Вывести(Область1);
        КонецЕсли;
        
        ТабличныйДокумент.Присоединить(Область);


у меня вот так сделано, но мне надо одну строку переносить и шапку на следующую страницу, ну и соответственно подвал
3 1c_asadi
 
10.08.18
12:22
+ (2) похоже надо проверять когда ВремТаб.Количество() - 1 = Ном в вашем случае
4 1c_asadi
 
10.08.18
12:23
+(3) добавлять подвал* , а не проверять
5 StackOverflow
 
10.08.18
14:31
(2) Спасибо за наводку, пробовал этим методом, но пока не получается.
6 StackOverflow
 
10.08.18
15:01
Пока застрял на
...

МассивОбластей = Новый Массив;

    ОбластьМакета = Макет.ПолучитьОбласть("Строка");
    Ном=0;
    Для Каждого Тек Из ВремТаб Цикл           
        
        Если Ном = ВремТаб.Количество() - 2 Тогда
            МассивОбластей.Добавить(ОбластьМакета);
            Подвал = Макет.ПолучитьОбласть("Подвал");
        КонецЕсли;
        
            Если Не ТабДокумент.ПроверитьВывод(Подвал) Тогда            
                Сообщить("Подвал не помещается");
            КонецЕсли;  


        Ном=Ном+1;
        ОбластьМакета.Параметры.Заполнить(Тек);
        ОбластьМакета.Параметры.Номер                       = Ном;                      
        ОбластьМакета.Параметры.ПредставлениеТовара         = ПредставлениеТовара(Тек);
        ОбластьМакета.Параметры.Производитель                = Тек.Производитель;
        ОбластьМакета.Параметры.КодЕдиницыИзмерения            = Тек.Единица.Код;
7 spiller26
 
10.08.18
15:03
(7) Посмотри стандартные выводы той же Торг-12 в конфе.
8 RomanYS
 
10.08.18
15:07
ТабДок.Область(НомерПредпоследнейСтрокиТаблицы,,НомерПоследнейСтрокиТаблицы,).ВместеСоСледующим = Истина;
Ошибка? Это не ошибка, это системная функция.