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

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

Вступайте в нашу телеграмм-группу Инфостарт

Проверка выбранного периода

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Инструментарий разработчика Рефакторинг и качество кода Программист 1С:Предприятие 8 Бесплатно (free)

Инструмент для тех, кто устал читать модули по 50 тысяч строк и искать ошибки глазами. MetaVision загружает выгруженные файлы конфигурации и за секунды строит графы функций, находит уязвимости и подсвечивает проблемы производительности. Ключевые возможности: Визуализация логики функций (графы условий, циклов, транзакций и вызовов). Статический аудит безопасности (RCE, SSRF, COM-инъекции, пароли в коде). Поиск проблем производительности (запросы в циклах, вложенные блокировки). Полнотекстовый поиск по всем модулям конфигурации. Статистика по объектам и функциям. Безопасность: Программа работает строго локально. Код вашей конфигурации не отправляется в интернет и не анализируется на сторонних серверах. Попробуйте MetaVision сегодня — узнайте, что скрывает ваш код.

20.04.2026    12827    1323    KHoroshulinAV    58    

94

Рефакторинг и качество кода Программист Россия Бесплатно (free)

GRASP-паттерны в 1С: меньше хаоса, больше архитектуры.

28.08.2025    14362    lapinio    49    

62

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

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

14.05.2025    10836    DeerCven    15    

64

Инструментарий разработчика Рефакторинг и качество кода Программист 1С:Предприятие 8 Бесплатно (free)

Расширяемый форматтер структуры модулей 1С. Умеет автоматически расставлять стандартные области и раскидывать по ним процедуры и функции модуля, оформлять стандартные комментарии к методам с помощью ИИ. Также умеет анализировать модуль - извлекать структуру вызовов, используемые поля и т.д. Реализован в виде расширения (.cfe). Можно использовать как платформу для обработки кода в своих задачах автоматизации разработки.

12.02.2025    17030    1066    wonderboy    50    

149

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

SOLID – принципы проектирования программных структур (модулей). Акроним S.O.L.I.D. образован из первой буквы пяти принципов. Эти принципы делают код более гибким, упрощают разработку. Принято считать, что принципы SOLID применимы только в объектно-ориентированном программировании. Но их можно успешно использовать и в 1С. Расскажем о том, как разобраться в принципах SOLID и начать применять их при работе в 1С.

22.08.2024    23190    alex_sayan    47    

70

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    62560    dimanich70    86    

177

Рефакторинг и качество кода 1С:Предприятие 8 Бесплатно (free)

Поделюсь своим опытом аудита кода авторских продуктов с Infostart.ru как одним из элементов применения DevOps-практик внутри Инфостарт. Будет настоящий код, боевые скриншоты, внутренние мемы от команды ИТ-лаборатории Инфостарт и прочее мясо – все, что любят разработчики.

10.04.2024    20464    artbear    89    

113

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    78626    atdonya    31    

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


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

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

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

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

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


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