![]() |
![]() |
![]() |
|
Задание условия в запросе через OLE | ☑ | ||
---|---|---|---|---|
0
DMM
13.07.09
✎
10:23
|
Пишу обработку, которая из 8-ки подключается к 7-ке по OLE.
В 7-ке в Глобальном модуле добавил: Перем глOLEПерем1 Экспорт; В моей обработке пишу: База77.ExecuteBatch("глOLEПерем1 = СоздатьОбъект(""СписокЗначений"")"); СписокДоговоров77 = База77.EvalExpr("глOLEПерем1"); Потом в цикле заполняю этот список: СписокДоговоров77.ДобавитьЗначение(Договор77); Список заполняется нормально, проверял. А вот дальше проблема: Запрос77 = База77.CreateObject("Запрос"); ТекстЗапроса77 = "//{{ЗАПРОС(Сформировать) |Период с '01.01.1980' по '31.12.2099'; |Без итогов; |Накладная = Документ.Накладная.ТекущийДокумент; |Договор = Документ.Накладная.Договор; |Группировка Накладная; |Условие(Договор в глOLEПерем1); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос77.Выполнить(ТекстЗапроса77) = 0 Тогда Возврат; КонецЕсли; Пока Запрос77.Группировка() = 1 Цикл Накладная77 = Запрос77.Накладная; КонецЦикла; Ошибка при вызове метода контекста (Выполнить): Произошла исключительная ситуация (1С:Предприятие): Условие(Договор в глOLEПерем1 <<?>> ); Запрос[7] : Ошибка в выражении 'глOLEПерем1' по причине: Произошла исключительная ситуация (1С:Предприятие): Условие(Договор в глOLEПерем1 <<?>> ); Запрос[7] : Ошибка в выражении 'глOLEПерем1' Кто знает, почему? |
|||
1
Ёпрст
гуру
13.07.09
✎
10:26
|
(0) я знаю.. не работает СЗ/ТЗ в условиях в оле-запросе... точка.
|
|||
2
Ёпрст
гуру
13.07.09
✎
10:27
|
+1 но это легко обойти.
|
|||
3
DMM
13.07.09
✎
10:27
|
а как?
|
|||
4
Aleksey_3
13.07.09
✎
10:32
|
(3) Вторая ссылка в яндексе. Работа с запросами и EvalExpr(). (с) http://unitkey.narod.ru/DATA/progamming/1c/ole.htm
|
|||
5
Ёпрст
гуру
13.07.09
✎
10:35
|
(3) делаешь в оле базе в глобальнике переменную:
Перем глУсловиеОле[1] Экспорт;//можешь и большей размерности Далее в обработке: ОЛЕ.ExecuteBatch("глУсловиеОле[1] =СоздатьОбъект(""СписокЗначений"")"); м = ОЛЕ.EvalExpr("глУсловиеОле[1]"); Спр = ОЛЕ.CreateObject("Справочник.Номенклатура"); Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент() = 1 Цикл Если Спр.ЭтоГруппа()=0 Тогда м.ДобавитьЗначение(Спр.ТекущийЭлемент()); КонецЕсли; КонецЦикла; Запрос = ОЛЕ.CreateObject("Запрос"); ТекстЗапроса = " |Спр = Справочник.Номенклатура.ТекущийЭлемент; |Условие (Спр в глУсловиеОле[1]); |Группировка Спр Без Групп;"; Запрос.Выполнить(ТекстЗапроса); Пока Запрос.Группировка(1)=1 Цикл Сообщить(Запрос.Спр.Наименование); КонецЦикла; |
|||
6
Ёпрст
гуру
13.07.09
✎
10:37
|
(4) и.. там ничего НЕТ ..
|
|||
7
DMM
13.07.09
✎
10:38
|
(5) т.е. получается нужно именно через массив делать, я правильно понял?
а то у меня вроде то же самое, но простая переменная Перем глOLEПерем1 Экспорт; |
|||
8
Rie
13.07.09
✎
10:39
|
(5) И в чём глубинная разница между (1) и (5), кроме названий переменных?
|
|||
9
Rie
13.07.09
✎
10:39
|
+(8) То есть, между (0) и (5)?
|
|||
10
Aleksey_3
13.07.09
✎
10:39
|
(6) Смотрю функцию СкорректироватьСписок() и как они юзают ее результат
|
|||
11
Ёпрст
гуру
13.07.09
✎
10:40
|
(7) да.. элементом которого будет список значений.
|
|||
12
Ёпрст
гуру
13.07.09
✎
10:41
|
(8,9) тем что (5) работает, а (0) никогда не работало и работать не будет.
|
|||
13
DMM
13.07.09
✎
10:41
|
(11) сейчас попробую
|
|||
14
Ёпрст
гуру
13.07.09
✎
10:41
|
(10) Хреново смотришь, там - массив!
|
|||
15
Serginio1
13.07.09
✎
10:42
|
Судя по http://www.mista.ru/articles1c/ole.htm
Возможно глOLEПерем1 не помечена как Экспорт Ну и проще установить значение как. СписокДоговоров77 = База77.глOLEПерем1; |
|||
16
Serginio1
13.07.09
✎
10:45
|
Возможно из запроса не видит глобальную переменную.
Можно еще создать функцию которая будет выполнять запрос. |
|||
17
Ёпрст
гуру
13.07.09
✎
10:51
|
(15,16) Это не поможет.. хоть сам список создай в оле базе - в запросе работает только массив.
|
|||
18
DMM
13.07.09
✎
11:00
|
Ёпрст3, спасибо большое, сработало!
|
|||
19
Serginio1
13.07.09
✎
11:09
|
(17) Это я вспомнил. А создание функции которая выполняет запрос с глобальной переменнй тоже не прокатывет?
|
|||
20
Ёпрст
гуру
13.07.09
✎
11:30
|
(19) да.
|
|||
21
Serginio1
13.07.09
✎
12:16
|
(20) Неправда твоя
Не поленился. На сервере делаем Функция ВыполнитьТекстЗапроса(Стр) Экспорт Запрос=СоздатьОбъект("Запрос"); Если Запрос.Выполнить(стр)=0 Тогда Возврат "" Иначе Возврат Запрос; КонецЕсли; КонецФункции На клиенте ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |ТекущийЭлемент = Справочник.Контрагенты.ТекущийЭлемент; |Код = Справочник.Контрагенты.Код; |Группировка ТекущийЭлемент; |Условие(Код в глРасшифровка); |"//}}ЗАПРОС ; ..................................................... База77.ExecuteBatch("глРасшифровка = СоздатьОбъект(""СписокЗначений"")"); СписокДоговоров77 = База77.глРасшифровка; СписокДоговоров77.ДобавитьЗначение("00000001"); СписокДоговоров77.ДобавитьЗначение("00000002"); Запрос=База77.ВыполнитьТекстЗапроса(ТекстЗапроса); Пока Запрос.Группировка(1)=1 Цикл Сообщить(Запрос.ТекущийЭлемент.Наименование); КонецЦикла; СписокДоговоров77=""; База77.глРасшифровка=""; Отрабатывает |
|||
22
Ёпрст
гуру
13.07.09
✎
12:18
|
(21) Ё .. еще бы выполнил запрос в самой оле базе и еще чего то хочет..
|
|||
23
Ёпрст
гуру
13.07.09
✎
12:19
|
+22 Я про внешнюю функцию к запросу говорил.
|
|||
24
Serginio1
13.07.09
✎
12:24
|
Мы не поняли друг друга.
Ну по идее запрос тоже на стороне сервера. Ньюансы 1С77. По мне проще сделать такую функцию, чем возиться с массивами. На любителя. А ще проще Работа с регистрами через ОЛЕ 20 создать функцию вызывающую внешний отчет |
|||
25
Ёпрст
гуру
13.07.09
✎
12:33
|
(24) ну да...недопоняли :)
ЗЫ: мне проще написать прямой запрос к сторонней базе.. чем мегатормоз оле использовать.. |
|||
26
Serginio1
13.07.09
✎
12:33
|
Тоесть зосдать глобальную функцию, которая будет вызывать внешний отчет с параметрами, и возвращать результат в этом же списке.
Функция ВызватьВнешнийОтчет(Отчет,СприсокПараметров)Экспорт ОткрытьФорму("Отчет#",СприсокПараметров,Отчет"); возврат СприсокПараметров КонецФункции |
|||
27
Serginio1
13.07.09
✎
12:35
|
(25) Согласен сам также и поступаю, но иногда логика бывает очень сложной, поэтому вариант (26) тоже пригоден. Все от задачи
|
|||
28
Ёпрст
гуру
13.07.09
✎
12:45
|
(26) да можно и обработку запускать...
а можно и в этой обработке кнопки понажимать или визуально управлять, если оле-сеанс показать для просмотра сторонней приблудой.. |
|||
29
Serginio1
13.07.09
✎
12:56
|
(28) Полностью согласен
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |