Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Не работает запрос по OLE

v7: Не работает запрос по OLE
Я
   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
Дату в условии в апострофы возьми
   Cthulhu
 
2 - 09.02.18 - 00:00
вот тут собака порылась:
ТекстЗапроса = ТекстЗапроса + "Условие(СкладД = ВыбСклад);"
-- все используемые в запросе переменные должны существовать в контексте оле-базы данных. причем между обращениями к оле любые глобальные переменные оле-контекста очищаются - КРОМЕ массивов (и их элементов). поэтому выход навскидку:
1) в ГМ оле-базы данных: Перем глПарам[1] Экспорт;
2) у тебя:
//ВыбСклад = скл.ТекущийЭлемент();

скл.глПарам[1] = скл.CurrentItem();
...
//ТекстЗапроса = ТекстЗапроса + "Условие(СкладД = ВыбСклад);";

ТекстЗапроса = ТекстЗапроса + "Условие(СкладД = глПарам[1]);";
   Cthulhu
 
3 - 09.02.18 - 00:01
прим.: и - да, никогда, НИКОГДА не используйте для OLE кириллическую нотацию функций и методов
   GreyK
 
4 - 09.02.18 - 00:30
(0) Такой запрос и не может быть создан. По ОЛЕ можно выдергивать только дату, строку и число.
   GreyK
 
5 - 09.02.18 - 00:35
(3) А это не правда, текст запроса передается нормально, есть непонятные глюки с "Без итогов".
   DrZombi
 
6 - 09.02.18 - 06:35
(0)В ОЛЕ БД можно использовать глобальные переменные в качестве задаваемого отбора.
Получается куда симпатично, главное, что бы глобальных переменных хватило :)
   1dvd
 
7 - 09.02.18 - 06:54
а ещё, при вызове функций через ОЛЕ нужно указывать все, даже необязательные, параметры
   VladZ
 
8 - 09.02.18 - 07:02
(0) ОЛЕ накладывает определенные ограничения. Выкинь ее.
   NikVars
 
9 - 09.02.18 - 10:09
Любой язык программирования - формализованные ограничения!
   Pasha-Buh
 
10 - 09.02.18 - 11:34
(1) Спасибо, помогло.
(2) Спасибо, вышел из ситуации в запросе: СкладД = Документ.ЗаказТовара.Склад.код
В нахождении выбсклада: ВыбСклад = скл.ТекущийЭлемент().Код;
В условии: ТекстЗапроса = ТекстЗапроса + "Условие(СкладД = СокрЛП("+ВыбСклад+");";
 
 Рекламное место пустует

Список тем форума
Рекламное место пустует  Рекламное место пустует
Основная теорема систематики: Новые системы плодят новые проблемы.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует