Добавлена сериализация/десериализация таблицы значений#24
Conversation
WalkthroughДобавлена поддержка типа ТаблицаЗначений в сериализации и десериализации: новые ветви диспетчеризации и функции-преобразователи сериализуют ТаблицаЗначений в массив записей с заголовками и десериализуют массив обратно в ТаблицаЗначений с динамическим созданием колонок и рекурсивной обработкой ячеек. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
actor Тест
participant Сериализатор as "СериализаторJson"
participant ДиспетчерС as "ПреобразоватьОбъектСериализации"
participant ТаблС as "ПреобразоватьТаблицуЗначений"
Тест->>Сериализатор: Сериализовать(ТаблицаЗначений)
Сериализатор->>ДиспетчерС: ПреобразоватьОбъектСериализации(Объект)
alt Тип == ТаблицаЗначений
ДиспетчерС->>ТаблС: ПреобразоватьТаблицуЗначений(Таблица)
ТаблС-->>ДиспетчерС: Массив(записи)
end
ДиспетчерС-->>Сериализатор: Массив
Сериализатор-->>Тест: JSON
sequenceDiagram
autonumber
actor Тест
participant Десериализатор as "ДесериализаторJson"
participant ДиспетчерD as "ПреобразоватьОбъектДесериализации"
participant ТаблD as "ПреобразоватьТаблицуЗначений"
Тест->>Десериализатор: Десериализовать(JSON, Тип(ТаблицаЗначений))
Десериализатор->>ДиспетчерD: ПреобразоватьОбъектДесериализации(Массив, Тип)
alt Тип == ТаблицаЗначений
ДиспетчерD->>ТаблD: ПреобразоватьТаблицуЗначений(Массив, Тип)
ТаблD-->>ДиспетчерD: ТаблицаЗначений(колонки + строки)
end
ДиспетчерD-->>Десериализатор: ТаблицаЗначений
Десериализатор-->>Тест: ТаблицаЗначений
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. 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 |
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (4)
src/Классы/СериализаторJson.os (1)
96-117: Микро-оптимизация: кэшировать коллекцию колонок.Ссылаться на ТаблицаЗначений.Колонки один раз и переиспользовать переменную чуть уменьшит накладные расходы в двойном цикле.
Функция ПреобразоватьТаблицуЗначений(ТаблицаЗначений) Экспорт Результат = Новый Массив(); - ИменаКолонок = Новый Массив(); - Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл + Колонки = ТаблицаЗначений.Колонки; + ИменаКолонок = Новый Массив(); + Для Каждого Колонка Из Колонки Цикл ИменаКолонок.Добавить(Колонка.Имя); КонецЦикла; Результат.Добавить(ИменаКолонок); - Для Каждого СтрокаТаблицы Из ТаблицаЗначений Цикл + Для Каждого СтрокаТаблицы Из ТаблицаЗначений Цикл ЗначенияКолонок = Новый Массив(); - Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл + Для Каждого Колонка Из Колонки Цикл ПреобразованноеЗначение = ПреобразоватьОбъектСериализации(СтрокаТаблицы[Колонка.Имя]); ЗначенияКолонок.Добавить(ПреобразованноеЗначение); КонецЦикла; Результат.Добавить(ЗначенияКолонок); КонецЦикла;tests/Классы/ТестовыйКласс.os (1)
49-50: Опционально: инициализировать Таблица в конструкторе.Это упростит сценарии, где поле читается до присвоения в тестах.
Процедура ПриСозданииОбъекта() + Если Таблица = Неопределено Тогда + Таблица = Новый ТаблицаЗначений(); + КонецЕсли; КонецПроцедурыtests/Десериализация.os (1)
388-412: Корневой кейс ТаблицаЗначений — ок.Кейс с вложенной структурой закрывает смешанные типы. Можно добавить негативные тесты: пустой массив, заголовок не массив, дубли колонок.
Могу накидать сценарии/фикстуры для этих случаев по желанию.
tests/Сериализация.os (1)
281-315: Корневая сериализация ТаблицаЗначений — ок; можно усилить round‑trip.Дополнительно можно десериализовать полученный JSON обратно в Тип("ТаблицаЗначений") и сверить содержимое.
Готов добавить вспомогательный ассерт для обратного преобразования.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (5)
src/Классы/ДесериализаторJson.os(2 hunks)src/Классы/СериализаторJson.os(2 hunks)tests/Десериализация.os(3 hunks)tests/Классы/ТестовыйКласс.os(1 hunks)tests/Сериализация.os(3 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
{src/**/*.os,tests/**/*.os}
📄 CodeRabbit inference engine (.github/copilot-instructions.md)
{src/**/*.os,tests/**/*.os}: All source code, comments, and identifiers must be in Russian language
Follow OneScript naming conventions: CamelCase (using Russian characters) for identifiers
Ensure all .os files are UTF-8 encoded with BOM
Files:
tests/Классы/ТестовыйКласс.ostests/Десериализация.ossrc/Классы/ДесериализаторJson.ostests/Сериализация.ossrc/Классы/СериализаторJson.os
{src/Классы/**/*.os,tests/Классы/**/*.os}
📄 CodeRabbit inference engine (.github/copilot-instructions.md)
Use OneScript annotations &Сериализуемое and &Несериализуемое to control serialization in classes
Files:
tests/Классы/ТестовыйКласс.ossrc/Классы/ДесериализаторJson.ossrc/Классы/СериализаторJson.os
🧠 Learnings (1)
📚 Learning: 2025-08-21T05:54:45.305Z
Learnt from: CR
PR: nixel2007/jason#0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-08-21T05:54:45.305Z
Learning: Applies to {src/Классы/**/*.os,tests/Классы/**/*.os} : Use OneScript annotations &Сериализуемое and &Несериализуемое to control serialization in classes
Applied to files:
tests/Классы/ТестовыйКласс.ostests/Десериализация.ostests/Сериализация.os
🔇 Additional comments (8)
src/Классы/ДесериализаторJson.os (1)
71-72: Ветка для ТаблицаЗначений в диспетчере — хорошо.Маршрутизация на специализированный конвертер выглядит корректно и согласована с сериализатором.
src/Классы/СериализаторJson.os (2)
58-59: Поддержка ТаблицаЗначений в сериализаторе — ок.Ветка интеграции аккуратно вписана в существующий диспетчер.
1-22: Удостовериться, что все.osфайлы (включая изменённые) имеют кодировку UTF-8 с BOM. Проверьте вручную или добавьте соответствующую проверку в CI.tests/Классы/ТестовыйКласс.os (1)
41-44: Поле Таблица с аннотациями — корректно.&Сериализуемое + &Тип("ТаблицаЗначений") согласованы с логикой сериализатора/десериализатора.
tests/Десериализация.os (2)
20-24: Добавление среза JSON для Таблица — ок.Входной формат (заголовок + строки) соответствует новой десериализации.
49-55: Проверки содержимого Таблица — ок.Дот‑нотация по именам колонок и тип булево покрыты.
tests/Сериализация.os (2)
37-46: Подготовка Таблица в тестовом классе — ок.Имена колонок и строки соответствуют ожидаемому JSON‑представлению.
92-99: Проверки сериализованной Таблица как массива — ок.Размер и порядок заголовков/строк валидируются корректно.
Cериализация таблицы значений в массив объектов и десериализация обратно в таблицу значений