Имя: Пароль:
1C
1С v8
как работает функция ПроверитьВывод()
, ,
0 margoigo
 
01.06.16
07:09
Не пойму как с ней работать. Есть у меня табличный документ и кучка областей, которые выводятся в цикле, примерно так:
Пока ВыборкаИтог.Следующий() Цикл

//начало

  Таб.Вывести(Область1);
  Выборка = ВыборкаИтог.Выбрать();
  Пока Выборка.Следующий() Цикл
    Таб.Вывести(Область2);
  КонецЦикла;

//конец

КонецЦикла;

Мне надо сделать так, чтобы выводились Область1 и Область2 на одном листе, если следующие Область1 и Область2 продолжают помещаться на первом листе, то там их и печатать, если нет, то вставлять разделитель на страницы. Я не могу понять куда впихнуть ПроверитьВывод() и как правильно ею воспользоваться. Объясните пожалуйста.
1 catena
 
01.06.16
07:10
(0)Впихнуть после заполнения параметров, но перед выводом.
2 margoigo
 
01.06.16
07:22
Перед каким выводом? Я вывожу же 2 области, мне надо проверить перед выводом обеих, поместится ли следующий блок на лист.
3 Mankubus
 
01.06.16
07:43
В ПроверитьВывод вставляй массив областей
4 Mankubus
 
01.06.16
07:45
ТабличныйДокумент (SpreadsheetDocument)
ПроверитьВывод (CheckPut)
Синтаксис:

ПроверитьВывод(<Таблицы>)
Параметры:

<Таблицы> (обязательный)

Тип: Массив; ТабличныйДокумент.
Массив из проверяемых таблиц или табличный документ.
Возвращаемое значение:

Тип: Булево.
Истина - умещаются; Ложь - в противном случае.
Описание:

Проверяет, умещаются ли переданные табличные документы на страницу при печати.

Доступность:

Сервер, толстый клиент, внешнее соединение.
5 margoigo
 
01.06.16
07:51
все равно не понятно, массив то я создаю из областей, вставляю функцию после тела первого цикла, а не работает.
6 catena
 
01.06.16
07:53
(5)Что именно "не работает"? Почему после цикла, если вывод внутри цикла?
7 margoigo
 
01.06.16
07:54
Вот так не работает:

Пока ВыборкаИтог.Следующий() Цикл

//начало


  Таб.Вывести(Область1);
  Выборка = ВыборкаИтог.Выбрать();
  Пока Выборка.Следующий() Цикл
    Таб.Вывести(Область2);
  КонецЦикла;

//конец

  массив = Новый массив;
  массив.добавить(область1);
  массив.добавить(область2);

  Если не ПроверитьВывод(массив) Тогда
    ТабДок.ВставитьГоризонтальныйРазделитель();
  КонецЕсли;

КонецЦикла;

Вот если кто-то знает, напишите пожалуйста на примере.
8 catena
 
01.06.16
08:00
(7)Ты сначала вывел все области, а потом проверяешь, поместится ли туда еще одна?
9 catena
 
01.06.16
08:02
Выборка = ВыборкаИтог.Выбрать();
  Пока Выборка.Следующий() Цикл
      Если Таб.ПроверитьВывод(Область2) тогда  
         Таб.Вывести(Область2);
      иначе
         Таб.ВывестиГоризонтальныйРазделительСтраниц();
      КонецЕсли;
  КонецЦикла;
10 margoigo
 
01.06.16
08:22
(9) вот тут я так понимаю одна область проверяется и тут мне ясно, а вот когда надо проверить две области блоком, при чем вторая область выводится в цикле. Вот как тут проверять?
11 Mankubus
 
01.06.16
08:35
Пока ВыборкаИтог.Следующий() Цикл

//начало

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


  ТабДляПроверки.Вывести(Область1);
  Выборка = ВыборкаИтог.Выбрать();
  Пока Выборка.Следующий() Цикл
    ТабДляПроверки.Вывести(Область2);
  КонецЦикла;

//конец


  Если не Таб.ПроверитьВывод(ТабДляПроверки) Тогда
    Таб.ВставитьГоризонтальныйРазделитель();
  КонецЕсли;

  таб.Вывести(ТабДляПроверки);

КонецЦикла;
12 hhhh
 
01.06.16
08:36
(10) ну значит вторых не 2, а 102. То есть формируй массив из 103х областей.
13 FIXXXL
 
01.06.16
08:45
(7) вместо ТабДляПроверки.Вывести(Область2); в цикле используй Присоединить
Т.е. сначала набери кусок для вывода, а потом проверь обе области на влезание
14 FIXXXL
 
01.06.16
08:48
(13) сорри, не Присоединить, а ВставитьОбласть
Закон Брукера: Даже маленькая практика стоит большой теории.