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

1С:Предприятие ::

Метки:запросы, Запросы и построители

Странная ошибка при выполнении запроса (v7.70.021)

Я
   Bayr
 
08.07.04 - 12:54
При выполнении запроса за период с 01.06.04 по 30.06.04 выдаются данные только за 01.06.04. Любая другая комбинация дат - итоги правильны, но если берем за весь месяц (или больше - перекрывая этот период) - полная лажа.
Может кто сталкивался с такой бедой??? Помогите, пожалуйста.
 
 
   Влад
1 - 08.07.04 - 12:58
а по подробнее?
   Bayr
 
2 - 08.07.04 - 13:08
Подробнее - пожалуйста. Есть отчет, опирается на запрос. Запрос сложный, к нескольким регистрам. Если период дат указанный выше - берет итоги только за один день. Если этот период разбить на 2 в любой комбинации - выдаст правильные данные(т.е. данные в регистрах - корректные).  Могу текст запроса, только он не маленький.
Главное - не могу понять, почему запрос не пробегает весь период, что ему может мешать ???
   Bayr
 
3 - 08.07.04 - 13:16
А вот нашел другой отчет, на маленьком запросе - та же беда. Гляньте текст запроса, может здесь какой глюк?

    Если ДатаКонец >= ПолучитьДатуТА() Тогда
        ДатаКонец = ПолучитьДатуТА();
        ТекстЗапроса="//{{ЗАПРОС(РейтингТоваров)

        |ПЕРИОД С ДатаНачало;";
    Иначе
        ТекстЗапроса="//{{ЗАПРОС(РейтингТоваров)

        |ПЕРИОД С ДатаНачало По ДатаКонец;";
    КонецЕсли; 
    
    ТекстЗапроса=ТекстЗапроса+" 
    |Фирма                = Регистр.Продажи.Фирма;
    |Предприятие                = Регистр.Продажи.Предприятие;
    |Менеджер            = Регистр.Продажи.Менеджер;
    |Товар                = Регистр.Продажи.Товар; 
    |Покупатель            = Регистр.Продажи.Покупатель;";  
    
    Если Единица = "мест" Тогда
        ТекстЗапроса=ТекстЗапроса+"    
        |КоличествоЕд    = Регистр.Продажи.КоличествоМ;";
    Иначе    
        ТекстЗапроса=ТекстЗапроса+"    
        |КоличествоЕд    = Регистр.Продажи.КоличествоОЕУ;";
    КонецЕсли;
    
    ТекстЗапроса=ТекстЗапроса+"    
    |СтоимостьОВУ        = Регистр.Продажи.СтоимостьОВУ;
    |ПродСтоимостьОВУ    = Регистр.Продажи.ПродСтоимостьОВУ; 
    
    |Условие (Товар в ВыбТовары);
    |Условие (Фирма в ВыбФирмы);
    |Условие (Предприятие в ВыбПредприятия);
    |Условие (Менеджер в ВыбМенеджеры);";  
    Если ИсключитьКлиентов = 0 Тогда
        ТекстЗапроса=ТекстЗапроса+"        
        |Условие (Покупатель в ВыбКлиенты);";
    Иначе
        ТекстЗапроса=ТекстЗапроса+"        
        |Условие (НЕ (Покупатель в ВыбКлиенты));";
    КонецЕсли;
        
        
    ТекстЗапроса=ТекстЗапроса+"    
    |Группировка Товар без групп; 
    
    |Функция Количество        = Сумма(КоличествоЕд);
    |Функция Себестоимость            = Сумма(СтоимостьОВУ);
    |Функция ПродСтоимость            = Сумма(ПродСтоимостьОВУ);
    |//}}ЗАПРОС

    ;                  
    Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
        Предупреждение("Ошибка в тексте запроса");
        Возврат;
    КонецЕсли;
   Warlock
 
4 - 08.07.04 - 14:02
Сомневаюсь, что глюк в запросах(сразу в 2-х!). Я первым делом пересчитал бы итоги...
   Bayr
 
5 - 08.07.04 - 14:59
Имеешь в виду перепроведение всех документов - это было сделано в самом начале.
   Bayr
 
6 - 08.07.04 - 15:09
Кажется нашел лекарство: Ввел еще одну группировку на уровень ниже (по текущему документу), которой не пользуюсь, (т.е. группировка только заявлена) - стал собирать полностью. Теперь вот понять бы, почему так??? Кто может объяснить??
   Warlock
 
7 - 08.07.04 - 19:40
(6)А регистр оборотный? Какая периодичность? База SQL? Если SQL, то на DBF пробовал?
   Bayr
 
8 - 08.07.04 - 19:53
Регистр оборотов. Периодичность - квартал, база на DBF.
По-прежнему, объяснения данному факту не нахожу. Отчет стал собираться медленнее, т.к. появилась новая группировка, значительно более объемная. Но как без этого - не знаю.
   Warlock
 
9 - 08.07.04 - 20:43
Исходя из тех данных, что есть пока в этой ветке, я предпринял бы:
1. Проверка на работоспособность в других месяцах(на стыках кварталов и не на стыках)
2. Пересчитать итоги методом передвигания ТА назад и вперед с перепроведением доков
3. Упрощать последовательно запрос, убирая из него группировки, условия, переменные до максимально простого и неправильно работающего
4. Проанализировать все в п.1-3
   Bayr
 
10 - 08.07.04 - 21:21
Пересчитать на других месяцах не могу - конфа работает с 29.05.04 - ей чуть больше месяца.
Пересчет итогов, передвижение ТА, переиндексация и исправление и тестирование базы - все было сделано, ничего не дало.
Запрос уменьшал. Вот он минимальный:

    ТекстЗапроса="//{{ЗАПРОС(РейтингТоваров)

    |ПЕРИОД С ДатаНачало По ДатаКонец;
    
    |Фирма            = Регистр.Продажи.Фирма;
    |Предприятие        = Регистр.Продажи.Предприятие;
    |Менеджер        = Регистр.Продажи.Менеджер;
    |Товар            = Регистр.Продажи.Товар; 
    |Покупатель        = Регистр.Продажи.Покупатель;
    |Докум            = Регистр.Продажи.ТекущийДокумент;
    
    
    |КоличествоЕд        = Регистр.Продажи.КоличествоОЕУ;
    |СтоимостьОВУ        = Регистр.Продажи.СтоимостьОВУ;
    |ПродСтоимостьОВУ    = Регистр.Продажи.ПродСтоимостьОВУ; 
    
    |Группировка Товар без групп; 
*******    |Группировка Докум; 
    
    |Функция Количество    = Сумма(КоличествоЕд);
    |Функция Себестоимость    = Сумма(СтоимостьОВУ);
    |Функция ПродСтоимость    = Сумма(ПродСтоимостьОВУ);
    |//}}ЗАПРОС


Так вот, без строчки, помеченной ******* работает неправильно, с ней - правильно.
Почему - для меня тайна...
 
 
   Warlock
 
11 - 08.07.04 - 23:15
Продолжаем диагностику... (Мне самому очень интересно)
1)А что, если такой запрос?
ТекстЗапроса="//{{ЗАПРОС(РейтингТоваров) 

   |ПЕРИОД С ДатаНачало По ДатаКонец; 
   |Товар            = Регистр.Продажи.Товар; 
   |КоличествоЕд        = Регистр.Продажи.КоличествоОЕУ; 
   |Группировка Товар без групп; 
   |Функция Количество    = Сумма(КоличествоЕд); 
   |//}}ЗАПРОС
?
2)А 1) с группировкой по документам?
3)Какой тип у:
Фирма, Предприятие, Менеджер, Товар, Покупатель, Покупатель ?
4)Какими документами двигается регистр?
5)Какой текщий период и на какую дату стоит ТА?
   Warlock
 
12 - 09.07.04 - 09:19
2 Bayr:
Отпишись!
   Bayr
 
13 - 09.07.04 - 09:41
Предложенный тобой в 11 запрос работает аналогично (=неправильно, а с добавлением переменной "Докум = Регистр.Продажи.ТекущийДокумент" и группировки "Группировка Докум" начинает давать правильные итоги)
Тип у Фирма, Предприятие, Менеджер, Товар, Покупатель = Справочник(соответствующего типа).
Регистр двигается Документами.РасходнаяНакладная и ПриходнаяНАкладная(это возврат от покупателя).
Текущий период - Июль, ТА стоит на текущем документе(08.07.04)- База живая
Ночью пытался найти некорректность в данных. Анализировал DBFки регистра - ничего там не нашел - все нормально.
По-прежнему ответа найти не могу...
   Warlock
 
14 - 09.07.04 - 14:00
(13)Раз так серъезно занялся, давай докопаемся до сути:
Я так понял, что 29.05.04 у тебя ввод остатков? Попробуй перенеси его подальше, например, в 2003 год, а в месяцах 2004 года сэмулируй работу фирмы: создай документы приход и расход(несколько в месяц) и делай запросы:
1.   внутри месяца
2.   на несколько месяцев
2.1. спереходом между кварталами
2.2. без перехода между кварталами
3.   за квартал
4.   больше квартала

И еще:
В регистре точно нет неопределенных реквизитов?
Какие отборы стоят на реквизитах(отбор движений, отбор итогов)?


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