8.х SQL запрос в 1С

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем r18romik, 8 июл 2011.

  1. TopicStarter Overlay
    r18romik
    Offline

    r18romik Опытный в 1С

    Регистрация:
    19 фев 2008
    Сообщения:
    129
    Симпатии:
    0
    Баллы:
    26
    Выполняю скульный запросик в 1С.
    Выдпёт ошибку:
    {ВнешняяОбработка.СтатистикаЗагрузокLawson.МодульОбъекта(209)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Время ожидания истекло
    RS.Open(СтрокаЗапроса,Соединение);
    по причине:
    Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Время ожидания истекло

    Сам запрос в МS выполняется и выдаёт результат.
    Не могу понять почему в 1С он затывается
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.573
    Симпатии:
    717
    Баллы:
    204
    таймаут в строке коннекта задай побольше.
    в самом SQL сколь по времени запрос выполняется?
  3. TopicStarter Overlay
    r18romik
    Offline

    r18romik Опытный в 1С

    Регистрация:
    19 фев 2008
    Сообщения:
    129
    Симпатии:
    0
    Баллы:
    26
    Минуты 3-4 выполняется.
    А в 1С практически через минуту выдаёт ошибку.
    Как задать таймаут в строке соединения?


    RS = Новый COMОбъект("ADODB.Recordset");
    RS.Open(СтрокаЗапроса,Соединение);

    Таймаут задаётся здесь?
    Или в самой процедуру Соединение?

    cmd = Новый COMОбъект("ADODB.Command");
    cmd.CommandTimeout = 1800

    ?

    RS = Новый COMОбъект("ADODB.Recordset");
    RS.CommandTimeout = 1800

    ?

    Сделал так. Такая же фигня

    cmd = Новый COMОбъект("ADODB.Command");
    cmd.ActiveConnection = Соединение;
    cmd.CommandTimeout = 1800;
    cmd.CommandType = 1;
    cmd.CommandText = СтрокаЗапроса;
    //
    RS = Новый COMОбъект("ADODB.Recordset");
    RS.Open(cmd);
  4. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.573
    Симпатии:
    717
    Баллы:
    204
    Вот чего нашёл
    Сам не пробовал.


    Если 1С через ~1минуту отваливается, то видимо таймаут - 60 секунд.
    Ещё можно поглядеть в настройках ODDBC, в настройках ОС
  5. TopicStarter Overlay
    r18romik
    Offline

    r18romik Опытный в 1С

    Регистрация:
    19 фев 2008
    Сообщения:
    129
    Симпатии:
    0
    Баллы:
    26

    Соединение = Новый COMОбъект("ADODB.Connection");
    ИмяБазы = ПолучитьИмяБазыНаСервере();
    стрПодключения = ПолучитьСтрокуПодключения("","","","");
    Соединение.ConnectionTimeout = 1000;
    Соединение.Open(стрПодключения);

    Сделал таймаут, такая же фигня
  6. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.573
    Симпатии:
    717
    Баллы:
    204
    Тогда х.з.
  7. TopicStarter Overlay
    r18romik
    Offline

    r18romik Опытный в 1С

    Регистрация:
    19 фев 2008
    Сообщения:
    129
    Симпатии:
    0
    Баллы:
    26
    Спасибо тебе.
    В общем решил проблему так, как не хотел)
    Формировал сразу несколько запросов вместе через union, пришлось разъединить.
    В итоге потерял производительность..... :angry:
  8. TopicStarter Overlay
    r18romik
    Offline

    r18romik Опытный в 1С

    Регистрация:
    19 фев 2008
    Сообщения:
    129
    Симпатии:
    0
    Баллы:
    26
    Всё такие решил так:

    cmd = Новый COMОбъект("ADODB.Command");
    cmd.ActiveConnection = Соединение;
    cmd.CommandTimeout = 6000;
    cmd.CommandText = СтрокаЗапроса;
    //
    RS = Новый COMОбъект("ADODB.Recordset");
    RS.Open(cmd);

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