Для работы с пакетами запросов в платформе 1С есть два метода: ВыполнитьПакет() и ВыполнитьПакетСПромежуточнымиДанными(). С помощью них можно получить результат по каждому запросу в виде массива. Первый метод получая результат не детализирует временные таблицы. Более подробно об отличиях можно почитать в синтекс-помощнике.
Пример работы метода ВыполнитьПакет()
Например есть некий документ “Выдача средств защиты для сотрудников” состоящий из “Шапки” документа и двух табличных частей: Выданные средства и Комиссия. Предположим стоит задача получить эти данные и заполнить печатную форму. В данном случаи будет удобно воспользоваться пакетом запросов, т.е. получим результат запроса в три пакета и перенесем в печатную форму:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
ТабличныйДокумент = Новый ТабличныйДокумент; ТабличныйДокумент.АвтоМасштаб = Истина; // Получение областей макета Макет = ЭтотОбъект.ПолучитьМакет("ПФ_СредстваИндивидуальнойЗащиты"); ОбластьШапка = Макет.ПолучитьОбласть("ОбластьШапка"); ОбластьВыданныеСредства = Макет.ПолучитьОбласть("ОбластьВыданныеСредства"); ОбластьКомиссия = Макет.ПолучитьОбласть("ОбластьКомиссия"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ""001"" КАК НомерДокумента, | ""myblog-1c.ru"" КАК Организация, | ДАТАВРЕМЯ(2024, 1, 1) КАК ДатаДокумента |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ""001"" КАК НомерДокумента, | ""Иванов И.И."" КАК Сотрудник, | ""Защитная каска"" КАК Номенклатура, | 3 КАК Количество | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | ""001"", | ""Петров П.П."", | ""Колпак"", | 2 |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ""001"" КАК НомерДокумента, | ""Смиронов"" КАК ЧленКомиссии | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | ""001"", | ""Капустин"""; МассивРезультатов = Запрос.ВыполнитьПакет(); МаксимальныйИндекс = МассивРезультатов.ВГраница(); ВыборкаШапка = МассивРезультатов[МаксимальныйИндекс-2].Выбрать(); ВыборкаВыданныеСредства = МассивРезультатов[МаксимальныйИндекс-1].Выбрать(); ВыборкаКомиссия = МассивРезультатов[МаксимальныйИндекс].Выбрать(); Пока ВыборкаШапка.Следующий() Цикл Если ТабличныйДокумент.ВысотаТаблицы > 0 Тогда ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); КонецЕсли; // Шапка документа ОбластьШапка.Параметры.Заполнить(ВыборкаШапка); ТабличныйДокумент.Вывести(ОбластьШапка); // Выданные средства Пока ВыборкаВыданныеСредства.НайтиСледующий(ВыборкаШапка.НомерДокумента, "НомерДокумента") Цикл ОбластьВыданныеСредства.Параметры.Заполнить(ВыборкаВыданныеСредства); ТабличныйДокумент.Вывести(ОбластьВыданныеСредства); КонецЦикла; // Комиссия Пока ВыборкаКомиссия.НайтиСледующий(ВыборкаШапка.НомерДокумента, "НомерДокумента") Цикл ОбластьКомиссия.Параметры.Заполнить(ВыборкаКомиссия); ТабличныйДокумент.Вывести(ОбластьКомиссия); КонецЦикла; КонецЦикла; Возврат ТабличныйДокумент; |