- Главная [object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
- Начало работы
- Работа с типами
- Глобальный контекст и изоляция
- Работа с приложениями
- Работа с внешними сервисами
- Скрипты в виджетах
- Веб компоненты
- Права доступа
- Начало работы с процессами
- Начало работы с подписями
- Начало работы с предпросмотром файлов
- Начало работы с организационной структурой
- Начало работы с пользователями и группами
- Начало работы с типом данных Таблица
- Как решить вашу задачу
- Как сделать пользовательское отображение элементов приложений
- Как сделать динамическое отображение полей/виджетов со сложным условием
- Как регистрировать документ
- Как рассчитывать интервал между датами
- Как создать замещение пользователя
- Как использовать пагинацию и сортировку при поиске элементов приложения
- API
- Типы объектов
- Типы данных
- Глобальные константы
- Работа с приложениями
- Веб-запросы
- Права доступа
- Документооборот
- Линии
- Виджет «Код»
- Подписи
- Интеграция с IP-телефонией
- Интеграция с сервисами рассылок
В этой статье
Как рассчитывать интервал между датами
С помощью пользовательских сценариев можно рассчитать количество дней между двумя датами.
Расчет длительности командировки
В качестве примера рассмотрим кейс с созданием командировки: с помощью сценария рассчитаем длительность командировки в днях.
Добавим в контекст приложения переменную типа Дата (назовем её «Дата окончания командировки») и переменную типа Число («Длительность командировки в днях»).
Откроем форму создания в дизайнере интерфейсов и добавим контекстные переменные «Дата окончания командировки» и «Длительность командировки в днях» на форму.
Последнюю сделаем доступной только для чтения. Будем считать, что командировка начинается в день создания элемента приложения. Текущую дату на день создания будем объявлять в сценарии.
Перейдем в настройки переменной «Дата окончания командировки», нажав на шестеренку. На вкладке «События» создадим сценарий на изменение значения. Откроем созданную функцию, перейдем на вкладку «Сценарии» и напишем сценарий.
Сценарий
async function caclDays(): Promise<void> { /* Обращаемся к переменной, на изменение которой завязан сценарий, и ставим условие, что код будет выполняться, только если она определена */ if (Context.data.trip_end_date) { // Создаем новую переменную, в которую передаем текущую дату с помощью конструкции: let currentDate = new TDate(); /* В переменную из контекста записываем количество дней, вычитая из установленной даты окончания командировки текущую дату. С помощью метода asDateTime представим обе переменные в формате Дата/Время (тип Дата необходимо привести к формату Дата/Время, чтобы иметь доступ к методу расчета количества дней). Затем, используя метод unix, представим обе даты в виде количества секунд, прошедших от 00:00:00 01.01.1970 Вычтем одно значение из другого; полученный результат переведем из секунд в дни, поделив его на произведение 60x60x24 (60 секунд, 60 минут и 24 часа) */ Context.data.trip_duration_in_days = (Context.data.trip_end_date.asDatetime(new TTime(0, 0, 0, 0)).unix() - currentDate.asDatetime(new TTime(0, 0, 0, 0)).unix()) / (24 * 60 * 60); } }
Результат
Как только пользователь вводит дату окончания командировки, количество дней успешно записывается на форму создания элемента.
Расчет количества дней на выполнение заказа
Рассмотрим ещё один кейс. Необходимо посчитать количество рабочих дней, которые будут затрачены на выполнение заказа (в соответствии с системным производственным календарем). На форме создания есть поля типа Дата «Дата начала производства» и «Планируемое время отгрузки». Переходим в настройки поля «Планируемое время отгрузки» и создаем сценарий на изменение значения на вкладке «Событие».
Сценарий
/* Передаем в переменную количество рабочих часов между двумя датами с помощью метода getWorkingTime, который ссылается на рабочий календарь. Чтобы метод сработал корректно, оба аргумента должны быть представлены в формате Дата/Время, поэтому переменную Context.data.start_date необходимо преобразовать из формата Дата в формат Дата/Время, указав время 00:00 */ const workingTime = await System.productionSchedule.getWorkingTime(Context.data.start_date.asDatetime(new TTime(0, 0, 0, 0)), Context.data.end_date); // Записываем результат в виде рабочих дней, разделив количество часов на 8 (так как в рабочем дне восемь часов) и округлив значение Context.data.production_days = Math.floor(workingTime.hours / 8);
Результат
При вводе даты отгрузки на форме создания отображается количество дней, за которое заказ будет выполнен, с учетом рабочего календаря.