|   |   | 
| 
 | Задача найти документ по дате, ввожу дату в поле дата, нет поиска хотя док этой даты есть! | ☑ | ||
|---|---|---|---|---|
| 0
    
        alpha78 10.06.22✎ 10:05 | 
        Здравствуйте - Задача - найти документ по дате, ввожу дату в поле ДатаПоиска обработки (обработку сам создал), правда с временем 0.00.00 нет поиска хотя документы этой даты есть. Как независимо от времени найти все документы нужной даты, вот код программы:
 Процедура КнопкаВыполнитьНажатие(Кнопка) Запрос = Новый Запрос ; Запрос.Текст = "ВЫБРАТЬ | РеализацияТоваровУслуг.Ссылка, | РеализацияТоваровУслуг.Дата, | РеализацияТоваровУслуг.Контрагент, | РеализацияТоваровУслуг.СуммаДокумента |ИЗ | Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг |ГДЕ | РеализацияТоваровУслуг.Дата = &Дата" ; Запрос.УстановитьПараметр("Дата", ДатаПоиска) ; ЭлементыФормы.ТабличноеПоле1.Значение = Запрос.Выполнить().Выгрузить(); ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки(); ЭлементыФормы.ТабличноеПоле1.ОбновитьСтроки() ; КонецПроцедуры | |||
| 1
    
        Kigo_Kigo 10.06.22✎ 10:09 | 
        Дата МЕЖДУ 
 | НАЧАЛОПЕРИОДА(&ВыбДата, Год) И | КОНЕЦПЕРИОДА(&ВыбДата, Год)" | |||
| 2
    
        Волшебник модератор 10.06.22✎ 10:10 | 
        Время важно.
 При сравнении на равенство дата должна совпадать с точностью до секунды | |||
| 3
    
        Kigo_Kigo 10.06.22✎ 10:10 | 
        РеализацияТоваровУслуг.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&ВыбДата&Дата,ДЕНЬ) И КОНЕЦПЕРИОДА(&ВыбДата,ДЕНЬ)     | |||
| 4
    
        hhhh 10.06.22✎ 10:22 | 
        (3) хрень какая-то. Так все делают
 НАЧАЛОПЕРИОДА(РеализацияТоваровУслуг.Дата, ДЕНЬ) = &ВыбДата | |||
| 5
    
        Kigo_Kigo 10.06.22✎ 10:23 | 
        (4) А что работать не будет?     | |||
| 6
    
        hhhh 10.06.22✎ 10:27 | 
        (5) конечно. &ВыбДата это же дата без времени. Ну в крайнем случае
 НАЧАЛОПЕРИОДА(РеализацияТоваровУслуг.Дата, ДЕНЬ) = НАЧАЛОПЕРИОДА(&ВыбДата, ДЕНЬ) | |||
| 7
    
        vde69 10.06.22✎ 10:27 | 
        (4) (3) НАЧАЛОПЕРИОДА - очень медленная операция.     | |||
| 8
    
        vde69 10.06.22✎ 10:30 | 
        Запрос = Новый Запрос ;    
 Запрос.Текст = "ВЫБРАТЬ | РеализацияТоваровУслуг.Ссылка, | РеализацияТоваровУслуг.Дата, | РеализацияТоваровУслуг.Контрагент, | РеализацияТоваровУслуг.СуммаДокумента |ИЗ | Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг |ГДЕ | РеализацияТоваровУслуг.Дата >= &Дата1 И РеализацияТоваровУслуг.Дата <= &Дата1" ; Запрос.УстановитьПараметр("Дата1", НачалоДня(ДатаПоиска)) ; Запрос.УстановитьПараметр("Дата2", КонецДня(ДатаПоиска)) ; | |||
| 9
    
        vde69 10.06.22✎ 10:31 | 
        опечатка
 | РеализацияТоваровУслуг.Дата >= &Дата1 И РеализацияТоваровУслуг.Дата <= &Дата2" ; | |||
| 10
    
        Ryzeman 10.06.22✎ 10:34 | 
        (8) я всецело за оптимизацию, но разницы с (3) фактически никакой нет. По 1 операции НАЧАЛОПЕРИОДА и КОНЕЦПЕРИОДА и 0.1 миллисекунды не выйграют у по 1 операции НачалоДня() и КонецДня()     | |||
| 11
    
        Garykom гуру 10.06.22✎ 10:36 | 
        (10) От реализации зависит
 В разных СУБД может быть по разному, вплоть до циклов | |||
| 12
    
        Garykom гуру 10.06.22✎ 10:37 | 
        Вариант (8) намного логичней и понятней чем (3)     | |||
| 13
    
        Ryzeman 10.06.22✎ 10:37 | 
        Ладно, соглашусь. Я забыл что кроме MS SQL бывает ещё что-то)     | |||
| 14
    
        Garykom гуру 10.06.22✎ 10:38 | 
        Например теоретически можно запрос выполнить намного быстрей
 Путем отправки туевой тучи параллельных запросов где в каждый будет отправлена одна дата с секундами (сколько там в одном дне секунд?) А затем результат их объединен | |||
| 15
    
        Garykom гуру 10.06.22✎ 10:40 | 
        Для НомерСекунды = 1 По 60*60*24 Цикл
 ДатаССекундами = Дата+НомерСекунды; |ГДЕ | РеализацияТоваровУслуг.Дата = &ДатаССекундами КонецЦикла | |||
| 16
    
        Garykom гуру 10.06.22✎ 10:41 | 
        (15)+ понятно что отправлять не так надо а чтобы параллельно запросы выполнялись     | |||
| 17
    
        Garykom гуру 10.06.22✎ 10:42 | 
        (16)+ Фишка что операция сравнения на > или < да еще их две намного затратней чем просто одно =     | |||
| 18
    
        Ryzeman 10.06.22✎ 10:44 | 
        (17) а накладные расходы на 86400 обращений к СУБД?) Даже если они в shared memory     | |||
| 19
    
        Garykom гуру 10.06.22✎ 10:45 | 
        (18) Одним запросом очень длинным с Соединить ))     | |||
| 20
    
        Garykom гуру 10.06.22✎ 10:45 | 
        (19) *ОБЪЕДИНИТЬ     | |||
| 21
    
        alpha78 10.06.22✎ 10:48 | 
        благодарю, получилось, удачи Вам
 Процедура КнопкаВыполнитьНажатие(Кнопка) Запрос = Новый Запрос ; Запрос.Текст = "ВЫБРАТЬ | РеализацияТоваровУслуг.Ссылка, | РеализацияТоваровУслуг.Дата, | РеализацияТоваровУслуг.Контрагент, | РеализацияТоваровУслуг.СуммаДокумента |ИЗ | Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг |ГДЕ | РеализацияТоваровУслуг.Дата МЕЖДУ &д1 И &д2" ; Запрос.УстановитьПараметр("д1", НачалоДня(ДатаПоиска)) ; Запрос.УстановитьПараметр("д2", КонецДня(ДатаПоиска)) ; | |||
| 22
    
        vde69 10.06.22✎ 10:50 | 
        (21) на всякий случай проверь на записи с временем 23:59:59
 :) | |||
| 23
    
        Kassern 10.06.22✎ 10:54 | 
        (22) тогда лучше:
 Граница = Новый Граница(КонецДня(ДатаПоиска),ВидГраницы.Включая); Запрос.УстановитьПараметр("д2", Граница) ; Но имхо лучше: НачалоПериода(РеализацияТоваровУслуг.Дата,День)=&д1 | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |