Имя: Пароль:
1C
 
Запрос.Выполнить().Выбрать() через COM
,
0 DenisVich
 
10.04.17
10:06
Когда выполняю Выборку через com в отладчике не могу обратиться к методу выполнить - Execute Метод не найден(Если смотреть в отладчике)
Как решить проблему? Спасибо.
1 DenisVich
 
10.04.17
10:07
Код соединения:
Функция ПолучитьПодключениеКОсновнойБДМагазина(Путь,ИмяУдаленногоПользователя,ПарольУдаленногоПользователя)

    Если СОКРЛП(ПарольУдаленногоПользователя) = "" Тогда
        ПараметрыСоединения = "File="+Путь+"; Usr="+ИмяУдаленногоПользователя+";";

    Иначе
        ПараметрыСоединения = "File="""+Путь+"""; Usr="""+ИмяУдаленногоПользователя+""";Pwd="""+ПарольУдаленногоПользователя+""";";
    КонецЕсли;
    Попытка
        V83COMConnector= Новый COMОбъект("V83.COMConnector");
        Base1С = V83COMConnector.Connect(ПараметрыСоединения);
        Возврат Base1С;
    Исключение
        //Предупреждение ("Ошибка подключения!");
        Сообщить("Ошибка подключения!");
        Сообщить(ОписаниеОшибки());
        Возврат Неопределено
    КонецПопытки;                        
КонецФункции
2 h-sp
 
10.04.17
10:18
(0) ну покажите как пробуете. Вообще-то всё там работает.
3 DenisVich
 
10.04.17
10:53
_Запрос = Соединение.NewObject("Query");
        _Запрос.Text = "ВЫБРАТЬ
        |    ТоварыНаСкладахОстатки.Склад,
        |    ТоварыНаСкладахОстатки.Номенклатура,
        |    ТоварыНаСкладахОстатки.Характеристика,
        |    ТоварыНаСкладахОстатки.КоличествоОстаток,
        |    ТоварыНаСкладахОстатки.ор_РезервОстаток
        |ИЗ
        |    РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
        |ГДЕ
        |    ТоварыНаСкладахОстатки.Склад = &Склад
        |    И ТоварыНаСкладахОстатки.Номенклатура = &Номенклатура";
        Номенклатура = Соединение.Справочники.Номенклатура.НайтиПоКоду(СОКРЛП(Объект.Номенклатура.Код));
        СкладМагазина = Соединение.Справочники.Склады.НайтиПоКоду(СОКРЛП(Объект.Склад.Код));
            РезультатЗапроса = _Запрос.Выполнить();
            РезультатВыборки = РезультатЗапроса.Выбрать();
4 DenisVich
 
10.04.17
10:54
_Запрос.УстановитьПараметр("Склад",СкладМагазина);
        _Запрос.УстановитьПараметр("Номенклатура",Номенклатура);
5 DenisVich
 
10.04.17
10:55
Последние 2 топика 2 строки поменять местами, вставил в топик форума неправильно.
6 DenisVich
 
10.04.17
10:56
Execute пробовал, не помогло.
7 НЕА123
 
10.04.17
10:59
.....
ТоварыНаСкладахОстатки.Склад = &Склад
        |    И ТоварыНаСкладахОстатки.Номенклатура = &Номенклатура"


_Запрос.УстановитьПараметр("Склад",Объект.Склад.Код);
8 Vaflya
 
10.04.17
11:04
ну странно, надо проверить - запрос ли создался в com или может другое что) _Запрос.Text = "..." устанавливается без проблем?
9 DrShad
 
10.04.17
11:07
РезультатЗапроса.Пустой()

что показывает?
10 DenisVich
 
10.04.17
11:11
Устанваливается без проблем.(текст запроса)
11 DenisVich
 
10.04.17
11:14
(9) "Метод объекта не обнаружен.(Пустой)"
12 DrShad
 
10.04.17
11:16
значит ошибка в самом запросе, если в источнике в консоли выполнить?
13 DenisVich
 
10.04.17
11:19
В консоле прекрасно выполнялся.
14 DrShad
 
10.04.17
11:19
чудес не бывает
15 DrShad
 
10.04.17
11:19
параметры верно заполняются?
16 DenisVich
 
10.04.17
11:20
Возможно ли с компонентой проблема, у меня служба компонентов вообще не открывается.
Верно заполняются проверял
17 h-sp
 
10.04.17
11:21
(11) попробуйте

РезультатВыборки.Следующий()
18 DenisVich
 
10.04.17
11:23
Ложь
19 r_i_n_i_k
 
10.04.17
11:24
(16) Это пробовали: Regsvr32 "C:\Program Files (x86)\1cv8\8.3.9.2170\bin\comcntr.dll"
20 Vaflya
 
10.04.17
11:25
(18) так .Выполнить - методОбъектаНеОбнаружен или .Следующий - ложь?? прежде чем выбрать надо выполнить
21 DenisVich
 
10.04.17
11:28
Нет если в отлатчике метод не найден. Ошибок не выдает. Но найти ничего неможет.
22 DenisVich
 
10.04.17
11:29
Следующий - ложь
23 h-sp
 
10.04.17
11:33
(22) тогда проверяйте Номенклатура и складмагазина. в отладчике.
24 DenisVich
 
10.04.17
11:45
Зачем? Склад найден. Номенклатура тоже.
25 НЕА123
 
10.04.17
11:46
(7) не пробовал?
26 h-sp
 
10.04.17
11:49
(25) ТоварыНаСкладахОстатки.Склад.Код = &Склад
        |    И ТоварыНаСкладахОстатки.Номенклатура.Код = &Номенклатура"

наверно
27 Aleksandr N
 
10.04.17
11:51
(3) Параметры запроса не верные.
28 h-sp
 
10.04.17
11:53
(24) покажите (3) полностью

и еще вариант, на самом деле нет остатка в базе.
29 DenisVich
 
10.04.17
11:58
Есть, консоль с теми же парамтерами показывает
30 RomanYS
 
10.04.17
11:59
Что тут обсуждается вообще не пойму. ТС утверждает, что Запрос.Выполнить() дает ошибку, при этом рассказывает про рабочие "Результат.Пустой()" и "Выборка.Следущий()". Так не бывает и параметры здесь ни причем.

Автор, давай код до строки с ошибкой (текст запроса можно пока опустить) и полный текст ошибки.
31 DenisVich
 
10.04.17
11:59
Соединение = ПолучитьПодключениеКОсновнойБДМагазина(Объект.ПутьКБазеДанных,Объект.ИмяПользователя,Объект.Пароль);
        Если Соединение = Неопределено Тогда
            Сообщить("Не удалось подключиться к базе");
            Возврат
        КонецЕсли;
        _Запрос = Соединение.NewObject("Query");
        _Запрос.Text = "ВЫБРАТЬ
        |    ТоварыНаСкладахОстатки.Склад,
        |    ТоварыНаСкладахОстатки.Номенклатура,
        |    ТоварыНаСкладахОстатки.Характеристика,
        |    ТоварыНаСкладахОстатки.КоличествоОстаток,
        |    ТоварыНаСкладахОстатки.ор_РезервОстаток
        |ИЗ
        |    РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
        |ГДЕ
        |    ТоварыНаСкладахОстатки.Склад.Наименование = &Склад
        |    И ТоварыНаСкладахОстатки.Номенклатура.Наименование = &Номенклатура";
        Номенклатура = Соединение.Справочники.Номенклатура.НайтиПоКоду(СОКРЛП(Объект.Номенклатура.Код)).Ссылка;
        СкладМагазина = Соединение.Справочники.Склады.НайтиПоКоду(СОКРЛП(Объект.Склад.Код)).Ссылка;
        Если ЗначениеЗаполнено(Объект.ХарактеристикаПартия) Тогда
            _Запрос.Текст = _Запрос.Текст + ",
            |    И ТоварыНаСкладахОстатки.Характеристика = &ХарактеристикаПартия";
            _Запрос.УстановитьПараметр("ХарактеристикаПартия", Соединение.Справочники.ХарактеристикиНоменклатуры.НайтиПоНаименованию(СОКРЛП(Объект.ХарактеристикаПартия)).Ссылка);
        КонецЕсли;        
        _Запрос.УстановитьПараметр("Склад",СкладМагазина.Description);
        _Запрос.УстановитьПараметр("Номенклатура",Номенклатура.Description);
        //Запрос.УстановитьПараметр("КолВо",Объект.Количество);
        Попытка
            РезультатЗапроса = _Запрос.Execute();
            РезультатВыборки = РезультатЗапроса.Выбрать();
            Пока РезультатВыборки.Следующий() Цикл
                Если РезультатЗапроса.Количество >= Объект.Количество Тогда    
                    Сообщить("Данное количество на складе магазина: " + Строка(РезультатЗапроса.КоличествоОстаток) + "  " + Объект.Номенклатура.ЕдиницаИзмерения + " сеть на складе!");
                    Если РезультатЗапроса.ор_РезервОстаток > 0 Тогда
                        Сообщить("Количество резерва: " + Строка(РезультатЗапроса.ор_РезервОстаток) + Объект.Номенклатура.ЕдиницаИзмерения);
                    КонецЕсли;
                Иначе
                    Сообщить("Заданного количества: " + Объект.Количество + "  " + Объект.Номенклатура.ЕдиницаИзмерения + " нету на складе!");
                КонецЕсли;
            КонецЦикла;        
        Исключение
            Сообщить("В ходе поиска остатков в магазине произошла ошибка!");
        КонецПопытки;
    //КонецЕсли;
32 RomanYS
 
10.04.17
12:02
Убери попытку в выведи полный текст ошибки.
33 DenisVich
 
10.04.17
12:02
Выполнить выдает ошибку. Это в отладчике на шаге -РезультатВыборки.Следующий() -  "Значение не является значением объектного типа(следующий)"
Если есть остатки.
Если их нет то РезультатВыборки.Следующий() возвращает ложь.
34 DenisVich
 
10.04.17
12:03
!!!Выполнить НЕ ВЫДАЕТ ОШИБКУ.
35 RomanYS
 
10.04.17
12:03
(34) ух ты, удивил..
36 RomanYS
 
10.04.17
12:04
(31) результат пустой, потому что (как минимум):
СкладМагазина.Description - это строка!
37 DenisVich
 
10.04.17
12:34
Так я и строки связываю. Дело было в другом. Перерегил библиотеки и нельзя через выборка.следующий работать. Только через выгрузить!
38 DenisVich
 
10.04.17
12:34
Все работает. Либы и обход выборки.
39 RomanYS
 
10.04.17
12:35
(37) Вот ты сказочник.
40 Krabb
 
10.04.17
13:36
(37) Пруф или можно!
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.