Имя: Пароль:
1C
1С v8
Повторение области печати на каждой странице
0 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;
                    ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
                КонецЕсли;    
            КонецЕсли;
            
            Если НЕ ТабДокумент.ПроверитьВывод(ПоследниеСтроки) Тогда
                
                ОбластьМакетаСрез = Макет.ПолучитьОбласть("ПовторениеСреза");
                ТабДокумент.Вывести(ОбластьМакетаСрез);
                
            КонецЕсли;
            
        КонецЦикла;
1 KoalaJustKoala
 
25.05.21
06:38
https://prnt.sc/13dlg5o
Прикладываю скриншот самого макета
2 mhpopov
 
25.05.21
06:40
Для 3-й страницы у тебя условие наверно не отрабатывает

Если НЕ ТабДокумент.ПроверитьВывод(ПоследниеСтроки) Тогда
3 mhpopov
 
25.05.21
06:43
Может быть так?

ОбластьДанных = Макет.ПолучитьОбласть("Товар");
        
        ИтогоСуммаВРозницеСтарая = 0;
        ИтогоСуммаВРознице = 0;
        Ном        = 0;
        
        ПоследниеСтроки = Новый Массив;
        ПоследниеСтроки.Добавить(ОбластьДанных);
        //// Товары
        Пока ВыборкаСтрокТовары.Следующий() Цикл
            
            Если Не ЗначениеЗаполнено(ВыборкаСтрокТовары.Номенклатура) Тогда
                Сообщить("В одной из строк не заполнено значение номенклатуры - строка при печати пропущена.", СтатусСообщения.Важное);
                Продолжить;
            КонецЕсли;
            
            Ном = Ном + 1;
            
            //        ОбластьНомера.Параметры.Заполнить(ВыборкаСтрокТовары);
            //        ОбластьНомера.Параметры.НомерСтроки = Ном;
            //        ТабДокумент.Вывести(ОбластьНомера);
            
            //    Если ВыводитьКоды Тогда
            //        Если Колонка = "Артикул" Тогда
            //            ОбластьКодов.Параметры.Артикул = ВыборкаСтрокТовары.Артикул;
            //        Иначе
            //            ОбластьКодов.Параметры.Артикул = ВыборкаСтрокТовары.Код;
            //        КонецЕсли;
            //        ТабДокумент.Присоединить(ОбластьКодов);
            //    КонецЕсли;
            
            ОбластьДанных.Параметры.Заполнить(ВыборкаСтрокТовары);
            ОбластьДанных.Параметры.НомерСтроки = Ном;
            ОбластьДанных.Параметры.Товар = СокрЛП(ВыборкаСтрокТовары.Товар);
            // + УниверсальныеМеханизмы.ПредставлениеХарактеристик(ВыборкаСтрокТовары);
            ИтогоСуммаВРозницеСтарая =ИтогоСуммаВРозницеСтарая+ОбластьДанных.Параметры.СуммаВРозницеСтарая;
            ИтогоСуммаВРознице=ИтогоСуммаВРознице+ОбластьДанных.Параметры.СуммаВРознице;
            ТабДокумент.Вывести(ОбластьДанных);
            
            //    СуммаИтого = СуммаИтого + ОбластьДанных.Параметры.Сумма;
            Если Ном>28 Тогда
                НМР=НМР+1;
                Если НМР=30 Тогда
                    НМР=0;
                    ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();

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

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

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