Имя: Пароль:
1C
1С v8
Оператор ВЫБОР в условии запроса
,
0 seraf
 
06.12.19
16:23
Подскажите, если у меня есть ВЫБОР на дату поля запроса (NULL заменяю датой документа) и в условии нужен отбор по этой дате. Поместив в ГДЕ конструкцию ВЫБОР, скорость не упадет до уровня как будто я анализирую все поля?
1 Роспатнюк Сергей Сер
 
06.12.19
16:27
(0) про null и дату документа не понятно,ну а в конструкции ГДЕ много раз применял ВЫБОР КОГДА ТОГДА и тормозов не видел
2 Роспатнюк Сергей Сер
 
06.12.19
16:31
(0) если смущает null создай пакет запросов в первом запросе заменяй null в втором делай отбор из ВТ
3 seraf
 
06.12.19
16:31
ну это нормально если поле запроса получается через ВЫБОР и условие на него накладывать с тем же оператором
мне что-то глаз режет, но оно нужно для связи с документом на лету
4 Роспатнюк Сергей Сер
 
06.12.19
16:32
(3) выкладывай запрос
5 scanduta
 
06.12.19
16:32
(0) разве что на очень больших объемах, в общем то не особо критично
но правильней будет поместить в ВТ
6 seraf
 
06.12.19
16:41
ВЫБРАТЬ
    ТЧДокумента.Ссылка КАК Ссылка,
    ТЧДокумента.НомерСтроки КАК НомерСтроки,
    ТЧДокумента.Номенклатура КАК Номенклатура,
    ТЧДокумента.УникальныйИдентификатор
    РСУслуги.Коэффициент КАК Коэффициент,
    ВЫБОР
        КОГДА РСУслуги.ДатаИВремя = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
            ТОГДА ТЧДокумента.Ссылка.Дата
        ИНАЧЕ РСУслуги.ДатаИВремя
    КОНЕЦ КАК ДатаИВремя
ИЗ
    Документ.Заказ.Услуги КАК ТЧДокумента
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Услуги КАК РСУслуги
        ПО ТЧДокумента.УникальныйИдентификатор = РСУслуги.УникальныйИдентификатор
ГДЕ
    ТЧДокумента.НомерСтроки.Ссылка.Проведен = ИСТИНА

////такое сильно смущает
И    

    (ВЫБОР
        КОГДА РСУслуги.ДатаИВремя = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
            ТОГДА ТЧДокумента.Ссылка.Дата
        ИНАЧЕ РСУслуги.ДатаИВремя
    КОНЕЦ) МЕЖДУ &ДатаНач и &ДатаКон
7 Fragster
 
гуру
06.12.19
16:42
(6) это будет тормозить
8 seraf
 
06.12.19
16:42
да объем большой, мне точно надо чтобы условие по дате сразу резалось, а не выполнялось как полный запрос с фильтром в конце
9 seraf
 
06.12.19
16:43
(7) а как тут быть?
10 Fragster
 
гуру
06.12.19
16:43
объединение двух запросов
11 seraf
 
06.12.19
16:46
(10) каких двух запросов? у меня таких как в примере еще несколько паравозиком объединяется по другим документам с аналогичными условием ГДЕ
12 FIXXXL
 
06.12.19
16:47
(8) оно уже как "полный запрос с фильтром в конце" работает
13 Роспатнюк Сергей Сер
 
06.12.19
16:49
где же null ? )
14 Fragster
 
гуру
06.12.19
16:49
(11)
один с РСУслуги.ДатаИВремя = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) другой с РСУслуги.ДатаИВремя <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
15 seraf
 
06.12.19
16:50
(12) мне тоже так кажется. а как перефразировать чтобы Дата РС выступала условием отсечения строк ТЧ и при этом еще и заполнялась согласно ВЫБОР
16 seraf
 
06.12.19
16:50
(13) когда пустая дата у РС, подменяется на дату документ, это имел в виду
17 Роспатнюк Сергей Сер
 
06.12.19
16:52
(16) пустая дата не null иначе можно было бы использовать ЕСТЬNULL что и хотел предложить а тут пустые даты ))
18 seraf
 
06.12.19
16:55
(14) пока не очень уловил, сделать две таблицы РС, одна с заполненной датой, вторая с пустой, на этом мысль обрывается)

(17) да пустая дата..
19 Роспатнюк Сергей Сер
 
06.12.19
16:56
(11) ну и пиши ОБЪЕДИНИТЬ ВСЕ между запросов сколько нужно раз главное что бы поля в ВЫБРАТЬ были одинаковыми
20 seraf
 
06.12.19
16:59
проще говоря мне в запросе нужен отбор по дате регистра или по дате документа, если первая пустая. и чтобы это быстро работало в случае маленького интервала, а не перебирались все таблицы.

(19) да я то написал, проблема в том что ВЫБОР в ГДЕ делает запрос полным (вроде как)
21 НЕА123
 
06.12.19
17:03
нельзя засунуть условия ГДЕ в ПО?
22 Роспатнюк Сергей Сер
 
06.12.19
17:04
(20) как я понял от ВЫБОРА в ГДЕ можно избавится (14) у тебя будет по два объединенных запрос в одном будет ГДЕ = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) в другом <>
23 Роспатнюк Сергей Сер
 
06.12.19
17:06
(21) у тебя есть консоль запросов ?
24 Роспатнюк Сергей Сер
 
06.12.19
17:08
(21) вопорос не к вам случайно тыркнул он для (20)
25 seraf
 
06.12.19
17:09
(21) в СКД делаю, куда засунуть?
(22) и что получится, первый запрос соединяет ТЧ с РС в котором только заполненные даты РС, отбор по ней, второй отбор соединяет ТЧ с пустыми датами РС, отбор по датам ТЧ

и эти два быстрее будут? ну попробую, возможно, мерси..

(23) есть)
26 НЕА123
 
06.12.19
17:13
       
....
 ПО ТЧДокумента.УникальныйИдентификатор = РСУслуги.УникальныйИдентификатор
И
    ТЧДокумента.НомерСтроки.Ссылка.Проведен = ИСТИНА

////такое сильно смущает

И    

    (ВЫБОР
        КОГДА РСУслуги.ДатаИВремя = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
            ТОГДА ТЧДокумента.Ссылка.Дата
        ИНАЧЕ РСУслуги.ДатаИВремя
    КОНЕЦ) МЕЖДУ &ДатаНач и &ДатаКон
27 Роспатнюк Сергей Сер
 
06.12.19
17:18
ВЫБРАТЬ
    ТЧДокумента.Ссылка КАК Ссылка,
    ТЧДокумента.НомерСтроки КАК НомерСтроки,
    ТЧДокумента.Номенклатура КАК Номенклатура,
    ТЧДокумента.УникальныйИдентификатор
    РСУслуги.Коэффициент КАК Коэффициент,
    ВЫБОР
        КОГДА РСУслуги.ДатаИВремя = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
            ТОГДА ТЧДокумента.Ссылка.Дата
        ИНАЧЕ РСУслуги.ДатаИВремя
    КОНЕЦ КАК ДатаИВремя
ПОМЕСТИТЬ ВТ
ИЗ
    Документ.Заказ.Услуги КАК ТЧДокумента
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Услуги КАК РСУслуги
        ПО ТЧДокумента.УникальныйИдентификатор = РСУслуги.УникальныйИдентификатор
ГДЕ
    ТЧДокумента.НомерСтроки.Ссылка.Проведен = ИСТИНА
;
//////////////////////////////////////////
ВЫБРАТЬ
    ВТ.Ссылка КАК Ссылка,
    ВТ.НомерСтроки КАК НомерСтроки,
    ВТ.Номенклатура КАК Номенклатура,
    ВТ.УникальныйИдентификатор
    ВТ.Коэффициент КАК Коэффициент,
    ВТ.ДатаВремя   КАК ДатаИВремя
ИЗ ВТ КАК ВТ
ГДЕ ДатаИВремя МЕЖДУ ДатаНач И ДатаКон


вот так точно будет норм
28 seraf
 
06.12.19
17:22
(27) какой же там норм будет, если я сначала считаю все данные, что займет кучу времени

по рецепту (22) пока пробую переделать
29 Роспатнюк Сергей Сер
 
06.12.19
17:25
ограничь с низу в первом запросе за последние допустим два года или три или четыре 1млн строк будет для sql доли секунд
30 Роспатнюк Сергей Сер
 
06.12.19
17:26
(28) тебе же не нужны данные 10 летней давности если они есть конечно
31 seraf
 
06.12.19
17:28
(29) да фиг там, я до этого тему создавал, аварийно отчет падает при 300к строк и работает пару часов, вроде только с отбором работать будут
32 seraf
 
06.12.19
17:30
всё, вроде норм работает отбор по датам, спасибо за помощь)
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший