Имя: Пароль:
1C
1С v8
Как правильно организовать метод ПроверитьВывод()
,
0 location
 
naïve
24.06.22
11:57
Есть данные
Группа Номенклатуры и Номенклатура.
Необходимо выводить печатную форму так:
например есть 3 группы и какое то определенное количество в ней позиций
для каждой группы выводится шапка
далее нужно вывести печатную форму так, если все 3 группы с позициями умещаются на 1 страницу выводим 3, если умещаются только 2, выводим 2 и 1 на след странице.
т.е. проверить если группы целиком влазят без разбиения на страницу их выводим, если нет то переносим, группы разрывать нельзя, количество позиций в группе может быть разное
1 butterbean
 
24.06.22
12:35
Делать массивы областей и проверять по очереди
2 location
 
naïve
24.06.22
12:56
(1) ну у меня есть массив областей строка и шапка, так вот массивов областей строка сколько угодно может быть.
получается надо сначала проходить цикл, добавлять область строку каждый раз в массив, а потом еще раз цикл проходить и выводить?
3 Fedor-1971
 
24.06.22
13:02
(2) нет, логика такая:
1. делаем массив
2. добавляем в него только что заполненную область
3. ПроверитьВывод()
- типа вылезли за страницу
   добавляем табДок.РазделительСтраниц
   чистим массив,
   записываем в него текущую область
   выводим область в табДок

-типа нормально
    просто выводим область в табДок
4 arsik
 
гуру
24.06.22
13:11
(3) Может проще можно сделать?
Сначала сформировать массив из 3х областей, по группам.
Потом проверять, влазит все 3. Вывести все3, не лазить, последнюю из массива убрать и снова проверять.
Суть такая - 1 раз пробегаешься, что бы все 3 области заполнить. Потом уже этими областями оперируешь.
5 Fedor-1971
 
24.06.22
13:14
(4) не не получится, если не влезло, где возьмём выброшенную область?
в моём варианте, мы идём линейно и формируем табличный документ
параллельно проверяем заполнение для каждой страницы
6 arsik
 
гуру
24.06.22
13:28
(5) Ну так не выбрасывай ее насовсем.
7 Fedor-1971
 
24.06.22
13:34
(6) это дело хозяйское, пусть ТС решает как удобнее
8 location
 
naïve
24.06.22
13:41
(3) не понял, получается я вывел 1 таблицу там 50 строк, далее вывожу вторую строку например 1,2,3,4,5, проверяю вывод, влазит строки, их вывожу, 6 не влазит, вылезли, получилось разорвал страницу, как отменить то что уже вывел
9 Fedor-1971
 
24.06.22
13:49
(8) ты одновременно заполняешь  табДок и массив для проверки (по нему работает ПроверитьВывод)
когда у тебя не лезет 6 строка очищаешь массив уже выведенных и добавляешь в него 6 строку (в табДок вставляешь разрыв страницы перед выводом 6 строки)

Сам табДок чистить не нужно - это многостраничный документ
10 location
 
naïve
24.06.22
14:24
(9) так я уже вывел 5 строк в таб документ, а должен был вывести на втором листе
"в табДок вставляешь разрыв страницы перед выводом 6 строки"
я не должен выводить 6 строк на той странице
11 Fedor-1971
 
24.06.22
14:48
(10) Ладно, на картинке:
ТабДок
лист 1
  стр 1
  стр 2
  стр 3
  стр 4
  стр 5

Разрыв страницы - признак начала листа 2 для принтера, т.к. 6 строка не лезет
лист 2
  стр 6
12 arsik
 
гуру
24.06.22
15:00
(10) Я по другому предлагаю.
3 элемента массива для каждой группы.
В каждом элементе табличный документ - уже заполненный по 3м разным группам.
Ну а дальше сам поймешь.
13 arsik
 
гуру
24.06.22
15:01
+(12) Что то я хуйню какую то написал.
3 элемента массива. 1 элемент для каждой группы.
14 arsik
 
гуру
24.06.22
15:12
Примерно так. Дальше сам разберешься.
Макет = УправлениеПечатью.МакетПечатнойФормы("ОбщийМакет.МояПечатнаяФорма");
ОбластьШапкаВсегоДокумента = Макет.ПолучитьОбласть("ШапкаВсегоДокумента");
ОбластьШапкаГруппы = Макет.ПолучитьОбласть("ШапкаГруппы");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");

мТЧ = новый Массив;
мТЧ.Добавить(Новый ТабличныйДокумент;); //Шапка всего документа 1 на все печати
мТЧ.Добавить(Новый ТабличныйДокумент;); //Группа1
мТЧ.Добавить(Новый ТабличныйДокумент;); //Группа2
мТЧ.Добавить(Новый ТабличныйДокумент;); //Группа3

мТЧ[0].Вывести(ОбластьШапкаВсегоДокумента);

Для СчГрупп = 1 По 3 Цикл
    мТЧ[СчГрупп].Вывести(ОбластьШапкаГруппы);
    Для СчСтрок = 1 По КоличествоСтрокТекущейГруппы Цикл
        ОбластьСтрока.Параметры.Заполнить(Данные);
        мТЧ[СчГрупп].Вывести(ОбластьСтрока);
    КонецЦикла;
КонецЦикла;

ТабличныйДокумент = Новый ТабличныйДокумент;

Если ТабличныйДокумент.ПроверитьВывод(мТЧ) = истина Тогда
    Для каждого ЭлементМассива Из мТЧ Цикл
        ТабличныйДокумент.Вывести(ЭлементМассива);
    КонецЦикла;
иначе //не влезло
    мТЧ.Удалить(3);
    //и снова проверяем - ну примерно так
КонецЕсли;
15 location
 
naïve
24.06.22
16:33
(11) на примере
Лист 1
Группа 1
  стр 1
  стр 2
  стр 3
  стр 4
  стр 5
Группа 2
стр 1
  стр 2
  стр 3
  стр 4
  стр 5
строка 6 не влазит
Должно быть
Лист 1
Группа 1
  стр 1
  стр 2
  стр 3
  стр 4
  стр 5
Лист 2
Группа 2
стр 1
  стр 2
  стр 3
  стр 4
  стр 5
  стр 6
16 Злопчинский
 
25.06.22
02:06
если автор хреново прогает, то случится жпс когда размер группы больше размера листа...
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn