Имя: Пароль:
1C
1С v8
Вывод подписей на каждой странице пф
0 ghostrid3r
 
06.09.12
16:06
Добрый день подскажите пожалуйста. есть область подписей, которая должна выводится для каждой страницы ПФ. На данный момент выводится номенклатура до конца страницы, а потом на следующей продолжается. Теперь на каждую страницу нужно добавить подписи. Я понимаю что нужно сделать массив областей, и проверять влазят ли области. Но куда впихнуть эту проверку я не знаю.
Вот цикл который проверяет влазит ли номенклатура на лист или нет.

Пока ВыборкаПоТоварам.Следующий() Цикл
       ВыборкаСтрокаПоТоварам = ВыборкаПоТоварам.Выбрать();
       ТабДокумент.ПолеСнизу         = 20;
       СледующаяСтраница = Ложь;
       Пока ВыборкаСтрокаПоТоварам.Следующий() Цикл
           Если Не СледующаяСтраница Тогда
               ОбластьМакета                 = Макет.ПолучитьОбласть("Строка");
           КонецЕсли;
           Если Не ТабДокумент.ПроверитьВывод(ОбластьМакета) Тогда
           
               ОбластьМакета                 = Макет.ПолучитьОбласть("Итого");
               ОбластьМакета.Параметры.КоличествоБУИтого = КоличествоБУИтого;
               ОбластьМакета.Параметры.КоличествоИтогоПоФакту = КоличествоИтогоПоФакту;
               ОбластьМакета.Параметры.СтоимостьБУИтого = СтоимостьБУИтого;
               ОбластьМакета.Параметры.СтоимостьПоФактуИтого = СтоимостьПоФактуИтого;
               ТабДокумент.Вывести(ОбластьМакета);
               ТабДокумент.ПолеСнизу         = 10;
               
               ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
               ТабДокумент.Вывести(ОбластьШапкаТаблицы);
               КоличествоБУИтого = 0;
               КоличествоИтогоПоФакту = 0;
               СтоимостьБУИтого = 0;
               СтоимостьПоФактуИтого = 0;
               
               ТабДокумент.ПолеСнизу         = 20;
           КонецЕсли;
               НомерПП                       = НомерПП + 1;
               ОбластьМакета                 = Макет.ПолучитьОбласть("Строка");
               ОбластьМакета.Параметры.Номер = НомерПП;
               ОбластьМакета.Параметры.Заполнить(ВыборкаСтрокаПоТоварам);
               КоличествоБУИтого = КоличествоБУИтого+ ВыборкаСтрокаПоТоварам.КоличествоБУ;
               КоличествоИтогоПоФакту =КоличествоИтогоПоФакту + ВыборкаСтрокаПоТоварам.КоличествоПоФакту;
               СтоимостьБУИтого = СтоимостьБУИтого + ВыборкаСтрокаПоТоварам.СтоимостьБУ;
               СтоимостьПоФактуИтого = СтоимостьПоФактуИтого + ВыборкаСтрокаПоТоварам.СтоимостьПоФакту;
               
               ТабДокумент.Вывести(ОбластьМакета);    
               Если Не ТабДокумент.ПроверитьВывод(ОбластьМакета) Тогда
                   СледующаяСтраница = Истина;
               Иначе
                   СледующаяСтраница = Ложь;
               КонецЕсли;
       
       КонецЦикла;
1 Naumov
 
06.09.12
16:11
Колонтитулы отменили?
2 ghostrid3r
 
06.09.12
16:12
колонтитулы для каждой страницы, а у меня есть перед этим еще 1 страница и самая последняя страница, на которой не должны быть эти подписи.
3 Reset
 
06.09.12
16:17
// подготовить область с подписью
Пока .Следующий() Цикл
// подготовить область со строкой данных
// поместить в массив обе области
Если Не ТабДок.ПроверитьВывод(массив) тогда
// вывести область с подписью
// вывести разделитель страниц
конецЕсли;
// вывести область со строкой данных
КонецЦикла;
4 Reset
 
06.09.12
16:20
При твоих хитрых проверках из (2) в цикле подпись не выводит и в массив не помещать
5 ghostrid3r
 
06.09.12
16:41
Сделал такую штуку, но получается что эти области подписей вечно на новой странице.

Пока ВыборкаПоТоварам.Следующий() Цикл
       ВыборкаСтрокаПоТоварам = ВыборкаПоТоварам.Выбрать();
       ТабДокумент.ПолеСнизу         = 20;
       СледующаяСтраница = Ложь;
       ОбластьПодписи = Макет.ПолучитьОбласть("ПодписьКаждойСтраницы");
       Пока ВыборкаСтрокаПоТоварам.Следующий() Цикл
           Если Не СледующаяСтраница Тогда
               ОбластьМакета                 = Макет.ПолучитьОбласть("Строка");
               //
               ОбластьПодписи                  = Макет.ПолучитьОбласть("ПодписьКаждойСтраницы");
               МассивОбластей.Очистить();
           КонецЕсли;
           Если Не ТабДокумент.ПроверитьВывод(МассивОбластей) Тогда
           
               ОбластьМакета                 = Макет.ПолучитьОбласть("Итого");
               ОбластьМакета.Параметры.КоличествоБУИтого = КоличествоБУИтого;
               ОбластьМакета.Параметры.КоличествоИтогоПоФакту = КоличествоИтогоПоФакту;
               ОбластьМакета.Параметры.СтоимостьБУИтого = СтоимостьБУИтого;
               ОбластьМакета.Параметры.СтоимостьПоФактуИтого = СтоимостьПоФактуИтого;
               ТабДокумент.Вывести(ОбластьМакета);
               //ТабДокумент.ПолеСнизу         = 10;
               ОбластьМакета = Макет.ПолучитьОбласть("ПодписьКаждойСтраницы");
               ТабДокумент.Вывести(ОбластьМакета);
               ТабДокумент.ПолеСнизу         = 10;

               ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
               ТабДокумент.Вывести(ОбластьШапкаТаблицы);
               КоличествоБУИтого = 0;
               КоличествоИтогоПоФакту = 0;
               СтоимостьБУИтого = 0;
               СтоимостьПоФактуИтого = 0;
               
               ТабДокумент.ПолеСнизу         = 20;
           КонецЕсли;
               НомерПП                       = НомерПП + 1;
               ОбластьМакета                 = Макет.ПолучитьОбласть("Строка");
               ОбластьМакета.Параметры.Номер = НомерПП;
               ОбластьМакета.Параметры.Заполнить(ВыборкаСтрокаПоТоварам);
               КоличествоБУИтого = КоличествоБУИтого+ ВыборкаСтрокаПоТоварам.КоличествоБУ;
               КоличествоИтогоПоФакту =КоличествоИтогоПоФакту + ВыборкаСтрокаПоТоварам.КоличествоПоФакту;
               СтоимостьБУИтого = СтоимостьБУИтого + ВыборкаСтрокаПоТоварам.СтоимостьБУ;
               СтоимостьПоФактуИтого = СтоимостьПоФактуИтого + ВыборкаСтрокаПоТоварам.СтоимостьПоФакту;
               
               ТабДокумент.Вывести(ОбластьМакета);
               ОбластьПодписи = Макет.ПолучитьОбласть("ПодписьКаждойСтраницы");
               МассивОбластей.Добавить(ОбластьМакета);
               МассивОбластей.Добавить(ОбластьПодписи);
               Если Не ТабДокумент.ПроверитьВывод(МассивОбластей) Тогда
                   СледующаяСтраница = Истина;
               Иначе
                   СледующаяСтраница = Ложь;
               КонецЕсли;
       
       КонецЦикла;
6 ghostrid3r
 
06.09.12
17:43
ну помогите кто нить чтобы оно выводило подписи на одной странице с номенлатурой, я уже этот ПроверитьВывод() куда только не пихал.
7 Naumov
 
07.09.12
13:35
(6)  Тебе нужно проверять вывод полезной информации+подписей и если не умещается, то выводить подписи, а полезную информацию на новой странице.
в алгоритме в (5) не вижу нормального вывода.