|
Задача найти документ по дате, ввожу дату в поле дата, нет поиска хотя док этой даты есть! | ☑ | ||
---|---|---|---|---|
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 |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |