Имя: Пароль:
1C
1С v8
Вид сравнения в запросе
0 ХочуСпец
 
06.06.12
11:08
Подключаюсь к другой базе через ОЛЕ. Необходимо вытащить из нее данные (н-р, номенклатуру)
Так же как в отборе динамического списка на форме разместил поля:
ОбъектИспользование (Булево)
ОбъектВидСравнения (Тип: вид сравнения)
ОбъектЗначение (Тип: Справочники.Объект)
Пытаюсь сделать что то типа:
   ПЗ=глСоединение.NewObject("ПостроительЗапроса");
   ПЗ.Текст =    
   "ВЫБРАТЬ
   |    Номенклатура.Ссылка КАК Номенклатура,
|    Номенклатура.Объект  КАК Объект
   |ИЗ
|         Справочник.Номенклатура”;
ОтборПЗ = ПЗ.Отбор;
ОтборПЗ.Добавить("Объект ");
ОтборПЗ["Объект "].Использование = ОбъектИспользование;
ОтборПЗ["Объект "].Значение = ОбъектЗначение;
ОтборПЗ["Объект "].ВидСравнения = ОбъектВидСравнения;
ПЗ.Выполнить();
Результат = ПЗ.Результат;

Вопросы:
1.    вообще правильная ли идея?
2.    При ОтборПЗ.Добавить("Объект ") возникает исключительная ситуация.
1 DrShad
 
06.06.12
11:10
Демонический список юзает СКД и отборы в СКД и Построителях разные
2 Defender aka LINN
 
06.06.12
11:15
(1) Иди выспись.
(0) Все правильно. У тебя доступных полей ровно 0,000.
3 ХочуСпец
 
06.06.12
11:17
(2) как добавить в доступные поля?
4 Defender aka LINN
 
06.06.12
11:17
(3) {}
5 ale-sarin
 
06.06.12
11:18
(0) На всякий случай  в "ОтборПЗ.Добавить("Объект ")" пробел не мешает?
6 ХочуСпец
 
06.06.12
11:18
(5) огпечатка суть от этого не меняется
7 ХочуСпец
 
06.06.12
11:24
(4)

"ВЫБРАТЬ
|    Номенклатура.Ссылка КАК Номенклатура,
|    Номенклатура.Объект  КАК Объект
| {Выбрать Номенклатура.Объект КАК Объект}  
|ИЗ
|    Справочник.Номенклатура”;

ошибка та же (
8 ZanderZ
 
06.06.12
11:26
(7) кто мешает сделать в конструкторе потом поправить для ОЛЕ ?
9 ХочуСпец
 
06.06.12
11:26
+
при ОтборПЗ.Добавить("Объект");

выдает:

Произошла исключительная ситуация: Недопустимое значение параметра
10 ХочуСпец
 
06.06.12
11:27
(8) не понял чесно говоря
11 ХочуСпец
 
06.06.12
11:44
актуально
12 Buster007
 
06.06.12
11:52
(7) ээээ... разве не
"ВЫБРАТЬ
|    Номенклатура.Ссылка КАК Номенклатура,
|    Номенклатура.Объект  КАК Объект
|  
|ИЗ
|    Справочник.Номенклатура
|{ГДЕ Объект.* как Объект}”;
?
13 ХочуСпец
 
06.06.12
11:59
(12)
да точно!
но теперь при ОтборПЗ["Объект"].Значение = ОбъектЗначение;

выдается ошибка неверный тип значения
14 Buster007
 
06.06.12
12:02
а что у тебя в ОбъектЗначение? СОМ объект?
15 hhhh
 
06.06.12
12:10
(13) да, видимо у тебя в переменных ОбъектЗначение и в ОбъектВидСравнения какая-то фигня хранится, отсюда все беды.
16 ХочуСпец
 
06.06.12
12:59
(14), (13)
все правильно
ОбъектЗначение =  глСоединение.Справочники.Объект.НайтиПоНаименованию(Объект.Наименование)

но вот что прописать в ОбъектВидСравнения??
17 Buster007
 
06.06.12
13:02
ОбъектВидСравнения = глСоединение.ВидСравнения.Равно ?
18 ХочуСпец
 
06.06.12
13:04
ОбъектВидСравнения может принимать Равно, ВСписке и прочее прочее
19 ХочуСпец
 
06.06.12
13:07
Если ОбъектВидСравнения = ВидСравнения.Равно тогда

ОбъектВидСравнения = глСоединение.ВидСравнения.Равно

Иначе...

не красиво
20 Buster007
 
06.06.12
13:12
СоответствиеСравнений = Новый Соответсвие();
СоответствиеСравнений.Вставить(ВидСравнения.Равно, глСоединение.ВидСравнения.Равно);
...
ОтборПЗ["Объект "].ВидСравнения = СоответствиеСравнений.Получить(ОбъектВидСравнения);

вроде красиво, не?
21 ХочуСпец
 
06.06.12
13:41
(20) отлично. спс
еще один момент
в отборе динамического списка
если критерий отбора например справочникссылка, то виды сравнения свои
если документ - то свои
тоже самое с датой, со строкой.

как бы это сделать без чрезмерного геморроя?
22 Buster007
 
06.06.12
13:55
(21) а тут как ни крути всё равно придется описывать виды сравнения под каждый тип. А если мы это все уже опишем, то вид хранения этих видов сравнений особо то уж и не важен будет.
А я бы вообще не хранил их. написать функцию внутри с Если Справочник иначеЕсли Документ и т.д. и возвращал массив видов сравнений
23 ХочуСпец
 
06.06.12
15:36
Если  ВидСравненияОбъект = ВидСравнения.ВСписке ИЛИ
ВидСравненияОбъект = ВидСравнения.НеВСписке ИЛИ
ВидСравненияОбъект = ВидСравнения.ВСпискеПоИерархии ИЛИ
ВидСравненияОбъект = ВидСравнения.НеВСпискеПоИерархии тогда            
           
//сравнение в списке
           
СЗОбъекты = глСоединение.NewObject("СписокЗначений");
           
Для каждого стр Из СЗОбъекты Цикл
               
СЗОбъекты.Добавить(глСоединение.Справочники.Объект.НайтиПоНаименованию(стр.Значение.Наименование));
           
КонецЦикла;
                       
               
ОтборПЗ["Объект"].Значение = СЗОбъекты;
           
КонецЕсли;

Выдает ошибку при присваении значения:

ОтборПЗ["Объект"].Значение = СЗОбъекты;

что не так?
24 ХочуСпец
 
06.06.12
15:49
(23) ошибся

Для каждого стр Из ОбъектыЗначения Цикл

... где ОбъектыЗначения - поле с составным типом (СписокЗначений, СправочникСсылка.Объект)