|
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) Спасибо, вышел из ситуации в запросе: СкладД = Документ.ЗаказТовара.Склад.код В нахождении выбсклада: ВыбСклад = скл.ТекущийЭлемент().Код; В условии: ТекстЗапроса = ТекстЗапроса + "Условие(СкладД = СокрЛП("+ВыбСклад+");"; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |