Имя: Пароль:
1C
1С v8
Как передать массив в запрос Во внешней базе?
0 rchervak
 
17.08.11
16:10
Здравствуйте.
Соеденяюсь с Удаленной базой по com соединению.

подготавливаю заранее массив из Комитентов
(тип строка )


Запрос = connection.NewObject("Запрос");
 Запрос.Текст =
       "ВЫБРАТЬ
   |    Документ.номер КАК Номер,
   |    ТЧ.Товар КАК Товар,
   |    СУММА(ТЧ.Количество) КАК Количество,
   |ИЗ
   |    Документ.ТоварыРасходная КАК Документ
   |ГДЕ
   |    Документ.Дата МЕЖДУ &НачалоПериода И &КонецПериода
   |    И Документ.Проведен
   |    И (ТЧ.Комитент.наименование В (&Комитент) ИЛИ &Комитент ЕСТЬ NULL )

В итоге при выборке ошибка:
РезультатЗапроса = Запрос.Выполнить().Выбрать();
по причине:
Произошла исключительная ситуация: {(30, 30)}: Неверные параметры
И (ТЧ.Комитент.наименование <<?>>В (&Комитент) ИЛИ &Комитент ЕСТЬ NULL )


Если без условия: И (ТЧ.Комитент.наименование В (&Комитент) ИЛИ &Комитент ЕСТЬ NULL )
То запрос работает , Правда без отбора :)

Я так понимаю нельзя наверное в удаленную базу массив передать для выборки, Вот она и ругается. Но может есть способ?
1 Scooter
 
17.08.11
16:11
(0)показывай как массив создаешь
2 rchervak
 
17.08.11
16:17
на форме есть список значений. называется -КомитентыХолдинга
ТекКомитент =  ?(ЭлементыФормы.КомитентыХолдинга.Значение.Количество() = 0, NULL, ЭлементыФормы.КомитентыХолдинга.Значение.ВыгрузитьЗначения());
   
СписокКомитентов = Новый ТаблицаЗначений;
СписокКомитентов.Колонки.Добавить("Комитенты");

Для Каждого эл Из ТекКомитент Цикл
НоваяСтрока = СписокКомитентов.Добавить();
НоваяСтрока.Комитенты = эл;    
КонецЦикла;

СписокК = СписокКомитентов.ВыгрузитьКолонку("Комитенты");
в итоге массив из списка комитентов выбранных пользователем
3 Reset
 
17.08.11
16:18
СписокК=connection.NewObject("Массив");
Для каждого Элемент из СписокКомитентов цикл
СписокК.Добавить(Элемент.Значение);
КонецЦикла;
4 Reset
 
17.08.11
16:22
(3) СписокКомитентов заменить на ---> КомитентыХолдинга
5 lubja
 
17.08.11
16:22
а что выступает в качестве значений в КомитентыХолдинга?
6 Reset
 
17.08.11
16:22
т.е. вместо (2):

СписокК=connection.NewObject("Массив");
Для каждого Элемент из КомитентыХолдинга цикл
СписокК.Добавить(Элемент.Значение);
КонецЦикла;
7 Reset
 
17.08.11
16:23
(5) Список наименований комитентов, очевидно
8 lubja
 
17.08.11
16:23
(7) да мало ли, может ссылки....
9 lubja
 
17.08.11
16:24
+ а "сравнивает" эти ссылки с наименованием...
10 Reset
 
17.08.11
16:24
Или ссылок)

я решил что наименованяи изза "ТЧ.Комитент.наименование В (&"
11 lubja
 
17.08.11
16:27
(10) скоро узнаем... когда ТС чо-нить ответит...
12 Reset
 
17.08.11
16:27
ТС, если в КомитентыХолдинга у тебя ссылки, то пиши

СписокК.Добавить(Элемент.Значение.Наименование);

Хотя сама идея синхронизации по наименованию меня коробит
13 rchervak
 
17.08.11
16:28
там в ТЧ какждого товара из документа есть Поле Комитент Тип поля - справочник, но сравниваю я наименование (тип строка)
14 lubja
 
17.08.11
16:28
(12) лучше в запросе сделать ГДЕ ТЧ.Комитент В (&МасситвСсылок)
15 lubja
 
17.08.11
16:29
(13) т.е в массиве содержаться строки?
16 Reset
 
17.08.11
16:29
(13) тогда см (14)
17 rchervak
 
17.08.11
16:31
(15) да строки
18 Reset
 
17.08.11
16:31
(14) Еще можно по варварски:

СписокК.Добавить(Строка(Элемент.Значение));

:) Тогда оно, вроде, не читает весь объект.
19 Reset
 
17.08.11
16:32
(17) Понял чёнить из написанного?)
20 rchervak
 
17.08.11
16:36
(18) последнее не особо понял.

Но получилось сл. образом

СписокК = connection.NewObject("Массив");
Для каждого Элемент из ТекКомитент цикл
СписокК.Добавить(Элемент);

КонецЦикла;
21 rchervak
 
17.08.11
16:37
СписокК.Добавить(Элемент.Значение); - не пркатило так как выдоло ощибку (Что то типа у элемента нет значения.) наверное потому что элемент - строка
22 Reset
 
17.08.11
16:39
(21) в (6) лучше
23 Reset
 
17.08.11
16:40
+(22)
Но только в том случае, если в КомитентыХолдинга у тебя СТРОКИ. (Что там, ты путем не так и не сказал)
24 rchervak
 
17.08.11
16:42
Спасибо за ответы всем :)) помогли реально