Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

290 / Вывод различий при сравнении таблиц и табличных документов #452

Merged
merged 3 commits into from
Dec 3, 2024

Conversation

alkoleft
Copy link
Member

@alkoleft alkoleft commented Dec 3, 2024

Описание изменений

Вывод различий при сравнении таблиц и табличных документов

  • Различие размеров
  • Различие значений ячеек

  • Добавлены тесты
  • Изменения отражены в документации (при необходимости)

Close #290

Summary by CodeRabbit

  • Новые функции

    • Улучшена обработка ошибок с добавлением новых функций для получения деталей ошибок и структур данных ошибок.
    • Обновлены функции сравнения таблиц и документов, добавлены новые параметры для более гибкого анализа.
    • Введены новые тестовые процедуры для проверки функциональности сравнения таблиц и улучшения отчетности об ошибках.
    • Расширены возможности фреймворка утверждений с новыми процедурами и улучшенными сообщениями об ошибках.
    • Добавлены новые элементы контента в подсистемы, расширяющие функциональность.
  • Исправления ошибок

    • Обновлены сообщения об ошибках для более четкого понимания проблем с проверками.
    • Исправлена опечатка в названии функции, обеспечивающая согласованность в наименованиях.
  • Документация

    • Добавлены новые метаданные для модуля "ОМ_ЮТСравнениеСлужебныйСервер" в XML конфигурации.

Copy link

coderabbitai bot commented Dec 3, 2024

Walkthrough

В данном пулл-реквесте внесены значительные изменения в обработку ошибок и сравнение таблиц в нескольких модулях. Функция ДанныеОшибки была разделена на две: ДеталиОшибки и ДанныеОшибки, что улучшает структуру обработки ошибок. Также обновлены функции сравнения таблиц, добавлены новые параметры для более гибкого анализа. В тестах добавлены процедуры для проверки новых функций сравнения, а также обновлены сообщения об ошибках для улучшения ясности.

Changes

Файл Изменения
exts/yaxunit/src/CommonModules/ЮТРегистрацияОшибокСлужебный/Module.bsl Рефакторинг функции ДанныеОшибки, добавление функции ДеталиОшибки, обновление логики обработки ошибок.
exts/yaxunit/src/CommonModules/ЮТСообщенияСлужебный/Module.bsl Обновление функции ПредставлениеЗначения для обработки пустых строк.
exts/yaxunit/src/CommonModules/ЮТСравнениеСлужебныйВызовСервера/Module.bsl Переименование и изменение параметров функций сравнения таблиц для повышения ясности.
exts/yaxunit/src/CommonModules/ЮТСравнениеСлужебныйКлиентСервер/Module.bsl Добавление параметра ПараметрыСравнения в функции сравнения для улучшения функциональности.
exts/yaxunit/src/CommonModules/ЮТСравнениеСлужебныйСервер/Module.bsl Переименование функций и добавление логики для более детального сравнения таблиц.
exts/yaxunit/src/CommonModules/ЮТУтверждения/Module.bsl Обновление сигнатур функций и улучшение сообщений об ошибках в рамках утверждений.
exts/yaxunit/src/Subsystems/ЮТДвижок/Subsystems/ЮТСервис/ЮТСервис.mdo Добавление новых элементов контента в XML для расширения функциональности подсистемы.
exts/yaxunit/src/Subsystems/ЮТДвижок/Subsystems/ЮТТестовыеДанные/ЮТТестовыеДанные.mdo Добавление нового элемента контента в XML для расширения зависимостей подсистемы.
tests/src/CommonModules/ОМ_ЮТСравнениеСлужебныйСервер/Module.bsl Добавление тестовых процедур для проверки функциональности сравнения таблиц.
tests/src/CommonModules/ОМ_ЮТСравнениеСлужебныйСервер/ОМ_ЮТСравнениеСлужебныйСервер.mdo Добавление нового XML файла для определения метаданных модуля.
tests/src/CommonModules/ОМ_ЮТУтверждения/Module.bsl Переименование и добавление новых тестовых процедур для улучшения проверки утверждений.
tests/src/Configuration/Configuration.mdo Добавление новой записи в секцию <commonModules> для расширения конфигурации.

Assessment against linked issues

Objective Addressed Explanation
Доработать сравнение таблиц. Добавить вывод различий (#290)

Possibly related PRs

🐇 В мире ошибок, где все не так,
Мы детали собираем, как в сказочном снах.
Сравнения теперь точны, как стрелы в полете,
Ошибки в сообщениях — больше не в заботе!
Пусть тесты проходят, как зайцы в траве,
В нашем коде порядок, и радость в главе! 🐇


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

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

SonarQube Quality Gate passed! passed

bug 0 Bugs
vulnerability 0 Vulnerabilities
code_smell 0 Code Smells

No data Coverage
duplication_lt_3 0.00% Duplication

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Outside diff range and nitpick comments (5)
exts/yaxunit/src/CommonModules/ЮТСравнениеСлужебныйСервер/Module.bsl (2)

Line range hint 612-614: Опечатка в сообщении об ошибке

В сообщении об ошибке на строке 612 слово "длинну" написано неправильно. Следует исправить на "длину".

Предлагаю исправить следующим образом:

-тип проверяемого значения `%1` не может быть проверен на длинну значения
+тип проверяемого значения `%1` не может быть проверен на длину значения

Line range hint 740-747: Ошибка использования неопределенных переменных

В функции "ТабличныеДокументыРавны" на строках 742 и 745 используются переменные ПроверяемоеЗначение и ОжидаемоеЗначение, которые не определены в данной функции. Вероятно, имелись в виду ПроверяемыйТабличныйДокумент и ОжидаемыйТабличныйДокумент.

Предлагаю исправить следующим образом:

-        Возврат ЮТСравнениеСлужебныйСервер.ТабличныеДокументыРавны(ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыСравнения);
+        Возврат ЮТСравнениеСлужебныйСервер.ТабличныеДокументыРавны(ПроверяемыйТабличныйДокумент, ОжидаемыйТабличныйДокумент, ПараметрыСравнения);

и

-        Возврат ЮТСравнениеСлужебныйВызовСервера.ТабличныеДокументыРавны(ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыСравнения);
+        Возврат ЮТСравнениеСлужебныйВызовСервера.ТабличныеДокументыРавны(ПроверяемыйТабличныйДокумент, ОжидаемыйТабличныйДокумент, ПараметрыСравнения);
exts/yaxunit/src/CommonModules/ЮТСравнениеСлужебныйКлиентСервер/Module.bsl (1)

612-614: Опечатка в сообщении об ошибке

В слове "длинну" на строке 612 допущена опечатка. Следует исправить на "длину".

Предлагаю исправление:

-тип проверяемого значения `%1` не может быть проверен на длинну значения
+тип проверяемого значения `%1` не может быть проверен на длину значения
tests/src/CommonModules/ОМ_ЮТСравнениеСлужебныйСервер/Module.bsl (1)

103-113: Рекомендуется добавить проверку параметра!

Функция НоваяТаблица корректно создает таблицу, но рекомендуется добавить проверку параметра КоличествоКолонок на неотрицательное значение.

 Функция НоваяТаблица(КоличествоКолонок = 1)
+    Если КоличествоКолонок < 0 Тогда
+        ВызватьИсключение "Количество колонок не может быть отрицательным";
+    КонецЕсли;
     
     Таблица = Новый ТаблицаЗначений();
exts/yaxunit/src/CommonModules/ЮТУтверждения/Module.bsl (1)

265-265: LGTM! Рекомендуется добавить документацию.

Добавление параметра "Утверждение" в структуру ПараметрыСравнения расширяет функциональность сравнения. Рекомендуется добавить документацию, описывающую назначение нового параметра.

-ПараметрыСравнения = Новый Структура("ГлубокийАнализ, Утверждение", Истина, Истина);
+// Параметры:
+//  ГлубокийАнализ - Булево - Выполнять глубокий анализ при сравнении
+//  Утверждение - Булево - Включить проверку утверждений при сравнении
+ПараметрыСравнения = Новый Структура("ГлубокийАнализ, Утверждение", Истина, Истина);
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between eb17a50 and f65eb92.

📒 Files selected for processing (12)
  • exts/yaxunit/src/CommonModules/ЮТРегистрацияОшибокСлужебный/Module.bsl (3 hunks)
  • exts/yaxunit/src/CommonModules/ЮТСообщенияСлужебный/Module.bsl (1 hunks)
  • exts/yaxunit/src/CommonModules/ЮТСравнениеСлужебныйВызовСервера/Module.bsl (1 hunks)
  • exts/yaxunit/src/CommonModules/ЮТСравнениеСлужебныйКлиентСервер/Module.bsl (10 hunks)
  • exts/yaxunit/src/CommonModules/ЮТСравнениеСлужебныйСервер/Module.bsl (1 hunks)
  • exts/yaxunit/src/CommonModules/ЮТУтверждения/Module.bsl (2 hunks)
  • exts/yaxunit/src/Subsystems/ЮТДвижок/Subsystems/ЮТСервис/ЮТСервис.mdo (2 hunks)
  • exts/yaxunit/src/Subsystems/ЮТДвижок/Subsystems/ЮТТестовыеДанные/ЮТТестовыеДанные.mdo (1 hunks)
  • tests/src/CommonModules/ОМ_ЮТСравнениеСлужебныйСервер/Module.bsl (1 hunks)
  • tests/src/CommonModules/ОМ_ЮТСравнениеСлужебныйСервер/ОМ_ЮТСравнениеСлужебныйСервер.mdo (1 hunks)
  • tests/src/CommonModules/ОМ_ЮТУтверждения/Module.bsl (11 hunks)
  • tests/src/Configuration/Configuration.mdo (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • tests/src/CommonModules/ОМ_ЮТСравнениеСлужебныйСервер/ОМ_ЮТСравнениеСлужебныйСервер.mdo
🧰 Additional context used
📓 Learnings (1)
exts/yaxunit/src/Subsystems/ЮТДвижок/Subsystems/ЮТТестовыеДанные/ЮТТестовыеДанные.mdo (1)
Learnt from: alkoleft
PR: bia-technologies/yaxunit#413
File: exts/yaxunit/src/DataProcessors/ЮТКонструкторДвижений/ObjectModule.bsl:1-189
Timestamp: 2024-11-12T06:11:37.980Z
Learning: Тестовые модули находятся в расширении `tests` в общих модулях, которые именуются по следующей схеме:

| Тип тестируемого объекта | Префикс | Пример                                      |
| ------------------------ | ------- | ------------------------------------------- |
| Общий модуль             | `ОМ_`     | ОМ_ОбщегоНазначения                         |
| Регистр бухгалтерии      | `РБ_`     | РБ_Хозрасчетный, РБ_Хозрасчетный_НЗ         |
| Регистр накопления       | `РН_`     | РН_ОстаткиНаСкладах, РН_ОстаткиНаСкладах_ММ |
| Регистр расчета          | `РР_`     | РР_Зарплата, РР_Зарплата_НЗ                 |
| Регистр сведений         | `РС_`     | РС_АдресныйКлассификатор                    |
| Бизнес процесс           | `БП_`     | БП_Согласование                             |
| Справочник               | `Спр_`    | Спр_Пользователи, Спр_Пользователи_МО       |
| План счетов              | `ПС_`     | ПС_Хозрасчетный                             |
| План видов расчета       | `ПВР_`    | ПВР_Зарплатный                              |
| План видов характеристик | `ПВХ_`    | ПВХ_Субконто, ПВХ_Субконто_ММ               |
| Документ                 | `Док_`    | Док_ПКО                                     |
| Перечисление             | `Пер_`    | Пер_СтатусСогласования                      |
| План обмена              | `ПО_`     | ПО_РИБ, ПО_РИБ_ММ                           |
| Задача                   | `Зад_`    | Зад_Задача                                  |
| Обработка                | `Обр_`    | Обр_ЗакрытиеМесяца, Обр_ЗакрытиеМесяца_МО   |
| Отчет                    | `Отч_`    | Отч_УниверсальныйОтчет                      |
🔇 Additional comments (23)
tests/src/Configuration/Configuration.mdo (1)

60-60: Регистрация модуля соответствует соглашениям!

Добавление модуля ОМ_ЮТСравнениеСлужебныйСервер корректно и соответствует:

  • принятым соглашениям об именовании
  • структуре конфигурации
  • целям PR по реализации сравнения таблиц

Выполните следующий скрипт для проверки корректности регистрации модуля в связанных конфигурационных файлах:

✅ Verification successful

Регистрация модуля выполнена корректно и полностью!

Проверка показала, что:

  • Модуль корректно зарегистрирован в основном файле конфигурации
  • Файл модуля ОМ_ЮТСравнениеСлужебныйСервер.mdo содержит правильные настройки:
    • Установлен признак серверного модуля (<server>true</server>)
    • Настроен доступ из обычного приложения (<clientOrdinaryApplication>true</clientOrdinaryApplication>)
    • Корректно указан UUID модуля
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Описание: Поиск связанных регистраций модуля в других конфигурационных файлах

# Поиск файлов модуля
fd "ОМ_ЮТСравнениеСлужебныйСервер" --type f

# Поиск упоминаний модуля в других конфигурационных файлах
rg -l "ОМ_ЮТСравнениеСлужебныйСервер" --type xml

Length of output: 578


Script:

#!/bin/bash
# Проверим содержимое файла модуля для анализа его регистрации
cat "tests/src/CommonModules/ОМ_ЮТСравнениеСлужебныйСервер/ОМ_ЮТСравнениеСлужебныйСервер.mdo"

# Поищем другие конфигурационные файлы в каталоге
fd ".+\.mdo$" tests/src/CommonModules/ОМ_ЮТСравнениеСлужебныйСервер/

Length of output: 1168

exts/yaxunit/src/CommonModules/ЮТСравнениеСлужебныйСервер/Module.bsl (3)

21-26: Функция "ТаблицыРавны" реализована корректно

Реализация функции соответствует ожидаемому поведению и корректно использует функцию "РазличияТаблиц" для сравнения таблиц.


28-80: Функция "РазличияТаблиц" эффективно выявляет различия

Логика функции правильно обрабатывает различные случаи сравнения таблиц, включая проверку количества строк и колонок, а также сравнение значений ячеек. Реализация обеспечивает подробное описание различий.


Line range hint 720-733: Функция "ТаблицыРавны" корректно реализует сравнение таблиц

Функция правильно обрабатывает параметр "Утверждение" и вызывает соответствующие методы для определения различий в таблицах.

exts/yaxunit/src/CommonModules/ЮТРегистрацияОшибокСлужебный/Module.bsl (3)

Line range hint 466-494: Функция "ДеталиОшибки" реализована корректно

Функция правильно объединяет детали ошибок и сбрасывает контекст после использования.


Line range hint 496-508: Функция "ДанныеОшибки" корректно формирует данные об ошибке

Реализация функции учитывает наличие деталей ошибки и правильно конструирует структуру данных для дальнейшей обработки.


522-526: Функция "ДанныеОшибкиУтверждений" корректно добавляет детали ошибки

Функция успешно объединяет информацию об ошибке утверждений с деталями ошибки для более информативного сообщения.

exts/yaxunit/src/CommonModules/ЮТСравнениеСлужебныйКлиентСервер/Module.bsl (4)

56-76: Обновление функции "ЗначенияРавны" с учетом параметров сравнения

Функция правильно передает параметр ПараметрыСравнения в соответствующие функции сравнения, обеспечивая более гибкое сравнение сложных структур данных.


Line range hint 158-174: Функция "СтруктурыРавны" корректно сравнивает структуры

Логика функции соответствует требованиям, проверяя наличие свойств и равенство соответствующих значений.


Line range hint 177-202: Функция "СоответствияРавны" корректно сравнивает соответствия

Функция эффективно сравнивает ключи и значения соответствий, обеспечивая точное определение равенства.


204-213: Функция "МассивыРавны" корректно сравнивает массивы

Логика функции правильно обрабатывает массивы любого размера, сравнивая их элементы по индексу.

exts/yaxunit/src/Subsystems/ЮТДвижок/Subsystems/ЮТТестовыеДанные/ЮТТестовыеДанные.mdo (1)

22-22: Добавлено новое содержимое в подсистему

Добавление <content>DataProcessor.ЮТКонструкторДвижений</content> расширяет функциональность подсистемы "ЮТТестовыеДанные" и согласуется с общей архитектурой проекта.

exts/yaxunit/src/CommonModules/ЮТСравнениеСлужебныйВызовСервера/Module.bsl (2)

21-24: Переименование функции и корректировка параметров

Функция "ТаблицыРавны" переименована в "ТабличныеДокументыРавны" и параметры изменены для лучшей ясности. Вызов серверной функции корректен.


27-30: Добавлена функция "РазличияТабличныхДокументов"

Новая функция обеспечивает возврат различий между табличными документами и правильно вызывает соответствующую серверную функцию.

tests/src/CommonModules/ОМ_ЮТСравнениеСлужебныйСервер/Module.bsl (4)

21-30: Корректная регистрация тестовых сценариев!

Все необходимые тестовые сценарии для проверки сравнения таблиц правильно добавлены в исполняемый набор тестов.


32-47: Тест на проверку количества колонок реализован корректно!

Тестовый сценарий правильно проверяет формирование сообщения об ошибке при несовпадении количества колонок в таблицах.


49-63: Тест на проверку количества строк реализован корректно!

Тестовый сценарий правильно проверяет формирование сообщения об ошибке при несовпадении количества строк в таблицах.


65-80: Тест на проверку отсутствующей колонки реализован корректно!

Тестовый сценарий правильно проверяет формирование сообщения об ошибке при отсутствии колонки в проверяемой таблице.

exts/yaxunit/src/Subsystems/ЮТДвижок/Subsystems/ЮТСервис/ЮТСервис.mdo (1)

34-34: Корректное добавление новых элементов подсистемы!

Все новые элементы корректно добавлены в состав подсистемы ЮТСервис с соблюдением структуры метаданных.

Also applies to: 54-54, 61-61, 62-62, 68-68, 70-70

exts/yaxunit/src/CommonModules/ЮТСообщенияСлужебный/Module.bsl (1)

98-108: Улучшена обработка пустых значений!

Доработка функции ПредставлениеЗначения корректно реализует отображение типа для пустых значений, что улучшает диагностику при тестировании.

exts/yaxunit/src/CommonModules/ЮТУтверждения/Module.bsl (1)

2074-2074: LGTM! Исправление опечатки в сообщении об ошибке.

Исправлена опечатка в слове "длину", что улучшает читаемость сообщения об ошибке.

tests/src/CommonModules/ОМ_ЮТУтверждения/Module.bsl (2)

35-36: LGTM! Добавлены новые тестовые процедуры.

Новые тесты расширяют покрытие функциональности и корректно интегрированы в набор тестов.


Line range hint 1842-1860: LGTM! Добавлен серверный тест для сравнения сложных объектов.

Тест охватывает важные сценарии с различными типами объектов и использует корректную подготовку и проверку данных.

@github-actions github-actions bot deleted a comment from coderabbitai bot Dec 3, 2024
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Outside diff range and nitpick comments (8)
exts/yaxunit/src/CommonModules/ЮТСравнениеСлужебныйСервер/Module.bsl (1)

28-85: Рекомендуется оптимизировать производительность сравнения таблиц

Функция РазличияТаблиц выполняет детальное сравнение таблиц, но есть возможности для оптимизации:

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

Предлагаю оптимизировать сравнение значений:

-		Индекс = ПроверяемоеЗначение.Количество() - 1;
-		
-		Пока Индекс >= 0 Цикл
-			
-			ЗначенияРавны = ЮТСравнениеСлужебныйКлиентСервер.ЗначенияРавны(ПроверяемоеЗначение[Индекс][Колонка.Имя],
-																		   ОжидаемоеЗначение[Индекс][Колонка.Имя],
-																		   ПараметрыСравнения);
+		Для Индекс = 0 По ПроверяемоеЗначение.Количество() - 1 Цикл
+			ЗначенияРавны = ЮТСравнениеСлужебныйКлиентСервер.ЗначенияРавны(
+				ПроверяемоеЗначение[Индекс][Колонка.Имя],
+				ОжидаемоеЗначение[Индекс][Колонка.Имя],
+				ПараметрыСравнения);
exts/yaxunit/src/CommonModules/ЮТСравнениеСлужебныйКлиентСервер/Module.bsl (4)

56-83: Рекомендуется улучшить обработку ошибок в функции ЗначенияРавны

Функция корректно обрабатывает различные типы данных, но можно улучшить обработку ошибок:

  1. Отсутствует проверка на Неопределено для ПараметрыСравнения перед доступом к свойствам
  2. Нет явной обработки исключений при вызове ЗначенияРавны для вложенных объектов

Предлагаю добавить дополнительные проверки:

+	Если ПараметрыСравнения <> Неопределено И НЕ ТипЗнч(ПараметрыСравнения) = Тип("Структура") Тогда
+		ВызватьИсключение "Параметр ПараметрыСравнения должен быть структурой";
+	КонецЕсли;

Line range hint 158-175: Функция СтруктурыРавны требует оптимизации производительности

Функция корректно сравнивает структуры, но есть возможности для оптимизации:

  1. Используется повторный поиск свойств через Свойство()
  2. Отсутствует кэширование результатов сравнения

Предлагаю оптимизировать:

-		Если НЕ Данные2.Свойство(КлючИЗначение.Ключ, СтароеЗначение)
-			ИЛИ НЕ ЗначенияРавны(КлючИЗначение.Значение, СтароеЗначение, ПараметрыСравнения) Тогда
+		СтароеЗначение = Данные2[КлючИЗначение.Ключ];
+		Если СтароеЗначение = Неопределено ИЛИ НЕ ЗначенияРавны(КлючИЗначение.Значение, СтароеЗначение, ПараметрыСравнения) Тогда

612-614: Рекомендуется унифицировать сообщения об ошибках

В функциях используются разные форматы сообщений об ошибках для однотипных ситуаций. Рекомендуется унифицировать формат.

Предлагаю использовать единый формат:

-		ТекстОшибки = СтрШаблон("тип проверяемого значения `%1` не может быть проверен на длину значения", ТипЗнч(ПроверяемоеЗначение));
-		ТекстОшибки = СтрШаблон("тип проверяемого значения `%1` не может быть проверен на содержание ожидаемого значения", ТипЗнч(ПроверяемоеЗначение));
-		ТекстОшибки = СтрШаблон("тип проверяемого значения `%1` не может быть проверен на соответствие шаблону", ТипЗнч(ПроверяемоеЗначение));
+		ТекстОшибки = СтрШаблон("Значение типа `%1` не поддерживает операцию %2", ТипЗнч(ПроверяемоеЗначение), ТипОперации);

Also applies to: 632-634, 652-654


736-759: Функция ТабличныеДокументыРавны требует рефакторинга условной компиляции

Код содержит множество директив условной компиляции, что усложняет чтение. Рекомендуется выделить серверную и клиентскую логику в отдельные методы.

Предлагаю реорганизовать код:

+#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда
+Функция ВыполнитьСравнениеТабличныхДокументовНаСервере(ПроверяемыйТабличныйДокумент, ОжидаемыйТабличныйДокумент, ПараметрыСравнения)
+	Возврат РазличияТабличныхДокументов(ПроверяемыйТабличныйДокумент, ОжидаемыйТабличныйДокумент, ПараметрыСравнения);
+КонецФункции
+#КонецЕсли
tests/src/CommonModules/ОМ_ЮТУтверждения/Module.bsl (3)

Line range hint 1513-1549: Тесты для ИмеетДлину_ТекстОшибки требуют дополнительных проверок

Тесты проверяют базовые сценарии, но отсутствуют проверки граничных значений.

Рекомендуется добавить тесты:

  • Для очень больших значений длины
  • Для отрицательных значений длины
  • Для значений на границе типа Число

Line range hint 1584-1620: Тесты для НеИмеетДлину_ТекстОшибки содержат опечатку

В строке 1614 присутствует лишний символ '>' в тексте ошибки.

-	ПроверитьОшибкуИсполнения(Ошибка, СтрШаблон("Дата: Тип проверяемого значения `%1` не может быть проверен на длину значения>", Тип("Дата")));
+	ПроверитьОшибкуИсполнения(Ошибка, СтрШаблон("Дата: Тип проверяемого значения `%1` не может быть проверен на длину значения", Тип("Дата")));

Line range hint 1842-1860: Тест Равно_СравнениеСложныхОбъектов требует улучшения покрытия

Тест проверяет базовые сценарии сравнения сложных объектов, но можно расширить покрытие.

Рекомендуется добавить проверки:

  • Для вложенных структур с циклическими ссылками
  • Для коллекций с объектами разных типов
  • Для граничных случаев (пустые коллекции, null значения)
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between f65eb92 and a88cb09.

📒 Files selected for processing (5)
  • exts/yaxunit/src/CommonModules/ЮТЗапросыСлужебныйВызовСервера/Module.bsl (2 hunks)
  • exts/yaxunit/src/CommonModules/ЮТСравнениеСлужебныйКлиентСервер/Module.bsl (10 hunks)
  • exts/yaxunit/src/CommonModules/ЮТСравнениеСлужебныйСервер/Module.bsl (1 hunks)
  • exts/yaxunit/src/CommonModules/ЮТУтверждения/Module.bsl (2 hunks)
  • tests/src/CommonModules/ОМ_ЮТУтверждения/Module.bsl (11 hunks)
✅ Files skipped from review due to trivial changes (1)
  • exts/yaxunit/src/CommonModules/ЮТЗапросыСлужебныйВызовСервера/Module.bsl
🚧 Files skipped from review as they are similar to previous changes (1)
  • exts/yaxunit/src/CommonModules/ЮТУтверждения/Module.bsl
🔇 Additional comments (6)
exts/yaxunit/src/CommonModules/ЮТСравнениеСлужебныйСервер/Module.bsl (3)

21-26: Функция корректно реализует проверку равенства таблиц

Функция лаконично реализует проверку равенства таблиц через делегирование к РазличияТаблиц. Логика инвертирования результата через НЕ ЗначениеЗаполнено понятна и оправдана.


87-94: Функция корректно преобразует и сравнивает табличные документы

Функция правильно делегирует сравнение к РазличияТаблиц после преобразования табличных документов в таблицы значений.


96-101: Функция корректно реализует проверку равенства табличных документов

Функция лаконично реализует проверку равенства табличных документов через делегирование к РазличияТабличныхДокументов.

exts/yaxunit/src/CommonModules/ЮТСравнениеСлужебныйКлиентСервер/Module.bsl (2)

720-734: Функция ТаблицыРавны корректно реализует серверное сравнение

Функция правильно обрабатывает параметр Утверждение и делегирует сравнение соответствующим методам.


761-767: Функция ЗафиксироватьРазличия корректно регистрирует ошибки

Функция правильно регистрирует различия через механизм пояснений к ошибкам.

tests/src/CommonModules/ОМ_ЮТУтверждения/Module.bsl (1)

Line range hint 497-533: Тесты корректно проверяют сообщения об ошибках равенства

Тесты охватывают различные сценарии сравнения и проверяют корректность сообщений об ошибках.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Outside diff range and nitpick comments (2)
exts/yaxunit/src/CommonModules/ЮТСравнениеСлужебныйСервер/Module.bsl (1)

28-83: Рекомендуется оптимизировать сравнение таблиц.

Текущая реализация выполняет построчное сравнение в обратном порядке (от конца к началу). Хотя это работает, есть возможности для оптимизации:

  1. Сравнение можно выполнять в прямом порядке для лучшей читаемости
  2. Можно добавить ранний выход из цикла при достижении максимального количества различий

Предлагаю следующие изменения:

-Индекс = ПроверяемоеЗначение.Количество() - 1;
-Пока Индекс >= 0 Цикл
+Для Индекс = 0 По ПроверяемоеЗначение.Количество() - 1 Цикл
   ЗначенияРавны = ЮТСравнениеСлужебныйКлиентСервер.ЗначенияРавны(
     ПроверяемоеЗначение[Индекс][Колонка.Имя],
     ОжидаемоеЗначение[Индекс][Колонка.Имя],
     ПараметрыСравнения);
   
   Если НЕ ЗначенияРавны Тогда
     Сообщение = СтрШаблон("Строка № %1; колонка '%2'; ожидали %3, а получили %4",
       Индекс + 1,
       Колонка.Имя,
       ЮТСообщенияСлужебный.ПредставлениеЗначения(ОжидаемоеЗначение[Индекс][Колонка.Имя]),
       ЮТСообщенияСлужебный.ПредставлениеЗначения(ПроверяемоеЗначение[Индекс][Колонка.Имя]));
     Различия.Добавить(Сообщение);
+    // Опционально: ранний выход при достижении лимита различий
+    Если Различия.Количество() >= 10 Тогда
+      Прервать;
+    КонецЕсли;
   КонецЕсли;
-  Индекс = Индекс - 1;
КонецЦикла;
tests/src/CommonModules/ОМ_ЮТУтверждения/Module.bsl (1)

Line range hint 1842-1860: Рекомендуется расширить тестовые случаи.

Текущие тесты охватывают базовые сценарии, но можно добавить больше краевых случаев.

Предлагаю добавить следующие тестовые случаи:

 Варианты = Новый Массив();
 МассивЗначений = ЮТКоллекции.ЗначениеВМассиве(1, "2");
 Варианты.Добавить(Новый Структура("Значение, Описание", Новый Структура("Поле1, Поле2, Коллекция", 1, "2", МассивЗначений), "Структура с массивом"));
 Варианты.Добавить(Новый Структура("Значение, Описание", Новый Структура("Поле1, Поле2", 1, "2"), "Структура примитивов"));
 Варианты.Добавить(Новый Структура("Значение, Описание", МассивЗначений, "Массив примитивов"));
 Варианты.Добавить(Новый Структура("Значение, Описание", ВидДвиженияБухгалтерии.Дебет, "Системное перечисление"));
+// Добавляем краевые случаи
+Варианты.Добавить(Новый Структура("Значение, Описание", Новый Структура, "Пустая структура"));
+Варианты.Добавить(Новый Структура("Значение, Описание", Новый Массив, "Пустой массив"));
+Варианты.Добавить(Новый Структура("Значение, Описание", Новый Структура("Поле", Неопределено), "Структура с неопределено"));
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between a88cb09 and 2ff943c.

📒 Files selected for processing (6)
  • exts/yaxunit/src/CommonModules/ЮТЗапросыСлужебныйВызовСервера/Module.bsl (2 hunks)
  • exts/yaxunit/src/CommonModules/ЮТСравнениеСлужебныйКлиентСервер/Module.bsl (10 hunks)
  • exts/yaxunit/src/CommonModules/ЮТСравнениеСлужебныйСервер/Module.bsl (1 hunks)
  • exts/yaxunit/src/CommonModules/ЮТУтверждения/Module.bsl (2 hunks)
  • tests/src/CommonModules/ОМ_ЮТУтверждения/Module.bsl (11 hunks)
  • tests/src/CommonModules/ОМ_ЮТЧитательСлужебный/Module.bsl (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • exts/yaxunit/src/CommonModules/ЮТУтверждения/Module.bsl
  • exts/yaxunit/src/CommonModules/ЮТЗапросыСлужебныйВызовСервера/Module.bsl
🔇 Additional comments (9)
tests/src/CommonModules/ОМ_ЮТЧитательСлужебный/Module.bsl (1)

93-93: Проверить увеличение количества тестовых наборов

Увеличение ожидаемого количества тестовых наборов с 38 до 39 должно соответствовать добавлению новых тестов для функционала сравнения таблиц. Убедитесь, что все новые тесты были успешно добавлены и учтены в этом изменении.

exts/yaxunit/src/CommonModules/ЮТСравнениеСлужебныйСервер/Module.bsl (3)

21-26: LGTM! Функция корректно делегирует сравнение таблиц.

Функция правильно использует РазличияТаблиц и возвращает результат на основе наличия различий.


87-94: LGTM! Функция корректно делегирует сравнение табличных документов.

Функция правильно преобразует табличные документы в таблицы значений и использует РазличияТаблиц для сравнения.


96-100: LGTM! Функция корректно обрабатывает результат сравнения.

Функция правильно использует РазличияТабличныхДокументов и возвращает результат на основе наличия различий.

exts/yaxunit/src/CommonModules/ЮТСравнениеСлужебныйКлиентСервер/Module.bsl (3)

612-614: LGTM! Улучшены сообщения об ошибках.

Сообщения об ошибках стали более информативными и включают тип проверяемого значения.

Also applies to: 632-634, 652-654


720-734: LGTM! Корректная обработка серверного сравнения таблиц.

Функция правильно проверяет параметры и делегирует сравнение серверному модулю.


761-767: LGTM! Корректная регистрация различий.

Процедура правильно регистрирует каждое различие через механизм регистрации ошибок.

tests/src/CommonModules/ОМ_ЮТУтверждения/Module.bsl (2)

35-36: LGTM! Добавлены новые тестовые методы.

Корректно добавлены новые тестовые методы для проверки текстов ошибок.

Also applies to: 57-59


Line range hint 497-543: LGTM! Тесты корректно проверяют тексты ошибок.

Тесты охватывают различные сценарии форматирования сообщений об ошибках.

Comment on lines +736 to +759
Функция ТабличныеДокументыРавны(ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыСравнения)

Утверждение = ПараметрыСравнения = Неопределено ИЛИ НЕ ЮТКоллекции.ЗначениеСтруктуры(ПараметрыСравнения, "Утверждение", Ложь);

Если НЕ Утверждение Тогда
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда
Возврат ЮТСравнениеСлужебныйСервер.ТабличныеДокументыРавны(ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыСравнения);
#Иначе
//@skip-check bsl-legacy-check-expression-type
Возврат ЮТСравнениеСлужебныйВызовСервера.ТабличныеДокументыРавны(ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыСравнения);
#КонецЕсли
КонецЕсли;

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда
Различия = ЮТСравнениеСлужебныйСервер.РазличияТабличныхДокументов(ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыСравнения);
#Иначе
//@skip-check bsl-legacy-check-expression-type
Различия = ЮТСравнениеСлужебныйВызовСервера.РазличияТабличныхДокументов(ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыСравнения);
#КонецЕсли

ЗафиксироватьРазличия(Различия);
Возврат НЕ ЗначениеЗаполнено(Различия);

КонецФункции
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Рекомендуется добавить проверку типов.

Отсутствует проверка, что входные параметры являются табличными документами.

Предлагаю добавить проверку типов:

 Функция ТабличныеДокументыРавны(ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыСравнения)
+  // Проверка типов параметров
+  Если ТипЗнч(ПроверяемоеЗначение) <> Тип("ТабличныйДокумент") 
+    ИЛИ ТипЗнч(ОжидаемоеЗначение) <> Тип("ТабличныйДокумент") Тогда
+    ВызватьИсключение "Параметры должны быть табличными документами";
+  КонецЕсли;
+  
   Утверждение = ПараметрыСравнения = Неопределено ИЛИ НЕ ЮТКоллекции.ЗначениеСтруктуры(ПараметрыСравнения, "Утверждение", Ложь);
   // ... остальной код ...
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Функция ТабличныеДокументыРавны(ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыСравнения)
Утверждение = ПараметрыСравнения = Неопределено ИЛИ НЕ ЮТКоллекции.ЗначениеСтруктуры(ПараметрыСравнения, "Утверждение", Ложь);
Если НЕ Утверждение Тогда
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда
Возврат ЮТСравнениеСлужебныйСервер.ТабличныеДокументыРавны(ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыСравнения);
#Иначе
//@skip-check bsl-legacy-check-expression-type
Возврат ЮТСравнениеСлужебныйВызовСервера.ТабличныеДокументыРавны(ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыСравнения);
#КонецЕсли
КонецЕсли;
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда
Различия = ЮТСравнениеСлужебныйСервер.РазличияТабличныхДокументов(ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыСравнения);
#Иначе
//@skip-check bsl-legacy-check-expression-type
Различия = ЮТСравнениеСлужебныйВызовСервера.РазличияТабличныхДокументов(ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыСравнения);
#КонецЕсли
ЗафиксироватьРазличия(Различия);
Возврат НЕ ЗначениеЗаполнено(Различия);
КонецФункции
Функция ТабличныеДокументыРавны(ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыСравнения)
// Проверка типов параметров
Если ТипЗнч(ПроверяемоеЗначение) <> Тип("ТабличныйДокумент")
ИЛИ ТипЗнч(ОжидаемоеЗначение) <> Тип("ТабличныйДокумент") Тогда
ВызватьИсключение "Параметры должны быть табличными документами";
КонецЕсли;
Утверждение = ПараметрыСравнения = Неопределено ИЛИ НЕ ЮТКоллекции.ЗначениеСтруктуры(ПараметрыСравнения, "Утверждение", Ложь);
Если НЕ Утверждение Тогда
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда
Возврат ЮТСравнениеСлужебныйСервер.ТабличныеДокументыРавны(ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыСравнения);
#Иначе
//@skip-check bsl-legacy-check-expression-type
Возврат ЮТСравнениеСлужебныйВызовСервера.ТабличныеДокументыРавны(ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыСравнения);
#КонецЕсли
КонецЕсли;
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда
Различия = ЮТСравнениеСлужебныйСервер.РазличияТабличныхДокументов(ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыСравнения);
#Иначе
//@skip-check bsl-legacy-check-expression-type
Различия = ЮТСравнениеСлужебныйВызовСервера.РазличияТабличныхДокументов(ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыСравнения);
#КонецЕсли
ЗафиксироватьРазличия(Различия);
Возврат НЕ ЗначениеЗаполнено(Различия);
КонецФункции

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.

Доработать сравнение таблиц. Добавить вывод различий
1 participant