Разница между датами в запросе

07.12.11

Разработка - Запросы

Получение разницы между датами в запросе формата: "Дней; часов; минут"
ПРАВИЛЬНЫЙ КОД (ОТ i132) ОБРАБОТКУ ИСПРАВИЛ!!!

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
РазностьДатВЗапросе.epf
.epf 6,45Kb
54
54 Скачать (1 SM) Купить за 1 850 руб.

Ситуация следующая: Возникла необходимость получения времени отработки поручения.
В списке (1С 8.2 управляемые формы) документа есть 2 даты дата создания документа и дата его закрытия надо выводить в список разность между датами в формате (дн. час. мин.)
Думал все просто и банально, но не тут то было это все норм делается если у тебя 8.1 например. А здесь (8.2) динамический список который строится из запроса.
Вообще помучался я и решил править запрос…. Понял что всё гораздо хуже чем я это себе представлял и не найдя другого выхода / решения данной проблемы на просторах интернета, я сделал ЭТО: РазностьДатВЗапросе.epf (Хотел выложить код, но надо покупать обработку "разукрашку", вообщем кому надо будет пишите в личку я обязательно вышлю!)

PS: строго не судите первая публикация

PSS: о пользе данного запроса сужу по сообщениям в интернете … были люди которым это реально было нужно, но им давали глупые ответы… типо РАЗНОСТЬДАТ(,,Час) и т.д.

 

ВОТ ЭТО ПРАВИЛЬНЫЙ КОД (ОТ i132) ОБРАБОТКУ ИСПРАВИЛ!!!

   

    Запрос = Новый Запрос;
   
Запрос.Текст =
       
"ВЫБРАТЬ
        |   РАЗНОСТЬДАТ(&ДатаН, &ДатаК, СЕКУНДА) КАК СекундыВсе,
        |   РАЗНОСТЬДАТ(&ДатаН, &ДатаК, МИНУТА) КАК МинутыВсе,
        |   РАЗНОСТЬДАТ(&ДатаН, &ДатаК, ЧАС) КАК ЧасыВсе,
        |   РАЗНОСТЬДАТ(&ДатаН, &ДатаК, ДЕНЬ) КАК ДниВсе
        |ПОМЕСТИТЬ ВремяВсе
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |   ВЫБОР
        |       КОГДА ДОБАВИТЬКДАТЕ(&ДатаН, ДЕНЬ, ВремяВсе.ДниВсе) > &ДатаК
        |           ТОГДА ВремяВсе.ДниВсе - 1
        |       ИНАЧЕ ВремяВсе.ДниВсе
        |   КОНЕЦ КАК ДниВсе,
        |   ВЫБОР
        |       КОГДА ДОБАВИТЬКДАТЕ(&ДатаН, ЧАС, ВремяВсе.ЧасыВсе) > &ДатаК
        |           ТОГДА ВремяВсе.ЧасыВсе - 1
        |       ИНАЧЕ ВремяВсе.ЧасыВсе
        |   КОНЕЦ КАК ЧасыВсе,
        |   ВЫБОР
        |       КОГДА ДОБАВИТЬКДАТЕ(&ДатаН, МИНУТА, ВремяВсе.МинутыВсе) > &ДатаК
        |           ТОГДА ВремяВсе.МинутыВсе - 1
        |       ИНАЧЕ ВремяВсе.МинутыВсе
        |   КОНЕЦ КАК МинутыВсе,
        |   ВремяВсе.СекундыВсе
        |ПОМЕСТИТЬ ВремяКор
        |ИЗ
        |   ВремяВсе КАК ВремяВсе
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |   ВремяКор.ДниВсе КАК Дни,
        |   ВремяКор.ЧасыВсе - ВремяКор.ДниВсе * 24 КАК Часы,
        |   ВремяКор.МинутыВсе - ВремяКор.ЧасыВсе * 60 КАК Минуты,
        |   ВремяКор.СекундыВсе - ВремяКор.МинутыВсе * 60 КАК Секунды
        |ИЗ
        |   ВремяКор КАК ВремяКор"
;

   
Запрос.УстановитьПараметр("ДатаН",Объект.ДатаН);
   
Запрос.УстановитьПараметр("ДатаК",Объект.ДатаК);

   
Результат = Запрос.Выполнить();
   
ВыборкаДетальныеЗаписи = Результат.Выбрать();

    Если
ВыборкаДетальныеЗаписи.Следующий() тогда
       
Сообщить(""+ВыборкаДетальныеЗаписи.Дни+" "+ВыборкаДетальныеЗаписи.Часы+" "+ВыборкаДетальныеЗаписи.Минуты+" "+ВыборкаДетальныеЗаписи.Секунды+" ");
    КонецЕсли;;

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    160818    890    399    

871

Запросы Программист Бесплатно (free)

Увидел cheatsheet по SQL и захотелось нарисовать подобное, но про запросы.

18.10.2024    10196    sergey279    18    

64

Запросы Программист Платформа 1С v8.3 Запросы Конфигурации 1cv8 Бесплатно (free)

Столкнулся с интересной ситуацией, которую хотел бы разобрать, ввиду её неочевидности. Речь пойдёт про использование функции запроса АВТОНОМЕРЗАПИСИ() и проблемы, которые могут возникнуть.

11.10.2024    5391    XilDen    36    

81

Запросы Программист Запросы Бесплатно (free)

Отлаживая взаимодействие с базой данных, мы регулярно сталкиваемся с зависающими или подозрительно долго выполняющимися обращениями, негативно влияющими на производительность. О том, как в PostgreSQL выявить подозрительные запросы, основываясь на доступной о них информации, расскажем в статье.

16.08.2024    8093    user1840182    5    

28

Математика и алгоритмы Запросы Программист Платформа 1С v8.3 Запросы Бесплатно (free)

Рассмотрим быстрый алгоритм поиска дублей с использованием hash функции по набору полей шапки и табличных частей.

08.07.2024    2462    ivanov660    9    

22

Запросы СКД Программист Стажер Система компоновки данных Россия Бесплатно (free)

Часто при разработке отчетов в СКД возникает ситуация, когда не совсем понятно, почему отчет выводит не те данные, которые нужны, либо не выводит вовсе. Возникает потребность увидеть конечный запрос, который формирует СКД. Как это сделать, рассмотрим в этой статье.

15.05.2024    8964    implecs_team    6    

47

Запросы Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Часто поступают задачи по произвольному распределению общих сумм. После распределения иногда пропадают копейки. Суть решения добавить АвтоНомерЗаписи() в ВТ распределения, и далее используя функции МАКСИМУМ или МИНИМУМ можем положить разницу копеек в первую или последнюю строку знаменателя распределения.

11.04.2024    3437    andrey_sag    10    

36
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ediks 337 06.12.11 11:21 Сейчас в теме
А не покупайте "разукрашку" - возьмите с диска ИТС аналогичную. :D
2. Trakt0risT 111 06.12.11 11:29 Сейчас в теме
Понял... щас поищу, отредактирую!
3. fishca 1259 06.12.11 12:06 Сейчас в теме
да и скриншот запроса из конфигуратора еще никто не отменял :)
4. Trakt0risT 111 06.12.11 13:10 Сейчас в теме
Получилось) А скрином запрос большой )))
Ну вот так нормально должно быть.
8. fishca 1259 06.12.11 16:12 Сейчас в теме
(4) рука потянулась к минусу, быстрее исправляй запрос чтобы выглядел по человечески
user717534; +1 Ответить
5. i132 123 06.12.11 13:34 Сейчас в теме
можно сделать проще:

ВЫБРАТЬ
РАЗНОСТЬДАТ(&ДатаН, &ДатаК, СЕКУНДА) КАК СекундыВсе,
РАЗНОСТЬДАТ(&ДатаН, &ДатаК, МИНУТА) КАК МинутыВсе,
РАЗНОСТЬДАТ(&ДатаН, &ДатаК, ЧАС) КАК ЧасыВсе,
РАЗНОСТЬДАТ(&ДатаН, &ДатаК, ДЕНЬ) КАК ДниВсе
ПОМЕСТИТЬ ВремяВсе
;
////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
ВремяВсе.ДниВсе как Дни,
ВремяВсе.ЧасыВсе-ВремяВсе.ДниВсе*24 как Часы,
ВремяВсе.МинутыВсе-ВремяВсе.ЧасыВсе*60 как Минуты,
ВремяВсе.СекундыВсе-ВремяВсе.МинутыВсе*60 как Секунды
ИЗ
ВремяВсе КАК ВремяВсе
6. Trakt0risT 111 06.12.11 14:05 Сейчас в теме
(5) i132, Выполнил Ваш код, но ничего не вышло объясню почему наглядно!!! (я пробовал очень много вариантов!)
Прикрепленные файлы:
7. i132 123 06.12.11 16:03 Сейчас в теме
(6) ой извините не проверил переход 23:59:59 - 00:00:01 вот исправленный запрос:

ВЫБРАТЬ
РАЗНОСТЬДАТ(&ДатаН, &ДатаК, СЕКУНДА) КАК СекундыВсе,
РАЗНОСТЬДАТ(&ДатаН, &ДатаК, МИНУТА) КАК МинутыВсе,
РАЗНОСТЬДАТ(&ДатаН, &ДатаК, ЧАС) КАК ЧасыВсе,
РАЗНОСТЬДАТ(&ДатаН, &ДатаК, ДЕНЬ) КАК ДниВсе
ПОМЕСТИТЬ ВремяВсе
;
////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
Выбор Когда ДобавитьКДате(&ДатаН,День,ВремяВсе.ДниВсе)>&ДатаК Тогда ДниВсе-1
Иначе ВремяВсе.ДниВсе Конец Как ДниВсе,
Выбор Когда ДобавитьКДате(&ДатаН,Час,ВремяВсе.ЧасыВсе)>&ДатаК Тогда ЧасыВсе-1
Иначе ВремяВсе.ЧасыВсе Конец Как ЧасыВсе,
Выбор Когда ДобавитьКДате(&ДатаН,МИНУТА,ВремяВсе.МинутыВсе)>&ДатаК Тогда МинутыВсе-1
Иначе ВремяВсе.МинутыВсе Конец Как МинутыВсе,
ВремяВсе.СекундыВсе
ПОМЕСТИТЬ ВремяКор
ИЗ
ВремяВсе
;
////////////////////////////////////////////////////////////­////////////////////
Выбрать
ВремяКор.ДниВсе как Дни,
ВремяКор.ЧасыВсе-ВремяКор.ДниВсе*24 как Часы,
ВремяКор.МинутыВсе-ВремяКор.ЧасыВсе*60 как Минуты,
ВремяКор.СекундыВсе-ВремяКор.МинутыВсе*60 как Секунды
ИЗ
ВремяКор

РS маленькая хитрость: если полсе слов Запрос.Текст=встать на начало следущей строки - конструктор поместит запрос с этой позициии -без большого отступа.
ValeraEm; Trakt0risT; V_V_V; +3 Ответить
9. V_V_V 06.12.11 16:27 Сейчас в теме
(7) Разницу дат победил легко. А теперь прекращаем заниматься фигней и оптимизируем запросы в УТП... :)
10. Trakt0risT 111 06.12.11 17:47 Сейчас в теме
(7) i132, Это реально круто! Молодец.

Я конечно завтра проверю! ))
11. Trakt0risT 111 07.12.11 07:19 Сейчас в теме
(7) i132, Запрос супер, проверил все работает!

Обработку исправил! публикацию тоже!
12. Trakt0risT 111 07.12.11 09:26 Сейчас в теме
Одно обидно я так и не смог применить Код i132.
Потому что запрос динамического списка не поддерживает вложенные таблицы... и мне пришлось вернуться к моему первому варианту ( обидно.
13. i132 123 07.12.11 11:37 Сейчас в теме
12. опять поймали на ощибке -пришлось проверить как работает динамический список - вложенные таблицы он как раз поддерживает (проверил на фаловом варианте) -то что не поддерживает пакетные запросы не обратил внимание.
Сразу была мысль что можно было делать вложеннымит запросами - но тогда получается не так красиво.

Такой запрос работает в динамическом списке (проверил):
ВЫБРАТЬ
ВремяКор.МинутыВсе КАК Минуты,
ВремяКор.СекундыВсе - ВремяКор.МинутыВсе * 60 КАК Секунды
ИЗ (ВЫБРАТЬ
ВЫБОР
КОГДА ДОБАВИТЬКДАТЕ(&ДатаН, МИНУТА, ВремяВсе.МинутыВсе) > &ДатаК
ТОГДА ВремяВсе.МинутыВсе - 1
ИНАЧЕ ВремяВсе.МинутыВсе
КОНЕЦ КАК МинутыВсе,
ВремяВсе.СекундыВсе КАК СекундыВсе
ИЗ (ВЫБРАТЬ
РАЗНОСТЬДАТ(&ДатаН, &ДатаК, СЕКУНДА) КАК СекундыВсе,
РАЗНОСТЬДАТ(&ДатаН, &ДатаК, МИНУТА) КАК МинутыВсе
) КАК ВремяВсе
) КАК ВремяКор
Trakt0risT; +1 Ответить
14. Trakt0risT 111 07.12.11 11:42 Сейчас в теме
(13) i132, М-да теперь точно не поспоришь! ))) Работает...Супер ) Спасибо большое ... всё грамотно.

PS: Перепутал пакетный с вложенными ;)
15. AlexO 135 08.12.11 01:15 Сейчас в теме
Автор, так а чем РАЗНОСТЬДАТ не устроила? получил и пересчитал ))
Получается, обработка не к документу - а вручную даты вставлять?
16. Trakt0risT 111 08.12.11 06:10 Сейчас в теме
(15) AlexO, Ту немного сложнее РАЗНОСТЬДАТ выдает данные в ВСЕГОСекундах, ВсегоМинут и т.д. Тоесть есть секунд может быть очень много, а не 60 как должно быть. Попробуй ).
Это обработка для демонстрации кода, тоесть теперь кидаешь в неё любой документ и вместо ДатаН и ДатаК подставляешь любые даты из документа.
Делалось для динамического списка 8.2
17. Trakt0risT 111 08.12.11 14:59 Сейчас в теме
Вопрос в продолжение извращения:
Как в запросе объединить колонки в одну???
Ну тоесть: Есть колонка Дни 6 есть часы 20 есть минуты 13, как сделать одну колонку "6 дн. 20 ч. 13 м."

Так и не смог победить!

НУ или резонный вопрос можно ли объединить в списке (динамическом) Несколько колонок в одну!
19. i132 123 08.12.11 17:29 Сейчас в теме
(17) не знаю - не получается... :-/
зато запрос можно написать проще ;-)

ВЫБРАТЬ
ДЕНЬГода(СмещеннаяДата)-1+(Год(СмещеннаяДата)-1)*365 как Дни,
Час(СмещеннаяДата) как Часы,
Минута(СмещеннаяДата) как Минуты,
Секунда(СмещеннаяДата) как Секунды
Из (Выбрать
ДобавитьКДате(ДАТАВРЕМЯ(1,1,1),СЕКУНДА,РАЗНОСТЬДАТ(&ДатаН, &ДатаК, СЕКУНДА)) Как СмещеннаяДата
) как Подзапрос

Если надо измените запрос на случай больше 4х лет, с учетом висосоксных лет.
Tpakmop; Trakt0risT; +2 Ответить
20. AlexO 135 08.12.11 23:02 Сейчас в теме
(19) i132,
ага, т.е. следующий високосный год не учтен? ;)
18. v.l. 435 08.12.11 16:50 Сейчас в теме
Боян.

У меня валялась чья-то обработка, с елочкой на форме и показывающая время до нового года..
Сделана одним простым запросом, без временных таблиц.
21. detec 136 12.12.11 13:53 Сейчас в теме
Было бы замечательно, если в запросе отображалась бы ещё разница в годах, месяцах и днях.
22. shomo 14.12.11 14:08 Сейчас в теме
Да с высокосными годами какая-то проблема.... хотя все правильно и система должна была самостоятельно это отработать...
23. i132 123 14.12.11 17:49 Сейчас в теме
(22) в чем проблема с високосными годами? - в запросе (19) надо учитывать что в 0004 году 366 дней.

(17) (число=>Строка) можно извращаться как http://kb.mista.ru/article.php?id=666.
разницу времени можно пердставить как "1:01:01" -Вывести колонку запроса(19) СмещеннаяДата с форматом время("ДЛФ=T")
еще вариант время 2ч 13минут преобразовать в число 213.00 (ч*100+м*1+с*0.01) и Вывести с форматом (ЧДЦ=2; ЧРД=м; ЧРГ=ч; ЧГ=2) => получится 2ч13м00
24. i132 123 20.12.11 10:25 Сейчас в теме
Еще варант преобразования в запросе числа в строку: http://forum.mista.ru/topic.php?id=388253#23

ЧислоСтрокой = "00";
Для N = 0 По 99 Цикл
ЧислоСтрокой = ЧислоСтрокой + Формат(N,"ЧЦ=2; ЧВН=");
КонецЦикла;

|""20"" + ПОДСТРОКА(&ЧислоСтрокой, (ГОД(&ТекДата) - 2000) * 2 + 1, 2)
|+ ""/"" + ПОДСТРОКА(&ЧислоСтрокой, МЕСЯЦ(&ТекДата) * 2 + 1, 2)
| + ""/"" + ПОДСТРОКА(&ЧислоСтрокой, ДЕНЬ(&ТекДата) * 2 + 1, 2) КАК ДатаСтрокой,
Trakt0risT; +1 Ответить
25. Trakt0risT 111 20.12.11 11:17 Сейчас в теме
Полезный код возьму на заметку. ))
Оставьте свое сообщение