8.х ОБМЕН Обмен sql server с 1С

Тема в разделе "Обмен данными в "1С:Предприятие 8"", создана пользователем Контакт, 14 май 2008.

  1. TopicStarter Overlay
    Контакт
    Offline

    Контакт

    Регистрация:
    14 май 2008
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    нужно организовать обмен/синхронизацию с sql в 1С.
    пример кода:

    Код:
    RS = Новый COMОбъект("ADODB.Recordset");
    RS.Open("SELECT * FROM dbo.zakup_otkaz , Connection);
    //Записывает в Регистр Zakup_otkaz
    Пока RS.EOF() = 0 Цикл 
    
    
    Рег = РегистрыСведений.zakup_otkaz.СоздатьМенеджерЗаписи(); 
    Рег.data_otk= RS.fields("data_otk").value;
    Рег.id_ges = RS.fields("id_ges").value;
    Рег.naim = RS.fields("naim").value;
    Рег.tochka = RS.fields("tochka").value;
    Рег.id_nom=RS.fields("id_nom").value;
    Рег.pr_otkaz=RS.fields("pr_otkaz").value;
    Рег.kol=RS.fields("kol").value;
    Рег.cena=RS.fields("cena").value;
    Рег.Записать();
    RS.MoveNext();
    КонецЦикла;
    
    Код:
    Функция ДатаВИнтервале(ИскомаяДата)
    Перем рез;
    рез = Ложь;
    Попытка
    Если ИскомаяДата >= ДатаНач И ИскомаяДата <= ДатаКон Тогда
    рез = Истина;
    КонецЕсли;
    Исключение
    КонецПопытки;
    Возврат рез;
    КонецФункции
    
    
    в ней читает строки базы данных с начало. а строк около млн. Это очень долго. Актуальнные строки в конце, которые создаются каждый день.

    Как правильно организовать обмен?
  2. freedown
    Offline

    freedown

    Регистрация:
    8 июн 2007
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    Отбор по дате нужно сделать внутри самого SQL запроса.


    Код:
    ///////////////////////////////////////////////////////////////////////////////////////////////////
    // Функция ДатаКСтрокеSQLServer()
    //
    // Преобразовывает дату в формате 1С в дату в формате MSSQL
    //
    // Параметры:
    //   Дата - <Дата> - дата в формате 1С
    //
    // Возвращаемое значение:
    //   <Строка> - дата в формате MSSQL
    //
    Функция ДатаКСтрокеSQLServer(Дата)
    
    гг = Формат(Год(Дата), "ЧГ=0");
    мм = Строка(Месяц(Дата));
    мм = ?(СтрДлина(мм)=1, "0" + мм, мм);
    дд = Строка(День(Дата));
    дд = ?(СтрДлина(дд)=1, "0" + дд, дд);
    
    Возврат "CAST('" + гг + мм + дд + "' as smalldatetime)";
    
    КонецФункции //ДатаКСтрокеSQLServer()
    


    Код:
    ТекстЗапроса =
    "SELECT * FROM dbo.zakup_otkaz WHERE" +
    " data_otk >= " + ДатаКСтрокеSQLServer(НачалоДня(ДатаНач)) + " AND " +
    " data_otk < "  + ДатаКСтрокеSQLServer(КонецДня(ДатаКон) + 1);
    
    RS.Open(ТекстЗапроса, Connection);
    
  3. monopolij
    Offline

    monopolij

    Регистрация:
    20 фев 2010
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1
    а если необходимо осуществить обращение не через запрос, а посредством вызова хранимой процедуры на сервере? при это хранимая процедура содержит параметры, которые так же необходимо передать из 1с?

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