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

07.12.11

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

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

Скачать файлы

Наименование Файл Версия Размер
РазностьДатВЗапросе.epf
.epf 6,45Kb
54
.epf 6,45Kb 54 Скачать

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

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

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

 

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

   

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

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

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

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

См. также

SALE! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

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

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

13000 10400 руб.

02.09.2020    121544    670    389    

709

Для чего используют конструкцию запроса "ГДЕ ЛОЖЬ" в СКД на примере конфигурации 1С:ERP

Запросы СКД Платформа 1С v8.3 Запросы Система компоновки данных 1С:ERP Управление предприятием 2 Бесплатно (free)

В типовых конфигурациях разработчики компании 1С иногда используют в отчетах, построенных на СКД, такую конструкцию, как "ГДЕ ЛОЖЬ". Такая конструкция говорит о том, что данные в запросе не будут получены совсем. Для чего же нужен тогда запрос?

13.02.2024    5736    KawaNoNeko    23    

23

Набор-объект для СКД по тексту или запросу

Запросы СКД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    1996    2    Yashazz    0    

29

Запрос 1С copilot

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

Пишем на человеческом языке, что нам надо, и получаем текст запроса на языке 1С. Используются большие языковые модели (LLM GPT) от OpenAI или Яндекс на выбор.

5 стартмани

15.01.2024    6274    30    mkalimulin    25    

49

PrintWizard: поддержка представлений ЗУП в конструкторе

Инструментарий разработчика Запросы Платформа 1С v8.3 Бесплатно (free)

Одной из интересных задач, стоящих в процессе разработки, была поддержка механизма представлений в ЗУП. Но не просто возможность исполнения запросов с ними. Основная проблема была в том, чтобы с ними было удобно работать, а именно: создавать, модифицировать и отлаживать. Кратко о том, что в итоге получилось...

14.12.2023    1739    vandalsvq    7    

29

Объектная модель запроса "Схема запроса" 2

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

Далеко уже не новый тип данных "Схема запроса". Статья о том, как использовать его "попроще". Примеры создания текста запроса с нуля и изменение имеющегося запроса.

06.12.2023    5380    user1923546    26    

43

Начните уже использовать хранилище запросов

HighLoad оптимизация Запросы

Очень немногие из тех, кто занимается поддержкой MS SQL, работают с хранилищем запросов. А ведь хранилище запросов – это очень удобный, мощный и, главное, бесплатный инструмент, позволяющий быстро найти и локализовать проблему производительности и потребления ресурсов запросами. В статье расскажем о том, как использовать хранилище запросов в MS SQL и какие плюсы и минусы у него есть.

11.10.2023    16153    skovpin_sa    14    

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

ВЫБРАТЬ
РАЗНОСТЬДАТ(&ДатаН, &ДатаК, СЕКУНДА) КАК СекундыВсе,
РАЗНОСТЬДАТ(&ДатаН, &ДатаК, МИНУТА) КАК МинутыВсе,
РАЗНОСТЬДАТ(&ДатаН, &ДатаК, ЧАС) КАК ЧасыВсе,
РАЗНОСТЬДАТ(&ДатаН, &ДатаК, ДЕНЬ) КАК ДниВсе
ПОМЕСТИТЬ ВремяВсе
;
////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
ВремяВсе.ДниВсе как Дни,
ВремяВсе.ЧасыВсе-ВремяВсе.ДниВсе*24 как Часы,
ВремяВсе.МинутыВсе-ВремяВсе.ЧасыВсе*60 как Минуты,
ВремяВсе.СекундыВсе-ВремяВсе.МинутыВсе*60 как Секунды
ИЗ
ВремяВсе КАК ВремяВсе
6. Trakt0risT 111 06.12.11 14:05 Сейчас в теме
(5) i132, Выполнил Ваш код, но ничего не вышло объясню почему наглядно!!! (я пробовал очень много вариантов!)
Прикрепленные файлы:
7. i132 122 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 122 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 122 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. 434 08.12.11 16:50 Сейчас в теме
Боян.

У меня валялась чья-то обработка, с елочкой на форме и показывающая время до нового года..
Сделана одним простым запросом, без временных таблиц.
21. detec 136 12.12.11 13:53 Сейчас в теме
Было бы замечательно, если в запросе отображалась бы ещё разница в годах, месяцах и днях.
22. shomo 14.12.11 14:08 Сейчас в теме
Да с высокосными годами какая-то проблема.... хотя все правильно и система должна была самостоятельно это отработать...
23. i132 122 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 122 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 Сейчас в теме
Полезный код возьму на заметку. ))
Оставьте свое сообщение