Имя: Пароль:
1C
1С v8
Сортировка по дате
0 jonik_joker
 
19.09.13
11:59
Всем привет.Похоже я чего-то не понимаю:пытаюсь сделать выборку по дате из результатов запроса,но получается пустой лист.В чем проблема?
Код:

&НаСервере
Функция СформироватьОтчетНовый()
    
    
    Запрос=Новый Запрос;
    Запрос.УстановитьПараметр("Клиент",Клиент);
    Запрос.УстановитьПараметр("ДатаНачала",НачалоДня(ДатаНачала));
    Запрос.УстановитьПараметр("ДатаКонца",КонецДня(ДатаКонца));
    
    

    Запрос.Текст= "ВЫБРАТЬ
                  |    РеализацияГотовойПродукцииСостав.Заявка,
                  |    СУММА(РеализацияГотовойПродукцииСостав.Стоимость) КАК Стоимость,
                  |    РеализацияГотовойПродукцииСостав.Заявка.Дата КАК Дата
                  |ИЗ
                  |    Документ.РеализацияГотовойПродукции.Состав КАК РеализацияГотовойПродукцииСостав
                  |ГДЕ
                  |    РеализацияГотовойПродукцииСостав.Заявка.Клиент = &Клиент
                  |
                  |СГРУППИРОВАТЬ ПО
                  |    РеализацияГотовойПродукцииСостав.Заявка,
                  |    РеализацияГотовойПродукцииСостав.Заявка.Дата
                  |
                  |УПОРЯДОЧИТЬ ПО
                  |    Стоимость";
                
    ТаблицаДанных=Запрос.Выполнить().Выгрузить();            
    ДокументДанных=Новый ТабличныйДокумент;
    
    
    Макет=Отчеты.Отчет1.ПолучитьМакет("Макет1");
    ОбластьЗаголовок=Макет.ПолучитьОбласть("Заголовок");
    ОбластьСтрока=Макет.ПолучитьОбласть("Строка");
    
    Для Каждого СтрокаДанных Из ТаблицаДанных Цикл
        Если СтрокаДанных.Дата>=ДатаНачала И СтрокаДанных.Дата<=ДатаКонца Тогда
        
        ОбластьСтрока.Параметры.Заявка=СтрокаДанных.Заявка;
        ОбластьСтрока.Параметры.Стоимость=СтрокаДанных.Стоимость;
        ОбластьСтрока.Параметры.Дата=СтрокаДанных.Дата;
        
                    ДокументДанных.Вывести(ОбластьЗаголовок);
                    ДокументДанных.Вывести(ОбластьСтрока);
    КонецЕсли;
                
    
    
    КонецЦикла;
    
    
    
    Возврат ДокументДанных;
            
    
КонецФункции
1 Ненавижу 1С
 
гуру
19.09.13
12:01
нда...
2 Лефмихалыч
 
19.09.13
12:01
видимо условие по дате не выполняется
3 salvator
 
19.09.13
12:01
А проверку на дату в запросе религия не позволяет сделать?
4 Laerys
 
19.09.13
12:02
с чего б начать...
5 chelentano
 
19.09.13
12:02
казалось бы, причём тут сортировка...
6 Laerys
 
19.09.13
12:04
ты в консоле запросов проверял результат запроса? мб там вообще пусто, или потом в даты не входит? в чем проблема сразу загнать условие на даты в запрос? Зачем выгружать запрос, а потом опять по нему проходить фактически?
7 Laerys
 
19.09.13
12:05
Датаначала и конца не противоречат друг другу, они вообще заполнены?
8 jonik_joker
 
19.09.13
12:09
(3),почему-то 2 условия не выполняются одновременно:либо по дате,либо по клиенту.
(6),данные получаю,но  пропускаются строки

ДокументДанных.Вывести(ОбластьЗаголовок);
ДокументДанных.Вывести(ОбластьСтрока);

сразу переходит в КонецЕсли.
9 Ненавижу 1С
 
гуру
19.09.13
12:12
(8) "почему-то 2 условия не выполняются одновременно:либо по дате,либо по клиенту"
ж жешь
"но  пропускаются строки"
опять ж жешь
10 Sabbath
 
19.09.13
12:13
(0)
1. Сделай нормально проверку на дату в условиях запроса (ГДЕ). Лучше вообще сначала выбирать заявки по дате, а потом присоединять реализации.
2. Проверь сами даты.
3. Проверь, есть ли заявки вообще между этими датами.
4. Разве получать область строки
ОбластьСтрока=Макет.ПолучитьОбласть("Строка");
надо не в цикле?
5. Зачем выводить заголовок в цикле? Я думаю это тоже косяк.
11 Laerys
 
19.09.13
12:14
(8)  "почему-то 2 условия не выполняются одновременно:либо по дате,либо по клиенту"
пустил слезу...
12 kosts
 
19.09.13
12:15
(10)
>4. Разве получать область строки
>ОбластьСтрока=Макет.ПолучитьОбласть("Строка");
>надо не в цикле?

Не обязательно, но важно все параметры строки перезаписывать новыми значениями, то отчет выведутся повторы...
13 Sabbath
 
19.09.13
12:16
+(10) к пункту 4. В цикле не надо, туплю
14 Sabbath
 
19.09.13
12:17
(12) Ага, сам присмотрелся, понял уже
15 kosts
 
19.09.13
12:19
(14) В цикле можно, я бы сказал желательно, но не обязательно, т.к. если вне цикла, то возможны ошибки...
16 jonik_joker
 
19.09.13
12:23
(11),а можно все-таки пояснить что не так?
17 jonik_joker
 
19.09.13
12:25
(10),
уже писал что 2 условия не выполняются.Если ставлю условие до дате-все формируется верно.
18 kosts
 
19.09.13
12:27
(17) Запрос приведи с отбором по дате
19 catena
 
19.09.13
12:28
(16)Злые люди просто шутят. Запросы больше чем с одним условием работают некорректно и долго, всё правильно.
20 Sabbath
 
19.09.13
12:30
(19) предлагаю не ставить условия в запросах, а проверять все в цикле))
21 Sabbath
 
19.09.13
12:32
(17) выведи без условий (или без одного) с датами и клиентами и посмотри, что там, проверь, подходит ли все под условия. Не может быт ьчтоб все было ок, а одно условие выполнялось, другое вдруг нет, должна быть причина
22 jonik_joker
 
19.09.13
12:47
(18),
Запрос.Текст= "ВЫБРАТЬ
                  |    РеализацияГотовойПродукцииСостав.Заявка,
                  |    СУММА(РеализацияГотовойПродукцииСостав.Стоимость) КАК Стоимость,
                  |    РеализацияГотовойПродукцииСостав.Заявка.Дата КАК Дата
                  |ИЗ
                  |    Документ.РеализацияГотовойПродукции.Состав КАК РеализацияГотовойПродукцииСостав
                  |ГДЕ
                  |    РеализацияГотовойПродукцииСостав.Заявка.Дата МЕЖДУ &ДатаНачала И &ДатаКонца
                  |
                  |СГРУППИРОВАТЬ ПО
                  |    РеализацияГотовойПродукцииСостав.Заявка,
                  |    РеализацияГотовойПродукцииСостав.Заявка.Дата
                  |
                  |УПОРЯДОЧИТЬ ПО
                  |    Стоимость";
23 jonik_joker
 
19.09.13
12:54
(21),без условий все выводится,но почему-то столбец Стоимость везде пустой.При отборе по клиенту либо по дате он заполняется.
24 jonik_joker
 
19.09.13
12:59
играет какую-то роль что я беру данные из табличной части(Состав) документа РеализацияГотовойПродукции?
25 Laerys
 
19.09.13
13:16
Передай одну дату на оба параметра, точную, в день которой точно была заявка и добавь условие по клиенту этой заявки, посмотри что получится
26 Sabbath
 
19.09.13
13:49
(24) думаю, нет. Тебе просто надо в отладке или в консоли прогнать и посмотреть результат запрос с условием и без. Посмотри, что выводится, соответствуют ли условия значения полей условиям, проверь типы, параметры и подумай почему так. Так сложно сказать, не думаю, что там какое-то волшебство. Просто обычный запрос, где-то косяк в недопонимании что он делает или что должен делать. Короче покопайся в данных и в том, что получает запрос с условиями и без.
27 jonik_joker
 
19.09.13
15:17
Мой косяк,сорри:даты выводились с временем),Формат() помог.Теперь сравнение происходит,но без результата:если указываю клиента и даты-выводятся все заявки по клиенту,если только период-непонятные пару заявок.
28 jonik_joker
 
19.09.13
15:18
Вопрос:можно ли,например,
ДатаНачалаФормат=Формат(ДатаНачала,"ДФ=dd.MM.yyyy");
записать в условие запроса?
29 salvator
 
19.09.13
15:20
(28) Функцию НАЧАЛОПЕРИОДА используй
30 salvator
 
19.09.13
15:21
СГРУППИРОВАТЬ ПО
   РеализацияГотовойПродукцииСостав.Заявка,
   НАЧАЛОПЕРИОДА(РеализацияГотовойПродукцииСостав.Заявка.Дата,ДЕНЬ)
31 jonik_joker
 
19.09.13
15:24
salvator,спасибо.
Будем копать дальше)
32 jonik_joker
 
19.09.13
23:10
Указал условия по клиенту и дате в запросе-все работает,но...если не заполнить хотя бы 1 реквизит(клиент,дата),то сортировка не происходит.Можно ли в запросе этого избежать?
33 salvator
 
20.09.13
09:48
(32) Можно.
34 jonik_joker
 
22.09.13
07:53
(33) ,логичный вопрос...как?