Функция Печать() Экспорт
// Создаём новый табличный документ в который будим заполнять выводимой информацией
ТабДокумент = Новый ТабличныйДокумент;
//Получаем макет (имя макета ) "ПриходРасходВЦенахАТТ8"
Макет = ПолучитьМакет("ПриходРасходВЦенахАТТ8");
//Делаем запрос к табличной части текущего документа в условиях указываем
//что склады нам нужны только из табличной части текущего документа (они там присутствуют).
//Группируем склады так мы узнали какие склады указаны в табличной части документа.
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("СсылкаНаОбъект", СсылкаНаОбъект);
Запрос.Текст =
"ВЫБРАТЬ
| ПоступлениеТоваровУслугТовары.Склад
|ИЗ
| Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
|ГДЕ
| ПоступлениеТоваровУслугТовары.Ссылка = &СсылкаНаОбъект
|
|СГРУППИРОВАТЬ ПО
| ПоступлениеТоваровУслугТовары.Склад";
//Выполняем запрос и выбираем его
ВыборкаСклад = Запрос.Выполнить().Выбрать();
//В цикле обходим строки табличной части в которых казан склад из выше показанного запроса.
Пока ВыборкаСклад.Следующий() Цикл
//Делаем запросы для заполнения данными макет "ПриходРасходВЦенахАТТ8"
// в условиях указываем что нужно взять данные из табличной части только
//под складу который казан в запросе выше.
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("СсылкаНаОбъект", СсылкаНаОбъект);
Запрос.Текст =
"ВЫБРАТЬ
| ПоступлениеТоваровУслуг.Номер,
| ПоступлениеТоваровУслуг.Дата,
| ПоступлениеТоваровУслуг.Организация,
| ПоступлениеТоваровУслуг.СуммаДокумента,
| ПоступлениеТоваровУслуг.СкладОрдер КАК Склад,
| ПоступлениеТоваровУслуг.ВалютаДокумента
|ИЗ
| Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
|ГДЕ
| ПоступлениеТоваровУслуг.Ссылка = &СсылкаНаОбъект";
ВыборкаШапка = Запрос.Выполнить().Выбрать();
//Тут ну но получить только одну строчку по этому просто пишем "ВыборкаШапка.Следующий()" без цикла
// Вернутся только первые строки Даты, номера, Организации,Суммы, документа.
ВыборкаШапка.Следующий();
Запрос.Текст =
"ВЫБРАТЬ
| Док.НомерСтроки,
| Док.Номенклатура.Артикул КАК Артикул,
| Док.Номенклатура КАК Номеклатура,
| Док.ЕдиницаИзмерения,
| Док.Количество,
| Док.Цена,
| Док.Сумма,
| Док.ГЛ_Вес КАК Вес,
| Док.ХарактеристикаНоменклатуры
|ИЗ
| Документ.ПоступлениеТоваровУслуг.Товары КАК Док
|ГДЕ
| Док.Ссылка = &СсылкаНаОбъект
| И Док.Склад = &Склад";
Запрос.УстановитьПараметр("Склад", ВыборкаСклад.Склад);
ВыборкаТоваров = Запрос.Выполнить().Выбрать();
Запрос.Текст =
"ВЫБРАТЬ
| СУММА(ПоступлениеТоваровУслугТовары.ГЛ_Вес) КАК ВесИтог,
| МАКСИМУМ(ПоступлениеТоваровУслугТовары.НомерСтроки) КАК НомерСтроки
|ИЗ
| Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
|ГДЕ
| ПоступлениеТоваровУслугТовары.Ссылка = &СсылкаНаОбъект";
ВесТоваров = Запрос.Выполнить().Выбрать();
ВесТоваров.Следующий();
// Получаем области макета и приравниваем в этих областям ПАРАМЕТРАМ
// определенные значения и выводим каждую область табличного документа
// Выводим секцию с Складом
ОбластьМакета = Макет.ПолучитьОбласть("Склад");
ОбластьМакета.Параметры.ПредставлениеСклада = ВыборкаСклад.Склад;
ТабДокумент.Вывести(ОбластьМакета);
// Выводим заголовок документа
ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");
//Приравниваем параметр "ТекстЗаловка" к Процедуре общего назначения "СформироватьЗаголовокДокумента"
//передаём туда область "ВыборкаШапка" и имя "Поступление товаров и услуг"
ОбластьМакета.Параметры.ТекстЗаголовка =
ОбщегоНазначения.СформироватьЗаголовокДокумента(ВыборкаШапка, "Поступление товаров и услуг");
ТабДокумент.Вывести(ОбластьМакета);
// Выводим шапку таблицы с товарами
ОбластьМакета = Макет.ПолучитьОбласть("ШапкаТаблицы");
ТабДокумент.Вывести(ОбластьМакета);
// Выводим строки таблицы
ОбластьМакета = Макет.ПолучитьОбласть("Строка");
Пока ВыборкаТоваров.Следующий() Цикл
ОбластьМакета.Параметры.НомерСтроки = ВыборкаТоваров.НомерСтроки;
ОбластьМакета.Параметры.Артикул = ВыборкаТоваров.Артикул;
ОбластьМакета.Параметры.Товар = ВыборкаТоваров.ХарактеристикаНоменклатуры;
ОбластьМакета.Параметры.Количество = ВыборкаТоваров.Количество;
ОбластьМакета.Параметры.ЕдиницаИзмерения = ВыборкаТоваров.ЕдиницаИзмерения;
// Функцие "Окр" округляем суммы все числа после запятой будут равны 0
ОбластьМакета.Параметры.Цена = Окр(ВыборкаТоваров.Цена);
ОбластьМакета.Параметры.СуммаПродажная = Окр(ВыборкаТоваров.Сумма);
ТабДокумент.Вывести(ОбластьМакета);
КонецЦикла;
// Выводим секцию с итоговой суммой
ОбластьМакета = Макет.ПолучитьОбласть("Итоги");
ОбластьМакета.Параметры.Всего = ОбщегоНазначения.ФорматСумм(Окр(ВыборкаШапка.СуммаДокумента));
ОбластьМакета.Параметры.ВесИтог = ВесТоваров.ВесИтог;
ТабДокумент.Вывести(ОбластьМакета);
// Выводим итоговую строку
ОбластьМакета = Макет.ПолучитьОбласть("СуммаПрописью");
ОбластьМакета.Параметры.ИтоговаяСтрока =
"Всего принято " + ВесТоваров.НомерСтроки + " наименований, на сумму "
+ ОбщегоНазначения.ФорматСумм(Окр(ВыборкаШапка.СуммаДокумента))+"руб.";
ОбластьМакета.Параметры.СуммаПропесью
= ОбщегоНазначения.СформироватьСуммуПрописью(Окр(ВыборкаШапка.СуммаДокумента),ВыборкаШапка.ВалютаДОкумента);
ТабДокумент.Вывести(ОбластьМакета);
// Выводим секцию для подписей сторон
ОбластьМакета = Макет.ПолучитьОбласть("Подписи");
ТабДокумент.Вывести(ОбластьМакета);
КонецЦикла; // Это завершается цикл по одному складу если есть ещё в табличной части товары у которых склад
// отличается от текущего цикл повторится снова пока все строки с различными складами не обойдутся
// При этом в табличный документ записывается друг после друга все строки сначала по одному складу
// по том по другим.
//По завершению выборки и заполнения табличного документа мы возвращаем ТабличныйДокумент
Возврат ТабДокумент;
КонецФункции
Пример