Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Неверные параметры ВложенныйЗапрос.Номенклатура В(<<?>>&СписокНоменклатур)

Неверные параметры ВложенныйЗапрос.Номенклатура В(<<?>>&СписокНоменклатур)
Я
   KazSever
 
11.03.21 - 10:23
Коллеги, приветствую. Нужна ваша помощь.
Делаю запрос к другой базе через COM, в условии запроса передаю массив, со список номенклатур. При попытке выполнить запрос выходит сообщение об ошибке:
"{ВнешняяОбработка.ВыгрузкаЗаказаВKaspi.Форма.Форма.Форма(1572)}: Ошибка при вызове метода контекста (Выполнить)
    РезультатЗапроса = ЗапросСОМ.Выполнить().Выгрузить();
по причине:
Произошла исключительная ситуация (1C:Enterprise 8.3.16.1814): {(117, 33)}: Неверные параметры
ВложенныйЗапрос.Номенклатура В(<<?>>&СписокНоменклатур)
"

Массив я создаю так же, через соединение:
"Функция ПолучитьСписокНоменклатурCOM(Соединение)
    
    Соединение = ПодключитьсяКбазе();
    
    Массив = Соединение.NewObject("Массив");
    
    Для Каждого Строка Из ПолучитьСписокНоменклатур() Цикл
        
        номПоиск = Соединение.Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", Строка.Артикул);
        
        Если ЗначениеЗаполнено(номПоиск.Description) Тогда
            Массив.Добавить(номПоиск);
        КонецЕсли;
    КонецЦикла;
    
    Возврат Массив;
    
КонецФункции
"
   Волшебник
 
1 - 11.03.21 - 10:25
ВложенныйЗапрос.Номенклатура.Артикул В (&СписокАртикуловЧерезЗапятую)
   KazSever
 
2 - 11.03.21 - 10:26
(1) В массиве не список артикулов, а ссылки в COM базе
   НЕА123
 
3 - 11.03.21 - 10:31
(0)
> Соединение = ПодключитьсяКбазе();
это надо?
   KazSever
 
4 - 11.03.21 - 10:32
(3) не стал писать сюда, соединение есть - все норм работает, спасибо.
   Волшебник
 
5 - 11.03.21 - 10:35
(2) Сделай строку артикулов через запятую, а не массив
   KazSever
 
6 - 11.03.21 - 10:42
(5) Ок, попробую
   polosov
 
7 - 11.03.21 - 10:43
(1) С каких пор такое работает?
"В" проверяет вхождение в коллекцию, а не в строку же.
   Вафель
 
8 - 11.03.21 - 10:43
нужен не массив а коммассив
   Вафель
 
9 - 11.03.21 - 10:44
то бишь comsafearray
   KazSever
 
10 - 11.03.21 - 10:51
(9) Массив = Соединение.NewObject("Массив"); это не оно?
   Вафель
 
11 - 11.03.21 - 10:58
(10) получается что нет. так  список должен работать
   KazSever
 
12 - 11.03.21 - 11:01
(11) понял
   KazSever
 
13 - 11.03.21 - 11:26
(11) Новый COMSafeArray(<Массив>, <ТипЭлемента>, <<разм0>,...,<размN-1>>) - ТипЭлемента - в примере синтакс-помощника стоит VT_I4, как определить какой мне нужен, если я использую массив из ссылок справочника номенклатуры?
   Галахад
 
14 - 11.03.21 - 12:04
Вроде в (0) все в порядке. Наверное ошибка где-то в другом месте.
   НЕА123
 
15 - 11.03.21 - 12:11
(1)+
&СписокАртикуловЧерезЗапятую Подобно "%"+ВложенныйЗапрос.Номенклатура.Артикул+"%"
?
   KazSever
 
16 - 11.03.21 - 12:29
(15) тоже думал об этом, но все же хотелось добить тему с массивом. Неужели это такое непреодолимое препятствие ...
   SeriyP
 
17 - 11.03.21 - 13:18
МассивСОМ = СоединениеCOM.NewObject("Массив")
   SeriyP
 
18 - 11.03.21 - 13:21
у вас в массиве COM - COM ссылки. Заполните массивСОМ строками
   Галахад
 
19 - 11.03.21 - 13:22
(18) А зачем? Чем плохи ссылки?
   KazSever
 
20 - 11.03.21 - 13:24
(19) это как строками?
   hhhh
 
21 - 11.03.21 - 13:28
(16) а зачем у вас ПодключитьсяКБазе? Один раз подключились в начале и всё, дальше пользуйтесь переменной Соединение.
   НЕА123
 
22 - 11.03.21 - 13:29
(20)
<<Массив.Добавить(номПоиск)
>>Массив.Добавить(Строка.Артикул)
видимо так (18) думается...
   KazSever
 
23 - 11.03.21 - 13:30
(21) Соединение = ПодключитьсяКбазе(); - 
эту строку я уже убрал.
   Галахад
 
24 - 11.03.21 - 13:30
(21) Круто! Два разных подключения.
   Галахад
 
25 - 11.03.21 - 13:33
(23) Ну тогда в (0) все должно работать.
   KazSever
 
26 - 11.03.21 - 13:33
Вот такой вид сейчас

Функция ПолучитьСписокНоменклатурCOM(Соединение)
    
    Массив = Новый Массив;
    
    Для Каждого Строка Из ПолучитьСписокНоменклатур() Цикл
        
        номПоиск = Соединение.Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", Строка.Артикул);
        
        Если ЗначениеЗаполнено(номПоиск.Description) Тогда
            Массив.Добавить(номПоиск);
        КонецЕсли;
    КонецЦикла;
    
    Массив_СОМ = Новый COMSafeArray(Массив, "VT_VARIANT");
    
    Возврат Массив_СОМ;
    
КонецФункции
   hhhh
 
27 - 11.03.21 - 13:34
(19) ребята правы в общем-то. Нафига
НайтиПоРеквизиту("Артикул", Строка.Артикул); 

тем более в той, а не в этой базе.

тогда уже лучше сразу в запросе Артикулы сравнивать, быстрее получится.
   Галахад
 
28 - 11.03.21 - 13:36
(27) Так-то да, но и через массив ссылок должно работать.
   hhhh
 
29 - 11.03.21 - 13:37
это какой-то идиотизм

 Массив_СОМ = Новый COMSafeArray(Массив, "VT_VARIANT");

у вас же сначала правильно было

Массив = Соединение.NewObject("Массив");
   KazSever
 
30 - 11.03.21 - 13:38
(29) Пробую же, как было - не работает, собственно и это тоже. Такая же ошибка.
 
 Рекламное место пустует
   НЕА123
 
31 - 11.03.21 - 13:40
если (18) верно то может
Массив.Добавить(номПоиск.Ссылка);
?
   KazSever
 
32 - 11.03.21 - 13:40
(27) здесь есть мысль выводить данные о не найденных номенклатурах, а в  запросе так не получится.
   Вафель
 
33 - 11.03.21 - 13:40
у тебя в массиве левые значения
   KazSever
 
34 - 11.03.21 - 13:42
   KazSever
 
35 - 11.03.21 - 13:43
вот что COMSafeArray хранит в себе, на сколько я понимаю "ссылка" там нет, а просто "ref" - тим тот же - СОМобъект
   KazSever
 
36 - 11.03.21 - 13:44
*тип
   Галахад
 
37 - 11.03.21 - 13:45
Запрос, наверное кривой.
   Вафель
 
38 - 11.03.21 - 13:45
у тебя объекты чтоли там, а не ссылки?
   KazSever
 
39 - 11.03.21 - 13:45
   hhhh
 
40 - 11.03.21 - 13:46
(36) вот это может?
      Если ЗначениеЗаполнено(номПоиск.Description) Тогда
  
пишите всё по-русски, не надо мудрить. вот так можно

      Если НЕ номПоиск.Пустая() Тогда
   Вафель
 
41 - 11.03.21 - 13:47
а как параметр устанавливаешь?
   Почему 1С
 
42 - 11.03.21 - 13:48
Покажи сам запрос и установку параметров в запросе. Ну и я надеюсь ты убрал строку  Соединение = ПодключитьсяКбазе(); в функции формирования массива
   KazSever
 
43 - 11.03.21 - 13:48
(40) ну так-то значения есть в массиве и они верные
   PR
 
44 - 11.03.21 - 13:49
(10) Оно
   KazSever
 
45 - 11.03.21 - 13:49
(42) Условие запроса - https://wampi.ru/image/RfJufvP
   PR
 
46 - 11.03.21 - 13:50
Что вы обсуждаете после (10)?
   KazSever
 
47 - 11.03.21 - 13:51
Установка параметра https://wampi.ru/image/RfJuN66
   KazSever
 
48 - 11.03.21 - 13:52
(46) Обсуждаем, что не так и почему не взлетает ))
   Почему 1С
 
49 - 11.03.21 - 13:53
(47) веерни Массив = Соединение.NewObject("Массив");
   PR
 
50 - 11.03.21 - 13:53
(47) Что это за дичь?
Что мешает просто создать как в (10) и заполнить COM массив?
   hhhh
 
51 - 11.03.21 - 13:54
(45) так у тебя массив_COM с соединением вообще никак не связан, чего это вообще налепел несусветное.
   PR
 
52 - 11.03.21 - 13:54
+(50) Если речь идет про COM масив, откуда у тебя просто массив вообще в принципе, нахрена он тебе?
   PR
 
53 - 11.03.21 - 13:55
(51) Настоящему идейцу это до луны, да, зачем читать (10), и так сойдет
   KazSever
 
54 - 11.03.21 - 13:55
(51) слепил как смог, информации толком нет
   Вафель
 
55 - 11.03.21 - 13:56
(53) у тс изначально было (10)
   PR
 
56 - 11.03.21 - 13:56
(54) Нет информации, серьезно?
Ты издеваешься что ли, весь инет завален
Прочитай (10) что ли еще раз и загугли текст из (10)
   Галахад
 
57 - 11.03.21 - 13:56
Упрости запрос и проверь:

    ВЫБРАТЬ
        Т.Ссылка КАК Ссылка
    ИЗ
        Справочник.Номенклатура КАК Т
    ГДЕ
        Т.Ссылка В(&Список)
   PR
 
58 - 11.03.21 - 13:57
(55) У ТС изначально в функции Соединение делается, а кто сказал, что оно сохраняется после выхода из процедуры?
   KazSever
 
59 - 11.03.21 - 13:58
(56) Сам почитай мой вопрос и там все увидишь
   hhhh
 
60 - 11.03.21 - 13:58
(56) так у него в (0) так и было. Только он 2 соединения навоял.
 
 Рекламное место пустует
   PR
 
61 - 11.03.21 - 13:58
(59) Это лучше ты почитай (58)
   KazSever
 
62 - 11.03.21 - 13:59
(60) Это было убрано уже давно
   PR
 
63 - 11.03.21 - 13:59
(60) Ну да, по большому сходил на работе, а задницу подтер дома, бывает
   PR
 
64 - 11.03.21 - 14:00
(62) Так ты бы написал тогда актуальный код и полностью, а то надоело следить за обрывочным описанием версий
   PR
 
65 - 11.03.21 - 14:00
+(64) В (26) код последний или уже нет?
   hhhh
 
66 - 11.03.21 - 14:01
(62) так ты вообще асё похерил. А мы говорили убрать только одну строчку из (0).
   PR
 
67 - 11.03.21 - 14:01
Капец, в ветке куча говна, в каждом варианте свои ошибки, но когда на них указываешь, тычат в другой вариант, где этой ошибки нет, зато другие есть
Серьезно?
   PR
 
68 - 11.03.21 - 14:02
Стаж 12 лет, не верю
   PR
 
69 - 11.03.21 - 14:06
ТС, исключи из уравнения ту причину, что может быть у тебя что-то теряется из-за использования процедуры, напиши линейный код и выложи сюда актуальную версию
   PR
 
70 - 11.03.21 - 14:07
+(69) _Полную_ версию, включая создание соединения, подготовку массива и выполнение запроса
   KazSever
 
71 - 11.03.21 - 14:19
(0) Косяк был в "Соединение = ПодключитьсяКбазе();", вернул как было без него и все взлетело. Почему-то не заметил сразу и пошел по другому пути.
Всем спасибо - вопрос закрыт!
   PR
 
72 - 11.03.21 - 14:20
(71) Удачи
   breezee
 
73 - 11.03.21 - 17:56
Запилите веб сервис. Это быстро и удобно. Правда
   Вафель
 
74 - 11.03.21 - 18:00
это при условии что уже веб сервер стоит


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.