PSSL icon indicating copy to clipboard operation
PSSL copied to clipboard

Исправление ошибки преобразования времени

Open ivanmolodec opened this issue 5 months ago • 2 comments

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 before XMLЗначение (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.xml to include the new test module.

Written by Cursor Bugbot for commit c56e9983e3772dbd8e0a1c49d9d592337b0703ae. This will update automatically on new commits. Configure here.

ivanmolodec avatar Oct 16 '25 18:10 ivanmolodec

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

coderabbitai[bot] avatar Oct 16 '25 18:10 coderabbitai[bot]