Используется это так: в тексте запроса, например, рядом с "итоговой" выборкой, результат которой надо будет получить из пакетного запроса, пишется некое ключевое слово и указывается осмысленное имя для этого результата. Например:
ВЫБРАТЬ ДыраВКармане.Виновник ПОМЕСТИТЬ ВТ_КтоКрайний
ИЗ РегистрыРазорения.Убытки(&ДеньПослеКорпоратива) КАК ДыраВКармане;
ВЫБРАТЬ * ИЗ Справочник.VIP КАК Оборзевшие ГДЕ Оборзевшие.Пол = "М";
ВЫБРАТЬ //ИмяРезультата:МояНужнаяВыборка
Крайние.Виновник.Фамилия,
Крайние.Виновник.Адрес,
ИЗ ВТ_КтоКрайний КАК Крайние
Обратим внимание на строку "//ИмяРезультата:МояНужнаяВыборка" - это и есть желаемая маркировка блока в пакете.
Готовый текст запроса (до или после его выполнения, неважно) передаётся этой функции:
// Возвращает соответствие, где ключ - строковое имя результата в пакетном запросе, а значение - его числовой индекс.
// Параметры:
// тзИсходная - строка, исходный текст запроса, который следует обработать;
// рМаркер - строка, предваряющая имя результата в исходном тексте запроса.
//
Функция ПостроитьСоответствиеИмёнИНомеровРезультатовПакетногоЗапроса(тзИсходная,рМаркер="")
соотИмён=Новый Соответствие;
//
Если ПустаяСтрока(рМаркер) Тогда рМаркер="//ИмяРезультата:" КонецЕсли;
рДлинаМаркера=СтрДлина(рМаркер);
рРазделители="?,=\|:;&"" @#$^!~`'[]{}№+-/*%()<>"+Символы.ВК+Символы.ВТаб+Символы.НПП+Символы.ПС+Символы.ПФ+Символы.Таб;
//
тзПлоская=СтрЗаменить(тзИсходная,Символы.ПС,Символы.Таб);
тзПлоская=СтрЗаменить(тзПлоская,";",Символы.ПС);
Для й=1 По СтрЧислоСтрок(тзПлоская) Цикл
стрБлок=СтрПолучитьСтроку(тзПлоская,й);
пози=Найти(стрБлок,рМаркер);
Если пози=0 Тогда Продолжить КонецЕсли;
рДлинаБлока=СтрДлина(стрБлок);
пози=пози+рДлинаМаркера;
резИмя="";
Для ы=пози По рДлинаБлока Цикл
сим=Сред(стрБлок,ы,1);
Если Найти(рРазделители,сим)<>0 Тогда Прервать КонецЕсли;
резИмя=резИмя+сим;
КонецЦикла;
Если не ПустаяСтрока(резИмя) Тогда
соотИмён.Вставить(резИмя,й-1);
КонецЕсли;
КонецЦикла;
//
Возврат соотИмён;
КонецФункции
После можно работать с полученным соответствием следующим образом:
НужныйРезультат=МассивРезультатов.Получить(соотИмён.Получить("МояНужнаяВыборка")); // ну и можно проверку, получено ли
Собственно, всё. Эта мелочь сильно упрощает работу, если текст запроса часто перетасовывается, меняется, или если в нём более 5-7 "финальных" фрагмента, чьи данные нужны, и компонуется он в разных местах кода. Ведь достаточно появиться одному дополнительному "Выбрать" или "Уничтожить", чтобы ВСЯ нумерация поехала известно куда. А так можно не беспокоиться, которым по счёту идёт получение нужной вам выборки.
Жаль, что разработчики платформы не предусмотрели подобные зарезервированные слова и конструкции в тексте запроса и получение по ним средствами языка. Пришлось эмулировать)
Хотел было сделать через схему запроса (новомодную объектную технику), но - упс, она игнорирует комментарии как таковые. Зато этот подход можно применять и на 8.2, где схем запроса нет в принципе.
Почти наверняка это велосипед, и многие, столкнувшиеся с проблемой раньше меня, уже сделали себе такие "костыльчики", но супруга сказала - публиковать. Вот я и публикую) Если баян, просьба кинуть в меня тапкой ссылкой.
Кому пригодится, передайте дальше)