Как вводить необходимые дни недели и периоды при автоматизации тестирования с помощью инструмента Vanessa Automation

от автора

Всем привет! Хочу поделиться своим решением автоматизации тестирования на платформе 1С, а именно выбор необходимых дней недели или определенных периодов.

Правильный выбор даты создания документа необходим для автоматизации проверок любого документа в 1С. Обычно в него можно записывать либо статичное, либо вычисляемое значение. В зависимости от поставленной задачи. В Vanessa Automation в блоке Переменные это выглядит следующим образом:

Пример по созданию переменных

Пример по созданию переменных

Как видно, из примера выше для вычисляемой даты используется функция ТекущаяДата(). Которая возвращает текущая дату и время. А с помощью функции Формат() — указываем нужный нас формат даты.

Это очень удобно, т.к. в документе всегда указывается текущая дата. Также, используя функцию ТекущаяДата() можно вычислить предыдущий день отняв значение 86400, и будущую прибавив 86400. Само значение 86400 — это 60 секунд * 60 минут * 24 часа, т.е. количество секунд в одном дне.

Но, если мы хотим автоматизировать проверку документа «Работа в выходные и праздничные дни» — нужно указывать именно выходные дни. Как это можно сделать?

Пример документа Работа в выходные и праздничные дни

Пример документа Работа в выходные и праздничные дни

Проблема

Как известно месяц может начинаться с любого дня недели. Если, заглянуть в производственный календарь — то в этом можно легко убедится.

Производственный календарь

Производственный календарь

Когда пользователь создает документ «Работа в выходные и праздничные дни» он легко может понять какое число в календаре является выходным или праздничным днем — оно окрашено в красный цвет.

Но, если мы хотим сделать автоматизированный сценарий — то нужно вычислить число выходного дня.

Решение

Как я указал выше — мы можем использовать функцию ТекущаяДата(), которая возвращает текущую дату и время текущего дня. Далее к ней добавляем функцию ДеньНедели(), которая возвращает номер дня недели. Всего получается 7 возможных значений.

  • 1 — Понедельник

  • 2 — Вторник

  • 3 — Среда

  • 4 — Четверг

  • 5 — Пятница

  • 6 — Суббота

  • 7 — Воскресение

Получается, вот такая строка:

ТекущийДеньНедели = ДеньНедели(ТекущаяДата());

Допустим, мы хотим, чтобы при создании документа «Работа в выходные и праздничные дни» всегда указывалось воскресение. Получается, что если текущий день понедельник — нам надо добавить 6 дней и у нас получится дата дня воскресения. А если вторник, то надо добавить 5 дней. К воскресению будем добавлять 7 дней, чтобы получить воскресение следующей недели. Для этого использовал условный оператор Если.

Если ТекущийДеньНедели = 1 Тогда   ДатаВоскресения = Формат(ТекущаяДата() + 6*86400,"ДФ=дд.ММ.гггг;"); ИначеЕсли ТекущийДеньНедели = 2 Тогда     ДатаВоскресения = Формат(ТекущаяДата() + 5*86400,"ДФ=дд.ММ.гггг;"); ИначеЕсли ТекущийДеньНедели = 3 Тогда     ДатаВоскресения = Формат(ТекущаяДата() + 4*86400,"ДФ=дд.ММ.гггг;"); ИначеЕсли ТекущийДеньНедели = 4 Тогда     ДатаВоскресения = Формат(ТекущаяДата() + 3*86400,"ДФ=дд.ММ.гггг;"); ИначеЕсли ТекущийДеньНедели = 5 Тогда     ДатаВоскресения = Формат(ТекущаяДата() + 2*86400,"ДФ=дд.ММ.гггг;"); ИначеЕсли ТекущийДеньНедели = 6 Тогда     ДатаВоскресения = Формат(ТекущаяДата() + 1*86400,"ДФ=дд.ММ.гггг;"); ИначеЕсли ТекущийДеньНедели = 7 Тогда     ДатаВоскресения = Формат(ТекущаяДата() + 7*86400,"ДФ=дд.ММ.гггг;");         КонецЕсли;  

И затем записываем получившуюся дату в Контекст.

Контекст.Вставить("ДатаВыходногоДня", ДатаВоскресения);

В итоге получившийся кусок сценария будет выглядеть вот так (вычисляется на сервере):

Пример вычисления даты дня воскресения

Пример вычисления даты дня воскресения

Рассмотрим еще вариант в временным периодом. Используем для этого документ Отпуск. В нем нужно указать дату начала отпуска и дату окончания.

Пример документа Отпуск

Пример документа Отпуск

Думаю, что многие сотрудники уходят в отпуск в понедельник, а заканчивают в воскресение. Также нужно учесть, что документ отпуск заводится в системе заранее. Примерно за 2 или 3 недели. Поэтому поступим следующим образом:

  • Для даты начала — если, текущий день понедельник то прибавим 14 дней, а если вторник, то 13 и т.д.

  • Для даты окончания — нужно вычислить дату воскресения, относительно даты начала отпуска. Получается, что к понедельнику надо добавить 6 дней и получится дата воскресения. Если отпуск на 2 недели, то добавляем 13 дней.

Получается, следующий код оператора Если:

Если ТекущийДеньНедели = 1 Тогда   ДатаНачала = Формат(ТекущаяДата() + 14*86400,"ДФ=дд.ММ.гггг;");   ДатаОкончания = Формат(ТекущаяДата() + 14*86400 + 6*86400,"ДФ=дд.ММ.гггг;"); ИначеЕсли ТекущийДеньНедели = 2 Тогда     ДатаНачала = Формат(ТекущаяДата() + 13*86400,"ДФ=дд.ММ.гггг;");   ДатаОкончания = Формат(ТекущаяДата() + 13*86400 + 6*86400,"ДФ=дд.ММ.гггг;"); ИначеЕсли ТекущийДеньНедели = 3 Тогда     ДатаНачала = Формат(ТекущаяДата() + 12*86400,"ДФ=дд.ММ.гггг;");   ДатаОкончания = Формат(ТекущаяДата() + 12*86400 + 6*86400,"ДФ=дд.ММ.гггг;"); ИначеЕсли ТекущийДеньНедели = 4 Тогда     ДатаНачала = Формат(ТекущаяДата() + 11*86400,"ДФ=дд.ММ.гггг;");   ДатаОкончания = Формат(ТекущаяДата() + 11*86400 + 6*86400,"ДФ=дд.ММ.гггг;"); ИначеЕсли ТекущийДеньНедели = 5 Тогда     ДатаНачала = Формат(ТекущаяДата() + 10*86400,"ДФ=дд.ММ.гггг;");   ДатаОкончания = Формат(ТекущаяДата() + 10*86400 + 6*86400,"ДФ=дд.ММ.гггг;"); ИначеЕсли ТекущийДеньНедели = 6 Тогда     ДатаНачала = Формат(ТекущаяДата() + 9*86400,"ДФ=дд.ММ.гггг;");   ДатаОкончания = Формат(ТекущаяДата() + 9*86400 + 6*86400,"ДФ=дд.ММ.гггг;"); ИначеЕсли ТекущийДеньНедели = 7 Тогда     ДатаНачала = Формат(ТекущаяДата() + 8*86400,"ДФ=дд.ММ.гггг;");     ДатаОкончания = Формат(ТекущаяДата() + 8*86400 + 6*86400,"ДФ=дд.ММ.гггг;");       КонецЕсли; 

И дальше в документ записываем нужные даты — думаю, это не сложно. Единственное, лучше к вводу даты добавить цикл. Он необходим, т.к. иногда дата может не ввестись в поле.

Ввод даты в поле

Ввод даты в поле

Итог

Мы автоматизировали сценарий создания документа «Работа в выходные и праздничные дни» и «Отпуск». Теперь все зависимости от текущей даты у нас в документах всегда будет указываться необходимый день недели и период отпуска. Думаю, такой алгоритм можно использовать при решении других задач связанными с датами и днями недели.

Если есть интересные вопросы — то пишите.


ссылка на оригинал статьи https://habr.com/ru/articles/848324/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *