Вход | Регистрация

1С:Предприятие ::

Метки: 

v7: Проблема с прямым запросом через доп. соединение

Я
   Franchiser
 
23.11.17 - 13:47
Нужно сделать запрос не через текущее соединение 1с, а через доп. соединение, но почему то при этом получается бесконечный цикл и не видно количество полей в выборке и сами поля. В чем может быть проблема?
    МД = СоздатьОбъект("MetaDataWork");
    бд = СоздатьОбъект("ODBCDatabase");
    рс = СоздатьОбъект("ODBCRecordset");
    
    сервер = "server";
    
    БазаДанных = "ggg";

    Пользователь = "d";
    Пароль = "d"; 
    
    СтрокаПодключения = "Provider=SQLOLEDB.1;User ID=" + Пользователь + ";Pwd=" + Пароль + ";Initial Catalog=" + БазаДанных + ";Data Source=" + сервер + ";";
    бд.Соединение(СтрокаПодключения);
    рс.Отладка(1);
    рс.УстБД(бд);
    
        
        ТекстЗапроса = "-- qryMaker:Отчет1.2017.11.22.15.03.43
        |SELECT TOP 2 
        |    ТКОстатки.Комитент Комитент
        |    , ТКОстатки.ЮридическоеЛицо ЮридическоеЛицо
        |    , ТКОстатки.МестоХранения МестоХранения
        |    , ТКОстатки.МПЗМ МПЗ
        |    , ТКОстатки.КоличествоОстаток
        |    , МестаХранения.ID МХМПЗ
        |    , Контрагенты.ID ЮЛМПЗ
        |FROM $РегистрОстатки.ТК(,,
        |        (ВидОстатка = $Перечисление.ВидыОстатков.ОтклоненияБухУчета)
        |        AND (Комитент = :Комитент),(Комитент,ЮридическоеЛицо,МестоХранения,МПЗ),(Количество)) AS ТКОстатки
        |    JOIN $Справочник.МПЗ AS МПЗ With (NOLOCK) ON ТКОстатки.МПЗ = МПЗ.ID
        |    JOIN $Справочник.МестаХранения AS МестаХранения With (NOLOCK) ON $МПЗ.МестоХранения = МестаХранения.ID
        |    JOIN $Справочник.Контрагенты AS Контрагенты With (NOLOCK) ON $ПоследнееЗначение.МестаХранения.ЮридическоеЛицо(МестаХранения.ID, :ВыбДата) = Контрагенты.ID
        |Where ТКОстатки.МестоХранения <> МестаХранения.ID OR ТКОстатки.ЮридическоеЛицо <>  Контрагенты.ID 
        |";

    МД.УстановитьТекстовыйПараметр("ВыбДата", ДатаОСт);
    МД.УстановитьТекстовыйПараметр("Комитент", Комитент);
    
    ТекстЗапроса = МД.ОбрМетаСКЛ(ТекстЗапроса);
    
    рс.Открыть(ТекстЗапроса);
    
    рс.ВНачало();
    Пока рс.конец()=0 Цикл
        //Сообщить("" +рс.ПолучитьЗначение("Комитент"));

        //Сообщить("" +рс.ПолучитьЗначение("ЮридическоеЛицо"));

        //Сообщить("" +рс.ПолучитьЗначение("МестоХранения"));

        //Сообщить("" +рс.ПолучитьЗначение("МПЗ"));

        //Сообщить("" +рс.ПолучитьЗначение("КоличествоОстаток"));

        //Сообщить("" +рс.ПолучитьЗначение("МХМПЗ"));

        //Сообщить("" +рс.ПолучитьЗначение("ЮЛМПЗ"));

        
        Сообщить("=======");
    
        
        рс.След();
    КонецЦикла;
 
 
   Ёпрст
 
1 - 23.11.17 - 13:53
(0) пустая выборка
   Ёпрст
 
2 - 23.11.17 - 13:53
твой запрос ничего не возвращает, ибо условие на Комитент...
   Ёпрст
 
3 - 23.11.17 - 13:53
это объект Этой базы, где уверенность, что его id в сторонней базе точно такой же ?
   Franchiser
 
4 - 23.11.17 - 14:00
(3) я подключаюсь к одной и той же базе, только через другое соединение
   Franchiser
 
5 - 23.11.17 - 14:02
по первой строке подключение ЕстьСоединение() возвращает = 0
Если так написать
СтрокаПодключения = "DRIVER=SQL Server;UID=" + Пользователь + ";Pwd=" + Пароль + ";DataBase=" + БазаДанных + ";Server=" + сервер + ";";
То ЕстьСоединение() возвращает = 1.
Но все равно проблема с выборкой осталась.
   Franchiser
 
6 - 23.11.17 - 14:19
Смысл всего этого обойти ошибку "State HY000, native 0, message [Microsoft][ODBC SQL Server Driver]Подключение занято до получения результатов для другого hstmt " при обходе выборке курсором при типизации полей.
   Ёпрст
 
7 - 23.11.17 - 14:20
(6) (nolock)
   Ёпрст
 
8 - 23.11.17 - 14:21
И нафига вообще курсор открывать ?
ВыгрузитьИнструкцию же есть
   Ёпрст
 
9 - 23.11.17 - 14:22
ну и это, set nocount on воткни в начало запроса
   Franchiser
 
10 - 23.11.17 - 14:25
(8) в выборке миллионы записей, по ним нужно сгенерировать документы, ТЗ загибается как обычно. no count втыкал не помогает. Как же все таки сделать чтобы запрос к этой же базе выполнялся в другом соединении?
 
 Рекламное место пустует
   Franchiser
 
11 - 23.11.17 - 14:26
(7) (nolock) везде стоит
   Franchiser
 
12 - 24.11.17 - 00:59
Все заработало, спасибо
   Ёпрст
 
13 - 24.11.17 - 10:26
(12) че было ? Как решил ?
   Franchiser
 
14 - 24.11.17 - 11:31
1. Опечатка в запросе (когда убирал типизацию неправильно называлось поле мпз)
2. Добавил set nocount on в запрос
3. В методе открыть второй параметр 1 должен быть
4. Строка подключения должна быть как указал в прошлом сообщении, т.е. Driver = SQL Server
   Franchiser
 
15 - 24.11.17 - 11:33
Все это обнаружилось при анализе метода recordset описаниеошибки(), как то так
   Ёпрст
 
16 - 24.11.17 - 12:01
ясно, спсб.


Список тем форума
Рекламное место пустует Рекламное место пустует
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует