1С 8.3 Табличная часть в запросе (Вложенные таблицы)
Данные > Примеры кода 1С > 1С 8.3 Запросы
Перейти в раздел примеры кода 1С 8.3:
В полях выборки запроса можно использовать вложенную таблицу (ТЧ документа "Поступление товаров и услуг") : ПоступлениеТоваровУслуг.Услуги.(Количество КАК Количество, Цена КАК Цена, Сумма КАК Сумма....) КАК Услуги.
Вложенная таблица в запросе в 1С 8.3:
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
// ПРОЦЕДУРЫ И ФУНКЦИИ ФОРМИРОВАНИЯ ПЕЧАТНЫХ ФОРМ
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ПФ_MXL_АктОдносторонний") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ПФ_MXL_АктОдносторонний",
НСтр("ru = 'Акт односторонний'"),
СформироватьПечатнуюФормуАктОдносторонний(МассивОбъектов, ОбъектыПечати, ПараметрыПечати));
КонецЕсли;
КонецПроцедуры
// Функция осуществляет печать акта одностороннего.
Функция СформироватьПечатнуюФормуАктОдносторонний(МассивОбъектов, ОбъектыПечати, ПараметрыПечати)
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
Запрос.Текст = ПолучитьТекстЗапросаДляФормированияПечатнойФормыАктаУслуги_Локализация();
Шапка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ВалютаРегламентированногоУчета = Константы.ВалютаРегламентированногоУчета.Получить();
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.АвтоМасштаб = Истина;
ТабличныйДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ОказаниеУслуг_Акты";
НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
Макет = УправлениеПечатью.МакетПечатнойФормы("Обработка.АОПФ_АктОдносторонний.ПФ_MXL_АктОдносторонний");
СформироватьПечатнуюФормуАктОдносторонний(МассивОбъектов, ОбъектыПечати, ПараметрыПечати));
КонецЕсли;
КонецПроцедуры
// Функция осуществляет печать акта одностороннего.
Функция СформироватьПечатнуюФормуАктОдносторонний(МассивОбъектов, ОбъектыПечати, ПараметрыПечати)
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
Запрос.Текст = ПолучитьТекстЗапросаДляФормированияПечатнойФормыАктаУслуги_Локализация();
Шапка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ВалютаРегламентированногоУчета = Константы.ВалютаРегламентированногоУчета.Получить();
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.АвтоМасштаб = Истина;
ТабличныйДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ОказаниеУслуг_Акты";
НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
Макет = УправлениеПечатью.МакетПечатнойФормы("Обработка.АОПФ_АктОдносторонний.ПФ_MXL_АктОдносторонний");
Пока Шапка.Следующий() Цикл
СведенияОбОрганизации = БухгалтерскийУчетПереопределяемый.СведенияОЮрФизЛице(Шапка.Организация, Шапка.ДатаДокумента);
ПредставлениеПоставщика = ОбщегоНазначенияБПВызовСервера.ОписаниеОрганизации(СведенияОбОрганизации, "НаименованиеДляПечатныхФорм,");
ОтветственныеЛицаОрганизации = ОтветственныеЛицаБП.ОтветственныеЛица(Шапка.Организация, Шапка.ДатаДокумента, Шапка.ПодразделениеОрганизации);
ДолжностьИНазваниеОрганизации = ?(ЗначениеЗаполнено(ОтветственныеЛицаОрганизации.РуководительДолжностьПредставление),ОтветственныеЛицаОрганизации.РуководительДолжностьПредставление + " ","") + ПредставлениеПоставщика;
Выборка = Шапка.Выбрать();
Пока Выборка.Следующий() Цикл
ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
ОбластьМакета.Параметры.Заполнить(Выборка);
ОбластьМакета.Параметры.ИНН = СведенияОбОрганизации.ИНН;
ОбластьМакета.Параметры.ООБСБанкКод = СведенияОбОрганизации.Бик;
ОбластьМакета.Параметры.ООБСБанкНаименование = ?(ЗначениеЗаполнено(СведенияОбОрганизации.Банк), СокрЛП(СведенияОбОрганизации.Банк.Наименование), "");
ОбластьМакета.Параметры.ООБСНомерСчета = СведенияОбОрганизации.НомерСчета;
Попытка
ОбластьМакета.Параметры.ООБСБанкАдрес = СведенияОбОрганизации.Банк.Адрес;
Исключение
КонецПопытки;
ОбластьМакета.Параметры.ОрганизацияНаименование = СведенияОбОрганизации.НаименованиеДляПечатныхФорм;
ОбластьМакета.Параметры.ЮрАдресОрганизации = СведенияОбОрганизации.ЮридическийАдрес;
ОбластьМакета.Параметры.ТелефонОрганизации = СведенияОбОрганизации.Телефоны;
СведенияОПокупателе = БухгалтерскийУчетПереопределяемый.СведенияОЮрФизЛице(Выборка.Получатель, Шапка.ДатаДокумента);
ОбластьМакета.Параметры.КонтрагентНаименование = ОбщегоНазначенияБПВызовСервера.ОписаниеОрганизации(
СведенияОПокупателе, "НаименованиеДляПечатныхФорм");
ОбластьМакета.Параметры.КонтрагентИНН = СведенияОПокупателе.ИНН;
ОбластьМакета.Параметры.ЮрАдресКонтрагента = СведенияОПокупателе.ЮридическийАдрес;
ОбластьМакета.Параметры.ТелефонКонтрагента = СведенияОПокупателе.Телефоны;
ОбластьМакета.Параметры.КОБСБанкКод = СведенияОПокупателе.Бик;
ОбластьМакета.Параметры.КОБСБанкНаименование = СведенияОПокупателе.Банк;
ОбластьМакета.Параметры.КОБСНомерСчета = СведенияОПокупателе.НомерСчета;
Попытка
ОбластьМакета.Параметры.КОБСБанкАдрес = СведенияОПокупателе.Банк.Адрес;
Исключение
КонецПопытки;
ОбластьМакета.Параметры.ВалютаДокумента = Шапка.ВалютаДокумента;
ОбластьМакета.Параметры.НомерДокумента = ПрефиксацияОбъектовКлиентСервер.ПолучитьНомерНаПечать(Шапка.НомерДокумента, Истина, Истина);
ОбластьМакета.Параметры.ДатаДокумента = Формат(Шапка.ДатаДокумента, "ДФ=""дд ММММ гггг""");
ОбластьМакета.Параметры.Договор = СокрЛП(Выборка.ДоговорКонтрагента);
ТабличныйДокумент.Вывести(ОбластьМакета);
ИтогоКоличество = 0;
ТаблУслуги = Выборка.Услуги;
ВыборкаУслуг = ТаблУслуги.Выбрать(); // ВЫБОР ТАБЛИЧНОЙ ЧАСТИ ДОКУМЕНТА
Пока ВыборкаУслуг.Следующий() Цикл // ЦИКЛ ПО ТАБЛИЧНОЙ ЧАСТИ ДОКУМЕНТА
// Вывести табличную часть
ОбластьМакетаСтрока = Макет.ПолучитьОбласть("Строка");
ОбластьМакетаСтрока.Параметры.Заполнить(ВыборкаУслуг);
ОбластьМакетаСтрока.Параметры.Номер = 1;
ОбластьМакетаСтрока.Параметры.НаименованиеУслуги = СокрЛП(ВыборкаУслуг.Товар);
ОбластьМакетаСтрока.Параметры.Договор = СокрЛП(Выборка.ДоговорКонтрагента);
Количество = ВыборкаУслуг.Количество;
ИтогоКоличество = ИтогоКоличество + Количество;
Сумма = ?(ЗначениеЗаполнено(ВыборкаУслуг.Сумма), ВыборкаУслуг.Сумма, 0);
СуммаНДС = ?(ЗначениеЗаполнено(ВыборкаУслуг.СуммаНДС), ВыборкаУслуг.СуммаНДС, 0);
Всего = Сумма + СуммаНДС;
ОбластьМакетаСтрока.Параметры.Всего = ОбщегоНазначенияБПВызовСервера.ФорматСумм(Всего,,,, Шапка.ВалютаДокумента, Шапка.ДатаДокумента);
ОбластьМакетаСтрока.Параметры.Цена = ОбщегоНазначенияБПВызовСервера.ФорматСумм(ВыборкаУслуг.Цена,,,, Шапка.ВалютаДокумента, Шапка.ДатаДокумента);
ОбластьМакетаСтрока.Параметры.Сумма = ОбщегоНазначенияБПВызовСервера.ФорматСумм(ВыборкаУслуг.Сумма,,,, Шапка.ВалютаДокумента, Шапка.ДатаДокумента);
ОбластьМакетаСтрока.Параметры.СуммаНДС = ОбщегоНазначенияБПВызовСервера.ФорматСумм(ВыборкаУслуг.СуммаНДС,,,, Шапка.ВалютаДокумента, Шапка.ДатаДокумента);
ТабличныйДокумент.Вывести(ОбластьМакетаСтрока);
КонецЦикла;
ОбластьМакета = Макет.ПолучитьОбласть("Итого");
Если СуммаНДС <> 0 Тогда
ОбластьМакета.Параметры.ИтогоНДС = ОбщегоНазначенияБПВызовСервера.ФорматСумм(СуммаНДС,,,, Шапка.ВалютаДокумента, Шапка.ДатаДокумента);
ОбластьМакета.Параметры.НДС = НСтр("ru = 'Сумма НДС'");
Иначе
ОбластьМакета.Параметры.ИтогоНДС = "-";
ОбластьМакета.Параметры.НДС = НСтр("ru = 'Без налога (НДС)'");
КонецЕсли;
ОбластьМакета.Параметры.ИтогоСумма = ОбщегоНазначенияБПВызовСервера.ФорматСумм(Сумма,,,, Шапка.ВалютаДокумента, Шапка.ДатаДокумента);
ОбластьМакета.Параметры.ИтогоСуммаСНДС = ОбщегоНазначенияБПВызовСервера.ФорматСумм(Всего,,,, Шапка.ВалютаДокумента, Шапка.ДатаДокумента);
ТабличныйДокумент.Вывести(ОбластьМакета);
ОбластьМакета = Макет.ПолучитьОбласть("Подвал");
ОбластьМакета.Параметры.ИтогоКоличество = ИтогоКоличество;
ОбщегоНазначенияБПВызовСервера.ФорматСумм(Сумма, ВалютаРегламентированногоУчета,,,, Шапка.ДатаДокумента);
ОбластьМакета.Параметры.ИтогоСуммаСНДСП = ОбщегоНазначенияБПВызовСервера.СформироватьСуммуПрописью(Всего,
ВалютаРегламентированногоУчета, Шапка.ДатаДокумента); // Деноминация
ОбщегоНазначенияБПВызовСервера.ФорматСумм(СуммаНДС, ВалютаРегламентированногоУчета,,,, Шапка.ДатаДокумента);
ОбластьМакета.Параметры.ИтогоНДСП = ОбщегоНазначенияБПВызовСервера.СформироватьСуммуПрописью(СуммаНДС, ВалютаРегламентированногоУчета, Шапка.ДатаДокумента);
ТабличныйДокумент.Вывести(ОбластьМакета);
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЦикла;
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент,
НомерСтрокиНачало, ОбъектыПечати, Шапка.Ссылка);
КонецЦикла;
Возврат ТабличныйДокумент;
КонецФункции
// Формирует и возвращает текст запроса для выборки данных,
// необходимых для формирования печатной формы
Функция ПолучитьТекстЗапросаДляФормированияПечатнойФормыАктаУслуги_Локализация()
ТекстЗапроса =
"ВЫБРАТЬ
| ПоступлениеТоваровУслуг.Ссылка КАК Ссылка,
| ПоступлениеТоваровУслуг.Номер КАК НомерДокумента,
| ПоступлениеТоваровУслуг.Дата КАК ДатаДокумента,
| ПоступлениеТоваровУслуг.Организация КАК Организация,
| ПоступлениеТоваровУслуг.Организация КАК Поставщик,
| ПоступлениеТоваровУслуг.Контрагент КАК Получатель,
| ПоступлениеТоваровУслуг.ПодразделениеОрганизации КАК ПодразделениеОрганизации,
| ПоступлениеТоваровУслуг.Услуги.(
| Количество КАК Количество,
| Цена КАК Цена,
| Сумма КАК Сумма,
| СуммаНДС КАК СуммаНДС,
| СтавкаНДС КАК СтавкаНДС,
| Номенклатура КАК Номенклатура,
| ВЫБОР
| КОГДА НЕ ПоступлениеТоваровУслуг.Услуги.Номенклатура.НаименованиеПолное ПОДОБНО """"
| ТОГДА ВЫРАЗИТЬ(ПоступлениеТоваровУслуг.Услуги.Номенклатура.НаименованиеПолное КАК СТРОКА(1000))
| ИНАЧЕ ПоступлениеТоваровУслуг.Услуги.Номенклатура.Наименование
| КОНЕЦ КАК Товар,
| Номенклатура.ЕдиницаИзмерения КАК НоменклатураЕдиницаИзмерения,
| НомерСтроки КАК НомерСтроки
| ) КАК Услуги,
| ПоступлениеТоваровУслуг.ДоговорКонтрагента.Дата КАК ДатаДоговора,
| ПоступлениеТоваровУслуг.ДоговорКонтрагента.Номер КАК НомерДоговора,
| ПоступлениеТоваровУслуг.ДоговорКонтрагента КАК ДоговорКонтрагента,
| ПоступлениеТоваровУслуг.ВалютаДокумента КАК ВалютаДокумента
|ИЗ
| Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
|ГДЕ
| ПоступлениеТоваровУслуг.Ссылка В(&МассивОбъектов)
|
|УПОРЯДОЧИТЬ ПО
| ПоступлениеТоваровУслуг.Дата
|ИТОГИ ПО
| Ссылка";
Возврат ТекстЗапроса;
КонецФункции
Возврат ТекстЗапроса;
КонецФункции
#КонецЕсли
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник