Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Повторение области печати на каждой странице

Повторение области печати на каждой странице
Я
   KoalaJustKoala
 
25.05.21 - 06:20
Доброго времени суток!
С утра прилетел небольшой баг, дублирует срезы на первых двух страницах, а на 3й не хочет (вчера не было возможности тестировать на более чем 2х листах)
Вот скриншот 1стр:
https://prnt.sc/13dknre
Вот скриншот 2стр:
https://prnt.sc/13dko6o
и скриншот 3ей:
https://prnt.sc/13dkox1

Как видно, на трейтьей нет среза как на 1й или 2й.

Вот код для лучше понимания что я делал и как:

ОбластьДанных = Макет.ПолучитьОбласть("Товар");
        
        ИтогоСуммаВРозницеСтарая = 0;
        ИтогоСуммаВРознице = 0;
        Ном        = 0;
        
        ПоследниеСтроки = Новый Массив;
        ПоследниеСтроки.Добавить(ОбластьДанных);
        //// Товары
        Пока ВыборкаСтрокТовары.Следующий() Цикл
            
            Если Не ЗначениеЗаполнено(ВыборкаСтрокТовары.Номенклатура) Тогда
                Сообщить("В одной из строк не заполнено значение номенклатуры - строка при печати пропущена.", СтатусСообщения.Важное);
                Продолжить;
            КонецЕсли;
            
            Ном = Ном + 1;
            
            //        ОбластьНомера.Параметры.Заполнить(ВыборкаСтрокТовары);
            //        ОбластьНомера.Параметры.НомерСтроки = Ном;
            //        ТабДокумент.Вывести(ОбластьНомера);
            
            //    Если ВыводитьКоды Тогда
            //        Если Колонка = "Артикул" Тогда
            //            ОбластьКодов.Параметры.Артикул = ВыборкаСтрокТовары.Артикул;
            //        Иначе
            //            ОбластьКодов.Параметры.Артикул = ВыборкаСтрокТовары.Код;
            //        КонецЕсли;
            //        ТабДокумент.Присоединить(ОбластьКодов);
            //    КонецЕсли;
            
            ОбластьДанных.Параметры.Заполнить(ВыборкаСтрокТовары);
            ОбластьДанных.Параметры.НомерСтроки = Ном;
            ОбластьДанных.Параметры.Товар = СокрЛП(ВыборкаСтрокТовары.Товар);
            // + УниверсальныеМеханизмы.ПредставлениеХарактеристик(ВыборкаСтрокТовары);
            ИтогоСуммаВРозницеСтарая =ИтогоСуммаВРозницеСтарая+ОбластьДанных.Параметры.СуммаВРозницеСтарая;
            ИтогоСуммаВРознице=ИтогоСуммаВРознице+ОбластьДанных.Параметры.СуммаВРознице;
            ТабДокумент.Вывести(ОбластьДанных);
            
            //    СуммаИтого = СуммаИтого + ОбластьДанных.Параметры.Сумма;
            Если Ном>28 Тогда
                НМР=НМР+1;
                Если НМР=30 Тогда
                    НМР=0;
                    ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
                КонецЕсли;    
            КонецЕсли;
            
            Если НЕ ТабДокумент.ПроверитьВывод(ПоследниеСтроки) Тогда
                
                ОбластьМакетаСрез = Макет.ПолучитьОбласть("ПовторениеСреза");
                ТабДокумент.Вывести(ОбластьМакетаСрез);
                
            КонецЕсли;
            
        КонецЦикла;
 
 Партнерская программа EFSOL Oblako
   KoalaJustKoala
 
1 - 25.05.21 - 06:38
https://prnt.sc/13dlg5o
Прикладываю скриншот самого макета
   mhpopov
 
2 - 25.05.21 - 06:40
Для 3-й страницы у тебя условие наверно не отрабатывает

Если НЕ ТабДокумент.ПроверитьВывод(ПоследниеСтроки) Тогда
   mhpopov
 
3 - 25.05.21 - 06:43
Может быть так?
ОбластьДанных = Макет.ПолучитьОбласть("Товар");
        
        ИтогоСуммаВРозницеСтарая = 0;
        ИтогоСуммаВРознице = 0;
        Ном        = 0;
        
        ПоследниеСтроки = Новый Массив;
        ПоследниеСтроки.Добавить(ОбластьДанных);
        //// Товары

        Пока ВыборкаСтрокТовары.Следующий() Цикл
            
            Если Не ЗначениеЗаполнено(ВыборкаСтрокТовары.Номенклатура) Тогда
                Сообщить("В одной из строк не заполнено значение номенклатуры - строка при печати пропущена.", СтатусСообщения.Важное);
                Продолжить;
            КонецЕсли;
            
            Ном = Ном + 1;
            
            //        ОбластьНомера.Параметры.Заполнить(ВыборкаСтрокТовары);

            //        ОбластьНомера.Параметры.НомерСтроки = Ном;

            //        ТабДокумент.Вывести(ОбластьНомера);

            
            //    Если ВыводитьКоды Тогда

            //        Если Колонка = "Артикул" Тогда

            //            ОбластьКодов.Параметры.Артикул = ВыборкаСтрокТовары.Артикул;

            //        Иначе

            //            ОбластьКодов.Параметры.Артикул = ВыборкаСтрокТовары.Код;

            //        КонецЕсли;

            //        ТабДокумент.Присоединить(ОбластьКодов);

            //    КонецЕсли;

            
            ОбластьДанных.Параметры.Заполнить(ВыборкаСтрокТовары);
            ОбластьДанных.Параметры.НомерСтроки = Ном;
            ОбластьДанных.Параметры.Товар = СокрЛП(ВыборкаСтрокТовары.Товар);
            // + УниверсальныеМеханизмы.ПредставлениеХарактеристик(ВыборкаСтрокТовары);

            ИтогоСуммаВРозницеСтарая =ИтогоСуммаВРозницеСтарая+ОбластьДанных.Параметры.СуммаВРозницеСтарая;
            ИтогоСуммаВРознице=ИтогоСуммаВРознице+ОбластьДанных.Параметры.СуммаВРознице;
            ТабДокумент.Вывести(ОбластьДанных);
            
            //    СуммаИтого = СуммаИтого + ОбластьДанных.Параметры.Сумма;

            Если Ном>28 Тогда
                НМР=НМР+1;
                Если НМР=30 Тогда
                    НМР=0;
                    ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();

                    ОбластьМакетаСрез = Макет.ПолучитьОбласть("ПовторениеСреза");
                    ТабДокумент.Вывести(ОбластьМакетаСрез);
                КонецЕсли;    
            КонецЕсли;
            
        КонецЦикла;
   KoalaJustKoala
 
4 - 25.05.21 - 06:51
Кстати, сейчас перенес раздилитель в свое условие, и все начало печататься адекватно
   KoalaJustKoala
 
5 - 25.05.21 - 06:52
То есть, вот это условие
Если Ном>28 Тогда
                НМР=НМР+1;
                Если НМР=30 Тогда
                    НМР=0;
                    ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
                КонецЕсли;    
            КонецЕсли;

выходило куда-то не туда
   KoalaJustKoala
 
6 - 25.05.21 - 06:56
Если НЕ ТабДокумент.ПроверитьВывод(ПоследниеСтроки) Тогда
                
                ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
                ОбластьМакетаСрез = Макет.ПолучитьОбласть("ПовторениеСреза");
                ТабДокумент.Вывести(ОбластьМакетаСрез);
                
            КонецЕсли;

Переписал вот в такое и вуаля, все печатает красиво и как надо...
Видимо, нужно на будущее проверять на визуал и стараться все делать в одном условии
   KoalaJustKoala
 
7 - 25.05.21 - 07:38
Вообщем, сейчас пробовал подобное с другим документом...
И насколько понял, ГоризонтальныйРазделитель очень сильно способствует, полезная инфа на будущее однако..

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.