|
v7: ошибка в OLE-запросе | ☑ | ||
---|---|---|---|---|
0
SanchoPancho
30.10.12
✎
11:03
|
ЗапросОЛЕ = RoznOle.CreateObject("Запрос");
ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с '"+ВыбНачПериода+"' по '"+ВыбКонПериода+"'; |Фирма = Регистр.ПартииНаличие.Фирма; |Док = Регистр.ПартииНаличие.ТекущийДокумент; |КодОперации = Регистр.ПартииНаличие.КодОперации; |СуммаРуб = Регистр.ПартииНаличие.СуммаРуб; |Функция НачОст = НачОст(СуммаРуб); |Функция Приход = Приход(СуммаРуб); |Функция Расход = Расход(СуммаРуб); |Функция КонОст = КонОст(СуммаРуб); |Группировка Фирма; |"//}}ЗАПРОС ; ТекстЗапроса = ТекстЗапроса + "Условие ((Фирма в '"+спРознФирм+"'));"; ТекстЗапроса = ТекстЗапроса + "Условие ((КодОперации <> '"+глКО.ПередачаВРозницу+"') или ((Док.Вид()<>'"+"РеализацияРозница"+"') и (Док.Вид()<>'"+"ОтчетККМ"+"')));"; Если ЗапросОЛЕ.Выполнить(ТекстЗапроса) = 0 Тогда Сообщить("Ошибка выполнения запроса"); Возврат; КонецЕсли; Сам запрос работает, но, условия, почему-то не выполняются - доки вида "ОтчетККМ" - попадают Что делаю не так? |
|||
1
1Сергей
30.10.12
✎
11:05
|
глКО = ?
|
|||
2
МишКа
30.10.12
✎
11:05
|
По твоим условиям ОтчетККМ и должен попадать в результат. А ты как думал?
|
|||
3
Ёпрст
30.10.12
✎
11:06
|
"Условие ((Фирма в '"+спРознФирм+"'));";
вот это никогда не будет работать |
|||
4
Ёпрст
30.10.12
✎
11:06
|
(Док.Вид()<>'"+"РеализацияРозница"+"')
это вообще зачет, строку с датой сравнивать |
|||
5
Ёпрст
30.10.12
✎
11:07
|
если че, то что между ' ' - всегда дата
|
|||
6
SanchoPancho
30.10.12
✎
11:09
|
(3) это как раз работает! уже проверил
(5) вот за это спасибо! проверю |
|||
7
cw014
30.10.12
✎
11:10
|
(1) +1
|
|||
8
cw014
30.10.12
✎
11:10
|
(6) Если работает ЭТО - тогда это особая уличная магия
|
|||
9
mvk
30.10.12
✎
11:11
|
Отрабатывает часть условия
КодОперации <> '"+глКО.ПередачаВРозницу+"' Оно у тебя всегда истина. |
|||
10
SanchoPancho
30.10.12
✎
11:12
|
(1) (7) пробовал глКО - не работает, ругается
|
|||
11
МишКа
30.10.12
✎
11:12
|
(6) Проверяй - не проверяй...
Какой код операции у документа ОтчетККМ? Передача в розницу? |
|||
12
mvk
30.10.12
✎
11:13
|
Запрос отработает в ОЛЕ-базе.
Что для ОЛЕ-базы глКО твоей текущей базы? И спРознФирм - это список в ОЛЕ-базе? |
|||
13
Ёпрст
30.10.12
✎
11:13
|
(6) ну-ну.. удачи.
|
|||
14
1Сергей
30.10.12
✎
11:15
|
ТекстЗапроса = ТекстЗапроса +
"Условие ((КодОперации <> Перечисление.КодыОпераций.ПередачаВРозницу) или ((Док.Вид()<>'"+"РеализацияРозница"+"') и (Док.Вид()<>'"+"ОтчетККМ"+"')));"; что-то типа этого |
|||
15
МишКа
30.10.12
✎
11:16
|
(14) Хорошая попытка )))))
|
|||
16
1Сергей
30.10.12
✎
11:17
|
(15) ну, с учётом (11) не взлетит конечно, но ошибкой будет меньше :)
|
|||
17
МишКа
30.10.12
✎
11:21
|
Вопрос - почти чемпион.
- Где у меня ошибка? - А где ее нет? |
|||
18
SanchoPancho
30.10.12
✎
11:22
|
(11) да, передача в розницу
|
|||
19
МишКа
30.10.12
✎
11:24
|
(18) Чудны дела твои. Значит, продажа из магазина - это поступление в магазин?
|
|||
20
SanchoPancho
30.10.12
✎
11:25
|
(17) ну, так подскажи если знаешь
|
|||
21
pofigos
30.10.12
✎
11:26
|
(0) а мне что-то подсказывает, что ошибка в:
"Условие ((КодОперации <> '"+глКО.ПередачаВРозницу+"') или ((Док.Вид()<>'"+"РеализацияРозница"+"') и (Док.Вид()<>'"+"ОтчетККМ"+"')));"; "Или" меняй на "и" |
|||
22
МишКа
30.10.12
✎
11:26
|
(20) Так я и подсказываю. Сначала надо разобраться с логикой, а потом с техникой.
|
|||
23
SanchoPancho
30.10.12
✎
11:27
|
(19) да там база вообще чудно заточена
часть Отчетов ККМ проходит как поступление, а часть как реализация |
|||
24
МишКа
30.10.12
✎
11:30
|
(23) По логике твоего условия, те документы, которые проходят как реализация попадут в результат.
|
|||
25
SanchoPancho
30.10.12
✎
11:35
|
(24) разве условие Док.Вид()<>'"+"РеализацияРозница"+"' не должно сработать?
|
|||
26
МишКа
30.10.12
✎
11:37
|
с какого? оно после ИЛИ стоит.
|
|||
27
SanchoPancho
30.10.12
✎
11:59
|
(5) а как строку-условие выделять? двойные кавычки не работают
|
|||
28
1Сергей
30.10.12
✎
12:02
|
(27) типа того:
Док.Вид()<>"""+"РеализацияРозница"+""" или Док.Вид()<>""РеализацияРозница"" |
|||
29
МишКа
30.10.12
✎
12:03
|
(27) В этом случае ставятся двойные кавычки два раза.
Док.Вид()<>"""+"РеализацияРозница"+""") и или (еще проще) Док.Вид()<>""РеализацияРозница"") и |
|||
30
МишКа
30.10.12
✎
12:03
|
)))))
|
|||
31
SanchoPancho
30.10.12
✎
12:24
|
(28) (29) спасибо! сейчас попробую
|
|||
32
SanchoPancho
30.10.12
✎
12:36
|
да, и заодно подскажите как правильно вставить условие
Условие (Фирма в спРознФирм) учитывая что, спРознФирм = RoznOle.CreateObject("СписокЗначений"); РознФирм = RoznOle.CreateObject("Справочник.Фирмы"); РознФирм.ВыбратьЭлементы(); Пока РознФирм.ПолучитьЭлемент() = 1 Цикл спРознФирм.ДобавитьЗначение(РознФирм.ТекущийЭлемент()); КонецЦикла; |
|||
33
Ёпрст
30.10.12
✎
12:38
|
(32) это никогда не заработает
|
|||
34
Ёпрст
30.10.12
✎
12:39
|
И.. как же (6)
>>>>(3) это как раз работает! уже проверил ^)))) |
|||
35
SanchoPancho
30.10.12
✎
12:47
|
(33) слушай, дорогой, возможно ты, прекрасно все знаешь лучше всех - но, в отличие от других собеседников в этой ветке - ты еще не сказал ничего даже на йоту полезного или познавательного
не трать свое время зря |
|||
36
Ёпрст
30.10.12
✎
12:48
|
Я в курсе - дураков учить, только портить.
|
|||
37
Ёпрст
30.10.12
✎
12:48
|
На счет твоих ошибок сказано было еще в (3,4).
|
|||
38
SanchoPancho
30.10.12
✎
12:57
|
(37) а что ты толкового сказал в (3,4), кроме констатации, что не будет работать?
|
|||
39
Ёпрст
30.10.12
✎
12:59
|
еще (5).
|
|||
40
Ёпрст
30.10.12
✎
12:59
|
на счет списка, в оле запросе работает только массив.
|
|||
41
Ёпрст
30.10.12
✎
13:02
|
Изучай:
В оле базе Перем СписокКлиентосов[1] Экспорт; В обработине ОЛЕ.ExecuteBatch("СписокКлиентосов[1] =СоздатьОбъект(""СписокЗначений"")"); м = ОЛЕ.EvalExpr("СписокКлиентосов[1]"); Спр = ОЛЕ.CreateObject("Справочник.Контрагенты"); Пока Спр.ПолучитьЭлемент() = 1 Цикл Если Спр.ЭтоГруппа()=0 Тогда м.ДобавитьЗначение(Спр.ТекущийЭлемент()); КонецЕсли; КонецЦикла; Запрос = ОЛЕ.CreateObject("Запрос"); ТекстЗапроса = " |Спр = Справочник.Номенклатура.ТекущийЭлемент; |Условие (Спр в СписокКлиентосов[1]); |Группировка Спр Без Групп;"; Запрос.Выполнить(ТекстЗапроса); Пока Запрос.Группировка(1)=1 Цикл Сообщить(Запрос.Спр.Наименование); КонецЦикла; |
|||
42
SanchoPancho
30.10.12
✎
13:21
|
(41) вот за это большое спасибо!
а то, что я пока мало знаю - так это я и сам в курсе ))) |
|||
43
SanchoPancho
30.10.12
✎
14:03
|
(41) а массив где объявлять? в начале модуле объявил - ругается, что СписокКлиентосов[1] не объявлена как массив
объявил в процедуре - тоже самое в Главном модуле? |
|||
44
Junior1s
30.10.12
✎
14:18
|
угу
|
|||
45
Ёпрст
30.10.12
✎
14:25
|
(43) в глобальнике.
|
|||
46
SanchoPancho
30.10.12
✎
17:59
|
(45) уже сделал, спасибо
и еще вопрос - рылся везде честно - нигде не нашел как два условия объединить в Оле-запросе по "И" или "ИЛИ"? |
|||
47
Ёпрст
31.10.12
✎
09:35
|
(46) дык так и пиши:
|Условие((вася=Федя)Или(Маша=Таня)); |
|||
48
SanchoPancho
31.10.12
✎
10:05
|
не работает
Условие (КодОперации <>"ПередачаВРозницу") <<?>> ИЛИ(Док.Вид()<>"РеализацияРозница") Запрос[14] : Ожидается ';' перед 'ИЛИ' |
|||
49
1Сергей
31.10.12
✎
10:06
|
(48) оберни всё ещё в одни скобки
|
|||
50
1Сергей
31.10.12
✎
10:07
|
(49) И КодОперации - это не строка ведь?
|
|||
51
SanchoPancho
31.10.12
✎
10:09
|
вот сам текст
ТекстЗапроса = ТекстЗапроса + "Условие (КодОперации <>"""+"ПередачаВРозницу"+""")ИЛИ(Док.Вид()<>"""+"РеализацияРозница"+""") ИЛИ (Док.Вид()<>"""+"ОтчетККМ"+""");"; |
|||
52
1Сергей
31.10.12
✎
10:10
|
(51) см (14)
|
|||
53
1Сергей
31.10.12
✎
10:10
|
(52)+ только от одинарных кавычек избавься
|
|||
54
SanchoPancho
31.10.12
✎
10:13
|
(53) спасибо! по (14) сработало
буду проверять |
|||
55
Ёпрст
31.10.12
✎
10:45
|
(51) КодОперации - це же не строка!
|
|||
56
Ёпрст
31.10.12
✎
10:47
|
Условие ((КодОперации <> Перечисление.КодыОпераций.ПередачаВРозницу) и ((Док.Вид()<>""РеализацияРозница"") и (Док.Вид()<>""ОтчетККМ"")));
И всё же там и нужно везде, не ? |
|||
57
SanchoPancho
31.10.12
✎
12:55
|
(56) сделал
ПередачаВРозн = RoznOle.Перечисление.КодыОпераций.ПередачаВРозницу; ТекстЗапроса = ТекстЗапроса + "Условие (КодОперации <> ПередачаВРозн);"; ругается: Ошибка в выражении 'ПередачаВРозн' |
|||
58
Ёпрст
31.10.12
✎
12:58
|
(57) а нафига этот изврат ?
как в (56) не работатет ужо ? |
|||
59
Ёпрст
31.10.12
✎
12:59
|
ПередачаВРозн - это должен быть объект оле базы в оле базе..
|
|||
60
Ёпрст
31.10.12
✎
13:00
|
если уж хочется изврата - обходи через массив, в который пихай оле перечисление, только вот нафига - не ясно.
|
|||
61
Ёпрст
31.10.12
✎
13:01
|
а так, оле в топку, прямой запрос к сторонней базе и привет, и быстро и нет таймаута оленого при "доооолгом запросе"
|
|||
62
SanchoPancho
31.10.12
✎
13:03
|
(58) как в (56) не работает ругается на
Перечисление.КодыОпераций.ПередачаВРозницу |
|||
63
SanchoPancho
31.10.12
✎
13:07
|
и потом, для прямых запросов надо какое-то дополнение громоздить?
|
|||
64
Ёпрст
31.10.12
✎
13:09
|
(62) а это перечисление вообще есть в базе оле то ?
с таким видом и значением ? (63) нет |
|||
65
SanchoPancho
31.10.12
✎
13:30
|
(64) есть, и в самой этой базе запрос по этому перечислению фильтруется
а на вариант (56) пишет: Условие (КодОперации <> Перечисление.КодыОпераций.ПередачаВРозницу <<?>> ); Запрос[14] : Ошибка в выражении 'Перечисление' насчет прямых запросов, вроде, надо 1С++ использовать - я про это |
|||
66
Ёпрст
31.10.12
✎
13:45
|
(63)
проверь синтаксис, перечисления отлично работают в оле запросе. можешь использовать ado |
|||
67
Ёпрст
31.10.12
✎
13:47
|
в крайнем случае, через глобальный массив передай, хотя, это лишнее
|
|||
68
1Сергей
31.10.12
✎
13:47
|
чудиса какие-то :)
|
|||
69
SanchoPancho
31.10.12
✎
14:18
|
во, такая конструкция сработала!
ПередачаВРозн = RoznOle.evalexpr("Перечисление.КодыОпераций.ПередачаВРозницу.ПорядковыйНомер()"); ТекстЗапроса = ТекстЗапроса + "Условие (КодОперации.ПорядковыйНомер() <> "+ПередачаВРозн+");"; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |