|   |   | 
| 
 | 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("Перечисление.КодыОпераций.ПередачаВРозницу.ПорядковыйНомер()"); ТекстЗапроса = ТекстЗапроса + "Условие (КодОперации.ПорядковыйНомер() <> "+ПередачаВРозн+");"; | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |