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

26.06.15

Разработка - Универсальные функции

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

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

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

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


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

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

На форму штатными средствами 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С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    3960    ke.92@mail.ru    16    

61

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    8818    YA_418728146    6    

141

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2071    21    progmaster    7    

3

Ревьювер. Инструмент для проведения code review

Рефакторинг и качество кода Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

16.05.2023    5014    leobrn    12    

61

Применение cтандартов и методик разработки конфигураций на практике

Рефакторинг и качество кода Платформа 1С v8.3 Бесплатно (free)

Практические кейсы для того, чтобы не устать применять стандарты и методики разработки конфигураций.

15.05.2023    8973    improg    57    

74

Как проверять код на языке 1С с помощью BSL Language Server

Рефакторинг и качество кода Платформа 1С v8.3 Бесплатно (free)

Некоторые разработчики на платформе 1С не проверяют свой код ни на соответствие стандартам 1С, ни на самые распространённые ошибки кодирования. И если раньше они могли оправдываться отсутствием инструментов для этого, то с появлением BSL Language Server оправданий больше нет.

13.01.2023    10075    AlekseiAdamov    10    

61

Правила работы с транзакциями 1С

Рефакторинг и качество кода Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

Список правил при работе с транзакциями из BSL Language Server и SonarQube 1C (BSL) Plugin. Переработка и осмысление материала.

01.12.2022    12912    kuzyara    47    

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


"И проходящего срочную службу в ВС РФ" :)
Tatitutu; +1 Ответить
2. Tatitutu 3855 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 3855 29.06.15 09:51 Сейчас в теме
(3) Созинов, Да, спасибо - была опечатка.Поправил.
5. vasyak319 150 29.06.15 10:05 Сейчас в теме
Нет, запрос для проверки периода это слишком просто. Надо сделать внешнюю компоненту, которая по ssl туннелю будет связываться со специальным сервером, на котором надо будет запустить сервис, осуществляющий проверки периодов на все случаи жизни. Подробности см. в очередном выпуске ежемесячного журнала "Еженедельный ежедневник общества проктологов "Удаление гланд"".
6. Tatitutu 3855 29.06.15 10:48 Сейчас в теме
(5) vasyak319, ты крут ! ))) ,
но к сожалению уже слеп и без чувства юмора
в пятой строке статьи написано "Эта статья для начинающих..."
7. vasyak319 150 29.06.15 10:54 Сейчас в теме
(6) если так, то эта статья не смешна, а вредна. Удали.
Оставьте свое сообщение