Грызлов Никита | Ведущий программист | Первый БИТ

«Тестирование интеграций между системами»

Онлайн-магазин и УТ, ЗУП и внутренний портал, почта, СКУД. Зоопарк систем и протоколов обмена. Как начать разрабатывать интеграцию без реальной "второй стороны"? Как быть уверенным, что обмен не сломается при следующем обновлении? * Распространенные технологии интеграции - как, с чем и чем интегрируемся * Проблемы, возникающие при разработке и тестировании интеграции * Три уровня тестирования интеграции: * модульное тестирование обработчиков интеграции, применение моков * использование эмуляторов при вызове интеграционных механизмов * тестирование реальных внешних систем * Чем и как может помочь автоматизация тестирования: * тестовые сценарии * запуск и работа эмуляторов * "кликатели" сайтов * "кликатели" прочих программ

Сказка о "потерянном времени" или правила хорошего тона

Программирование - Практика программирования

Как "не потерять время" или корректно проверить Выбранный период

Добрый день , уважаемые коллеги !

Эта статья для начинающих великих программистов.
 

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


Поводом для написания статьи послужила большая кропотливая работа по проверке !!! тестовых заданий ...

Начну как всегда издалека.

На форму штатными средствами 1С можно вставить элемент управления "Выбор периода"

В модуле формы автоматически добавится код


Вроде все хорошо и можно дальше ваять....но мелочи скрыты в деталях

Если мы по кнопке "Выбор периода" зададим некоторый период и посчитаем разницу

Количество дней:               16
Количество часов:          4 079
Количество минут:       24 479
Количество секунд: 1 468 799

Пока все хорошо. Но если мы ВРУЧНУЮ изменим реквизит КОНПЕРИОД и повторим запрос

Количество дней:                16
Количество часов:          3 840
Количество минут:       23 040
Количество секунд: 1 382 400

Мы увидим, что потеряли почти (без одной секунды) целый день

Из-за чего это произошло???? Дело в том,что реквизит с типом значения "Дата" имеет три возможных состава даты: "Дата", "Время" и "Дата и время"

Изменим реквизвит -  Состав даты: Дата и время 

и заново повторим ввод

Теперь мы видим, что 17.06.2015  0:00:00  и  17.06.2015 23:59:59 сильно отличаются !

Иногда об этом забывают и получают недостоверную информацию.

Но это было предысловие.

Дальше те, кто наступил на эти грабли, начинают придумавать различные варианты (их очень великое множество, даже перечислять не буду)
на проверку КОРРЕКТНОСТИ выбора периода:

  • заполнены они или нет
  • правильно ли заполнены - может начало периода больше конца периода
  • рука дрогнула и пользователь ввел вместо 01.06.2015 - 01.06.1915


Простое предложение :

Сделать глобальную функцию 

//////////////////////////////////////////////////////////
// две даты
// видПериода  - по умолчанию 0 (день)
Функция ПроверкаПериода(ПерваяДата,ВтораяДата,ВидПериода=0)
    //преобразуем к концу дня
    ВтораяДата=КонецДня(ВтораяДата);
    Запрос = Новый Запрос;
    ТекстЗапроса = "ВЫБРАТЬ
    | РАЗНОСТЬДАТ(&Дата1, &Дата2, НужныйПериод) Как Период
    |";

    Если ВидПериода=0 тогда
        СтрПериод="День";
    ИначеЕсли ВидПериода=1 тогда
        СтрПериод="Час";
    ИначеЕсли ВидПериода=2 тогда
        СтрПериод="Минута";
    ИначеЕсли ВидПериода=3 тогда
        СтрПериод="Минута";
    КонецЕсли;

    ТекстЗапроса=СтрЗаменить(ТекстЗапроса,"НужныйПериод",СтрПериод); 
    Запрос.Текст =ТекстЗапроса;

    Запрос.УстановитьПараметр("Дата1",ПерваяДата);
    Запрос.УстановитьПараметр("Дата2",ВтораяДата);
    Результат = Запрос.Выполнить().Выбрать();
    Если Результат.Следующий() Тогда 
        Возврат Результат.Период;
    КонецЕсли;

КонецФункции
//////////////////////////////////////////////////////////

и вызывать перед формированием отчета, обработки

КоличествоПериод=ПроверкаПериода(НачПериода,КонПериода);

и вот тут уже сравнивать

если КоличествоПериод < = 0 - неправильно выбран период

если КоличествоПериод > больше критичного значения (например больше 90 дней - выдавать предупреждение)

и.т.д.

Песенка не новая, но может кому-то облегчит жизнь и понимание процесса.

Всегда ваш, Tatitutu

См. также

Комментарии
Сортировка: Древо
1. DoctorRoza 26.06.15 14:08 Сейчас в теме
О ценности года спроси студента, завалившего сессию в конце года…


"И проходящего срочную службу в ВС РФ" :)
Tatitutu; +1 Ответить
2. Tatitutu 3780 26.06.15 14:23 Сейчас в теме
(1) DoctorRoza, это точно

Кстати в качество ОFF:
25.06.1995 я получил погоны лейтенанта - 20 лет выпуску !

Лишь 25 коротких лет
растил ГВВУТ тыловиков для Армии и Флота,
но не забудет выпускник - пусть даже генерал, как в Горьком
начинал с курсантской
роты!

Горьковское Высшее Военное Училище тыла имени Маршала Советского Союза И. Х. Баграмяна - 6 рота (1991-1994)
Вольский Филиал Военной Академии Тыла и Транспорта - 2 рота (1994-1995)

Сегодня будем встречаемся и будем отмечать !
DoctorRoza; +1 Ответить
3. Созинов 26.06.15 21:02 Сейчас в теме
    Если ВидПериода=0 тогда
        СтрПериод="День";
    ИначеЕсли ВидПериода=0 тогда
        СтрПериод="Час";
    ИначеЕсли ВидПериода=0 тогда
        СтрПериод="Минута";
    ИначеЕсли ВидПериода=0 тогда
        СтрПериод="Минута";
    КонецЕсли;
Показать


Может я не понимаю код или это опечатка? ВидПериода=0
klinval; Tatitutu; +2 Ответить
4. Tatitutu 3780 29.06.15 09:51 Сейчас в теме
(3) Созинов, Да, спасибо - была опечатка.Поправил.
5. vasyak319 130 29.06.15 10:05 Сейчас в теме
Нет, запрос для проверки периода это слишком просто. Надо сделать внешнюю компоненту, которая по ssl туннелю будет связываться со специальным сервером, на котором надо будет запустить сервис, осуществляющий проверки периодов на все случаи жизни. Подробности см. в очередном выпуске ежемесячного журнала "Еженедельный ежедневник общества проктологов "Удаление гланд"".
6. Tatitutu 3780 29.06.15 10:48 Сейчас в теме
(5) vasyak319, ты крут ! ))) ,
но к сожалению уже слеп и без чувства юмора
в пятой строке статьи написано "Эта статья для начинающих..."
7. vasyak319 130 29.06.15 10:54 Сейчас в теме
(6) если так, то эта статья не смешна, а вредна. Удали.
Оставьте свое сообщение