![]() |
![]() |
|
Передача параметров в запрос к базе, подключенной через OLE | ☑ | ||
---|---|---|---|---|
0
kolobroder
20.04.09
✎
19:10
|
Имеем:
1. Текущюю базу Бух 7.7 2. Другую базу Бух 7.7, открытую из п. 1. через OLE. Надо: В 1. выполнить запрос по данным 2.. Условие: в запрос надо передать рядо параметров. Как я делаю: олеБазаОАО = олеИБ.Перечисление.Учет.ОАО; олеЗапрос = ИБ.CreateObject("Запрос"); ТЗап = " |Период с '"+хНачДата+"' по '"+хКонДата+"' |Док = Документ.ОтгрузкаТовара.ТекущийДокумент; |База = Документ.ОтгрузкаТовара.База; | |Группировка Док; | |Условие(База = олеБазаОАО); |"; ... олеЗапрос.Выполнить(ТЗап); последняя строка выдает ошибку: Запрос[21] : Ошибка в выражении 'олеБазаОАО' КАК правильно передать параметр олеБазаОАО в OLE запрос? |
|||
1
Cthulhu
20.04.09
✎
19:15
|
1) по значению реквизита примитивного типа;
2) по внутреннему представлению |
|||
2
ZDenis
20.04.09
✎
19:15
|
(0) В контексте данного запроса не проще ИБ.ВыбратьДокументы(...), Пока ПолучитьДокумент()? И не совсем ясно оле база у тебя олеИБ или ИБ?
|
|||
3
GreyK
20.04.09
✎
19:43
|
Перечисление в олешной базе ищи по примитиву, то-есть по идинтификатору или порядковому номеру.
|
|||
4
Cthulhu
20.04.09
✎
20:02
|
олеБазаОАО = СтрЗаменить(олеИБ.ЗначениеВСтрокуВнутр(олеИБ.Перечисление.Учет.ОАО),"""","""""");
... |Условие(База = ЗначениеИзСтрокиВнутр("+олеБазаОАО+")); -- как-то так... не получится - эксперементируй... |
|||
5
kolobroder
20.04.09
✎
22:40
|
конечно там. не ИБ, а олеИБ.
я текст не копировал, а примерно набрал. На самом деле текст запроса значительно более сложный и просто Док.ВыбратьДокументы() - не получится. Я просто привел гипотетический пример. |
|||
6
EuVod
20.04.09
✎
22:54
|
передать в оле-базу можно только примитивные типы данных (чтрока, число, дата) (Кстати а что со ссылочными, типа СЗ, ТЗ - видимо тоже низзя). Поэтому ежели у тебя объекты синхронизованы например по коду, то необходимо передать этот код, а в базе ОЛЕ преобразовать его уже в объект через НайтиПокоду.
|
|||
7
EuVod
20.04.09
✎
22:58
|
или как в (4) тока лучше сначала ЗначениеИзСтрокиВнутр, а имя переменной куда занесем результат уже в запрос. Но если базы слишком разные, то это может неправильно по смыслу срабатывать... то бишь нужный тебе элемент в ОЛЕ базе может иметь другое внутренне представление чем в исходной базе.
|
|||
8
kolobroder
20.04.09
✎
23:08
|
Мне надо также передавать в OLE запрос СписокЗначений с номенклатурой (ном-ру ищу по кодам в OLE базе)
|
|||
9
EuVod
20.04.09
✎
23:51
|
про спиок - не знаю, думаю что не передасться даже список простых типов - преобразую в строку с разделителями, разбирай строку на коду, выковыривай по коду объекты.
|
|||
10
Cthulhu
21.04.09
✎
00:01
|
(6): в ОЛЕ-базу можно передавать и объекты ОЛЕ-базы (полученные "на этой стороне" с использованием (через точку) контекста ОЛЕ-базы) а также предавать и использовать объекты глобального контекста ОЛЕ-базы, так что глупость говоришь...
В использовании запроса всё ухудшается из-за того, что сам текст запроса компилируется в контексте ОЛЕ-базы, поэтому в нем могут быть использованы только доступные объекты глобального контекста ОЛЕ-базы. |
|||
11
Cthulhu
21.04.09
✎
00:04
|
(10)+: про запрос пояснение наверно нужно: использование в тексте запроса любых переменных "местного" контектста недопустимо, потому что текст запроса передается в ОЛЕ-базу as is, и уже в ОЛЕ-базе компилируется - а в том контексте переменные, имена(!) которых используются в запросе и де-факто описаны в этой базе, просто не понимаются (даже если "тут" в этих переменных содержатся объекты ОЛЕ-базы)..
|
|||
12
Cthulhu
21.04.09
✎
00:08
|
(8): "передавать в запросе список значений" -- это использовать в тексте запроса имя(!) переменной "тутошнего" контектста, содержащей СЗ?.. тогда нельзя, см.выше.. потому что ты НЕ "список значений" передвешь, а ТЕКСТ запроса, содержащий имя переменной... которая должна быть доступна (по имени!) в глобальном контексте ОЛЕ-базы..
Для того, чтобы означенным образом передавать СЗ в тексте запроса - есть "обходной маневр".. использовать в тесте запроса имя глобальной переменной ОЛЕ-базы, в которую поместить предварительно СЗ с объектами ОЛЕ-базы... |
|||
13
КонецЦикла
21.04.09
✎
00:10
|
Все есть в факах, не надо рекомендовать :)
|
|||
14
Cthulhu
21.04.09
✎
00:13
|
(13): а ты меня забань... или не лезь с указаниями...
|
|||
15
КонецЦикла
21.04.09
✎
00:36
|
(14) Чего нервный такой, а?
Автор просто нажал в БЗню |
|||
16
kolobroder
21.04.09
✎
16:51
|
(13) дайте ссылку на фак плиз!
|
|||
17
kolobroder
21.04.09
✎
16:53
|
(10, 11, 12) дайте же пример передачи СЗ в OLE запрос.
|
|||
18
Ёпрст
гуру
21.04.09
✎
16:56
|
(17) В запросе через олю будет работать только массив... элементами которго может быть СЗ..
А сам СЗ - обломись. |
|||
19
Cthulhu
21.04.09
✎
16:57
|
(18): не будет.
|
|||
20
Cthulhu
21.04.09
✎
16:59
|
(17): тебе всю необходимую для решения задачи информацию предоставили..
наморщить за тебя ум и сделать твою работу?.. |
|||
21
Ёпрст
гуру
21.04.09
✎
17:00
|
(19) не будет что ?
Скунки тут давеча пытался меня переубедить, что в оле-запросе можно запихать СЗ .. но примеров так и не привёл. А с массивом всё работает. Причем пофиг, что СЗ будет глобальным СЗ оле-базы - один фиг не работает. |
|||
22
Cthulhu
21.04.09
✎
17:05
|
(21): не будет работать массив в запросе - если только для хранения этого массива не используется переменная глобального контекста ОЛЕ-базы (каковая переменная и фигурирует в тексте запроса)... так таким образом и СХ работает..
запихать в запрос СЗ - можно, в виде внутреннего представления, но небольшие СЗ (а то длина текста запроса "зашкалит"). "Причем пофиг, что СЗ будет глобальным СЗ оле-базы - один фиг не работает." -- при желании и таким образом может не работать, согласен.. при желании )))) |
|||
23
Ёпрст
гуру
21.04.09
✎
17:06
|
(22) В том то и дело, что глобальный оле-массив будет работать, а вот СЗ - нет.
|
|||
24
kolobroder
21.04.09
✎
17:07
|
(23) пример приведите плиз. с глобальным массивом
|
|||
25
Cthulhu
21.04.09
✎
17:07
|
(23): у мееня - работает СЗ.. что я делаю не так?..
|
|||
26
Ёпрст
гуру
21.04.09
✎
17:12
|
(25) не вопрос... напиши аналог вот этого, чтоб работал:
В оле базе Перем СписокКлиентосов[1] Экспорт; В обработине ОЛЕ.ExecuteBatch("СписокКлиентосов[1] =СоздатьОбъект(""СписокЗначений"")"); м = ОЛЕ.EvalExpr("СписокКлиентосов[1]"); Спр = ОЛЕ.CreateObject("Справочник.Контрагенты"); Пока Спр.ПолучитьЭлемент() = 1 Цикл Если Спр.ЭтоГруппа()=0 Тогда м.ДобавитьЗначение(Спр.ТекущийЭлемент()); КонецЕсли; КонецЦикла; Запрос = ОЛЕ.CreateObject("Запрос"); ТекстЗапроса = " |Спр = Справочник.Номенклатура.ТекущийЭлемент; |Условие (Спр в СписокКлиентосов[1]); |Группировка Спр Без Групп;"; Запрос.Выполнить(ТекстЗапроса); Пока Запрос.Группировка(1)=1 Цикл Сообщить(Запрос.Спр.Наименование); КонецЦикла; |
|||
27
Ёпрст
гуру
21.04.09
✎
17:14
|
+ 26 там в тексте запроса нужно тока
|Спр = Справочник.Контрагенты.ТекущийЭлемент; |
|||
28
kolobroder
21.04.09
✎
17:23
|
(26) Пишет: Сервер занят. Действие не может быть завершено так как другая программа занята. Для перехода к этой программе воспользуйтесь кнопкой "Переключиться".
Жму "Переключиться" .. и опять это сообщение Шо за напасть? |
|||
29
Ёпрст
гуру
21.04.09
✎
17:25
|
(28) таймаут 2 минуты..
переписывай запрос или жди... |
|||
30
Ёпрст
гуру
21.04.09
✎
17:26
|
+29 есть даже шняга, которая "сама" на кнопки нажимает..
толи на проклабе, толи на инфостарте валяется.. |
|||
31
kolobroder
21.04.09
✎
17:29
|
вроде получилось. всем спасибо.
использовал глобальный массив |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |