Исправление ошибки преобразования времени
Summary by CodeRabbit
-
Bug Fixes
- Унифицирована и укреплена обработка преобразования дат из строк: надёжный парсинг ISO (с/без миллисекунд), безопасный разбор форматов с разделителями и без, корректная сборка даты/времени, повторная попытка и возврат даты‑по‑умолчанию при ошибках или пустых входах; отдельная логика для веб‑клиента.
-
New Features
- Добавлены экспортируемые вспомогательные функции: безопасное преобразование строки в число и извлечение только даты при разделителе‑пробеле.
-
Tests
- Добавлен набор модульных тестов, покрывающих ISO‑парсинг, миллисекунды, пустые/неверные значения и веб‑сценарии.
-
Chores
- Обновлена конфигурация метаданных для нового тестового модуля.
[!NOTE] Strengthens
ПреобразоватьДатуИзСтрокиПоФорматуwith safer ISO/format parsing (incl. web client), adds helpers, and introduces unit tests with config updates.
- Common module (
src/cf/CommonModules/пбп_СтроковыеФункцииКлиентСервер/Ext/Module.bsl):
- Date parsing robustness:
- Handle empty inputs for
ВхЗначение/НомерФормата; default toДата(1,1,1,0,0,0)on errors.- For format
"0_0_0": strip milliseconds beforeXMLЗначение(desktop); add manual ISO parser for web client.- Safer parsing for other formats: support 3-part time arrays, validate parts count/length, safe number conversion, try-catch
Дата(...), cap to max date.- New helpers:
ПолучитьТолькоДатуЕслиРазделительПробел,БезопасноПреобразоватьСтрокуВЧисло; replace older implementation of the former.- Tests:
- Add module
пбп_СтроковыеФункцииКлиентСервер_Тестыwith cases for ISO parsing (with/without ms), empty/invalid inputs, web-client parsing, and 3-element time split.- Update
src/cfe/YAXUnit/Configuration.xmlto include the new test module.Written by Cursor Bugbot for commit c56e9983e3772dbd8e0a1c49d9d592337b0703ae. This will update automatically on new commits. Configure here.
Walkthrough
Переработан парсер даты в функции ПреобразоватьДатуИзСтрокиПоФормату: введены безопасные преобразования строк→чисел, ветвление для веб-/не‑веб‑клиента (ISO‑разбор с миллисекундами), расширенный разбор форматов с/без разделителей, ограничение максимальной даты и новые экспортные утилиты; добавлены серверные unit‑тесты и метаданные YAXUnit.
Changes
| Cohort / File(s) | Изменение |
|---|---|
Основной модуль логики src/cf/CommonModules/пбп_СтроковыеФункцииКлиентСервер/Ext/Module.bsl |
Существенно переработан ПреобразоватьДатуИзСтрокиПоФормату: объединена валидация входов, добавлены ветви для веб‑ и не‑веб‑клиента (ISO‑парсинг, миллисекунды), безопасные преобразования частей даты/времени, поддержка AM/PM, проверки длин/валидности, ограничение даты; добавлены экспортные функции БезопасноПреобразоватьСтрокуВЧисло и ПолучитьТолькоДатуЕслиРазделительПробел. |
Метаданные тестового модуля src/cfe/YAXUnit/CommonModules/пбп_СтроковыеФункцииКлиентСервер_Тесты.xml |
Добавлен XML‑описатель серверного CommonModule для тестов (UUID, имя, свойства модуля). |
Тестовый модуль src/cfe/YAXUnit/CommonModules/пбп_СтроковыеФункцииКлиентСервер_Тесты/Ext/Module.bsl |
Новый тестовый модуль с ИсполняемыеСценарии() и набором юнит‑тестов для ПреобразоватьДатуИзСтрокиПоФормату (ISO с/без миллисекунд, пустые/некорректные входы, веб‑ветвь, массив разделителей). |
Конфигурация YAXUnit src/cfe/YAXUnit/Configuration.xml |
Добавлены записи о новом CommonModule тестов в конфигурацию YAXUnit. |
Sequence Diagram(s)
sequenceDiagram
participant Caller as Вызов
participant Module as ПреобразоватьДатуИзСтрокиПоФормату
participant Helper as БезопасноПреобразоватьСтрокуВЧисло
rect rgba(230,245,255,0.7)
Caller->>Module: Вход(ВхЗначение, НомерФормата, ВебКлиент, ...)
alt НомерФормата = "0_0_0" и ВебКлиент = true
Module->>Module: Разделить "T" -> дата / время (ISO)
Module->>Helper: Преобразовать части времени (часы, минуты, сек, дробь)
Module-->Caller: Собранная Дата или ДатаПоУмолчанию
else НомерФормата = "0_0_0" и ВебКлиент = false
Module->>Module: Парсинг XML/ISO, обработка миллисекунд
Module->>Helper: Безопасные преобразования частей в числа
Module-->Caller: Дата или ДатаПоУмолчанию
else Другие форматы (с/без разделителей)
Module->>Module: Разбор по разделителям, AM/PM, проверки длины/валидности
Module->>Helper: Безопасная конверсия строк в числа
Module-->Caller: Дата или ДатаПоУмолчанию
end
end
Estimated code review effort
🎯 3 (Moderate) | ⏱️ ~25 minutes
- Проверить ветвления для веб‑клиента (ISO‑разбор, дробная часть секунд) и корректность разделения по "T".
- Проверить разбор форматов без разделителей и соответствие ожиданию (длины, порядок YYYY/MM/DD и пр.).
- Аудит
БезопасноПреобразоватьСтрокуВЧислои граничных проверок при создании даты (ограничение до 3999‑12‑31). - Прогон и валидация новых YAXUnit тестов и метаданных.
Possibly related issues
- firstBitSportivnaya/PSSL#339 — затрагивает ту же функцию
ПреобразоватьДатуИзСтрокиПоФормату; изменения по безопасному парсингу и обработке миллисекунд/веб‑ветви соответствуют целям этого issue.
Possibly related PRs
- firstBitSportivnaya/PSSL#299 — вносил похожие правки (введение
БезопасноПреобразоватьСтрокуВЧисло, рефакторинг парсинга дат и перенос утилит); имеет сильную кодовую связь с текущими изменениями.
Suggested reviewers
- thvvmas
Pre-merge checks and finishing touches
❌ Failed checks (1 warning)
| Check name | Status | Explanation | Resolution |
|---|---|---|---|
| Docstring Coverage | ⚠️ Warning | Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. | You can run @coderabbitai generate docstrings to improve docstring coverage. |
✅ Passed checks (2 passed)
| Check name | Status | Explanation |
|---|---|---|
| Description Check | ✅ Passed | Check skipped - CodeRabbit’s high-level summary is enabled. |
| Title Check | ✅ Passed | Заголовок "Исправление ошибки преобразования времени" (Fix time conversion error) точно отражает основное назначение pull request — исправление и улучшение функции ПреобразоватьДатуИзСтрокиПоФормату путём добавления безопасного парсинга, обработки граничных случаев и поддержки различных форматов даты-времени. Заголовок ясен, описательный и охватывает центральную часть изменений. Хотя PR включает дополнительные компоненты (тесты, вспомогательные функции, регистрация конфигурации), основная задача — исправление ошибок в преобразовании времени, что адекватно отражено в названии. |
✨ Finishing touches
🧪 Generate unit tests (beta)
- [ ] Create PR with unit tests
- [ ] Post copyable unit tests in a comment
- [ ] Commit unit tests in branch
339-fix-error
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.
Comment @coderabbitai help to get the list of available commands and usage tips.
Quality Gate passed
Issues
Measures
-
0 Security Hotspots
-
No data about coverage (9.20% Estimated after merge)
-
No data about duplications (0.90% Estimated after merge)
Project ID: PSSL
2 Fixed Issues
0 Accepted Issues