8.х Табличный документ количество страниц

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем qwertyu, 19 ноя 2013.

  1. TopicStarter Overlay
    qwertyu
    Offline

    qwertyu Опытный в 1С

    Регистрация:
    11 ноя 2011
    Сообщения:
    609
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте, подскажите пожалуйста возможно ли узнать изначально перед выводом табличного документа количество страниц? Или только после вывода это реально сделать?
    Спасибо.
  2. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Только после вывода, Обычно проверяют помещается ли выводимое поле на лист, если нет, то переносят на другой. И вот тут можно поставить счетчик и считать количество листов
  3. TopicStarter Overlay
    qwertyu
    Offline

    qwertyu Опытный в 1С

    Регистрация:
    11 ноя 2011
    Сообщения:
    609
    Симпатии:
    0
    Баллы:
    26
    Ясно, столкнулся с еще одной проблемой, переполненность страницы возникает раньше примерно в 2 раза. Копал в интернете, но к сожалению без результатов.

    Код:
     Макет = ПолучитьМакет("Ведомость");
    ТабДок = Новый ТабличныйДокумент;
    ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
    ТабДок.АвтоМасштаб = Истина;
    ТабДок.РазмерКолонтитулаСверху = 0;
    ТабДок.РазмерКолонтитулаСнизу  = 0;
    ТабДок.ИмяПараметровПечати = "ПАРАМЕТРЫ32232332";
    МассивОбластей = Новый Массив;
    
    СтруктураДанных = ПолучитьКоличествоСтраницИДанныеДляПечати(Макет, МассивОбластей, ТабДок);
    //ДанныеПоТаблице = СтруктураДанных.ДанныеПоТаблице;
    //КоличествоСтраниц = СтруктураДанных.КоличествоСтраниц;
    
    ДанныеПоТаблице = ПолучитьДанныеДляВывода();
    КоличествоСтраниц = 0;
    Область = Макет.ПолучитьОбласть("ШапкаОсновная");
    СтрокаДата = РаботаСДиалогами.ДатаКакМесяцПредставление(СсылкаНаОбъект.ПериодРегистрации);
    НомерБезПрефикса = ОбщегоНазначения.ПолучитьНомерНаПечать(СсылкаНаОбъект);
    Область.Параметры.ПериодНачисления = СтрокаДата;
    Область.Параметры.Подразделение = СсылкаНаОбъект.ПодразделениеОрганизации;
    
    ТабДок.Вывести(Область);
    МассивОбластей.Добавить(Область);
    
    ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
    
    НомерТекущегоЛиста = 1;
    ВыводШапки(ОбластьШапка, НомерТекущегоЛиста, ТабДок, МассивОбластей, СтрокаДата, НомерБезПрефикса, КоличествоСтраниц);
    
    Область = Макет.ПолучитьОбласть("Строка");
    Пока ДанныеПоТаблице.Следующий() Цикл
    
    Область.Параметры.Заполнить(ДанныеПоТаблице);
    МассивОбластей.Добавить(Область);
    
    Если Не ТабДок.ПроверитьВывод(МассивОбластей) Тогда
    ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
    НомерТекущегоЛиста = НомерТекущегоЛиста + 1;
    МассивОбластей.Очистить();
    ВыводШапки(ОбластьШапка, НомерТекущегоЛиста, ТабДок, МассивОбластей, СтрокаДата, НомерБезПрефикса, КоличествоСтраниц);
    МассивОбластей.Добавить(Область);
    КонецЕсли;
    
    ТабДок.Вывести(Область); 
    КонецЦикла;
    
    Область = Макет.ПолучитьОбласть("ПодвалИтог");
    Область.Параметры.ИтогСумма = СсылкаНаОбъект.СуммаДокумента;
    ТабДок.Вывести(Область);
    
    
    Область = Макет.ПолучитьОбласть("ПодвалОсновной");
    Область.Параметры.Заполнить(ПолучитьОтветственныхЛиц());
    
    МассивОбластей.Добавить(Область);
    Если Не ТабДок.ПроверитьВывод(МассивОбластей) Тогда
    ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЕсли;
    
    ТабДок.Вывести(Область);
    
  4. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Ну и вопрос какой?
  5. TopicStarter Overlay
    qwertyu
    Offline

    qwertyu Опытный в 1С

    Регистрация:
    11 ноя 2011
    Сообщения:
    609
    Симпатии:
    0
    Баллы:
    26
    А вопрос такой, почему ТабДок.ПроверитьВывод(МассивОбластей) обращается в Ложь при на половину заполненной странице?
    Совсем не могу понять.
    Спасибо.
  6. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    Значит область не влезает
  7. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Ну пройдитесь отладчиком - значит - массив областей, которые Вы хотите размесить - не вмещается на одну страницу. Видно где то не там делате или лишний раз делаете МассивОбластей.Добавить(Область);
  8. TopicStarter Overlay
    qwertyu
    Offline

    qwertyu Опытный в 1С

    Регистрация:
    11 ноя 2011
    Сообщения:
    609
    Симпатии:
    0
    Баллы:
    26
    Это первое, что я сделал. В массив добавляется все как надо, я не знаю, может быть с макетом что то не так, уже просто в голову ничего не лезет.
  9. TopicStarter Overlay
    qwertyu
    Offline

    qwertyu Опытный в 1С

    Регистрация:
    11 ноя 2011
    Сообщения:
    609
    Симпатии:
    0
    Баллы:
    26
    Сейчас заметил, что если в массиве определенной количество областей, то "переполнен лист", если добавить еще область "то не переполнен", я в ауте.
  10. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Скажите У Вас Наверное область ШапкаОсновная - большая????????????
    Вы понимаете как работает ПроверитьВывод???
    Вы туда передаете области и функция проверяет выведетсяли они в данный момент на один лист после того что уже вывелось или нет.

    Так вот посмотрите в каких местах у вас есть МассивОбластей.Добавить(Область);

    Возьмем с самого начала Вы получили Область ШапкаОсновная и вывели ее, затем добавили в список проверки выводимых областей.
    Затем вывели просто шапку, потом попадаете в цикл и начинаете выводить детали и добавли в список проверки Область детали,
    так вот у вас при первой же проверки сестема проверяет выведется ли область Осноная шапка и детали после того как уже выведены Основная шапка и простая, - хорошо в первый раз он вывел, еще умещается.
    затем выводит вторые детали - проверяет опять две области.... Зачет? ему надо проверить просто выведит он детали или нет.

    Понимаете о чем пишу????
  11. TopicStarter Overlay
    qwertyu
    Offline

    qwertyu Опытный в 1С

    Регистрация:
    11 ноя 2011
    Сообщения:
    609
    Симпатии:
    0
    Баллы:
    26
    Я не понял о чем Вы написали, но я разрешил ситуацию, если мы в массив добавим несколько областей - то мой мозг не понимает, что происходит, а если одну - последнюю, то все отлично работает. Я то думал, что как бы сумма областей в массиве влияет на заполненность, но нет!!! Это не так. Короче для корректной работы в массиве должен быть один элемент, т.е. последний нижний!

    Спасибо Вам.
  12. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Вот об этом я Вам и писал - Вы просто у себя всегда проверяете Вывод шапки и области.
    Просто программа проверяет вывод уже после того, чо вывелось.
    Т.е после того как вы сделали ТабДок.Вывести() - что то вывелось
    и вывод проверяется после того что вывелось, а Вы в массив проверки добавляете не только область,Ю которая планируется вывести следующей, а еще и Шпака у Вас там была...
    Обычно проверяют вывод области детали и подвал, ну подвал т.к некоторым нужно что бы на каждом листе подписи были.
  13. TopicStarter Overlay
    qwertyu
    Offline

    qwertyu Опытный в 1С

    Регистрация:
    11 ноя 2011
    Сообщения:
    609
    Симпатии:
    0
    Баллы:
    26
    Спасибо, ценю Вашу помощь! :sm_rose:
  14. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Да не за что
Похожие темы
  1. Siddy
    Ответов:
    4
    Просмотров:
    1.356
Загрузка...

Поделиться этой страницей