|
итог по странице в печатной форме | ☑ | ||
---|---|---|---|---|
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) спасибо огромное, не обратил внимание почему то, что обнуляю сам в цикле переменную, всё теперь хорошо считает, большое спасибо
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |