1С 8.3 Пустая таблица по тексту запроса
Данные > Примеры кода 1С > 1С 8.3 Запросы
Перейти в раздел примеры кода 1С 8.3:
Пустая таблица по тексту запроса в 1С 8.3:
// Возвращает пустую таблицу значений результата запроса на основе его текста
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/85
//
// Параметры:
// ТекстЗапроса - Строка
//
// Возвращаемое значение:
// ТаблицаЗначений
//
// Пример:
// ТекстЗапроса = "ВЫБРАТЬ Код,Наименование,Ссылка ИЗ Справочник.Валюты";
// Результат = ПустаяТаблицаПоТекстуЗапроса(ТекстЗапроса);
// //Результат - ТЗ с колонками Код,Наименование,Ссылка соответствующих типов
//
Функция ПустаяТаблицаПоТекстуЗапроса(Знач ТекстЗапроса) Экспорт
ТаблицаЗначений = Новый ТаблицаЗначений;
СхемаЗапроса = Новый СхемаЗапроса;
СхемаЗапроса.УстановитьТекстЗапроса(ТекстЗапроса);
ПакетыЗапросов = СхемаЗапроса.ПакетЗапросов;
КоличествоПакетов = ПакетыЗапросов.Количество();
Если КоличествоПакетов > 0 Тогда
//Определяем последний пакет с типом выборки
ПакетВыборки = Неопределено;
ТекущийИндекс = КоличествоПакетов - 1;
Пока ПакетВыборки = Неопределено И ТекущийИндекс >= 0 Цикл
ТекущийПакет = ПакетыЗапросов.Получить(ТекущийИндекс);
Если ТипЗнч(ТекущийПакет) = Тип("ЗапросВыбораСхемыЗапроса") Тогда
ПакетВыборки = ТекущийПакет;
Иначе
ТекущийИндекс = ТекущийИндекс - 1;
КонецЕсли;
КонецЦикла;
//Перебираем колонки найденного пакета
Если ПакетВыборки <> Неопределено Тогда
Для Каждого КолонкаЗапроса Из ПакетВыборки.Колонки Цикл
Если ТипЗнч(КолонкаЗапроса) = Тип("КолонкаСхемыЗапроса") Тогда
ТаблицаЗначений.Колонки.Добавить(КолонкаЗапроса.Псевдоним, КолонкаЗапроса.ТипЗначения);
ИначеЕсли ТипЗнч(КолонкаЗапроса) = Тип("КолонкаВложеннаяТаблицаСхемыЗапроса") Тогда
// TODO: Нужно доработать. Такая ситуация возникает, когда в запросе указана выборка
// по типу ИмяТаблицы.ИмяТЧ.(Колонка1, Колонка2) КАК ТЧ
// ТаблицаЗначений.Колонки.Добавить(КолонкаЗапроса.Псевдоним, Тип("ТаблицаЗначений"));
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
Возврат ТаблицаЗначений;
КонецФункции
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/85
//
// Параметры:
// ТекстЗапроса - Строка
//
// Возвращаемое значение:
// ТаблицаЗначений
//
// Пример:
// ТекстЗапроса = "ВЫБРАТЬ Код,Наименование,Ссылка ИЗ Справочник.Валюты";
// Результат = ПустаяТаблицаПоТекстуЗапроса(ТекстЗапроса);
// //Результат - ТЗ с колонками Код,Наименование,Ссылка соответствующих типов
//
Функция ПустаяТаблицаПоТекстуЗапроса(Знач ТекстЗапроса) Экспорт
ТаблицаЗначений = Новый ТаблицаЗначений;
СхемаЗапроса = Новый СхемаЗапроса;
СхемаЗапроса.УстановитьТекстЗапроса(ТекстЗапроса);
ПакетыЗапросов = СхемаЗапроса.ПакетЗапросов;
КоличествоПакетов = ПакетыЗапросов.Количество();
Если КоличествоПакетов > 0 Тогда
//Определяем последний пакет с типом выборки
ПакетВыборки = Неопределено;
ТекущийИндекс = КоличествоПакетов - 1;
Пока ПакетВыборки = Неопределено И ТекущийИндекс >= 0 Цикл
ТекущийПакет = ПакетыЗапросов.Получить(ТекущийИндекс);
Если ТипЗнч(ТекущийПакет) = Тип("ЗапросВыбораСхемыЗапроса") Тогда
ПакетВыборки = ТекущийПакет;
Иначе
ТекущийИндекс = ТекущийИндекс - 1;
КонецЕсли;
КонецЦикла;
//Перебираем колонки найденного пакета
Если ПакетВыборки <> Неопределено Тогда
Для Каждого КолонкаЗапроса Из ПакетВыборки.Колонки Цикл
Если ТипЗнч(КолонкаЗапроса) = Тип("КолонкаСхемыЗапроса") Тогда
ТаблицаЗначений.Колонки.Добавить(КолонкаЗапроса.Псевдоним, КолонкаЗапроса.ТипЗначения);
ИначеЕсли ТипЗнч(КолонкаЗапроса) = Тип("КолонкаВложеннаяТаблицаСхемыЗапроса") Тогда
// TODO: Нужно доработать. Такая ситуация возникает, когда в запросе указана выборка
// по типу ИмяТаблицы.ИмяТЧ.(Колонка1, Колонка2) КАК ТЧ
// ТаблицаЗначений.Колонки.Добавить(КолонкаЗапроса.Псевдоним, Тип("ТаблицаЗначений"));
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
Возврат ТаблицаЗначений;
КонецФункции
// MIT License
// Copyright (c) 2024 SeiOkami
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files
// (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify,
// merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
// Copyright (c) 2024 SeiOkami
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files
// (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify,
// merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник