8.х Использование запросов

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем [GIGA]DEDUSHKA, 28 дек 2009.

  1. TopicStarter Overlay
    [GIGA]DEDUSHKA
    Offline

    [GIGA]DEDUSHKA Опытный в 1С

    Регистрация:
    7 мар 2008
    Сообщения:
    167
    Симпатии:
    0
    Баллы:
    26
    В общем хочу сделать запрос, который вернет мне таблицу значений, но есть одно НО: часть таблиц хранятся в 1С (с ними нет проблем при составлении запросов), другая часть хранится в отдельной базе MSSQL, которая к 1С не имеет никакого отношения, единственное что их объединяет: есть таблица у которой код совпадает с кодом справочника номенклатуры. Можно ли такую вещь реализовать с помощью объекта "Запрос" в 1С, если нет, то какие будут ваши предложения для решения данной задачи?
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    можно, только тебе придется сформировать ТЗ из MSSQL-ной таблицы, потом ты её можешь "присоединить" к ТЗ полученной из стандартного запроса 1С.
  3. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26
    В первую очередь делаешь com для sql - полчаешь данные а потом как хочешь обрабатывай их в 1С

    Код:
    Процедура ВыполнитьПодключение(Сервер,База)
    //**** Осуществим подключение к SQL
    Соединение = New COMobject("ADODB.Connection");
    Попытка
    Соединение.Open("DRIVER=SQL Server;DATABASE="+База+";SERVER="+Сервер);
    Исключение
    КонецПопытки;
    
    
    //**** Осуществим подключение к SQL  UPP
    СоединениеУПП = New COMobject("ADODB.Connection");
    Попытка
    СоединениеУПП.Open("DRIVER=SQL Server;DATABASE=UPP;SERVER="+Сервер);
    Исключение
    КонецПопытки;
    
    
    
    КонецПроцедуры
    
    
    А потом уже запрос и выборка
    Код:
    	    Cmd = Новый COMObject("ADODB.Command"); 
    Cmd.ActiveConnection = Соединение; 
    Rs = <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/новый')">Новый COMObject("ADODB.RecordSet");</span>
    
    Cmd.CommandText=ТекстЗапроса; 
    Rs = Cmd.Execute(); //Выполнение и получение набора данных
    ФормаПрогрессора = ПолучитьОбщуюФорму("ХодВыполненияОбработкиДанных");
    Если ФормаПрогрессора.Открыта() Тогда
    ФормаПрогрессора.Закрыть();
    КонецЕсли; 
    ФормаПрогрессора.НаименованиеОбработкиДанных = "Получение начислений за период: "+ЭлементыФормы.Месяц.Значение +" "+  Формат(ЭлементыФормы.ГОД.Значение,"ЧГ=") + "г. из ""Персонал""";
    ФормаПрогрессора.КомментарийОбработкиДанных  = "Получение начислений за период: "+ЭлементыФормы.Месяц.Значение +" "+  Формат(ЭлементыФормы.ГОД.Значение,"ЧГ=") + "г. из ""Персонал""";
    ФормаПрогрессора.Значение = 1;
    ФормаПрогрессора.МаксимальноеЗначение =  ОпределимДлинуПрогресса(ТекстЗапроса);
    ФормаПрогрессора.Открыть();
    Значение = 1;
    ЗначенияПоиска =ВременнаяТаблица.Колонки;
    
    Пока Rs.EOF() = 0 Цикл
    СтрокаТабл = ВременнаяТаблица.ДОбавить();
    //СтрокаТабл = ЭлементыФормы.ВыгрузкаПерсонал.Значение.Добавить();										   	
    Для Каждого Значения Из ЗначенияПоиска Цикл
    Попытка
    Если Значения.Имя ="Начисление1С" Тогда
    Продолжить;
    КонецЕсли;
    Исключение
    КонецПопытки;
    Если Значения.Имя = "ОбъектУчета" Тогда
    //СтрокаТабл[Значения.Имя] = ?(СтрокаТабл.ВнутреннийКод = "",Справочники.ПодразделенияОрганизаций.ПустаяСсылка(),НайтиПодразделение(СтрокаТабл.ВнутреннийКод));
    
    // Новый способ поиска через COM соединие к упп
    ИмяТаблицыУПП = "_Reference91";
    
    СтрокаТабл[Значения.Имя] = НайтиПодразделениеКОМ(Сред(RS.Fields("id_Подразделение").Value,2,СтрДлина(RS.Fields("id_Подразделение").Value)-2),ИмяТаблицыУПП);
    
    
    //Справочники.ПодразделенияОрганизаций.НайтиПоРеквизиту("ВнутреннийКод",СтрокаТабл.ВнутреннийКод ,,);
    
    
    
    СтрокаТабл.idFirm = Справочники.Организации.НайтиПоРеквизиту("idPersonal",СтрокаТабл.idFirm);
    ИначеЕсли Значения.Имя = "ЦФО" Тогда
    СтрокаТабл[Значения.Имя] = НайтиЦФО(СтрокаТабл["ОбъектУчета"]);
    Иначе
    Попытка
    СтрокаТабл[Значения.Имя] = Формат(RS.Fields(Значения.Имя).Value, "ЧГ = ");
    Исключение
    СтрокаТабл[Значения.Имя] = RS.Fields(Значения.Имя).Value;
    КонецПопытки;
    КонецЕсли;
    КонецЦикла;
    Значение = Значение +1;   
    ФормаПрогрессора.Значение = Значение;
    Rs.MoveNext();           
    КонецЦикла;
    ФормаПрогрессора.Закрыть();
    
    
  4. TopicStarter Overlay
    [GIGA]DEDUSHKA
    Offline

    [GIGA]DEDUSHKA Опытный в 1С

    Регистрация:
    7 мар 2008
    Сообщения:
    167
    Симпатии:
    0
    Баллы:
    26
    Вот я сформировал ТЗ из MSSQL, как присоединить-то? можно примерчик использования ТЗ в запросах?
  5. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    Код:
    МВТ = Новый МенеджерВременныхТаблиц;
    Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = МВТ;
    Запрос.Текст = "Выбрать * ПОМЕСТИТЬ ВрТаб Из &ТаблицаЗначений КАК ВНЕШНИЙИСТОЧНИК";
    Запрос.УстановитьПараметр("ТаблицаЗначений", ТЗ);
    Запрос.Выполнить();
    
    Запрос.Текст = "Выбрать * ИЗ ВрТаб";
    РезультатЗапроса = Запрос.Выполнить();
    МВТ.Закрыть();
    
    

Поделиться этой страницей