Имя: Пароль:
1C
1С v8
Мой нелюбимый ПроверитьВывод()
0 Eskeych
 
28.12.21
12:51
Привет, столкнулся снова с этим методом. не получается корректно выводить таблицу и за ним нижний колонтитул(Это область в макете, табДок.НижнийКолонтитул не прокатит). Остается свободным примерно пол листа, а на следующий переходит 5 строк. Как с таким жить теперь?
1 mistеr
 
28.12.21
12:52
(0) Выводи пустые строки, пока есть место.

Или так и делаешь? Показывай.
2 Eskeych
 
28.12.21
12:53
МассивОбластей.Очистить();
    Пока ВыборкаНоменклатура.Следующий() Цикл
        Подзаголовок = Макет.ПолучитьОбласть("ДополнительноеОснащениеЗаголовок");
        Подзаголовок.Параметры.НаименованиеРаздела = ВыборкаНоменклатура.НаименованиеРаздела.Наименование;        
        МассивОбластей.Добавить(Подзаголовок);
        Выборка = ВыборкаНоменклатура.Выбрать();
        Пока Выборка.Следующий() Цикл
            ДопОснащениеСтрока = Макет.ПолучитьОбласть("ДопОснащениеСтрока");
            ЗаполнитьЗначенияСвойств(ДопОснащениеСтрока.Параметры, Выборка);
            МассивОбластей.Добавить(ДопОснащениеСтрока);
        КонецЦикла;
    КонецЦикла;
    МассивОбластей.Добавить(ОбластьНижнегоКолонтитула);
    
    Индекс = 0;
    МассивВывода = Новый Массив;
    Для Каждого Строка Из МассивОбластей Цикл
        МассивВывода.Добавить(Строка);
        Если ТабДокумент.ПроверитьВывод(МассивВывода) Тогда
            ТабДокумент.Вывести(Строка);
            //МассивВывода.Удалить(Индекс);
        Иначе
            ТабДокумент.Вывести(ОбластьНижнегоКолонтитула);
            ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
            КартинкаКолонтитула = Макет.ПолучитьОбласть("КартинкаКолонтитула");
            КартинкаКолонтитула.Параметры.НомерСтраницы = НомерСтраницыПечати;
            НомерДокумента = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(Ссылка.Номер);
            КартинкаКолонтитула.Параметры.НомерДокумента = НомерДокумента;
            КартинкаКолонтитула.Параметры.ДатаДокумента = Формат(Ссылка.Дата, "ДФ=dd.MM.yyyy");
            НомерСтраницыПечати = НомерСтраницыПечати + 1;
            табДокумент.Вывести(КартинкаКолонтитула);
            СводныеДанныеЗаголовок = Макет.ПолучитьОбласть("СводныеДанныеШапка");  
            ТабДокумент.Вывести(СводныеДанныеЗаголовок);
            
            
            ТабДокумент.Вывести(Строка);
            МассивОбластей.Удалить(Индекс);
            МассивВывода.Очистить();
        КонецЕсли;  
        //Индекс = Индекс + 1;
    КонецЦикла;
3 Eskeych
 
28.12.21
12:55
Делаю вот так:
1) Запихиваю все в массив;
2) пересчитывая строки по одной закидываю во второй и с него уже делаю проверку и вывожу в таб док.
3) если проверка не прошла, то выводим колонтитул, переходим на след лист и выводим дальше построчно
4 pechkin
 
28.12.21
12:56
Параметры печати нужно изначально устанавливать
5 Eskeych
 
28.12.21
12:58
В параметрах и так стоит автомасштаб и ориентация
пробовал после каждого вывода чистить МассивВывода, но тогда он выводит будто бы проверки и нет.
6 Serg_1960
 
28.12.21
13:06
(2) Вы зря закомментировали строку. Теперь у Вас в МассивВывода накапливаются строки, которые Вы уже вывели в документ.
7 Eskeych
 
28.12.21
13:07
если его удалять то он отрабатывает так, будто бы проверки нет вовсе
8 Serg_1960
 
28.12.21
13:14
(7) До разделителя страниц, Вы выводите ОбластьНижнегоКолонтитула - имхо, особо не заморачиваясь изучением алгоритма, нужно проверять вывод Строка + ОбластьНижнегоКолонтитула.
9 pechkin
 
28.12.21
13:39
(5) а поля когда задаются?
10 Serg_1960
 
28.12.21
13:45
Имхо:
...
МассивВывода = Новый Массив;
МассивВывода.Добавить(Строка);
МассивВывода.Добавить(ОбластьНижнегоКолонтитула);
Если ТабДокумент.ПроверитьВывод(МассивВывода) Тогда
   ТабДокумент.Вывести(Строка);
Иначе
...
11 Eskeych
 
28.12.21
13:59
Сделал вот так вот:     
МассивОбластей.Очистить();
    Пока ВыборкаНоменклатура.Следующий() Цикл
        Подзаголовок = Макет.ПолучитьОбласть("ДополнительноеОснащениеЗаголовок");
        Подзаголовок.Параметры.НаименованиеРаздела = ВыборкаНоменклатура.НаименованиеРаздела.Наименование;        
        МассивОбластей.Добавить(Подзаголовок);
        Выборка = ВыборкаНоменклатура.Выбрать();
        Пока Выборка.Следующий() Цикл
            ДопОснащениеСтрока = Макет.ПолучитьОбласть("ДопОснащениеСтрока");
            ЗаполнитьЗначенияСвойств(ДопОснащениеСтрока.Параметры, Выборка);
            МассивОбластей.Добавить(ДопОснащениеСтрока);
        КонецЦикла;
    КонецЦикла;
    
    МассивПодвала = Новый Массив;
    МассивПодвала.Добавить(ОбластьПустойСтроки);
    МассивПодвала.Добавить(ОбластьПустойСтроки);
    МассивПодвала.Добавить(ОбластьПустойСтроки);
    МассивПодвала.Добавить(ОбластьНижнегоКолонтитула);
    
    Индекс = 0;
    МассивВывода = Новый Массив;
    Для Каждого Строка Из МассивОбластей Цикл
        МассивВывода.Добавить(Строка);
        
        Если ТабДокумент.ПроверитьВывод(МассивВывода) Тогда
            Если НЕ ТабДокумент.ПроверитьВывод(МассивПодвала) Тогда
                ТабДокумент.Вывести(ОбластьПустойСтроки);
                ТабДокумент.Вывести(ОбластьНижнегоКолонтитула);
                ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
                КартинкаКолонтитула = Макет.ПолучитьОбласть("КартинкаКолонтитула");
                КартинкаКолонтитула.Параметры.НомерСтраницы = НомерСтраницыПечати;
                НомерДокумента = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(Ссылка.Номер);
                КартинкаКолонтитула.Параметры.НомерДокумента = НомерДокумента;
                КартинкаКолонтитула.Параметры.ДатаДокумента = Формат(Ссылка.Дата, "ДФ=dd.MM.yyyy");
                НомерСтраницыПечати = НомерСтраницыПечати + 1;
                табДокумент.Вывести(КартинкаКолонтитула);
                СводныеДанныеЗаголовок = Макет.ПолучитьОбласть("СводныеДанныеШапка");  
                ТабДокумент.Вывести(СводныеДанныеЗаголовок);
            КонецЕсли;
            ТабДокумент.Вывести(Строка);
            МассивВывода.Очистить();
        КонецЕсли;  
        Индекс = Индекс + 1;
    КонецЦикла;
    
    Структура = СформироватьСтруктуруИтоговПервойТаблицы(Ссылка);
    СводныеДанныеИтог = Макет.ПолучитьОбласть("СводныеДанныеИтог");
    ЗаполнитьЗначенияСвойств(СводныеДанныеИтог.Параметры, Структура);
    ТабДокумент.Вывести(СводныеДанныеИтог);
    СводныеДанныеОбщаяСтоимость = Макет.ПолучитьОбласть("СводныеДанныеОбщаяСтоимость");  
    ЗаполнитьЗначенияСвойств(СводныеДанныеОбщаяСтоимость.Параметры, Структура);
    ТабДокумент.Вывести(СводныеДанныеОбщаяСтоимость);
    
    Пока ТабДокумент.ПроверитьВывод(МассивПодвала) Цикл
        ТабДокумент.Вывести(ОбластьПустойСтроки);
    КонецЦикла;
    ТабДокумент.Вывести(ОбластьПустойСтроки);
    ТабДокумент.Вывести(ОбластьНижнегоКолонтитула);
Ошибка? Это не ошибка, это системная функция.