7.7 Запрос по OLE к регистрам

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем n_h, 20 июл 2016.

  1. TopicStarter Overlay
    n_h
    Offline

    n_h Опытный в 1С

    Регистрация:
    21 янв 2011
    Сообщения:
    59
    Симпатии:
    0
    Баллы:
    26
    Не могу понять в чем дело. Делаю запрос по OLE, но данные (например конечный остаток) выводит неверные. Есть мысли в чем ошибка? Спасибо.
    Код:
    Процедура ОстаткиТ()
    Если ПодключитьсяКБазеСинхронизации()<>0 Тогда
        ЗапросТ=        v77.CreateObject("Запрос");
        Если ВыбКонПериода>=ПолучитьДатуТА() Тогда
            ДатаКон=0;
        Иначе
            ДатаКон=ВыбКонПериода;
        КонецЕсли;
        ТекстЗапроса="ПЕРИОД С ВыбНачПериода";
        Если Не(ДатаКон=0) Тогда
            ТекстЗапроса=ТекстЗапроса+" По ДатаКон;";
        Иначе
            ТекстЗапроса=ТекстЗапроса+";";
        КонецЕсли;
    
        ТекстЗапроса =
        "//{{ЗАПРОС(ТоварыЗаПериоды)
        |Фирма=Регистр.ОстаткиТоваров.Фирма;
        |Склад=Регистр.ОстаткиТоваров.Склад;
        |ФлагУчета=Регистр.ОстаткиТоваров.ФлагУчета;
        |Товар=Регистр.ОстаткиТоваров.Товар;
        |Док=Регистр.ОстаткиТоваров.ТекущийДокумент;
        |Кол=Регистр.ОстаткиТоваров.ОстатокТовара;
        |Функция НачКол  = НачОст(Кол);
        |Функция КонКол  = КонОст(Кол);
        |Функция ПрихКол = Приход(Кол);
        |Функция РасхКол = Расход(Кол);
    
        |Группировка Товар упорядочить по Товар.Наименование;
        |Группировка Склад упорядочить по Склад.Наименование;
        |"//}}ЗАПРОС
        ;
    
    
        Если ВыбТовары.РазмерСписка()=0 Тогда
            Заг=Заг+"По всем товарам. ";
        Иначе
            Заг=Заг+"По товарам из списка: "+ВыбТовары.ВСтрокуСРазделителями()+". ";
        КонецЕсли;
    
    
        Если ЗапросТ.Выполнить(ТекстЗапроса)=0 тогда
            Возврат;
        КонецЕсли;
    
        ВБ=Рубли;
    
        ЧислоСтрок=0;
        //  Создание Таблицы для выходного отчета
        Таб=СоздатьОбъект("Таблица");
        Таб.ИсходнаяТаблица("ДвиженияТоваров");
        Таб.ВывестиСекцию("Отчет");
        Оживить(4);
        ИтогВес=0;
        Пока ЗапросТ.Группировка("Товар") = 1 Цикл
            НаимТовара=ЗапросТ.ЗначениеУпорядочивания(1,1);
            КодСо  = ЗапросТ.Товар.КодСоотв;
            Если ЗапросТ.Товар.ЭтоГруппа()=1 Тогда
                Таб.ВывестиСекцию("Группа");
                Оживить(1);
                Продолжить;
            Иначе
                
        
                ПечНачКол=Формат(ЗапросТ.НачКол,"Ч015");
                ПечПрихКол=Формат(ЗапросТ.ПрихКол,"Ч015");
                ПечРасхКол=Формат(ЗапросТ.РасхКол,"Ч015");
                ПечКонКол=Формат(ЗапросТ.КонКол,"Ч015");
                Таб.ВывестиСекцию("Товар");
                Оживить(1);
            КонецЕсли;
                  Пока ЗапросТ.Группировка("Склад") = 1 Цикл
                НаимСклада=ЗапросТ.ЗначениеУпорядочивания(2,1);
                ПечНачКол=Формат(ЗапросТ.НачКол,"Ч015");
                ПечПрихКол=Формат(ЗапросТ.ПрихКол,"Ч015");
                ПечРасхКол=Формат(ЗапросТ.РасхКол,"Ч015");
                ПечКонКол=Формат(ЗапросТ.КонКол,"Ч015");
    
        
                    Если ВыбСклад.Выбран()=0 Тогда
                        Таб.ВывестиСекцию("Склад");
                        Оживить(1);
                    КонецЕсли;
    
    
            КонецЦикла;
        КонецЦикла;
    
        Таб.Опции(0,0,5,0,ПарСтрОтчДлинн);
        Таб.Защита(Константа.ФлагЗащитыТаблиц);
        Таб.ТолькоПросмотр(1);
        Таб.Показать("Отчет о движении товаров на складах","");
    КонецЕсли;
    КонецПроцедуры ;
  2. MaxxaM
    Offline

    MaxxaM Опытный в 1С

    Регистрация:
    16 окт 2007
    Сообщения:
    288
    Симпатии:
    2
    Баллы:
    29
    1. Как то не заметил где в запросе условие на список товаров
    2. Как подсказывает опыт: лучше разместить функцию с запросом в удаленной базе и пусть она возвращает ТЗ с результатами
    3. и за чем лишние параметры в запросе
    |Фирма
    |ФлагУчета;
    |Док?
  3. TopicStarter Overlay
    n_h
    Offline

    n_h Опытный в 1С

    Регистрация:
    21 янв 2011
    Сообщения:
    59
    Симпатии:
    0
    Баллы:
    26
    1. На данном этапе мне не нужно условие на список товаров, мне нужны данные по всем товарам.
    2. Возможно, но не уверен что так будет проще.
    3. Лишние параметры для дальнейшего фильтра, сейчас они никак не участвуют.

    Что то из этого влияет на полученные данные?
  4. MaxxaM
    Offline

    MaxxaM Опытный в 1С

    Регистрация:
    16 окт 2007
    Сообщения:
    288
    Симпатии:
    2
    Баллы:
    29
    Этот же запрос прокатай на удаленной базе, цифры сходятся?
  5. TopicStarter Overlay
    n_h
    Offline

    n_h Опытный в 1С

    Регистрация:
    21 янв 2011
    Сообщения:
    59
    Симпатии:
    0
    Баллы:
    26
    Как я не додумался проверить... Вообщем все дело оказалось в условии запроса Условие (Фирма=ПустаяФирма);.
    Теперь вот никак не могу понять как через OLE получить пустое значение справочника для запроса.
  6. TopicStarter Overlay
    n_h
    Offline

    n_h Опытный в 1С

    Регистрация:
    21 янв 2011
    Сообщения:
    59
    Симпатии:
    0
    Баллы:
    26
    Наверно так |Условие (ПустоеЗначение(Фирма)=1); разбираюсь дальше
  7. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.438
    Симпатии:
    373
    Баллы:
    104
    это
    Код:
    Условие (Фирма=ПустаяФирма);
    работает, но перед созданием текста запроса надо вставить
    Код:
    ПустаяФирма=СоздатьОбъект("СправочникюФирмы");
  8. TopicStarter Overlay
    n_h
    Offline

    n_h Опытный в 1С

    Регистрация:
    21 янв 2011
    Сообщения:
    59
    Симпатии:
    0
    Баллы:
    26
    Делал так, не сработало выдает ошибку
    Последнее редактирование: 21 июл 2016
  9. MaxxaM
    Offline

    MaxxaM Опытный в 1С

    Регистрация:
    16 окт 2007
    Сообщения:
    288
    Симпатии:
    2
    Баллы:
    29
    Если тебе не надо отбор по фирме убери его из запроса, если надо по выбору пользователя то лучше вставляй условие по типу :
    Код:
    Если выборФирмы.Выбран()=1 Тогда
    ТекстЗапроса = ТекстЗапроса + "
    |Условие (Фирма=  выборФирмы)";
    КОнецЕсли;
    

Поделиться этой страницей