Постраничный вывод в табличный документ
Для некоторых отчетов необходимо, чтобы в конце страницы содержалась некоторая область, которая бы сообщала информацию о содержимом страницы. Это может быть, например, информация о сумме по странице, количестве строк на странице и т.п. Во встроенном языке 1С:Предприятия предусмотрены специальные средства для разбиения табличного документа на страницы. В данном разделе рассказывается, каким образом можно организовать постраничный вывод при выводе информации в табличный документ.
Метод табличного документа ПроверитьВывод()
Объект ТабличныйДокумент имеет метод ПроверитьВывод() , предназначенный для того, чтобы проверить, поместится ли список областей на текущую страницу. В случае если метод вернет значение Истина , вывод областей, переданных в метод, не приведет к созданию новой страницы, иначе, для того, чтобы вывести области, в табличном документе будет создана новая страница. Данный метод работает с учетом настроек печати документа, у которого вызывается метод.
Рассмотрим пример. Пусть нам необходимо создать отчет «Платежная ведомость». Требуется, чтобы на первой странице был заголовок, отображающий информацию о ведомости в целом, на остальных страницах — заголовок, содержащий только шапку таблицы ведомости. В подвалах страницы необходимо иметь информацию о сумме по странице. В подвале последней страницы необходимо иметь итоговую информацию по всей ведомости.
Для того чтобы реализовать подобный отчет нам потребуется использовать метод ПроверитьВывод() . Пример алгоритма отчета будет выглядеть так:
1. выводим в результирующий табличный документ область — заголовок первой страницы;
2. для каждой строки из ведомости:
2.1. проверяем, вмещается ли на текущую страницу область со строкой ведомости и область итога по странице;
2.2. если области помещаются на странице — выводим строку области;
2.3. иначе — выводим подвал страницы, выводим горизонтальный разделитель страницы, выводим шапку страницы, выводим строку ведомости;
3. выводим подвал отчета.
Ниже приведен пример того, как подобный алгоритм может быть реализован на встроенном языке 1С:Предприятия 8.0:
СтрокаСПодвалом = Новый Массив; // создадим массив для проверки вывода СтрокаСПодвалом.Добавить(ОбластьДетальныхЗаписей); СтрокаСПодвалом.Добавить(ПодвалСтраницы); ИтогПоСтранице = 0; ТабДок.Вывести(ОбластьЗаголовок); // выведем заголовок отчета ТабДок.Вывести(ОбластьШапкаТаблицы); // выведем шапку страницы Пока ВыборкаДетали.Следующий() Цикл // по всем строкам, которые необходимо вывести ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали); // заполним параметры области табличного документа Если Не ТабДок.ПроверитьВывод(СтрокаСПодвалом) Тогда // Строка с итогом не вмещается. ПодвалСтраницы.Параметры.Сумма = ИтогПоСтранице; // установим итог по странице ТабДок.Вывести(ПодвалСтраницы); // выведем итог по странице ТабДок.ВывестиГоризонтальныйРазделительСтраниц(); // начнем новую страницу ТабДок.Вывести(ОбластьШапкаТаблицы); // выведем шапку страницы ИтогПоСтранице = 0; // сбросим текущую сумму по странице КонецЕсли; ТабДок.Вывести(ОбластьДетальныхЗаписей); // выведем очередную строку ИтогПоСтранице = ИтогПоСтранице + ВыборкаДетали.Сумма; // увеличим итог по странице КонецЦикла; ПодвалСтраницы.Параметры.Сумма = ИтогПоСтранице; // установим итог по странице ТабДок.Вывести(ПодвалСтраницы); // выведем итог по странице ТабДок.Вывести(ОбластьПодвал); // выведем подвал отчета
Метод табличного документа ПроверитьПрисоединение()
Метод табличного документа ПроверитьПрисоединение() работает аналогично методу ПроверитьВывод() , с тем отличием, что данный метод проверяет, изменится ли количество страниц по горизонтали при выводе в отчет областей при помощи метода Присоединить() .
«При печати рвутся подписи!» или «Как проверить вывод данных при печати?»
Статья адресуется тем, кто только начинает изучать 1С 8. x .
К вам обращается клиент, «Так не пойдет, если счет не помещается на одном листе, то все итоги подписи следует перенести на следующий лист».
Подписи «порвались», ответственный должен один расписываться на другом листе.
Так должно быть:

Если что-то не помещается, то все итоги и подписи переходят на следующий лист.
Вопрос как это сделать? Один документ имеет 2 товара, а другой 13 товаров.
Ответ – используй метод табличного документа ПроверитьВывод()
Опишем порядок действий
//Объявляем таблицу для шапки документа и таблицы товаров ТабДокумент = Новый ТабличныйДокумент; ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портрет; //Объявляем таблицу для итогов и подписей ТабПодвал = Новый ТабличныйДокумент; ТабПодвал.ОриентацияСтраницы = ОриентацияСтраницы.Портрет; //Объявляем таблицу для проверки вывода на страницу ПромТабДок = Новый ТабличныйДокумент; ПромТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет; Макет = ПолучитьМакет("СчетЗаказ"); // Выводим шапку накладной //Выводим на печать товар Для каждого Стр Из Товары Цикл //Выводим строку с товаром в таблицу ТабДокумент.Вывести(ОблТовар); КонецЦикла; //Выводим итоги и подписи в другую таблицу ТабПодвал.Вывести(ОблИтоги); ТабПодвал.Вывести(ОблПодписи); //Выполняем проверку вывода на страницу МассивТаблиц = Новый Массив; МассивТаблиц.Добавить(ТабДокумент); МассивТаблиц.Добавить(ТабПодвал); Если Не ПромТабДок.ПроверитьВывод(МассивТаблиц) Тогда //Не помещается. Выводим разделитель ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц(); КонецЕсли; ТабДокумент.Вывести(ТабПодвал); ТабДокумент.Показать();
Для вывода используются 2 табличных документа для основной части ТабДокумент, а для итогов и подписей ТабПодвал. Затем с помощью служебного табличного документа проверяется вывод обеих частей документа. Если не помещается на лист выводим разделитель. Вот собственно и вся премудрость.
Как работает проверитьвывод 1с
В 1С существует замечательный метод ПроверитьВывод, о котором, к сожалению, знают далеко не все разработчики.
В самой справке (в синтаксис-помощнике) об этом методе сказано следующее: «Проверяет, умещаются ли переданные табличные документы на страницу при печати».
А теперь поподробнее о том, что это за метод и для чего он существует…
Не редко при выводе регламентированных многостраничных печатных форм перед разработчиком встает проблема самостоятельного, программного деления содержимого табличного документа на страницы. Например, если не допускается, чтобы на последней странице присутствовали только подписи и абсолютно необходимо наличие как минимум одной информативной строки. В подобных случаях необходимо предупреждать появление разрыва страниц, и ставить его (разрыв) в документ самостоятельно (после нужной правильной строки).
Как это делается.
Метод табличного документа ПроверитьВывод(МассивТаблиц) имеет один параметр МассивТаблиц — массив из таблиц или табличный документ. Метод проверяет, если к существующему табличному документу (такому, какой он есть сейчас) добавить еще строки – МассивТаблиц – будет ли произведен переход на следующую, новую страницу. Если говорить проще, «влезет» МассивТаблиц на текущую страницу табличного документа или нет. Соответственно, метод возвращает Истину или Ложь в качестве результата свой работы. А дальше, разработчик сам, «ручками», обрабатывает сложившуюся ситуацию:
массивСтрокСИтогом
На что следует обратить внимание при использовании этого метода.
Деление табличного документа на страницы зависит от настроек печати: от принтера по умолчанию, от отступов слева, справа, снизу, сверху, от размера колонтитулов и пр. Поэтому, в случае необходимости не стоит забывать/лениться указывать параметры печати табличного документа в тексте.
В качестве параметра метода МассивТаблиц передается массив таблиц. Здесь должны быть указаны только те таблицы, «умещение» которых мы проверяем. Не надо забывать чистить этот массив перед следующей проверкой.
массивСтрокСИтогом
Перед помещением таблицы в МассивТаблиц, ее необходимо заполнить таблицу всеми необходимыми параметрами. Это важно потому, что одна и та же таблица может иметь различную высоту в зависимости от заполняющих ее данных.
Примечание: в качестве массива таблиц может выступать массив областей макета табличного документа.
Здесь можно скачать пример отчета на платформе 8.2, использующего эту функцию.
Как работает проверитьвывод 1с
Подскажите безграмотному, где собака зарыта, пол дня уже бьюсь(
ТабличныйДокумент.АвтоМасштаб = Истина;
ТабличныйДокумент.ЭкземпляровНаСтранице = 1;
Для каждого СтрокаКомиссия Из Док.ЧленыКомиссии Цикл
Если Не (ТабличныйДокумент.ПроверитьВывод(МассивВыводимыхОбластей)) Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
НомерСтраницы = НомерСтраницы + 1;
ОбластьНомерСтраницы.Параметры.НомерСтраницы = «Страница » + НомерСтраницы;
ТабличныйДокумент.Вывести(ОбластьНомерСтраницы);
МассивВыводимыхОбластей.Очистить();
МассивВыводимыхОбластей.Добавить(ОбластьНомерСтраницы);
КонецЕсли;
Если СтрокаКомиссия.НомерСтроки = 1 Тогда
ОбластьКомиссия.Параметры.СтрокаЧленыКомиссии = «Члены комиссии: «;
Иначе
ОбластьКомиссия.Параметры.СтрокаЧленыКомиссии = «»;
КонецЕсли;
ОбластьКомиссия.Параметры.ФИОЧленаКомиссии = СтрокаКомиссия.ФИО;
ОбластьКомиссия.Параметры.ДолжностьЧленаКомиссии = СтрокаКомиссия.Должность;
ТабличныйДокумент.Вывести(ОбластьКомиссия);
МассивВыводимыхОбластей.Добавить(ОбластьКомиссия);
КонецЦикла;
Есть такой вот код, вот не могу понять, почему у меня ПроверитьВывод срабатывает когда примерно заполнилось пол страниы
Попробуй закомментировать первую строчку
(1) закомментировал, он мне просто подвал не вывел, который нужен, но на печать выводит так же пол страницы, дальше горизонтальный разделитель соответственно и новая страница пошла, снова пол страницы заполняется и снова новая. Не могу понять что не так(
Зачем
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
загнал в цикл?
Подписи обычно делают вместе и на одной страничке
(3) а куда его еще загнать? Может я чего то недопонимаю, но в цикле же стоит условие, что если проверка вывода выдаст Ложь, т.е. страница заполнена, тогда выводить горизонтальный разделитель
есть такой глюк. обходи дополнительным текстовым документом
там же в цикле любопытная команда
МассивВыводимыхОбластей.Очистить();
без неё никак?
вроде КоличествоСтраниц() пока еще работает.
(6) без нее когда массив на страницу наполнится будет каждую строчку с новой страницы выводить
(5)(7) придется видимо ковыряться другим способом, попробую предложенным, спасибо
Я бы посмотрел пример вывода в типовых ТОРГ-12
(9) спасибо, гляну
ПроверитьВывод не работает. однозначно. проверено на сферическом вакууме. вот как я его обошел (буквально вчера)
три табличных документа:
ТД
ТДКопия
ТДСтрока
в ТДСтрока формирую строку, которую можно переносить (она может состоять из нескольких строк)
В ТДКопия вывожу область из ТДСтрока, относящуюся к этой строке таблицы.
если число страниц в тдкопия больше, чем в тд, то делаю разрыв, после чего копирую ТД в ТДКопия (чтобы разрывы совпадали), а ТДСтрока очищаю.
не забудь предусмотреть, если строка у тебя последняя, так как надо в ТДСтрока сразу загнать и подвал отчета. если же у тебя еще есть страничный подвал таблицы, то его тоже надо будет загонять в ТДСтрока.
(11) задним местом чувствую что таким способом у меня отчет в 200 страниц будет пол часа формироваться))) Да должен этот «ПроверитьВывод» работать, где то просто я не то сделал чувствую, завтра еще поборюсь, может чего нарою, расскажу)) Если не получится придется так и делать, как ты подсказываешь
// Проверяет, умещаются ли переданные табличные документы на страницу при печати.
//
// Параметры
// ТабДокумент – Табличный документ
// ВыводимыеОбласти – Массив из проверяемых таблиц или табличный документ
// РезультатПриОшибке — Какой возвращать результат при возникновении ошибки
//
// Возвращаемое значение:
// Булево – умещаются или нет переданные документы
//
Функция ПроверитьВыводТабличногоДокумента(ТабДокумент, ВыводимыеОбласти, РезультатПриОшибке = Истина) Экспорт
Попытка
Возврат ТабДокумент.ПроверитьВывод(ВыводимыеОбласти);
Исключение
Возврат РезультатПриОшибке;
КонецПопытки;
(12) ну, 200 страниц, это даааа.. придется мухлевать, тогда мой метод примени для первой страницы, а дальше проверяй этой долбанутой функцией
(13) эта хрень как раз первую страницу и портит.
а в документе
Если НЕ ТабДокумент.ПроверитьВывод(МассивВыводимыхОбластей) Тогда
НомерСтраницы = НомерСтраницы + 1;
ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
ЗаголовокТаблицы.Параметры.НомерСтраницы = «Страница » + НомерСтраницы;
ТабДокумент.Вывести(ЗаголовокТаблицы);
КонецЕсли;
.
взято из УТ10.3
(15) да знаю я, откуда это взято, во всех типовых така хрень. но если пишешь отчет сам с нуля, сталкиваешься с проблемой, которую до сих пор никто решить не смог. видимо, дело в каком-то реквизите табличного документа, который в типовых имеет правильное значение, при котором функция работает без бага. что непонятного? посмотрите на форуме, много раз тема поднималась
(15)(16) так вот тоже смотрю что в типовых работает эта хрень, так почему когда сам пишешь не работает, не могу понять(
найдешь — дай знать. я, кстати, переделаю отчетик, по методу (14), а то на 20 страничках подтормаживать начинает..
(18) отпишусь тут как добил
а ты мне еще на 200 страниц предлагал))) если уже на 20 тормозит)))
(13) попробую завтра еще через эту функцию, хотя по сути тоже самое)
А ориентировка страницы случайно не ландшафт стоит?
(0) Точно , был такой фокус.
В инете нашел решение, если что позже выложу код, там вроде массив нужно создавать каждый раз, а не очищать.
(22) а что, очищенный массив чем-то отличается от нового?
(21) да, ландшафт
Пока ВыборкаСтрокТовары.Следующий() Цикл
Кратность = 1;
СтрокаСуммСписания = ТаблицаСуммСписания.Найти(ВыборкаСтрокТовары.Номенклатура, «Номенклатура»);
Если СтрокаСуммСписания = Неопределено Тогда
ВсегоСНДС = 0;
Цена = 0;
Иначе
Цена = ?(СтрокаСуммСписания.Количество = 0, 0, СтрокаСуммСписания.Сумма / СтрокаСуммСписания.Количество);
ВсегоСНДС = Цена * ВыборкаСтрокТовары.КоличествоПринято;
КонецЕсли;
ОбластьМакета.Параметры.Количество = Количество;
ОбластьМакета.Параметры.СуммаСНДС = ВсегоСНДС;
ОбластьМакета.Параметры.СуммаБезНДС = ВсегоСНДС;
ОбластьМакета.Параметры.СуммаНДС = 0;
ОбластьМакета.Параметры.Цена = Цена;
ОбластьМакета.Параметры.ТоварНаименование = СокрЛП(ВыборкаСтрокТовары.ТоварНаименование);
ОбластьМакета.Параметры.КоррСчет = СокрЛП(ВыборкаСтрокТовары.СчетУчета);
ОбластьМакета.Параметры.НоменклатурныйНомер = ВыборкаСтрокТовары.ТоварКод;
МассивОбластей =Новый Массив;
МассивОбластей.Добавить(ОбластьМакета);
Если (Не ТабДокумент.ПроверитьВывод(МассивОбластей)) Тогда
// Или (Ном = КоличествоСтрок) Тогда
НомерСтраницы = НомерСтраницы + 1;
ЗаголовокТаблицы.Параметры.НомерСтраницы = «Страница » + НомерСтраницы;
ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
ТабДокумент.Вывести(ЗаголовокТаблицы);
МассивОбластей.Очистить();
КонецЕсли;
(25) вот такой код у меня, там есть еще один нюанс, время будет доделаю.
(23) не знаю, с очисткой не получилось )))
автомасштаб предлагали уже отключить?
(28) + количество экземпляров на странице с авто на 1 установить.
Мнэ. Вы не умеете готовить ПроверитьВывод. Он проверяет, умещаются ли добавляемые области на УЖЕ ВЫВЕДЕННЫЙ табличный документ. Т.е. вы сперва выводите строку, а потом еще и ее добавляете — поместится ли она, если я выведу ее еще раз?
Для каждого СтрокаКомиссия Из Док.РабочееВремя Цикл
Если СтрокаКомиссия.НомерСтроки = 1 Тогда
ОбластьКомиссия.Параметры.СтрокаЧленыКомиссии = «Члены комиссии: «;
Иначе
ОбластьКомиссия.Параметры.СтрокаЧленыКомиссии = «»;
КонецЕсли;
ОбластьКомиссия.Параметры.ФИОЧленаКомиссии = СтрокаКомиссия.Физлицо;
ОбластьКомиссия.Параметры.ДолжностьЧленаКомиссии = СтрокаКомиссия.Должность;
МассивВыводимыхОбластей.Добавить(ОбластьКомиссия);
Если Не (ТабличныйДокумент.ПроверитьВывод(ОбластьКомиссия)) Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
НомерСтраницы = НомерСтраницы + 1;
ОбластьНомерСтраницы.Параметры.НомерСтраницы = «Страница » + НомерСтраницы;
МассивВыводимыхОбластей.Очистить();
МассивВыводимыхОбластей.Добавить(ОбластьНомерСтраницы);
ТабличныйДокумент.Вывести(ОбластьНомерСтраницы);
КонецЕсли;
+(30) Имя табличной части не забудьте поменять.
(0) Настройки печати когда устанавливаешь? Надо до проверки вывода, в т.ч. и принтер надо выбирать до проверки вывода. У тебя, скорее всего, по умолчанию альбомная ориентация, а ты ставишь уже после проверки книжную.
(28) а если он нужен?
(31) ну а мы разве не так же делаем?
(32) да, настройки принтера ставим первыми и все настройки до первого вывода заранее ставим
(34)Нет. В (0) написано
ТабДокумент(который уже содержит весь массив областей).ПроверитьВывод(а скажи-ка нам, поместится ли в тебе, если мы ЕЩЕ РАЗ выведем ->)(МассивОбластей)
+(35)А нода все лишь проверять только то, что еще не добавлено в таб.документ, но хочется добавить.
(36) я код в (0) не читал, у меня как раз проблема была именно с тем, что я проверял именно перед выводом области и он выдавал, что страница закончится, однако, она только наполовину заполнена. и у всех, кто до этого темы создавал раньше. я понимаю, как она работает, но вижу что работает она неправильно. ведь когда я переписал на обход глюка, у меня же все правильно встало. могу скинуть отчет до и после (она для стандартного зика)
(37)Нет там глюков. Есть неправильное прочтение описания. У меня везде работает. В авторском коде меняем проверку вывода массива на проверку вывода добавляемой строки — тоже все работает как ожидалось.
(0) ну вот тут же бред
получается выводишь два раза, и в табдокумент и в массив. И правильно получается полстраницы.
(37) покажи что получилось.
PS: ТС взял фрагменты типовых алгоритмов, но не совсем разобравшись, соединил их с точностью до наоборот? 🙂
Массив выводимых областей нужен для проверки вывода (т.е. до вывода), а автор добавляет туда значения уже после вывода.
(имхо)
По опубликованному фрагменту алгоритма, массив выводимых областей, в принципе, не нужен. Достаточно всего лишь сформировать ОбластьКомиссия и проверить перед выводом
Если Не (ТабличныйДокумент.ПроверитьВывод(ОбластьКомиссия+Областьподвала1) Тогда
о блин, сколько полезного понаписали)) ща буду пробовать)
(42) Давай, я тоже возьмусь за свою недоделку))
Может кто скинет рабочий код с выводом последней строки с подвалом , когда она не помещается на выводимую.
+(43) пока вод немного исправленный вариант, но нужно добавить вывод последней строки с подвалом.
ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.ИмяПараметровПечати = «ПАРАМЕТРЫ_ПЕЧАТИ_ПередачаТоваров_М15»;
// Зададим параметры макета
ТабДокумент.ПолеСверху = 0;
ТабДокумент.ПолеСлева = 0;
ТабДокумент.ПолеСнизу = 0;
ТабДокумент.ПолеСправа = 0;
ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
// Выводим общие реквизиты шапки
СведенияОбОрганизации = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.ЮрФизЛицо, Шапка.ДатаСоставления);
ОбластьМакета = Макет.ПолучитьОбласть(«Шапка»);
ОбластьМакета.Параметры.Заполнить(Шапка);
ОбластьМакета.Параметры.ПредставлениеОрганизации = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбОрганизации);
ОбластьМакета.Параметры.ОрганизацияПоОКПО = СведенияОбОрганизации.КодПоОКПО;
ОбластьМакета.Параметры.НомерДокумента = ОбщегоНазначения.ПолучитьНомерНаПечать(Шапка);
СведенияОКонтрагенте = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Контрагент, Шапка.ДатаСоставления);
ПредставлениеКонтрагента = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОКонтрагенте, «НаименованиеДляПечатныхФорм,»);
ОбластьМакета.Параметры.КонтрагентНаименование = «» + ПредставлениеКонтрагента;
ОбластьМакета.Параметры.Получатель = ПредставлениеКонтрагента;
ОбластьМакета.Параметры.Основание = «Договор » + СсылкаНаОбъект.ДоговорКонтрагента.Наименование + » № » + СсылкаНаОбъект.ДоговорКонтрагента.Номер + » от » + Формат(СсылкаНаОбъект.ДоговорКонтрагента.Дата, «ДЛФ=D»);
// Выводим заголовок таблицы
ЗаголовокТаблицы = Макет.ПолучитьОбласть(«ЗаголовокТаблицы»);
ТабДокумент.Вывести(ЗаголовокТаблицы);
СтрокНаСтранице = 24;
СтрокШапки = 9;
СтрокПодвала = 3;
НомерСтраницы = 1;
КоличествоСтрок = ВыборкаСтрокТовары.Количество();
// Инициализация итогов в документе
ИтогоКоличествоПринято = 0;
ИтогоСуммаБезНДС = 0;
ИтогоСуммаНДС = 0;
ИтогоВсегоСНДС = 0;
Ном = 0;
ТаблицаСуммСписания = БухгалтерскийУчет.ПолучитьСуммуСписанияАктивов(СсылкаНаОбъект);
ТаблицаСуммСписания.Индексы.Добавить(«Номенклатура»);
ОбластьМакетаПодвал = Макет.ПолучитьОбласть(«Подвал»);
ОбластьМакетаПодвал.Параметры.ФИОРуководителя = Руководитель;
ОбластьМакетаПодвал.Параметры.ВывДоверености = ДовРуководитель.ДоверенностьНомерДата;
ОбластьМакетаПодвал.Параметры.ДолжностьРуководителя = ДолжностьРуководитель;
ОбластьМакетаПодвал.Параметры.ФИОГлавБухгалтера = ГлБухгалтер;
ОбластьМакетаПодвал.Параметры.ВывДовереностиГлБух = ДовГлБухгалтер.ДоверенностьНомерДата;
ОбластьМакетаПодвал.Параметры.КоличествоПорядковыхНомеровЗаписейПрописью = ЧислоПрописью(КоличествоСтрок, ,». 0″);
ОбластьМакетаПодвал.Параметры.СуммаПрописью = ОбщегоНазначения.СформироватьСуммуПрописью(ИтогоВсегоСНДС, Шапка.ВалютаДокумента);
ОбластьМакетаПодвал.Параметры.ИтогНДС = ОбщегоНазначения.СформироватьСуммуПрописью(0, Шапка.ВалютаДокумента);
ОбластьМакета = Макет.ПолучитьОбласть(«Строка»);
Пока ВыборкаСтрокТовары.Следующий() Цикл
Ном = Ном + 1;
Кратность = 1;
СтрокаСуммСписания = ТаблицаСуммСписания.Найти(ВыборкаСтрокТовары.Номенклатура, «Номенклатура»);
Если СтрокаСуммСписания = Неопределено Тогда
ВсегоСНДС = 0;
Цена = 0;
Иначе
Цена = ?(СтрокаСуммСписания.Количество = 0, 0, СтрокаСуммСписания.Сумма / СтрокаСуммСписания.Количество);
ВсегоСНДС = Цена * ВыборкаСтрокТовары.КоличествоПринято;
КонецЕсли;
ОбластьМакета.Параметры.Количество = Количество;
ОбластьМакета.Параметры.СуммаСНДС = ВсегоСНДС;
ОбластьМакета.Параметры.СуммаБезНДС = ВсегоСНДС;
ОбластьМакета.Параметры.СуммаНДС = 0;
ОбластьМакета.Параметры.Цена = Цена;
ОбластьМакета.Параметры.ТоварНаименование = СокрЛП(ВыборкаСтрокТовары.ТоварНаименование);
ОбластьМакета.Параметры.КоррСчет = СокрЛП(ВыборкаСтрокТовары.СчетУчета);
ОбластьМакета.Параметры.НоменклатурныйНомер = ВыборкаСтрокТовары.ТоварКод;
МассивОбластей.Очистить();
МассивОбластей.Добавить(ОбластьМакета);
Если (Не ТабДокумент.ПроверитьВывод(МассивОбластей)) Тогда
// Или (Ном = КоличествоСтрок) Тогда
НомерСтраницы = НомерСтраницы + 1;
ЗаголовокТаблицы.Параметры.НомерСтраницы = «Страница » + НомерСтраницы;
ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
ТабДокумент.Вывести(ЗаголовокТаблицы);
МассивОбластей.Очистить();
КонецЕсли;
ИтогоКоличествоПринято = ИтогоКоличествоПринято + Количество;
ИтогоСуммаБезНДС = ИтогоСуммаБезНДС + ВсегоСНДС;
ИтогоВсегоСНДС = ИтогоВсегоСНДС + ВсегоСНДС;
Немого коряво, но вроде работает
ПодвалВывели=0;
ОбластьМакета = Макет.ПолучитьОбласть(«Строка»);
Пока ВыборкаСтрокТовары.Следующий() Цикл
Ном = Ном + 1;
Кратность = 1;
СтрокаСуммСписания = ТаблицаСуммСписания.Найти(ВыборкаСтрокТовары.Номенклатура, «Номенклатура»);
Если СтрокаСуммСписания = Неопределено Тогда
ВсегоСНДС = 0;
Цена = 0;
Иначе
Цена = ?(СтрокаСуммСписания.Количество = 0, 0, СтрокаСуммСписания.Сумма / СтрокаСуммСписания.Количество);
ВсегоСНДС = Цена * ВыборкаСтрокТовары.КоличествоПринято;
КонецЕсли;
ОбластьМакета.Параметры.Количество = Количество;
ОбластьМакета.Параметры.СуммаСНДС = ВсегоСНДС;
ОбластьМакета.Параметры.СуммаБезНДС = ВсегоСНДС;
ОбластьМакета.Параметры.СуммаНДС = 0;
ОбластьМакета.Параметры.Цена = Цена;
ОбластьМакета.Параметры.ТоварНаименование = СокрЛП(ВыборкаСтрокТовары.ТоварНаименование);
ОбластьМакета.Параметры.КоррСчет = СокрЛП(ВыборкаСтрокТовары.СчетУчета);
ОбластьМакета.Параметры.НоменклатурныйНомер = ВыборкаСтрокТовары.ТоварКод;
МассивОбластей.Очистить();
МассивОбластей.Добавить(ОбластьМакета);
Если Ном = КоличествоСтрок Тогда
МассивОбластей.Добавить(ОбластьМакетаПодвал);
Если (Не ТабДокумент.ПроверитьВывод(МассивОбластей)) Тогда
НомерСтраницы = НомерСтраницы + 1;
ЗаголовокТаблицы.Параметры.НомерСтраницы = «Страница » + НомерСтраницы;
ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
ТабДокумент.Вывести(ЗаголовокТаблицы);
ТабДокумент.Вывести(ОбластьМакета);
ТабДокумент.Вывести(ОбластьМакетаПодвал);
ПодвалВывели=1;
КонецЕсли;
Прервать;
КонецЕсли;
Если (Не ТабДокумент.ПроверитьВывод(МассивОбластей)) и (Ном <> КоличествоСтрок) Тогда
НомерСтраницы = НомерСтраницы + 1;
ЗаголовокТаблицы.Параметры.НомерСтраницы = «Страница » + НомерСтраницы;
ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
ТабДокумент.Вывести(ЗаголовокТаблицы);
МассивОбластей.Очистить();
КонецЕсли;
ИтогоКоличествоПринято = ИтогоКоличествоПринято + Количество;
ИтогоСуммаБезНДС = ИтогоСуммаБезНДС + ВсегоСНДС;
ИтогоВсегоСНДС = ИтогоВсегоСНДС + ВсегоСНДС;
Если ПодвалВывели=0 Тогда
ТабДокумент.Вывести(ОбластьМакетаПодвал);
КонецЕсли;
сделал по коду (30), все получилось, спасибо огромное. Теперь понял как это все работает)) МассивВыводимыхОбластей тут вообще теперь не нужен по сути)) Проверяется область чисто. Все круто залетало) Вторую часть кода сам допинаю щас и все в ажуре)
