1С 8.3 Табличная часть в запросе (Вложенные таблицы) - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

1С 8.3 Табличная часть в запросе (Вложенные таблицы)

Данные > Примеры кода 1С > 1С 8.3 Запросы
Перейти в раздел примеры кода 1С 8.3:
В полях выборки запроса можно использовать вложенную таблицу (ТЧ документа "Поступление товаров и услуг") : ПоступлениеТоваровУслуг.Услуги.(Количество КАК Количество, Цена КАК Цена, Сумма КАК Сумма....) КАК Услуги.
Вложенная таблица в запросе в 1С 8.3:
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда    

   // ПРОЦЕДУРЫ И ФУНКЦИИ ФОРМИРОВАНИЯ ПЕЧАТНЫХ ФОРМ
   Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

       Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ПФ_MXL_АктОдносторонний") Тогда
           УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ПФ_MXL_АктОдносторонний",
          НСтр("ru = 'Акт односторонний'"),
           СформироватьПечатнуюФормуАктОдносторонний(МассивОбъектов, ОбъектыПечати, ПараметрыПечати));
       КонецЕсли;

   КонецПроцедуры

   // Функция осуществляет печать акта одностороннего.
   Функция СформироватьПечатнуюФормуАктОдносторонний(МассивОбъектов, ОбъектыПечати, ПараметрыПечати)

       Запрос = Новый Запрос;
       Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
       Запрос.Текст = ПолучитьТекстЗапросаДляФормированияПечатнойФормыАктаУслуги_Локализация();

       Шапка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

       ВалютаРегламентированногоУчета   = Константы.ВалютаРегламентированногоУчета.Получить();

       ТабличныйДокумент = Новый ТабличныйДокумент;
       ТабличныйДокумент.АвтоМасштаб            = Истина;
       ТабличныйДокумент.ОриентацияСтраницы    = ОриентацияСтраницы.Портрет;
       ТабличныйДокумент.ИмяПараметровПечати    = "ПАРАМЕТРЫ_ПЕЧАТИ_ОказаниеУслуг_Акты";

       НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
       Макет = УправлениеПечатью.МакетПечатнойФормы("Обработка.АОПФ_АктОдносторонний.ПФ_MXL_АктОдносторонний");

       Пока Шапка.Следующий() Цикл

           СведенияОбОрганизации    = БухгалтерскийУчетПереопределяемый.СведенияОЮрФизЛице(Шапка.Организация, Шапка.ДатаДокумента);
           ПредставлениеПоставщика    = ОбщегоНазначенияБПВызовСервера.ОписаниеОрганизации(СведенияОбОрганизации, "НаименованиеДляПечатныхФорм,");

           ОтветственныеЛицаОрганизации    = ОтветственныеЛицаБП.ОтветственныеЛица(Шапка.Организация, Шапка.ДатаДокумента, Шапка.ПодразделениеОрганизации);
           ДолжностьИНазваниеОрганизации    = ?(ЗначениеЗаполнено(ОтветственныеЛицаОрганизации.РуководительДолжностьПредставление),ОтветственныеЛицаОрганизации.РуководительДолжностьПредставление + " ","") + ПредставлениеПоставщика;

           Выборка    = Шапка.Выбрать();
           Пока Выборка.Следующий() Цикл

               ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
               ОбластьМакета.Параметры.Заполнить(Выборка);

               ОбластьМакета.Параметры.ИНН = СведенияОбОрганизации.ИНН;

               ОбластьМакета.Параметры.ООБСБанкКод                = СведенияОбОрганизации.Бик;
               ОбластьМакета.Параметры.ООБСБанкНаименование    = ?(ЗначениеЗаполнено(СведенияОбОрганизации.Банк), СокрЛП(СведенияОбОрганизации.Банк.Наименование), "");
               ОбластьМакета.Параметры.ООБСНомерСчета          = СведенияОбОрганизации.НомерСчета;
               Попытка
                   ОбластьМакета.Параметры.ООБСБанкАдрес        = СведенияОбОрганизации.Банк.Адрес;
               Исключение

               КонецПопытки;

               ОбластьМакета.Параметры.ОрганизацияНаименование = СведенияОбОрганизации.НаименованиеДляПечатныхФорм;
               ОбластьМакета.Параметры.ЮрАдресОрганизации        = СведенияОбОрганизации.ЮридическийАдрес;
               ОбластьМакета.Параметры.ТелефонОрганизации        = СведенияОбОрганизации.Телефоны;

               СведенияОПокупателе = БухгалтерскийУчетПереопределяемый.СведенияОЮрФизЛице(Выборка.Получатель, Шапка.ДатаДокумента);
               ОбластьМакета.Параметры.КонтрагентНаименование = ОбщегоНазначенияБПВызовСервера.ОписаниеОрганизации(
               СведенияОПокупателе, "НаименованиеДляПечатныхФорм");
               ОбластьМакета.Параметры.КонтрагентИНН             = СведенияОПокупателе.ИНН;
               ОбластьМакета.Параметры.ЮрАдресКонтрагента        = СведенияОПокупателе.ЮридическийАдрес;
               ОбластьМакета.Параметры.ТелефонКонтрагента        = СведенияОПокупателе.Телефоны;
               ОбластьМакета.Параметры.КОБСБанкКод                = СведенияОПокупателе.Бик;
               ОбластьМакета.Параметры.КОБСБанкНаименование    = СведенияОПокупателе.Банк;
               ОбластьМакета.Параметры.КОБСНомерСчета          = СведенияОПокупателе.НомерСчета;
               Попытка
                   ОбластьМакета.Параметры.КОБСБанкАдрес       = СведенияОПокупателе.Банк.Адрес;
               Исключение

               КонецПопытки;

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

               ИтогоКоличество = 0;

               ТаблУслуги = Выборка.Услуги;
               ВыборкаУслуг = ТаблУслуги.Выбрать(); // ВЫБОР ТАБЛИЧНОЙ ЧАСТИ ДОКУМЕНТА
               Пока ВыборкаУслуг.Следующий() Цикл // ЦИКЛ ПО ТАБЛИЧНОЙ ЧАСТИ ДОКУМЕНТА

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

                   Количество = ВыборкаУслуг.Количество;
                   ИтогоКоличество = ИтогоКоличество + Количество;
                   Сумма     = ?(ЗначениеЗаполнено(ВыборкаУслуг.Сумма), ВыборкаУслуг.Сумма, 0);
                   СуммаНДС = ?(ЗначениеЗаполнено(ВыборкаУслуг.СуммаНДС), ВыборкаУслуг.СуммаНДС, 0);
                   Всего = Сумма + СуммаНДС;

                   ОбластьМакетаСтрока.Параметры.Всего    = ОбщегоНазначенияБПВызовСервера.ФорматСумм(Всего,,,, Шапка.ВалютаДокумента, Шапка.ДатаДокумента);
                   ОбластьМакетаСтрока.Параметры.Цена     = ОбщегоНазначенияБПВызовСервера.ФорматСумм(ВыборкаУслуг.Цена,,,, Шапка.ВалютаДокумента, Шапка.ДатаДокумента);
                   ОбластьМакетаСтрока.Параметры.Сумма    = ОбщегоНазначенияБПВызовСервера.ФорматСумм(ВыборкаУслуг.Сумма,,,, Шапка.ВалютаДокумента, Шапка.ДатаДокумента);
                   ОбластьМакетаСтрока.Параметры.СуммаНДС = ОбщегоНазначенияБПВызовСервера.ФорматСумм(ВыборкаУслуг.СуммаНДС,,,, Шапка.ВалютаДокумента, Шапка.ДатаДокумента);

                   ТабличныйДокумент.Вывести(ОбластьМакетаСтрока);

               КонецЦикла;

               ОбластьМакета = Макет.ПолучитьОбласть("Итого");

               Если СуммаНДС <> 0 Тогда
                   ОбластьМакета.Параметры.ИтогоНДС    = ОбщегоНазначенияБПВызовСервера.ФорматСумм(СуммаНДС,,,, Шапка.ВалютаДокумента, Шапка.ДатаДокумента);
                   ОбластьМакета.Параметры.НДС            = НСтр("ru = 'Сумма НДС'");
               Иначе
                   ОбластьМакета.Параметры.ИтогоНДС    = "-";
                   ОбластьМакета.Параметры.НДС            = НСтр("ru = 'Без налога (НДС)'");
               КонецЕсли;
               ОбластьМакета.Параметры.ИтогоСумма     = ОбщегоНазначенияБПВызовСервера.ФорматСумм(Сумма,,,, Шапка.ВалютаДокумента, Шапка.ДатаДокумента);
               ОбластьМакета.Параметры.ИтогоСуммаСНДС = ОбщегоНазначенияБПВызовСервера.ФорматСумм(Всего,,,, Шапка.ВалютаДокумента, Шапка.ДатаДокумента);
               ТабличныйДокумент.Вывести(ОбластьМакета);

               ОбластьМакета = Макет.ПолучитьОбласть("Подвал");

               ОбластьМакета.Параметры.ИтогоКоличество = ИтогоКоличество;

               ОбщегоНазначенияБПВызовСервера.ФорматСумм(Сумма, ВалютаРегламентированногоУчета,,,, Шапка.ДатаДокумента);
               ОбластьМакета.Параметры.ИтогоСуммаСНДСП    = ОбщегоНазначенияБПВызовСервера.СформироватьСуммуПрописью(Всего,
               ВалютаРегламентированногоУчета, Шапка.ДатаДокумента); // Деноминация

               ОбщегоНазначенияБПВызовСервера.ФорматСумм(СуммаНДС, ВалютаРегламентированногоУчета,,,, Шапка.ДатаДокумента);
               ОбластьМакета.Параметры.ИтогоНДСП    = ОбщегоНазначенияБПВызовСервера.СформироватьСуммуПрописью(СуммаНДС, ВалютаРегламентированногоУчета, Шапка.ДатаДокумента);

               ТабличныйДокумент.Вывести(ОбластьМакета);
               ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
           КонецЦикла;

           УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент,
           НомерСтрокиНачало, ОбъектыПечати, Шапка.Ссылка);

       КонецЦикла;

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

   КонецФункции

   // Формирует и возвращает текст запроса для выборки данных,
   // необходимых для формирования печатной формы
   Функция ПолучитьТекстЗапросаДляФормированияПечатнойФормыАктаУслуги_Локализация()

    ТекстЗапроса =
     "ВЫБРАТЬ
       |    ПоступлениеТоваровУслуг.Ссылка КАК Ссылка,
       |    ПоступлениеТоваровУслуг.Номер КАК НомерДокумента,
       |    ПоступлениеТоваровУслуг.Дата КАК ДатаДокумента,
       |    ПоступлениеТоваровУслуг.Организация КАК Организация,
       |    ПоступлениеТоваровУслуг.Организация КАК Поставщик,
       |    ПоступлениеТоваровУслуг.Контрагент КАК Получатель,
       |    ПоступлениеТоваровУслуг.ПодразделениеОрганизации КАК ПодразделениеОрганизации,
       |    ПоступлениеТоваровУслуг.Услуги.(
       |        Количество КАК Количество,
       |        Цена КАК Цена,
       |        Сумма КАК Сумма,
       |        СуммаНДС КАК СуммаНДС,
       |        СтавкаНДС КАК СтавкаНДС,
       |        Номенклатура КАК Номенклатура,
       |        ВЫБОР
       |            КОГДА НЕ ПоступлениеТоваровУслуг.Услуги.Номенклатура.НаименованиеПолное ПОДОБНО """"
       |                ТОГДА ВЫРАЗИТЬ(ПоступлениеТоваровУслуг.Услуги.Номенклатура.НаименованиеПолное КАК СТРОКА(1000))
       |            ИНАЧЕ ПоступлениеТоваровУслуг.Услуги.Номенклатура.Наименование
       |        КОНЕЦ КАК Товар,
       |        Номенклатура.ЕдиницаИзмерения КАК НоменклатураЕдиницаИзмерения,
       |        НомерСтроки КАК НомерСтроки
       |    ) КАК Услуги,
       |    ПоступлениеТоваровУслуг.ДоговорКонтрагента.Дата КАК ДатаДоговора,
       |    ПоступлениеТоваровУслуг.ДоговорКонтрагента.Номер КАК НомерДоговора,
       |    ПоступлениеТоваровУслуг.ДоговорКонтрагента КАК ДоговорКонтрагента,
       |    ПоступлениеТоваровУслуг.ВалютаДокумента КАК ВалютаДокумента
       |ИЗ
       |    Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
       |ГДЕ
       |    ПоступлениеТоваровУслуг.Ссылка В(&МассивОбъектов)
       |
       |УПОРЯДОЧИТЬ ПО
       |    ПоступлениеТоваровУслуг.Дата
       |ИТОГИ ПО
      |    Ссылка";

       Возврат ТекстЗапроса;

   КонецФункции

#КонецЕсли
0
комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 21.08.2024
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Защищенное соединение ssl
visa
mastercard
Maestro
Яндекс деньги
Назад к содержимому