8.х Перенос областей и таблиц в макете отчета

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

  1. TopicStarter Overlay
    retker
    Offline

    retker Опытный в 1С

    Регистрация:
    12 дек 2013
    Сообщения:
    124
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте, подскажите. Столкнулся с проблемой, как в макете выводимого отчета,сделать так, что если табличная часть, содержащая, к примеру, номенклатуру, выходит за границы одной страницы на вторую, сделать проверку чтобы на следующей странице сначала вывелась шапка таблицы, а затем остальные строки. И еще у меня в макете есть к примеру 3 области, которые я хочу выводить вместе, т..е. если не помещается на одной страницы одна, то переносятся все три на следующую. Перенос внутри одной области я реализовывал, галочку в свойствах ны выделенных строках. Но для разных областей это почему то не работает.
  2. nbIpKuH_BaH9I
    Offline

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

    Регистрация:
    16 сен 2009
    Сообщения:
    6.977
    Симпатии:
    397
    Баллы:
    104
    К сожалению только сидеть и вычислять руками. Я в свое время сидел и считал, сколько строк ТЧ у меня умещается на одной странице (допустим 30), в цикле когда прохожу 30 строку, то делаю ВставитьГоризонтальныйРазделительСтраниц(), потом все также.
  3. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Есть еще метод - ПроверитьВывод(), почитайте про него в СП, думаю вам это подойдет :)
  4. nbIpKuH_BaH9I
    Offline

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

    Регистрация:
    16 сен 2009
    Сообщения:
    6.977
    Симпатии:
    397
    Баллы:
    104
    Да, + он. :). Но там какая то заморочка с принтерами вроде. Точно не помню.
  5. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Да, вроде, нет заморочек, метод просто проверяет, умещается ли выводимая область на текущую страницу или нет. Хотя если учесть что каждый принтер имеет свои поля отступа, то да, возможно:)
  6. TopicStarter Overlay
    retker
    Offline

    retker Опытный в 1С

    Регистрация:
    12 дек 2013
    Сообщения:
    124
    Симпатии:
    0
    Баллы:
    26
    Это как я понял для табличной части. А по поводу областей? К примеру у меня есть обл1 и обл2. Если обл2 не помещается на первой странице, то обл1 с обл2 должны на второй страницы печататься
  7. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Почитайте СП, чтоб таких вопросов не возникало.
  8. nbIpKuH_BaH9I
    Offline

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

    Регистрация:
    16 сен 2009
    Сообщения:
    6.977
    Симпатии:
    397
    Баллы:
    104
    В принципе вариантов не много.
    1) ПроверитьВывод()
    Если он по каким либо причинам не подходит, то
    2)
    как я в этом сообщении описал.
  9. TopicStarter Overlay
    retker
    Offline

    retker Опытный в 1С

    Регистрация:
    12 дек 2013
    Сообщения:
    124
    Симпатии:
    0
    Баллы:
    26
    Занялся сейчас этим и что-то не то получается, у меня есть две таблицы Номенклатура и Работы.

    Код:


    Код:
    //Выводим шапку таблицы номенклатуры
        СекцияТело3 = Макет.ПолучитьОбласть("Тело3");
        МассивСекций.Добавить(СекцияТело3);
        ТабДокумент.Вывести(СекцияТело3);
     
        СекцияТело3СтрокаРаб3 = Макет.ПолучитьОбласть("СтрокаРаб3");
     
        ЕстьДанныеР = СсылкаНаОбъект.СуммаНоменклатурыДокумента;
        Если ЗначениеЗаполнено(ЕстьДанныеР) И ЕстьДанныеР <> 0 ТОГДА
            Для Каждого СтрТаб Из СсылкаНаОбъект.Товары Цикл
                СекцияТело3СтрокаРаб3.Параметры.НомерСтроки = СтрТаб.НомерСтроки;
                СекцияТело3СтрокаРаб3.Параметры.Код = СокрЛП(дкПолучитьЗначениеКолонкиКода(СтрТаб.Номенклатура));
                СекцияТело3СтрокаРаб3.Параметры.Номенклатура = СтрТаб.Номенклатура;
                СекцияТело3СтрокаРаб3.Параметры.ЕдиницаИзмерения = СтрТаб.ЕдиницаИзмерения;
                СекцияТело3СтрокаРаб3.Параметры.Количество = СтрТаб.Количество;
               //вот эта проверка
                Если НЕ ТабДокумент.ПроверитьВывод(МассивСекций) Тогда
                    ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
                    МассивСекций.Очистить();
                    ТабДокумент.Вывести(СекцияТело3);
                    ТабДокумент.Вывести(СекцияТело3СтрокаРаб3);
                    МассивСекций.Добавить(СекцияТело3);
                    МассивСекций.Добавить(СекцияТело3СтрокаРаб3);
                Иначе
                    ТабДокумент.Вывести(СекцияТело3СтрокаРаб3);
                    МассивСекций.Добавить(СекцияТело3СтрокаРаб3);
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;
        //Конец вывода Тело2

    При этом я каждый раз при выводе какой - либо области добавляю ее в массив секций.

    В итоге он не правильно вставляет разделитель, выводит какое-то количество строк игнорирует оставшееся свободное пространство и ставит разделитель. В итоге если распечатать получается часть таблиц съедается...
    Последнее редактирование модератором: 4 авг 2014

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