Имя: Пароль:
1C
1С v8
итог по странице в печатной форме
0 dvrk
 
29.11.21
15:17
привет, сделал печатную форму, не пойму как сделать итоги по странице, т.е. табличная часть большая, нужно сделать чтобы на каждом листе был подвал с 'ИтогоПоСтранице'
1 acht
 
29.11.21
15:19
Необходимо при выводе разбивать таблицу на страницы, обнулять и накапливать итог для каждой страницы в процессе вывода, выводить его в конце страницы. Не благодари.
2 polosov
 
29.11.21
15:20
(0) Считаешь итог при выводе каждой строки. Следом выводишь Итого по странице.
Если помещается, убираешь итог, пробуешь добавить следующую строку и выводишь после Итог.
Когда перестает помещаться, то убираешь последнюю строку и выводишь с итогом.
3 dvrk
 
29.11.21
15:21
можно пример кода?
4 yurikmellon2
 
29.11.21
15:29
(3) неужто в поистковике забанили?
Первая же ссылка выдаёт

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

//Тут подготовительные процедуры и формирование заголовка

ОбластьМакета = Макет.ПолучитьОбласть("СтрокаТаблицы");
ОбластьИтогов = Макет.ПолучитьОбласть("ИтогиСтраницы");
ОбластьШапкиТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");

Для каждого Строка из Таблица Цикл

//Тут должно быть заполнение параметров области

//Формируем массив областей для проверки
МассивОбластей = новый Массив;
МассивОбластей.Добавить(ОбластьМакета);
МассивОбластей.Добавить(ОбластьИтогов);

//Проверяем, помещаются ли обе эти области на страницу в табличном документе
Результат = ТабДок.ПроверитьВывод(МассивОбластей);

//Если не помещается, выводим итоги, разделитель страницы и шапку на новой странице
Если Не Результат Тогда

ТабДок.Вывести(ОбластьИтогов);
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
ТабДок.Вывести(ОбластьШапкиТаблицы);

КонецЕсли;

ТабДок.Вывести(ОбластьМакета);
5 dvrk
 
30.11.21
11:44
хз, ничё не выводит
6 Гипервизор
 
30.11.21
11:51
7 dvrk
 
30.11.21
11:58
(6) да блин, я это уже 10 раз открывал, чет видимо не так делаю, можете подсказать где тут что дописать надо?
8 dvrk
 
30.11.21
11:58
Шапка = Запрос.Выполнить().Выбрать();
    Шапка.Следующий();
    ВыборкаСтрокТовары = Шапка.Товары.Выбрать();
    ВыборкаСтрокТара   = Шапка.ВозвратнаяТара.Выбрать();

    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ПриходныйОрдерНаТовары_Накладная";

    Макет = ПолучитьМакет("МХ1");

            
        ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
        ОбластьМакета.Параметры.ДатаДокумента = СсылкаНаОбъект.Дата;
        ОбластьМакета.Параметры.НомерДокумента = СсылкаНаОбъект.Комментарий;
        
        ТабДокумент.Вывести(ОбластьМакета);

        
    
    // Вывести табличную часть
    ОбластьМакета = Макет.ПолучитьОбласть("ЗаголовокТаб");
        
    ТабДокумент.ПовторятьПриПечатиСтроки = ТабДокумент.Вывести(ОбластьМакета);

    ОбластьМакета = Макет.ПолучитьОбласть(ОбластьСтроки);
    Ном           = 0;

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

        Если ЗначениеНеЗаполнено(ВыборкаСтрокТовары.Номенклатура) Тогда
            Сообщить("В одной из строк не заполнено значение номенклатуры - строка при печати пропущена.", СтатусСообщения.Важное);
            Продолжить;
        КонецЕсли;

        Ном = Ном + 1;

        ОбластьМакета.Параметры.Заполнить(ВыборкаСтрокТовары);
        ОбластьМакета.Параметры.НомерСтроки = Ном;
        ОбластьМакета.Параметры.ТоварНаименование       = ВыборкаСтрокТовары.Товар + ФормированиеПечатныхФорм.ПредставлениеСерий(ВыборкаСтрокТовары);
        ОбластьМакета.Параметры.БазоваяЕдиницаНаименование = ВыборкаСтрокТовары.ЕдиницаИзмерения;
        ОбластьМакета.Параметры.БазоваяЕдиницаКодПоОКЕИ = ВыборкаСтрокТовары.ЕдиницаИзмеренияЕдиницаПоКлассификаторуКод;
        ОбластьМакета.Параметры.Цена = ВыборкаСтрокТовары.Цена;
        ОбластьМакета.Параметры.Стоимость = ВыборкаСтрокТовары.Сумма;
        
        
            
            
        Если ВыводитьКоды Тогда
            ОбластьМакета.Параметры.ТоварКод = ВыборкаСтрокТовары.КодАртикул;
        КонецЕсли;

        ТабДокумент.Вывести(ОбластьМакета);
    КонецЦикла;

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

        Если ЗначениеНеЗаполнено(ВыборкаСтрокТара.Номенклатура) Тогда
            Сообщить("В одной из строк не заполнено значение номенклатуры - строка при печати пропущена.", СтатусСообщения.Важное);
            Продолжить;
        КонецЕсли;

        Ном = Ном + 1;

        ОбластьМакета.Параметры.Заполнить(ВыборкаСтрокТара);
        ОбластьМакета.Параметры.НомерСтроки = Ном;
        ОбластьМакета.Параметры.Товар       = ВыборкаСтрокТара.Товар + " (возвратная тара)";

        Если ВыводитьКоды Тогда
            ОбластьМакета.Параметры.ТоварКод = ВыборкаСтрокТара.КодАртикул;
        КонецЕсли;

        ТабДокумент.Вывести(ОбластьМакета);
    КонецЦикла;

    // Вывести Итого
    ОбластьМакета = Макет.ПолучитьОбласть("ИтогоПоСтранице");
    ТабДокумент.Вывести(ОбластьМакета);

    // Вывести Итог
    ОбластьМакета = Макет.ПолучитьОбласть("Всего");
    ОбластьМакета.Параметры.ИтогКол = СсылкаНаОбъект.Товары.Итог("Количество");
    ОбластьМакета.Параметры.ИтогСуммы = СсылкаНаОбъект.Товары.Итог("Сумма");
    ТабДокумент.Вывести(ОбластьМакета);
    
    // Вывести Сумму прописью
    ОбластьМакета = Макет.ПолучитьОбласть("Подвал");
    
    ТабДокумент.Вывести(ОбластьМакета);

        ОбластьМакета.Параметры.Заполнить(Шапка);
    
    Возврат ТабДокумент;
9 Kassern
 
30.11.21
12:00
(8) А где у вас ПроверитьВывод?
10 dvrk
 
30.11.21
12:01
(9) здесь нет его, я дал рабочий код до моей херни с проверить вывод, чтобы если кому не трудно - подсказали
11 Гипервизор
 
30.11.21
12:02
(9) +1
Толку-то что вы несколько раз открывали, но делаете иначе.
12 dvrk
 
30.11.21
12:04
(11) я же ответил в (10), я скинул рабочий вариант, без проверить вывод
13 Гипервизор
 
30.11.21
12:07
(12) В статье русским по белому написано:

"Пример алгоритма отчета будет выглядеть так:
1. выводим в результирующий табличный документ область - заголовок первой страницы;
2. для каждой строки из ведомости:
2.1. проверяем, вмещается ли на текущую страницу область со строкой ведомости и область итога по странице;
2.2. если области помещаются на странице -  выводим строку области;
2.3. иначе - выводим подвал страницы, выводим горизонтальный разделитель страницы, выводим шапку страницы, выводим строку ведомости;
3. выводим подвал отчета."

Что именно непонятно или не получается?
14 dvrk
 
30.11.21
12:09
(13) хз, просто ничего не выводится + шапка на каждой странице пропадает
15 Гипервизор
 
30.11.21
12:11
(14) Покажите же ваш код с проверкой вывода. Вероятно там не совсем так, как предлагается в статье. Или даже совсем не так.
16 dvrk
 
30.11.21
12:12
(15) ща
17 dvrk
 
30.11.21
12:23
(15) я заново делаю если что, удалил просто ту, Всё равно не работала, сейчас скину
18 dvrk
 
30.11.21
12:31
ИтогПоСтранице = 0;
        ЗагТаб = Макет.ПолучитьОбласть("ЗаголовокТаб");
        ИтогСтраница = Макет.ПолучитьОбласть("ИтогоПоСтранице");
МассивОбластей = Новый Массив;
МассивОбластей.Добавить(ОбластьМакета);
МассивОбластей.Добавить(ИтогСтраница);

Если не ТабДокумент.ПроверитьВывод(МассивОбластей) Тогда
           ИтогСтраница.Параметры.ИтогКоличествоПоСтранице = ИтогПоСтранице;
           ТабДокумент.Вывести(ИтогСтраница);
           ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
          
           ИтогПоСтранице = 0;
    
    КонецЕсли;
        ТабДокумент.Вывести(ОбластьМакета);
    КонецЦикла;
     ИтогСтраница.Параметры.ИтогКоличествоПоСтранице = ИтогПоСтранице;
     ТабДокумент.Вывести(ИтогСтраница);
19 dvrk
 
30.11.21
12:32
итог не считает + на последнем листе 2 итого
20 Мультук
 
гуру
30.11.21
12:34
(18)

И где в этом коде

ИтогПоСтранице = ИтогПоСтранице + НекоеКолво; //?
21 dvrk
 
30.11.21
12:39
(20) КонецЕсли;
        ТабДокумент.Вывести(ОбластьМакета);
        ИтогПоСтранице = ИтогПоСтранице + ВыборкаСтрокТовары.Сумма;
добавил, итог считается только на последнем листе
22 Kassern
 
30.11.21
12:46
(21) Есть у вас область Шапка, Область строк и область подвал. Вы должны добавить в массив областей шапку и подвал, а так же добавлять по области строке и при каждом ее добавлении в массив, проверять, что это все дело выведется на страницу. Как только 1ска скажет, мол столько областей я не вывезу, тогда выводите массив областей в табдок с указанием ИтогПоСтранице и обнулением его. Очищаете массив областей и добавляете снова нужные области для вывода новой страницы.
23 dvrk
 
30.11.21
12:47
ну да, итог он не считает, а только на последней странице в итог пихает сумму последней записи
24 dvrk
 
30.11.21
12:48
(22) ну у меня сейчас всё выводится, только вот итог страницы не считается
25 Kassern
 
30.11.21
12:48
(18) Вот тут:
      ЗагТаб = Макет.ПолучитьОбласть("ЗаголовокТаб");
        ИтогСтраница = Макет.ПолучитьОбласть("ИтогоПоСтранице");
МассивОбластей = Новый Массив;
МассивОбластей.Добавить(ОбластьМакета);
МассивОбластей.Добавить(ИтогСтраница);
Вы без учета заголовка решили страницу проверять? Или вы заголовок выводить не собираетесь?
26 dvrk
 
30.11.21
12:49
(25) у меня ещё есть код такой:  ОбластьМакета = Макет.ПолучитьОбласть("ЗаголовокТаб");
        
    ТабДокумент.ПовторятьПриПечатиСтроки = ТабДокумент.Вывести(ОбластьМакета);
27 Kassern
 
30.11.21
12:51
(26) зайдите в модуль какой нить торг12 и посмотрите как там реализован постраничный вывод
28 dvrk
 
30.11.21
12:53
(27) ну я из примера в ссылке посмотрел, что я не так сделал то?
29 dvrk
 
30.11.21
12:53
(27) почему у меня не складываются строки, а последнюю на последней странице просто выводит?
30 Kassern
 
30.11.21
12:54
(29) вы в отладке смотрели?
31 Kassern
 
30.11.21
12:56
(29) и куда вы деваете строку, которая не влезла на страницу? Где она у вас в коде выводится?
32 dvrk
 
30.11.21
13:01
(31) после всех этих вопросов стало ещё сложнее, пойду ковырять
33 Kassern
 
30.11.21
13:02
(31) а все, увидел. У вас ИтогПоСтранице = 0; в цикле? Вынесите это выше цикла. Суммируйте при ТабДокумент.Вывести(ОбластьМакета)
34 Kassern
 
30.11.21
13:03
(32) не надо бездумно копировать код. Попробуйте разобраться построчно, что он делает. В отладке проверьте как суммируется ваша переменная для итогов и как она обнуляется. Тогда у вас вопросы отпадут
35 dvrk
 
30.11.21
13:11
(34) спасибо огромное, не обратил внимание почему то, что обнуляю сам в цикле переменную, всё теперь хорошо считает, большое спасибо