|   |   | 
| 
 | Разность между датами - полями выборки в запросе | ☑ | ||
|---|---|---|---|---|
| 0
    
        slafor 20.09.22✎ 19:08 | 
        Есть документ с реквизитом типа "Дата". Надо добавить вычисляемое поле в выборку, где помимо этого реквизита будет "разность дат" между соседними строками. То есть примерно так:
 Ссылка - Дата - РазностьДат 1. Ссылка1 - 01.01.2022 - 30 (количество дней между первой и второй записью) 2. Ссылка2 - 31.01.2022 - 28 (количество дней между второй и третьей записью) 3. Ссылка3 - 28.02.2022 - х (количество дней между последней записью и текущей датой) Как можно сделать это в одном запросе? Можно конечно вычислять их и после выполнения основного запроса, но это динамический список, и надо именно в запросе. | |||
| 1
    
        БигБаг 20.09.22✎ 21:01 | 
        Пусть будет таблица ВТ_ДОКИ(Ссылка,Дата). Тогда:
 
Не проверял, но вроде так. Динамические списки поддерживают временные таблицы где-то с версия 2018 года. | |||
| 2
    
        RomanYS 20.09.22✎ 21:08 | 
        (0) 
 1. Добавить автономерзаписи в ВТ 2. Соединить ВТ саму с собой по ВТ.НомерЗаписи + 1 = ВТ2.НомерЗаписи | |||
| 3
    
        БигБаг 20.09.22✎ 21:41 | 
        (2) Оно не позволяет сортировать временные таблицы, если нет ПЕРВЫЕ. А для автономерзапии в порядке даты это нужно.     | |||
| 4
    
        RomanYS 20.09.22✎ 21:53 | 
        (3) лайфхак: первые 99999999999     | |||
| 5
    
        ДедМорроз 20.09.22✎ 22:21 | 
        Поскольку 1с не умеет исполняемые процедуры и курсоры на стороне базы данных,то тут как раз случай,когда обработка таблицы кодом будет быстрее и проще.     | |||
| 6
    
        БигБаг 20.09.22✎ 22:23 | 
        (4) Так нужно было в (2) об этом писать)
 (5) В ТС написано, что для ДС | |||
| 7
    
        БигБаг 20.09.22✎ 22:25 | 
        (4) А ты уверен, что оно корректно это отработает для заведом меньшей таблицы? Оптимизаторы они таки, капризные.     | |||
| 8
    
        RomanYS 20.09.22✎ 22:41 | 
        (7) Ни разу не сталкивался чтобы результат кривой был. Оптимизаторы могут давать неоптимальный запрос, но чтобы кривой результат... 
 (6) в (2) просто идея. Против классического (1) в данной ситуации ничего не имею. Минимум() только забыл) | |||
| 9
    
        БигБаг 20.09.22✎ 22:59 | 
        (8) Есть там минимум. Маленькими буковками. Это не является ошибкой)
 А вот по вопросу сортировки. Она задокументирована, что сделана для ПЕРВЫЕ. И если при этом работает автономерзаписи в желаемо-предполагаемом виде, то это побочка, а не явная фича. Потому что если сортировка только для первые, а кол-во строк в таблице известно заранее, то оптимизатор может посчитать сортировку лишним действием. | |||
| 10
    
        БигБаг 20.09.22✎ 23:00 | 
        если известно заранее и заведом меньше кол-ва затребованных первых     | |||
| 11
    
        БигБаг 20.09.22✎ 23:03 | 
        Учитывая что оно может выполняться на файловой, на MS SQL разных версий, на PostgreSQL. И эти скл имеют свои еще оптимизаторы, тут сложно наверняка сказать, что оно всегда будет правильным.     | |||
| 12
    
        slafor 22.09.22✎ 18:32 | 
        (1) Спасибо, все прекрасно работает. Но вот незадача: мне понадобилось еще по одному полю группировать - по Контрагенту из документа, чтобы получался вот такой результат:
 Контрагент1 Ссылка1 Дата1 РазностьМеждуДата1ИДата2 Ссылка2 Дата2 РазностьМеждуДата2ИТекущаяДата Контрагент2 Ссылка3 Дата3 РазностьМеждуДата3ИДата4 Ссылка4 Дата4 РазностьМеждуДата4ИДата5 Ссылка5 Дата5 РазностьМеждуДата5ИТекущаяДата И вот в этом случае я получаю для Контрагента2 (для последнего) правильный результат по разнице между датами, а для всех остальных - немонятно что. Например, разницу между 01.01.2022 и 01.06.2022 получаю 3 месяца вместо пяти (если переводить в месяцы). Группировка у меня делается уже в настройках СКД - а именно в Настройки - Отчет - Новая группировка. | |||
| 13
    
        slafor 22.09.22✎ 18:33 | 
        +(12) А если добавить Условие: по одному контрагенту, то все выводится и рассчитывается правильно!     | |||
| 14
    
        БигБаг 22.09.22✎ 19:42 | 
        (13) Там еще нашелся вариант, он немного проще в использовании. Вот здесь в 4 сообщении:
 Получение первого элемента при связи вложенным запросом В нем не нужно группирование и максимум. Но лично я пока такое не проверял в действии. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |