Имя: Пароль:
1C
1С v8
Проблема с проверить вывод
0 Альбатрос
 
18.11.14
11:07
код:

Макет = ПолучитьМакет("Макет");
    ТабДок = Новый ТабличныйДокумент;
    ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
    ТабДок.ПолеСверху     = 13;
    ТабДок.ПолеСлева      = 0;
    ТабДок.ПолеСнизу      = 0;
    ТабДок.ПолеСправа     = 0;
    ТабДок.АвтоМасштаб    = Истина;

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


    // Выведем заголовок.
    СведенияОПокупателе = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Организация, КонПериода);
  
    ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");
     МассивВыводимыхОбластей.Добавить(ОбластьМакета);


    ОбластьМакета.Параметры.ОрганизацияПредставление = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПокупателе);
    ОбластьМакета.Параметры.ДатаСоставления = РабочаяДата;
    ОбластьМакета.Параметры.ДатаНачала = НачПериода;
    ОбластьМакета.Параметры.ДатаКонца = КонПериода;
    ОбластьМакета.Параметры.Склад = Подразделение;
    ОбластьМакета.Параметры.ОрганизацияПоОКПО = СведенияОПокупателе.КодПоОКПО;

    ВысотаЗаголовка = ОбластьМакета.ВысотаТаблицы;

    ТабДок.Вывести(ОбластьМакета);
    
    ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
    МассивВыводимыхОбластей.Добавить(ОбластьМакета);

    ПовторятьПриПечатиСтроки = ТабДок.Область(1 + ВысотаЗаголовка, ,2 + ВысотаЗаголовка);

    ТабДок.Вывести(ОбластьМакета);

    
    ОбластьМакета = Макет.ПолучитьОбласть("ОстатокНачала");
    МассивВыводимыхОбластей.Добавить(ОбластьМакета);

    ОбластьМакета.Параметры.ДатаНачала = "Остаток на " + Формат(НачПериода, "ДЛФ=Д");
    ОбластьМакета.Параметры.НачСтоимостьВсего = ОбщегоНазначения.ФорматСумм(НачальныйОстаток);
    ТабДок.Вывести(ОбластьМакета);
    
    ОбластьМакета = Макет.ПолучитьОбласть("Приход");
    МассивВыводимыхОбластей.Добавить(ОбластьМакета);

    ТабДок.Вывести(ОбластьМакета);
    КолвоСтраниц = 1;
    ОбластьМакета = Макет.ПолучитьОбласть("Строка");
    
    Для Каждого СтрокаПрихода Из ТЗПриходы Цикл
        ОбластьМакета.Параметры.Докум = СтрокаПрихода.Регистратор;
        ОбластьМакета.Параметры.Расшифровка = СтрокаПрихода.Регистратор;
        ОбластьМакета.Параметры.ДатаДокумента = СтрокаПрихода.Регистратор.Дата;
        ОбластьМакета.Параметры.НомерДокумента = СтрокаПрихода.Регистратор.Номер;
        ОбластьМакета.Параметры.СуммаТовара = ОбщегоНазначения.ФорматСумм(СтрокаПрихода.СуммаПриход);
        МассивВыводимыхОбластей.Добавить(ОбластьМакета);
        Если НЕ ТабДок.ПроверитьВывод(МассивВыводимыхОбластей) тогда
            ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
            КолВоСТраниц = КолВоСтраниц + 1;
            МассивВыводимыхОбластей.Очистить();
        КонецЕсли;

        ТабДок.Вывести(ОбластьМакета);
    КонецЦикла;
    
    Приход = ТЗПриходы.Итог("СуммаПриход");

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


По итогу разделитель вставляется по середине страницы. Что я не указал?
1 Fragster
 
гуру
18.11.14
11:13
код не читал, но ТабДок.проверитьВывод(Область) определяет, будет ли изменение количества страниц, если сделать ТабДок.Вывести(Облать)
2 Альбатрос
 
18.11.14
11:15
(1) То есть мне не надо накапливать в массив области, так получается?
3 Fragster
 
гуру
18.11.14
11:16
(2) нет
4 hhhh
 
18.11.14
11:18
(2) получается, так как массив выводимых областей = выведенному в ТабДок, по законам арифметики ТабДок занимает половину станицы и массив половину страницы. Проверка четко срабатывает.
5 Альбатрос
 
18.11.14
11:19
(3) Спасибо, так и есть. И еще маленький вопросик - как вывести пустую страницу?
6 Fish
 
18.11.14
11:19
(5) ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
7 Fragster
 
гуру
18.11.14
11:20
Табдок.ВывестиГ+контролпробел
8 Альбатрос
 
18.11.14
11:28
(6) Нужно не просто разделитель, а именно пустой лист.
9 Jaffar
 
18.11.14
11:31
вангую: два горизонтальных разделителя подряд выведут пустой лист.
10 Альбатрос
 
18.11.14
11:35
(9) а вот и не верно ))) Проверил только что
11 Альбатрос
 
18.11.14
11:37
Короче тупо выделил пустую строку в область и вывожу ее, затем разделитель. Так канает.