//Выполняет запросы или встроенный язык и возвращает результат Источнику инициировавшему выполнение
//Параметры:
// СтруктураПараметров
Процедура ФоноваяФункция(СтруктураПараметров) Экспорт
Если СтруктураПараметров.Свойство("Запрос") Тогда
Запрос=Новый Запрос(СтруктураПараметров.Запрос);
Для каждого Свойство из СтруктураПараметров.ПараметрыЗапроса Цикл
Запрос.УстановитьПараметр(Свойство.Ключ,Свойство.Значение);
КонецЦикла;
ХранилищеЗначения=Новый ХранилищеЗначения(Запрос.Выполнить(),Новый СжатиеДанных(5));
ИначеЕсли СтруктураПараметров.Свойство("ПостроительОтчета") Тогда
ПостроительОтчета=Новый ПостроительОтчета(СтруктураПараметров.ПостроительОтчета);
Для каждого Свойство из СтруктураПараметров.ПараметрыЗапроса Цикл
ПостроительОтчета.УстановитьПараметр(Свойство.Ключ,Свойство.Значение);
КонецЦикла;
ПостроительОтчета.УстановитьНастройки(СтруктураПараметров.Настройки);
ХранилищеЗначения=Новый ХранилищеЗначения(ПостроительОтчета.Выполнить(),Новый СжатиеДанных(5));
ИначеЕсли СтруктураПараметров.Свойство("ВстроенныйЯзык") Тогда
Результат=Неопределено;
Параметры = СтруктураПараметров.Параметры;
ЭтаФорма = СтруктураПараметров.ЭтаФорма;
Попытка
Результат=Вычислить(СтруктураПараметров.ВстроенныйЯзык);
Исключение
Попытка
Выполнить(СтруктураПараметров.ВстроенныйЯзык);
Исключение
КонецПопытки;
КонецПопытки;
ХранилищеЗначения=Новый ХранилищеЗначения(Результат,Новый СжатиеДанных(5));
ИначеЕсли СтруктураПараметров.Свойство("SQLЗапрос") Тогда
Connect= Новый COMОбъект("ADODB.Connection");
Connect.ConnectionString = СтруктураПараметров.СтрокаПодключения;
Connect.ConnectionTimeout=0;
Connect.CursorLocation=3;
Connect.Open();
RecSet=Connect.Execute(СтруктураПараметров.SQLЗапрос);
Таблица=Новый ТаблицаЗначений;
Если Не RecSet.State=0 Тогда
//колонки
Для i=0 ПО RecSet.Fields.Count-1 Цикл
Имя=RecSet.Fields(i).Name;
Если Не Таблица.Колонки.Найти(Имя)=Неопределено Тогда
Таблица.Колонки.Добавить(Имя+"_"+i,,Имя);
Иначе
Таблица.Колонки.Добавить(Имя);
КонецЕсли;
КонецЦикла;
//строки
Если Не RecSet.RecordCount=0 Тогда
RecSet.MoveFirst();
Для вр=1 ПО RecSet.RecordCount Цикл
НоваяСтрока =Таблица.Добавить();
Для j=0 ПО RecSet.Fields.Count-1 Цикл
Value=RecSet.Fields(j).Value;
НоваяСтрока.Установить(j,RecSet.Fields(j).Value);
КонецЦикла;
RecSet.MoveNext();
КонецЦикла;
КонецЕсли;
КонецЕсли;
ХранилищеЗначения=Новый ХранилищеЗначения(Таблица,Новый СжатиеДанных(5));
КонецЕсли;
СтруктураПараметров.Вставить("Результат",ХранилищеЗначения);
ВызватьИсключение ЗначениеВСтрокуВнутр(СтруктураПараметров);
КонецПроцедуры