|   |   | 
| 
 | v7: Не работает запрос по OLE | ☑ | ||
|---|---|---|---|---|
| 0
    
        Pasha-Buh 08.02.18✎ 21:29 | 
        Помогите разобраться. Подключаюсь по ОЛЕ к базе делаю запрос и получаю ошибку
 Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда {S:\BASES\1C\ERT\СКЛАД\ОТЧЕТ ПО ОСТАТКАМ И ЗАЯВКАМ.ERT(130)}: Неизвестная ошибка В самой базе (без ОЛЕ) запрос отрабатывает на ура. Вод код: Оле=СоздатьОбъект("V77.Application"); ПутьКБазе="\\10.10.10.5\DB\"; Пользователь="ser"; Пароль="258"; МонопольныйРежимOLE = ""; СтрокаПодключения = "/d"+СокрЛП(ПутьКБазе) + " /n" + СокрЛП(Пользователь)+ " /p" + Пароль + МонопольныйРежимOLE; Рез = Оле.Initialize ( Оле.RMTrade , СтрокаПодключения,"NO_SPLASH_SHOW"); Если Рез=0 Тогда Предупреждение("Не могу открыть базу",3); Оле=""; ФлОткрыта=0; Иначе ФлОткрыта=1; КонецЕсли; Если ФлОткрыта=0 Тогда Предупреждение("Сначала необходимо подключить базу !"); Возврат; КонецЕсли; ТЗ = СоздатьОбъект("ТаблицаЗначений"); ТЗ.НОваяКолонка("Товар"); ТЗ.НОваяКолонка("КодТовар"); ТЗ.НОваяКолонка("ОстатокНаНД","Число",15,2); ТЗ.НОваяКолонка("Приход","Число",15,2); ТЗ.НОваяКолонка("Заказано","Число",15,2); ТЗ.НОваяКолонка("Остаток","Число",15,2); ТЗ.НОваяКолонка("Фасовка"); Запрос = Оле.CreateObject("Запрос"); Состояние("Заполнение выходной таблицы..."); //Создание объекта типа Запрос ВНП = Дата1-7; ВКП = Дата2+3; ТекстЗапроса = "Период с '"+ВНП+ "' по '"+ВКП+"'; |Док = Документ.ЗаказТовара.ТекущийДокумент; |ДокДт = Документ.ЗаказТовара.ДатаДок; |Товар = Документ.ЗаказТовара.ТОвар; |НеСобрана = Документ.ЗаказТовара.НеСобрана; |Количество = Документ.ЗаказТовара.Количество; |НаДату = Документ.ЗаказТовара.НаДату; |ЕдИзм = Документ.ЗаказТовара.ЕдИзм; |Фасовка = Документ.ЗаказТовара.Фасовка; |КолСФ = Документ.ЗаказТовара.КолСФ; |Заказчик = Документ.ЗаказТовара.Клиент; |Менеджер = Документ.ЗаказТовара.Клиент.НомерМенеджера; |ВидК = Документ.ЗаказТовара.ВидК; |СкладД = Документ.ЗаказТовара.Склад; |Группировка Док; |Группировка Фасовка; |Группировка Товар Без Групп; |Функция КолВсего = Сумма(Количество); |Функция КолСФВсего = Сумма(КолСФ); |Условие ((НаДату>="+ВНП+") и (НаДату<="+ВКП+"));";//}}ЗАПРОС скл = Оле.CreateObject("Справочник.Склады"); ВыбСклад=""; Если СкладЗаявочной.ТекущаяСтрока()>1 Тогда кодСкл = ""; СкладЗаявочной.ПолучитьЗначение(СкладЗаявочной.ТекущаяСтрока(),кодСкл); Если скл.НайтиПоНаименованию(кодСкл)=0 Тогда Сообщить("Не нашли склад в заявочной базе "+кодСкл); КонецЕсли; ВыбСклад = скл.ТекущийЭлемент(); КонецЕсли; Если (ПустоеЗначение(ВыбСклад) = 0) Тогда ТекстЗапроса = ТекстЗапроса + "Условие(СкладД = ВыбСклад);"; КонецЕсли; //Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; ТЗ1 = СоздатьОбъект("ТаблицаЗначений"); Запрос.Выгрузить(тз1); глПечатьТЗ(ТЗ1); | |||
| 1
    
        Смотрящий 08.02.18✎ 21:35 | 
        Дату в условии в апострофы возьми     | |||
| 2
    
        Cthulhu 09.02.18✎ 00:00 | 
        вот тут собака порылась:
 ТекстЗапроса = ТекстЗапроса + "Условие(СкладД = ВыбСклад);" -- все используемые в запросе переменные должны существовать в контексте оле-базы данных. причем между обращениями к оле любые глобальные переменные оле-контекста очищаются - КРОМЕ массивов (и их элементов). поэтому выход навскидку: 1) в ГМ оле-базы данных: Перем глПарам[1] Экспорт; 2) у тебя: //ВыбСклад = скл.ТекущийЭлемент(); скл.глПарам[1] = скл.CurrentItem(); ... //ТекстЗапроса = ТекстЗапроса + "Условие(СкладД = ВыбСклад);"; ТекстЗапроса = ТекстЗапроса + "Условие(СкладД = глПарам[1]);"; | |||
| 3
    
        Cthulhu 09.02.18✎ 00:01 | 
        прим.: и - да, никогда, НИКОГДА не используйте для OLE кириллическую нотацию функций и методов     | |||
| 4
    
        GreyK 09.02.18✎ 00:30 | 
        (0) Такой запрос и не может быть создан. По ОЛЕ можно выдергивать только дату, строку и число.     | |||
| 5
    
        GreyK 09.02.18✎ 00:35 | 
        (3) А это не правда, текст запроса передается нормально, есть непонятные глюки с "Без итогов".     | |||
| 6
    
        DrZombi гуру 09.02.18✎ 06:35 | 
        (0)В ОЛЕ БД можно использовать глобальные переменные в качестве задаваемого отбора.
 Получается куда симпатично, главное, что бы глобальных переменных хватило :) | |||
| 7
    
        1dvd 09.02.18✎ 06:54 | 
        а ещё, при вызове функций через ОЛЕ нужно указывать все, даже необязательные, параметры     | |||
| 8
    
        VladZ 09.02.18✎ 07:02 | 
        (0) ОЛЕ накладывает определенные ограничения. Выкинь ее.     | |||
| 9
    
        NikVars 09.02.18✎ 10:09 | 
        Любой язык программирования - формализованные ограничения!     | |||
| 10
    
        Pasha-Buh 09.02.18✎ 11:34 | 
        (1) Спасибо, помогло. 
 (2) Спасибо, вышел из ситуации в запросе: СкладД = Документ.ЗаказТовара.Склад.код В нахождении выбсклада: ВыбСклад = скл.ТекущийЭлемент().Код; В условии: ТекстЗапроса = ТекстЗапроса + "Условие(СкладД = СокрЛП("+ВыбСклад+");"; | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |