Skip to content

Добавлена сериализация/десериализация таблицы значений#24

Open
Stivo182 wants to merge 4 commits into
nixel2007:masterfrom
Stivo182:feat/value-table-serialization
Open

Добавлена сериализация/десериализация таблицы значений#24
Stivo182 wants to merge 4 commits into
nixel2007:masterfrom
Stivo182:feat/value-table-serialization

Conversation

@Stivo182

@Stivo182 Stivo182 commented Sep 6, 2025

Copy link
Copy Markdown
Contributor

Cериализация таблицы значений в массив объектов и десериализация обратно в таблицу значений

@coderabbitai

coderabbitai Bot commented Sep 6, 2025

Copy link
Copy Markdown

Walkthrough

Добавлена поддержка типа ТаблицаЗначений в сериализации и десериализации: новые ветви диспетчеризации и функции-преобразователи сериализуют ТаблицаЗначений в массив записей с заголовками и десериализуют массив обратно в ТаблицаЗначений с динамическим созданием колонок и рекурсивной обработкой ячеек.

Changes

Cohort / File(s) Summary
Deserialization: ТаблицаЗначений
src/Классы/ДесериализаторJson.os
Добавлена ветка для Тип("ТаблицаЗначений"). Реализована приватная ПреобразоватьТаблицуЗначений(Объект, ТипОбъекта): первая запись считается заголовком, создаются колонки, последующие элементы — строки; ячейки десериализуются рекурсивно; пропускаются неопределённые/пустые значения.
Serialization: ТаблицаЗначений
src/Классы/СериализаторJson.os
Добавлена ветка в ПреобразоватьОбъектСериализации и экспортная ПреобразоватьТаблицуЗначений(ТаблицаЗначений): собираются имена колонок и формируются строки как соответствия, ячейки сериализуются рекурсивно; результат — массив записей.
Tests: десериализация
tests/Десериализация.os
Обновлён тестовый объект — добавлено поле Таблица; добавлен новый тест ДесериализацияКорневойТаблицыЗначений для проверки корневой таблицы, типов, длины, доступа по индексу/имени и вложенных структур.
Tests: тестовый класс
tests/Классы/ТестовыйКласс.os
Добавлено экспортируемое сериализуемое поле Перем Таблица Экспорт с атрибутами &Сериализуемое и &Тип("ТаблицаЗначений").
Tests: сериализация
tests/Сериализация.os
Добавлено заполнение и проверка поля Таблица в тестовом классе и новый экспортный тест СериализацияКорневойТаблицыЗначений для сериализации/десериализации корневой таблицы.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor Тест
  participant Сериализатор as "СериализаторJson"
  participant ДиспетчерС as "ПреобразоватьОбъектСериализации"
  participant ТаблС as "ПреобразоватьТаблицуЗначений"
  Тест->>Сериализатор: Сериализовать(ТаблицаЗначений)
  Сериализатор->>ДиспетчерС: ПреобразоватьОбъектСериализации(Объект)
  alt Тип == ТаблицаЗначений
    ДиспетчерС->>ТаблС: ПреобразоватьТаблицуЗначений(Таблица)
    ТаблС-->>ДиспетчерС: Массив(записи)
  end
  ДиспетчерС-->>Сериализатор: Массив
  Сериализатор-->>Тест: JSON
Loading
sequenceDiagram
  autonumber
  actor Тест
  participant Десериализатор as "ДесериализаторJson"
  participant ДиспетчерD as "ПреобразоватьОбъектДесериализации"
  participant ТаблD as "ПреобразоватьТаблицуЗначений"
  Тест->>Десериализатор: Десериализовать(JSON, Тип(ТаблицаЗначений))
  Десериализатор->>ДиспетчерD: ПреобразоватьОбъектДесериализации(Массив, Тип)
  alt Тип == ТаблицаЗначений
    ДиспетчерD->>ТаблD: ПреобразоватьТаблицуЗначений(Массив, Тип)
    ТаблD-->>ДиспетчерD: ТаблицаЗначений(колонки + строки)
  end
  ДиспетчерD-->>Десериализатор: ТаблицаЗначений
  Десериализатор-->>Тест: ТаблицаЗначений
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Poem

Прыг-скок по коду, лапки в строках,
Таблица рвётся в JSON-лунах.
Заголовки — морковь в рядок,
Ячейки пляшут в строках в такт.
Ушастый сборщик рад: таблиц теперь завал! 🥕🐇

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed Заголовок полностью соответствует основному изменению: добавлена сериализация и десериализация таблицы значений.
Description check ✅ Passed Описание связано с изменениями в pull request: описывает сериализацию таблицы значений в массив объектов и десериализацию обратно.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ 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.

❤️ Share

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

📥 Commits

Reviewing files that changed from the base of the PR and between fdf6ee3 and 95999e6.

📒 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/Классы/ТестовыйКласс.os
  • tests/Десериализация.os
  • src/Классы/ДесериализаторJson.os
  • tests/Сериализация.os
  • src/Классы/СериализаторJson.os
{src/Классы/**/*.os,tests/Классы/**/*.os}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Use OneScript annotations &Сериализуемое and &Несериализуемое to control serialization in classes

Files:

  • tests/Классы/ТестовыйКласс.os
  • src/Классы/ДесериализаторJson.os
  • src/Классы/Сериализатор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/Классы/ТестовыйКласс.os
  • tests/Десериализация.os
  • tests/Сериализация.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: Проверки сериализованной Таблица как массива — ок.

Размер и порядок заголовков/строк валидируются корректно.

Comment thread src/Классы/ДесериализаторJson.os Outdated
@coveralls

Copy link
Copy Markdown

Coverage Status

coverage: 89.252% (-1.1%) from 90.361%
when pulling 95999e6 on Stivo182:feat/value-table-serialization
into fdf6ee3 on nixel2007:master.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants