Как в запросе 1С преобразовать секунды в часы и минуты

15.07.16

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

Скорее всего, каждый профессиональный разработчик 1С сталкивался с ситуацией, когда заказчик хочет необычное, нестандартное и удобное решение задачи. Ответы на многие вопросы можно найти в Интернете. Но не на все. И иногда для решения задачи приходится мыслить не совсем стандартно. Ну и нахождение решений для подобных задач повышает статус разработчика в глазах заказчика, повышает самооценку самого разработчика, и, самое приятное, позволяет заработать деньги. В этой статье я поделюсь опытом решения одной такой задачи.

Есть у меня один клиент. Владеет автосервисом с кучей сервисных постов. Для тех, кто не в курсе, сервисный пост - это оборудованное место, где мастер обслуживает автомобиль. Так вот, захотел однажды этот клиент узнать, сколько времени занимает обслуживание машин на каждом сервисном посту и в целом. Казалось бы, что может быть проще. Есть документ, который фиксирует номер сервисного поста, время поступления авто на сервис и время окончания работ. Бери, пиши несложный запрос, вычисляй разность дат заезда и выезда в секундах, дели на 3600 и получай результат в часах. А не тут то и было. Оказалось, что есть очень много мелких работ, на которые уходит от 2 до 15 минут, и клиенту очень неудобно видеть такие цифры, как, например, 0.1 часа, 0.25 часа и т.п. Ему нужно время в формате ЧЧ:ММ, без дней, чистые часы и минуты. "Хм...", - сказал я и полез почитать умные мысли других людей по этому поводу.

Решение усложнял тот момент, что отчет был написан не на СКД, а использовал известный многим программистам механизм отчета "Список / кросс-таблица", который работает на построителе отчетов. Итак, поиск результатов не принес. Вариантов предлагалось множество, но конкретного рабочего ответа я не получил. Поэтому "ноу-хау" пришлось придумывать самому.

Поскольку мой дорогой клиент хотел видеть время в формате Часы:Минуты, то какое-либо использование даты не подходило банально потому, что в дате не может быть больше 24 часов. Выносить всю кухню из запроса для внешних расчетов тоже очень не хотелось. И я понял, что поможет мне только число с плавающей запятой. Если примем факт, что до запятой мы будем хранить часы, а после запятой будут минуты, то задача очень даже может иметь решение.

Итак, мои "6 шагов к успеху" стали примерно такими:

  1. Представляем результат в виде числа с плавающей запятой.
  2. До запятой храним часы, после - минуты.
  3. Вычисляем часы. 
  4. Вычисляем минуты.
  5. Складываем часы и минуты в единый результат.
  6. При выводе результата используем формат числа, а именно настройку "Разделитель дробной части". 

Наверное понятно, что самые большие трудности были на 3 и 4 шаге. Функции языка запросов для работы с числами и их преобразования достаточно скудный в 1С. Пришлось много анализировать. Конечно, проще всего было вычислить часы:

ВЫБОР
    КОГДА (ВЫРАЗИТЬ(СУММА(ДлительностьРабот) / 3600 КАК ЧИСЛО(15, 0))) * 3600 <= СУММА(ДлительностьРабот)
        ТОГДА ВЫРАЗИТЬ(СУММА(ДлительностьРабот) / 3600 КАК ЧИСЛО(15, 0))
    ИНАЧЕ (ВЫРАЗИТЬ(СУММА(ДлительностьРабот) / 3600 КАК ЧИСЛО(15, 0))) - 1
КОНЕЦ

Как мы все знаем, функция запроса ВЫРАЗИТЬ() округляет число, чем мы и воспользуемся. Получаем целое число часов. Оно может быть совпасть с реальным, если системе нечего округлять, или быть больше на единицу, когда система выполнила округление. Если произошло округление, то из полученного числа вычитаем единицу, в противном случае берем неизменный результат функции ВЫРАЗИТЬ().

Логично предположить, что количество минут тоже вычисляется аналогичным способом, только уже используя часть запроса с вычислением часов:

ВЫБОР
    КОГДА (ВЫРАЗИТЬ((СУММА(ДлительностьРабот) - 3600 * ВЫБОР
        КОГДА (ВЫРАЗИТЬ(СУММА(ДлительностьРабот) / 3600 КАК ЧИСЛО(15, 0))) * 3600 <= СУММА(ДлительностьРабот)
            ТОГДА ВЫРАЗИТЬ(СУММА(ДлительностьРабот) / 3600 КАК ЧИСЛО(15, 0))
        ИНАЧЕ (ВЫРАЗИТЬ(СУММА(ДлительностьРабот) / 3600 КАК ЧИСЛО(15, 0))) - 1
    КОНЕЦ) / 60 КАК ЧИСЛО(15, 0))) * 60 <= СУММА(ДлительностьРабот) - 3600 * ВЫБОР
        КОГДА (ВЫРАЗИТЬ(СУММА(ДлительностьРабот) / 3600 КАК ЧИСЛО(15, 0))) * 3600 <= СУММА(ДлительностьРабот)
            ТОГДА ВЫРАЗИТЬ(СУММА(ДлительностьРабот) / 3600 КАК ЧИСЛО(15, 0))
        ИНАЧЕ (ВЫРАЗИТЬ(СУММА(ДлительностьРабот) / 3600 КАК ЧИСЛО(15, 0))) - 1
    КОНЕЦ
        ТОГДА ВЫРАЗИТЬ((СУММА(ДлительностьРабот) - 3600 * ВЫБОР
            КОГДА (ВЫРАЗИТЬ(СУММА(ДлительностьРабот) / 3600 КАК ЧИСЛО(15, 0))) * 3600 <= СУММА(ДлительностьРабот)
                ТОГДА ВЫРАЗИТЬ(СУММА(ДлительностьРабот) / 3600 КАК ЧИСЛО(15, 0))
            ИНАЧЕ (ВЫРАЗИТЬ(СУММА(ДлительностьРабот) / 3600 КАК ЧИСЛО(15, 0))) - 1
        КОНЕЦ) / 60 КАК ЧИСЛО(15, 0))
    ИНАЧЕ (ВЫРАЗИТЬ((СУММА(ДлительностьРабот) - 3600 * ВЫБОР
        КОГДА (ВЫРАЗИТЬ(СУММА(ДлительностьРабот) / 3600 КАК ЧИСЛО(15, 0))) * 3600 <= СУММА(ДлительностьРабот)
            ТОГДА ВЫРАЗИТЬ(СУММА(ДлительностьРабот) / 3600 КАК ЧИСЛО(15, 0))
        ИНАЧЕ (ВЫРАЗИТЬ(СУММА(ДлительностьРабот) / 3600 КАК ЧИСЛО(15, 0))) - 1
    КОНЕЦ) / 60 КАК ЧИСЛО(15, 0))) - 1
КОНЕЦ

Затем полученные два числа нужно привести к одному. Для этого объединяем две части путем сложения, но кроме этого, результат второго запроса нужно поделить на 100, чтобы оно перешло в дробную часть. Этот кусок должен размещаться в части вычисления итогов:

ВЫБОР
    КОГДА (ВЫРАЗИТЬ(СУММА(ДлительностьРабот) / 3600 КАК ЧИСЛО(15, 0))) * 3600 <= СУММА(ДлительностьРабот)
        ТОГДА ВЫРАЗИТЬ(СУММА(ДлительностьРабот) / 3600 КАК ЧИСЛО(15, 0))
    ИНАЧЕ (ВЫРАЗИТЬ(СУММА(ДлительностьРабот) / 3600 КАК ЧИСЛО(15, 0))) - 1
КОНЕЦ + 
ВЫБОР
    КОГДА (ВЫРАЗИТЬ((СУММА(ДлительностьРабот) - 3600 * ВЫБОР
        КОГДА (ВЫРАЗИТЬ(СУММА(ДлительностьРабот) / 3600 КАК ЧИСЛО(15, 0))) * 3600 <= СУММА(ДлительностьРабот)
            ТОГДА ВЫРАЗИТЬ(СУММА(ДлительностьРабот) / 3600 КАК ЧИСЛО(15, 0))
        ИНАЧЕ (ВЫРАЗИТЬ(СУММА(ДлительностьРабот) / 3600 КАК ЧИСЛО(15, 0))) - 1
    КОНЕЦ) / 60 КАК ЧИСЛО(15, 0))) * 60 <= СУММА(ДлительностьРабот) - 3600 * ВЫБОР
        КОГДА (ВЫРАЗИТЬ(СУММА(ДлительностьРабот) / 3600 КАК ЧИСЛО(15, 0))) * 3600 <= СУММА(ДлительностьРабот)
            ТОГДА ВЫРАЗИТЬ(СУММА(ДлительностьРабот) / 3600 КАК ЧИСЛО(15, 0))
        ИНАЧЕ (ВЫРАЗИТЬ(СУММА(ДлительностьРабот) / 3600 КАК ЧИСЛО(15, 0))) - 1
    КОНЕЦ
        ТОГДА ВЫРАЗИТЬ((СУММА(ДлительностьРабот) - 3600 * ВЫБОР
            КОГДА (ВЫРАЗИТЬ(СУММА(ДлительностьРабот) / 3600 КАК ЧИСЛО(15, 0))) * 3600 <= СУММА(ДлительностьРабот)
                ТОГДА ВЫРАЗИТЬ(СУММА(ДлительностьРабот) / 3600 КАК ЧИСЛО(15, 0))
            ИНАЧЕ (ВЫРАЗИТЬ(СУММА(ДлительностьРабот) / 3600 КАК ЧИСЛО(15, 0))) - 1
        КОНЕЦ) / 60 КАК ЧИСЛО(15, 0))
    ИНАЧЕ (ВЫРАЗИТЬ((СУММА(ДлительностьРабот) - 3600 * ВЫБОР
        КОГДА (ВЫРАЗИТЬ(СУММА(ДлительностьРабот) / 3600 КАК ЧИСЛО(15, 0))) * 3600 <= СУММА(ДлительностьРабот)
            ТОГДА ВЫРАЗИТЬ(СУММА(ДлительностьРабот) / 3600 КАК ЧИСЛО(15, 0))
        ИНАЧЕ (ВЫРАЗИТЬ(СУММА(ДлительностьРабот) / 3600 КАК ЧИСЛО(15, 0))) - 1
    КОНЕЦ) / 60 КАК ЧИСЛО(15, 0))) - 1
КОНЕЦ / 100

И наконец, оформляем результат в коде. Где общий отчет - отчет-объект "Список / кросс-таблица".

ОбщийОтчет.ЗаполнитьПоказатели("ДлительностьРабот", "Длительность работ, Часы:Минуты", Истина, "ЧДЦ=2; ЧРД=:");

И в нашем конечном отчете видим такой результат:

Готовый результат

Наверняка, что-то похожее можно реализовать и для СКД. И скорее всего на СКД это будет даже проще. Моя публикация не претендует на Нобелевскую премию. Я думаю, что кому-нибудь она окажется полезной, поэтому публикую. Всем удачи.

P.S. В комментарии был задан вопрос "На последнем скрине в первом посту 1:00 и 0:01, дали в сумме 1:02. Этому отчету можно верить?". Отчету можно верить. В тексте статьи я забыл добавить, что в отчете может быть некоторая визуальная погрешность, но только из-за того, что остаток секунд, отбрасывается.

P.P.S. Более краткое и красивое решение предложил ildarovich, за что ему большой плюс и огромная благодарность:

РАЗНОСТЬДАТ(ДАТАВРЕМЯ(1, 1, 1), ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, &ДлительностьВСекундах), ЧАС) 
    + МИНУТА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, &ДлительностьВСекундах)) / 100

 

запрос время отчет разработка преобразование

См. также

SALE! 20%

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

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

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

13000 10400 руб.

02.09.2020    121600    670    389    

711

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

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

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

13.02.2024    5740    KawaNoNeko    23    

23

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

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

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

1 стартмани

31.01.2024    2000    2    Yashazz    0    

29

Запрос 1С copilot

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

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

5 стартмани

15.01.2024    6279    30    mkalimulin    25    

49

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

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

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

14.12.2023    1740    vandalsvq    7    

29

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

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

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

06.12.2023    5384    user1923546    26    

43

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

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

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

11.10.2023    16166    skovpin_sa    14    

98
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. dj_serega 390 15.07.16 09:23 Сейчас в теме
Хотя бы с оформлением "поигрались". Непонятно же. А вчитываться не хочется ибо не красиво :)
7. azhilichev 213 15.07.16 11:40 Сейчас в теме
(1) dj_serega, спасибо за замечание. Действительно, я не заметил, что из-за табов поехал текст запроса.
2. ardn 622 15.07.16 09:59 Сейчас в теме
На последнем скрине в первом посту 1:00 и 0:01, дали в сумме 1:02.
Этому отчету можно верить?
4. v3rter 15.07.16 10:25 Сейчас в теме
(2) ardn, видимо на входе отчета даты с секундами и в сумме эти секунды дают больше минуты. Интересно было бы посмотреть при ЧДЦ=4
(3) marat_n, а не будет ситуации, когда округление (до минут) суммы не совпадает с суммой округленных?
5. marat_n 112 15.07.16 10:57 Сейчас в теме
(4) v3rter, потестил на разных датах, мой вариант точно не подходит, там специфично разница в часах и минутах считается (не округление).
6. ardn 622 15.07.16 11:31 Сейчас в теме
(4) v3rter,
Как программист я понимаю, откуда взялась лишняя :01
Но для пользователя это непонятно.
8. azhilichev 213 15.07.16 11:46 Сейчас в теме
(2) ardn, (6) ardn, Да, вы правы. Визуально погрешность есть. Но в целом цифры верные. Я сейчас добавил в статью информацию об этом. Соответственно, заказчика я оповестил, что есть такой нюанс. Думаю и те, кто используют код из статьи, последуют тому же примеру.
3. marat_n 112 15.07.16 10:10 Сейчас в теме
А так не пробовал?

РАЗНОСТЬДАТ(Событие.НачалоСобытия, Событие.ОкончаниеСобытия, ЧАС) КАК ДлительностьЧасов,
РАЗНОСТЬДАТ(Событие.НачалоСобытия, Событие.ОкончаниеСобытия, МИНУТА)
 -РАЗНОСТЬДАТ(Событие.НачалоСобытия, Событие.ОкончаниеСобытия, ЧАС)*60  КАК ДлительностьМин
Henistaromin; +1 Ответить
9. sdf1979 194 15.07.16 13:12 Сейчас в теме
Я обычно, если требуется последующий вывод на форму или в отчет, длительность времени выражаю везде в секундах.
Вывод времени осуществляю с помощью форматирования даты:
Для длительности меньше часа:
ДФ='мм'' мин'''

Для длительности меньше суток
ДФ='ЧЧ''ч ''мм''мин'''

Для длительности меньше месяца
ДФ='дд''сут ''ЧЧ''ч ''мм''мин'''

Данный прием хорошо работает, если длительность периода не превышает 31 день.
10. ildarovich 7850 15.07.16 13:57 Сейчас в теме
Все же есть гораздо более простое выражение для решения той же задачи:
РАЗНОСТЬДАТ(ДАТАВРЕМЯ(1, 1, 1), ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, &ДлительностьВСекундах), ЧАС) 
	+ МИНУТА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, &ДлительностьВСекундах)) / 100

Вот запрос для проверки:
ВЫБРАТЬ
	&ДлительностьВСекундах,
	РАЗНОСТЬДАТ(ДАТАВРЕМЯ(1, 1, 1), ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, &ДлительностьВСекундах), ЧАС) 
	+ МИНУТА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, &ДлительностьВСекундах)) / 100 КАК ДробноеЧисло
Хитрость в том, что секунды добавляются к началу времен, чтобы минуты и часы были "целыми".
Посмотрите еще Выразить число как строку и дату как строку в запросе. так как этот прием оттуда.
denmon88; Henistaromin; manlak; akR00b; serg_infostart; h00k; BigClock; Irwin; Yashazz; Dach; ZOMI; kuzyara; METAL; dgolovanov; K_A_O; NeviD; azhilichev; bulpi; +18 Ответить
11. azhilichev 213 15.07.16 14:38 Сейчас в теме
(10) ildarovich, Действительно, это даже лучше того, что я сделал. Спасибо, если не возражаете, добавлю в тело статьи.
17. Makushimo 160 25.07.16 06:34 Сейчас в теме
(10) ildarovich,
Вот тут
МИНУТА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, &ДлительностьВСекундах))


если ДлительностьВСекундах будет 119, тогда результат будет 1 минута.
Чисто технически это верно, но для клиента это 2 минуты.
Ну и если он сложит несколько таких строк на пальцах или в отчете, тогда потери будут несколько минут.
Или я не прав?
18. ildarovich 7850 25.07.16 11:14 Сейчас в теме
(17) Makushimo, правы, но тут все зависит от целей. Если это важно, то можно: 1) выводить время с секундами; 2) получать минуты по принципам округления (в формулу к секундам + 30 добавить); 3) складывать исходные секунды, чтобы не набегала ошибка.
Но наличие часов в результате как бы намекает, что среднее время выполнения работ - это не минуты, поэтому относительная погрешность при отбрасывании не полных минут будет невелика.
12. wolfsoft 2421 20.07.16 07:49 Сейчас в теме
А так не проще?

ДобавитьКДате(ДатаВремя(1, 1, 1), Секунда, РАЗНОСТЬДАТ(<Дата1>, <Дата2>, Секунда))

Плюс формат вывода значения в ячейке "Ч:мм".
14. azhilichev 213 20.07.16 15:46 Сейчас в теме
(12) wolfsoft, не проще. Часов у вас может быть больше 24. А ДобавитьКДате() будет в дни их преобразовывать. Представьте. 10 постов по 12 рабочих часов каждый. Общее время 120 часов. Это в сутки норма времени на все посты. Сами понимаете, что формат даты такого не даст сделать.
19. Sobol007 20 11.05.18 12:24 Сейчас в теме
(12)
ДобавитьКДате(ДатаВремя(1, 1, 1), Секунда, РАЗНОСТЬДАТ(, , Секунда))


Вроде простой и понятный вариант, но показывает время в СКД неверное:

Время начала: 26.04.2018 13:29:57 - Время завершения: 26.04.2018 13:35:51

Разность дат дает: 354 секунды.

СКД показывает результат 00:01:24, хотя если поделить на 60 получится 5,9 минут
20. spacecraft 11.05.18 12:42 Сейчас в теме
(19) это точно не проблема СКД. Все правильно считается.
Прикрепленные файлы:
13. serega_new 20.07.16 09:18 Сейчас в теме
не понял весь дзен этой статьи, ну провел он посту 40 минут, ну 30 минут еще дополнительных работ, ну зафиксировали 70 минут и показали в отчете 1:10, хоть на скд, хоть просто выводом в табл. документ...
15. Yashazz 4709 22.07.16 13:03 Сейчас в теме
Во, наконец-то пришёл Ильдарович и показал, как надо)
16. ka3a4ok 23.07.16 22:59 Сейчас в теме
хм... я бы сделал так:

ВЫБРАТЬ
ВЫРАЗИТЬ(ВЫРАЗИТЬ(&КоличествоСекунд / 60 КАК Число(15,0)) / 60 - 0.5 КАК Число(15, 0)) + (ВЫРАЗИТЬ(&КоличествоСекунд / 60 КАК Число(15,0)) / 60 - ВЫРАЗИТЬ(ВЫРАЗИТЬ(&КоличествоСекунд / 60 КАК Число(15,0)) / 60 - 0.5 КАК Число(15, 0))) / 100 * 60 КАК ЧасыМинуты


аналогичный код:

КолМин = Окр(КоличествоСекунд / 60);
ЧасыМинуты = Цел(КолМин / 60) + (КолМин / 60 - Цел(КолМин / 60)) / 100 * 60;

21. Sergey_Borisovi4 95 06.08.19 20:00 Сейчас в теме
Если отчет на СКД, то еще проще в ресурсах указать в выражении:
Формат(Сумма(Часов)-ВЫБОР КОГДА Сумма(Часов) > 0 ТОГДА 0.5 ИНАЧЕ 0 КОНЕЦ,"ЧН=0; ЧДЦ=0")+":"+Формат((Сумма(Часов)-выразить(Сумма(Часов)-ВЫБОР КОГДА Сумма(Часов) > 0 ТОГДА 0.5 ИНАЧЕ 0 КОНЕЦ,"Число(10,0)")) * 60,"ЧЦ=2; ЧН=00; ЧВН=")
megaZ; DMak; +2 Ответить
22. andenbo_kdv 11.12.19 09:05 Сейчас в теме
В СКД в ресурсах:
(Сумма(Минуты)-(Сумма(Минуты)%60))/60+(Сумма(Минуты)%60)/100
Переменная "Минуты" содержит собственно минуты. Например, 450 минут вернут 7,3.
dimasstiy; evgeniy83; Nicholas; +3 Ответить
23. Nicholas 887 07.03.22 18:47 Сейчас в теме
(22)
(Сумма(Минуты)-(Сумма(Минуты)%60))/60+(Сумма(Минуты)%60)/100

Отлично работает если еще на закладке "наборы данных" для поля, содержащего минуты добавить в оформление формат: "ЧДЦ=2; ЧРД=:".
Прикрепленные файлы:
dimasstiy; evgeniy83; +2 Ответить
Оставьте свое сообщение