Имя: Пароль:
1C
1С v8
Вывод табличного документа
0 новичок12345
 
24.07.12
07:51
Уважаемые специалисты, прошу помощи, что -то запутался с циклами и вложенностью их друг в друга.
Ситуация такая: нужно вывести на печать табличный документ. При чем, если количество товаров превышает 4, то вывести эти 4 товара на одной странице, потом подвал, а оставшиеся товары вывести на новой странице.
И что-то я не могу понять как это сделать. Решил сделать новым макетом. То есть пока количество меньше 5 выводим один макет, а потом другой. В первом макете есть и строка для товаров и подвал, а в новом макете только строка для товаров. Код такой:

n = 0;
   
       Для каждого СтрокаТаблицыЗначений Из ЗапросЭлементы Цикл
           n = n + 1;
           Если n<3 Тогда
           
           ОбластьМакета = Макет.ПолучитьОбласть("Элементы");
           
           ОбластьМакета.Параметры.Заполнить(СтрокаТаблицыЗначений);
           Попытка
               
               Д = СокрЛП(Строка(Формат(СтрокаТаблицыЗначений.ДатаВыработки,"ДФ=dd.MM.yy")));
               КолДнейДобавить = 10*24*60*60;
               Д10 = СокрЛП(Строка(Формат(СтрокаТаблицыЗначений.ДатаВыработки + КолДнейДобавить,"ДФ=dd.MM.yy")));
               ОбластьМакета.Параметры.ДатаВыработки = Д + "-" + Д10;
               
           Исключение
               
           КонецПопытки;
           
           ОбластьМакета.Параметры.НаименованиеПродукции = СокрЛП(СтрокаТаблицыЗначений.Номенклатура);
           ОбластьМакета.Параметры.ПроизводительПродукции = СокрЛП(СтрокаТаблицыЗначений.Организация.Наименование);
           ОбластьМакета.Параметры.Вес = СокрЛП(СтрокаТаблицыЗначений.Вес);
           
           ТабДокумент.Вывести(ОбластьМакета);
       Иначе
               Макет1 = ПолучитьМакет("Макет1");
           ОбластьМакета1 = Макет1.ПолучитьОбласть("Элементы1");
           
           ОбластьМакета1.Параметры.Заполнить(СтрокаТаблицыЗначений);
           Попытка
               
               Д = СокрЛП(Строка(Формат(СтрокаТаблицыЗначений.ДатаВыработки,"ДФ=dd.MM.yy")));
               КолДнейДобавить = 10*24*60*60;
               Д10 = СокрЛП(Строка(Формат(СтрокаТаблицыЗначений.ДатаВыработки + КолДнейДобавить,"ДФ=dd.MM.yy")));
               ОбластьМакета1.Параметры.ДатаВыработки1 = Д + "-" + Д10;
               
           Исключение
               
           КонецПопытки;
           
           ОбластьМакета1.Параметры.НаименованиеПродукции1 = СокрЛП(СтрокаТаблицыЗначений.Номенклатура);
           ОбластьМакета1.Параметры.ПроизводительПродукции1 = СокрЛП(СтрокаТаблицыЗначений.Организация.Наименование);
           ОбластьМакета1.Параметры.Вес1 = СокрЛП(СтрокаТаблицыЗначений.Вес);
           
           ТабДокумент.Вывести(ОбластьМакета1);
       КонецЕсли ;
   
       КонецЦикла;
       
                       
       ОбластьМакета = Макет.ПолучитьОбласть("Подвал");
       ОбластьМакета.Параметры.ПунктОтправления = Подвал.Организация.НаименованиеПолное;
       ОбластьМакета.Параметры.НаименованиеПолучателя = Подвал.Контрагент.НаименованиеПолное;
       ОбластьМакета.Параметры.НомерВетДокумента = СокрЛП(Строка(Подвал.ВетДок) + " " + Строка(Подвал.ВетДок1));
       ОбластьМакета.Параметры.ДолжностьВетСпециалиста = Подвал.Должность;
       ОбластьМакета.Параметры.ФИОСпециалиста = Подвал.ФИОВрач;
       ТабДокумент.Вывести(ОбластьМакета);
       ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();        
       
Вообщем, не могу понять где сделать разрыв, и не могу понять как выстроить правильно цикл, чтобы все шло в том порядке, в котором мне нужно. Заранее спасибо
1 Wobland
 
24.07.12
08:02
не читал. ПовторятьПриПечатиСтроки изучал?
2 новичок12345
 
24.07.12
08:11
(1) нет. Это в табличной части устанавливается в свойствах? а как сделать что-бы этот диапазон выводился с определенного элемента? и как это можно в коде задать. Все равно не очень понимаю куда это нужно вставить..
3 Мимохожий Однако
 
24.07.12
08:36
Посмотри типовую ТОРГ12. Там есть пример.
4 новичок12345
 
24.07.12
09:33
(3) Сейчас в ней посмотрю
5 новичок12345
 
25.07.12
15:18
(1)(3) Спасибо всем большое. Похоже ПовторятьПриПечатиСтроки мне не подходит. По-крайней мере я не понял как бы это было возможно сделать. Посмотрел В ТОРГ-12 там просто идет проверка на вмещение данных в страницу, но это навело меня на мысль, с помощью которой я и решил поставленную задачу! Использовал копию таблицы значений.
Еще раз все огромное спасибо за помощь!
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший