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

120 / Конструктор движений #413

Merged
merged 12 commits into from
Sep 24, 2024
Merged

120 / Конструктор движений #413

merged 12 commits into from
Sep 24, 2024

Conversation

alkoleft
Copy link
Member

@alkoleft alkoleft commented Sep 21, 2024

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

  • Конструктор установки движений документа
  • Конструктор коллекций

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

Close #120

Summary by CodeRabbit

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

Copy link
Contributor

coderabbitai bot commented Sep 21, 2024

Walkthrough

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

Changes

Файл Изменения
exts/yaxunit/src/CommonModules/ЮТКонструкторТестовыхДанныхСлужебный/Module.bsl Добавлены функции для создания объектов и работы с данными таблиц и коллекций.
fixtures/demo-configuration/src/InformationRegisters/КурсыВалют/RecordSetModule.bsl Добавлена процедура для проверки корректности курса валют перед записью.
tests/src/CommonModules/Обр_ЮТКонструкторДвижений_МО/Module.bsl Добавлены процедуры для тестирования функциональности конструкторов движений в контексте обработки документов.

Assessment against linked issues

Objective Addressed Explanation
Создание движений в Регистре сведений подчинённый регистратору (120)
Исправление ошибки при вызове метода контекста (120) Ошибка не была устранена в текущих изменениях.

🐇 В мире кода, где функции живут,
Новый модуль в тестах нас ждет,
Коллекции, данные — всё в порядке,
С rabbit'ом вместе мы в радости вряд ли!
Пусть ошибки уйдут, как ветер весной,
В нашем коде теперь всё будет с тобой! 🌼


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 failed! failed

bug 1 Bugs
vulnerability 0 Vulnerabilities
code_smell 1 Code Smells

No data Coverage
duplication_lt_20 25.85% Duplication

Copy link
Contributor

@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: 10

Outside diff range and nitpick comments (6)
tests/src/CommonModules/ОМ_ЮТКонструкторКоллекцийСлужебныйКлиентСервер/Module.bsl (4)

32-36: Напоминание: реализовать тест.

Процедура Инициализировать в настоящее время содержит заглушку, которая вызывает исключение с сообщением "Тест не реализован". Пожалуйста, не забудьте реализовать фактическую логику теста.

Хотите, чтобы я открыл задачу в GitHub для отслеживания этой работы?


38-42: Напоминание: реализовать тест.

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

Хотите, чтобы я открыл задачу в GitHub для отслеживания этой работы?


44-48: Напоминание: реализовать тест.

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

Хотите, чтобы я открыл задачу в GitHub для отслеживания этой работы?


50-54: Напоминание: реализовать тест.

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

Хотите, чтобы я открыл задачу в GitHub для отслеживания этой работы?

tests/src/Configuration/Configuration.mdo (2)

33-33: Добавлен новый общий модуль CommonModule.Обр_ЮТКонструкторДвижений_МО.

Пожалуйста, предоставьте более подробную информацию о назначении и использовании этого модуля. Это поможет лучше понять его роль в общей функциональности и облегчит дальнейшее сопровождение кода.


47-47: Добавлен новый общий модуль CommonModule.ОМ_ЮТКонструкторКоллекцийСлужебныйКлиентСервер.

Пожалуйста, предоставьте более подробную информацию о назначении и использовании этого модуля. В частности, поясните:

  • Какую функциональность он предоставляет в контексте работы с коллекциями?
  • Как он взаимодействует с существующим модулем CommonModule.ОМ_ЮТКоллекции?
  • Какие аспекты реализованы на клиенте, а какие на сервере?

Это поможет лучше понять архитектуру и облегчит дальнейшее сопровождение кода.

Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between 755cbf8 and 9bcb1a8.

Files selected for processing (14)
  • exts/yaxunit/src/CommonModules/ЮТКонструкторКоллекцийСлужебныйКлиентСервер/Module.bsl (1 hunks)
  • exts/yaxunit/src/CommonModules/ЮТКонструкторКоллекцийСлужебныйКлиентСервер/ЮТКонструкторКоллекцийСлужебныйКлиентСервер.mdo (1 hunks)
  • exts/yaxunit/src/CommonModules/ЮТКонструкторТестовыхДанныхСлужебный/Module.bsl (8 hunks)
  • exts/yaxunit/src/CommonModules/ЮТМетаданные/Module.bsl (1 hunks)
  • exts/yaxunit/src/CommonModules/ЮТТестовыеДанные/Module.bsl (1 hunks)
  • exts/yaxunit/src/Configuration/Configuration.mdo (2 hunks)
  • exts/yaxunit/src/DataProcessors/ЮТКонструкторДвижений/ObjectModule.bsl (1 hunks)
  • exts/yaxunit/src/DataProcessors/ЮТКонструкторДвижений/ЮТКонструкторДвижений.mdo (1 hunks)
  • exts/yaxunit/src/DataProcessors/ЮТКонструкторТестовыхДанных/ObjectModule.bsl (1 hunks)
  • tests/src/CommonModules/ОМ_ЮТКонструкторКоллекцийСлужебныйКлиентСервер/Module.bsl (1 hunks)
  • tests/src/CommonModules/ОМ_ЮТКонструкторКоллекцийСлужебныйКлиентСервер/ОМ_ЮТКонструкторКоллекцийСлужебныйКлиентСервер.mdo (1 hunks)
  • tests/src/CommonModules/Обр_ЮТКонструкторДвижений_МО/Module.bsl (1 hunks)
  • tests/src/CommonModules/Обр_ЮТКонструкторДвижений_МО/Обр_ЮТКонструкторДвижений_МО.mdo (1 hunks)
  • tests/src/Configuration/Configuration.mdo (2 hunks)
Additional comments not posted (29)
tests/src/CommonModules/Обр_ЮТКонструкторДвижений_МО/Обр_ЮТКонструкторДвижений_МО.mdo (1)

1-7: Определение общего модуля выглядит корректным.

Новый общий модуль "Обр_ЮТКонструкторДвижений_МО" определен правильно:

  • XML-структура соответствует формату метаданных.
  • Модуль помечен как управляемое клиентское приложение, серверное приложение и обычное клиентское приложение, что указывает на его возможности работы как на клиенте, так и на сервере.
  • Включен уникальный идентификатор (UUID) для однозначной идентификации модуля.

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

tests/src/CommonModules/ОМ_ЮТКонструкторКоллекцийСлужебныйКлиентСервер/ОМ_ЮТКонструкторКоллекцийСлужебныйКлиентСервер.mdo (1)

1-7: Изменения выглядят хорошо!

Новый общий модуль "ОМ_ЮТКонструкторКоллекцийСлужебныйКлиентСервер" объявлен корректно:

  • XML-структура соответствует формату метаданных и использует правильное пространство имен.
  • Свойства модуля, такие как clientManagedApplication, server и clientOrdinaryApplication, установлены должным образом.

Никаких проблем с конфигурацией модуля не обнаружено.

exts/yaxunit/src/CommonModules/ЮТКонструкторКоллекцийСлужебныйКлиентСервер/ЮТКонструкторКоллекцийСлужебныйКлиентСервер.mdo (1)

1-11: Новый общий модуль выглядит хорошо!

Структура XML-файла правильная и соответствует ожидаемой схеме метаданных. Общий модуль имеет уникальный идентификатор UUID, русский синоним и правильно помечен как клиентское, серверное и обычное клиентское приложение.

Никаких проблем не обнаружено. Добавление нового общего модуля одобрено.

exts/yaxunit/src/DataProcessors/ЮТКонструкторДвижений/ЮТКонструкторДвижений.mdo (1)

1-13: Новый класс обработки данных соответствует ожидаемой структуре и соглашениям.

Представленный XML-файл правильно определяет новый класс обработки данных "ЮТКонструкторДвижений" в рамках метаданных. Файл точно указывает структуру и свойства обработчика данных, включая его UUID, производимые типы, имя, синоним и использование стандартных команд. Введение этого нового класса обработки данных расширяет возможности системы по управлению движениями данных и коллекциями.

tests/src/CommonModules/ОМ_ЮТКонструкторКоллекцийСлужебныйКлиентСервер/Module.bsl (1)

21-30: Выглядит хорошо!

Процедура ИсполняемыеСценарии корректно добавляет набор тестовых сценариев в тестовый набор с использованием объекта ЮТТесты. Каждый добавленный тест соответствует процедуре, определенной далее в файле.

tests/src/CommonModules/Обр_ЮТКонструкторДвижений_МО/Module.bsl (8)

21-33: LGTM!

Процедура ИсполняемыеСценарии корректно инициализирует набор тестов с использованием ЮТТесты.ВТранзакции(). Логика и синтаксис выглядят правильно.


35-49: LGTM!

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


51-68: LGTM!

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


70-74: Пропустить.

Процедура УстановитьРеквизиты является заглушкой и не содержит реализации теста. Пока нет необходимости в комментариях.


76-80: Пропустить.

Процедура Фикция является заглушкой и не содержит реализации теста. Пока нет необходимости в комментариях.


82-86: Пропустить.

Процедура ФикцияРеквизитов является заглушкой и не содержит реализации теста. Пока нет необходимости в комментариях.


88-92: Пропустить.

Процедура ФикцияОбязательныхПолей является заглушкой и не содержит реализации теста. Пока нет необходимости в комментариях.


94-98: Пропустить.

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

exts/yaxunit/src/DataProcessors/ЮТКонструкторТестовыхДанных/ObjectModule.bsl (1)

274-274: Изменение выглядит корректным, но требует дополнительной проверки.

Изменение в реализации функции ДанныеСтроки заключается в вызове метода ДанныеСтрокиТабличнойЧасти вместо ДанныеСтроки. Это указывает на изменение логики обработки данных.

Чтобы убедиться, что это изменение не повлияет на работу кода, выполните следующий скрипт для поиска использований функции ДанныеСтроки и проанализируйте, ожидаемо ли изменение поведения и совместимо ли оно:

Verification successful

Изменение локализовано и не должно повлиять на другие части кодовой базы

Анализ использования функции ДанныеСтроки() показал, что изменение затрагивает только файл ./exts/yaxunit/src/DataProcessors/ЮТКонструкторТестовыхДанных/ObjectModule.bsl. Другие объявления этой функции в кодовой базе остались без изменений.

Однако стоит отметить:

  • Функция используется в нескольких тестовых файлах.
  • Рекомендуется провести тщательное тестирование, чтобы убедиться, что изменение не повлияло на работу тестов и функциональность в целом.
Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Описание: Поиск использований функции `ДанныеСтроки` в коде.

# Тест: Поиск вызовов функции `ДанныеСтроки`. 
# Ожидание: Только вызовы функции `ДанныеСтроки` без аргументов.
rg --type bsl $'ДанныеСтроки\(\)'

Length of output: 62


Script:

#!/bin/bash
# Описание: Поиск использований функции `ДанныеСтроки` в коде .bsl файлов.

# Поиск .bsl файлов и поиск в них вызовов функции `ДанныеСтроки()`
echo "Поиск вызовов ДанныеСтроки() в .bsl файлах:"
find . -name "*.bsl" -type f -exec grep -Hn "ДанныеСтроки()" {} +

# Альтернативный метод с использованием ripgrep
echo "Альтернативный поиск с использованием ripgrep:"
rg --type-add 'bsl:*.bsl' -t bsl "ДанныеСтроки\(\)"

Length of output: 1904

exts/yaxunit/src/Configuration/Configuration.mdo (2)

90-90: Добавлен новый общий модуль ЮТКонструкторКоллекцийСлужебныйКлиентСервер.

Этот модуль расширяет функциональность конфигурации. Судя по названию, он предназначен для конструирования коллекций и может использоваться как на клиенте, так и на сервере.


163-163: Добавлен новый обработчик данных ЮТКонструкторДвижений.

Этот обработчик расширяет функциональность конфигурации. Судя по названию, он предназначен для конструирования движений документов.

exts/yaxunit/src/CommonModules/ЮТМетаданные/Module.bsl (1)

310-320: Выглядит хорошо!

Реализация функции ОписаниеРегистраДвиженийДокумента корректна и хорошо структурирована:

  • Функция принимает два параметра: Документ и ИмяРегистра, и возвращает описание метаданных регистра движения документа с указанным именем.
  • Логика функции проста для понимания. Она проверяет наличие регистра с указанным именем в наборе регистров движения документа, используя функцию РегистрыДвиженийДокумента.
  • Если регистр не найден, функция возвращает Неопределено. Это позволяет корректно обрабатывать случаи, когда запрошенный регистр отсутствует.
  • Если регистр найден, функция возвращает его описание метаданных, используя функцию ОписаниеОбъектаМетаданных.

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

exts/yaxunit/src/CommonModules/ЮТТестовыеДанные/Module.bsl (2)

858-862: Изменения выглядят хорошо!

Новая экспортная функция КонструкторДвижений корректно делегирует инициализацию конструктора движений модулю ЮТКонструкторТестовыхДанныхСлужебный. Логика и синтаксис функции в порядке.


858-862: Проверьте использование новой функции в кодовой базе.

Убедитесь, что вызовы новой функции КонструкторДвижений корректно обрабатываются и не приводят к ошибкам.

Запустите следующий скрипт для проверки использования функции:

Verification successful

Функция КонструкторДвижений корректно реализована и используется в кодовой базе.

Проверка показала, что новая функция КонструкторДвижений успешно внедрена в модуль ЮТТестовыеДанные и используется в тестовых модулях. Функция инициализируется с помощью ЮТКонструкторТестовыхДанныхСлужебный.ИнициализироватьКонструкторДвижений, что соответствует ожидаемому поведению. В найденных случаях использования не обнаружено очевидных ошибок или некорректного применения функции.

Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Описание: Проверка использования функции `КонструкторДвижений` в кодовой базе.

# Тест: Поиск вызовов функции. Ожидается: Только корректное использование.
rg --type bsl -A 5 $'КонструкторДвижений'

Length of output: 204


Script:

#!/bin/bash
# Описание: Проверка использования функции `КонструкторДвижений` в кодовой базе.

# Поиск вызовов функции с помощью ast-grep
ast-grep --lang bsl --pattern 'КонструкторДвижений($_)'

# Если ast-grep не найдет результатов, выполним поиск с помощью rg
if [ $? -ne 0 ]; then
  echo "Результаты поиска с помощью ripgrep:"
  rg -i 'КонструкторДвижений' -A 5
fi

Length of output: 10380

exts/yaxunit/src/DataProcessors/ЮТКонструкторДвижений/ObjectModule.bsl (2)

124-128: Проверьте корректность обработки массивов в методе ФикцияРеквизитов.

Если ИменаРеквизитов передается как массив, убедитесь, что метод ЮТКонструкторТестовыхДанныхСлужебный.ФикцияРеквизитов правильно обрабатывает этот тип данных. Возможно, потребуется добавить проверки или преобразования типов.


57-62: Убедитесь в корректности обработки ошибок в методе Установить.

Метод Установить вызывает ЮТКонструкторТестовыхДанныхСлужебный.Установить, но неизвестно, как обрабатываются возможные исключения или ошибки в вызываемом методе. Рекомендуется добавить обработку ошибок или подтвердить, что вызываемый метод надежно обрабатывает исключительные ситуации.

exts/yaxunit/src/CommonModules/ЮТКонструкторТестовыхДанныхСлужебный/Module.bsl (8)

174-174: Переименование функции для повышения ясности

Переименование функции ДанныеСтроки в ДанныеСтрокиТабличнойЧасти улучшает понимание ее назначения и делает код более понятным.


190-199: Добавлена функция для работы с коллекциями

Новая функция ДанныеСтрокиКоллекции корректно реализует получение данных последней строки коллекции. Проверки на заполненность данных и обработка исключений реализованы правильно.


229-244: Инициализация конструктора движений

Функция ИнициализироватьКонструкторДвижений корректно инициализирует конструктор движений в зависимости от типа приложения (сервер или клиент). Использование условной компиляции и методов получения формы соответствует лучшим практикам для платформы 1С.


278-289: Создание нового контекста конструктора движений

Функция НовыйКонтекстКонструктораДвижений правильно инициализирует контекст для конструктора движений, устанавливая необходимые свойства. Логика функции соответствует ожиданиям.


333-333: Использование функции ФокусНаТабличнойЧасти

В функции Реквизиты добавлена проверка Если ФокусНаТабличнойЧасти(Контекст) Тогда, что повышает читаемость и переиспользуемость кода.


347-347: Улучшение сообщения об ошибке

Добавление проверки Если ФокусНаТабличнойЧасти(Контекст) Тогда при формировании пояснения позволяет предоставить более точное сообщение об ошибке, указывая на конкретную табличную часть.


362-365: Корректировка логики функции ТекущаяЗапись

Добавление условия ИначеЕсли ЭтоКонструкторКоллекции(Контекст) Тогда обеспечивает правильное определение текущей записи в контексте конструктора коллекции, что улучшает работу функции в разных сценариях.


379-384: Новая функция ФокусНаТабличнойЧасти

Функция ФокусНаТабличнойЧасти правильно определяет, находится ли текущий фокус на табличной части. Это повышает читаемость кода и способствует его повторному использованию.

@github-actions github-actions bot deleted a comment from coderabbitai bot Sep 22, 2024
@github-actions github-actions bot deleted a comment from coderabbitai bot Sep 22, 2024
@github-actions github-actions bot deleted a comment from coderabbitai bot Sep 22, 2024
@github-actions github-actions bot deleted a comment from coderabbitai bot Sep 22, 2024
@github-actions github-actions bot deleted a comment from coderabbitai bot Sep 22, 2024
@github-actions github-actions bot deleted a comment from coderabbitai bot Sep 22, 2024
@github-actions github-actions bot deleted a comment from coderabbitai bot Sep 22, 2024
@github-actions github-actions bot deleted a comment from coderabbitai bot Sep 22, 2024
@github-actions github-actions bot deleted a comment from coderabbitai bot Sep 22, 2024
@github-actions github-actions bot deleted a comment from coderabbitai bot Sep 22, 2024
@github-actions github-actions bot deleted a comment from alkoleft Sep 22, 2024
@github-actions github-actions bot deleted a comment from coderabbitai bot Sep 22, 2024
@github-actions github-actions bot deleted a comment from alkoleft Sep 22, 2024
@github-actions github-actions bot deleted a comment from coderabbitai bot Sep 22, 2024
@github-actions github-actions bot deleted a comment from alkoleft Sep 22, 2024
@github-actions github-actions bot deleted a comment from coderabbitai bot Sep 22, 2024
@github-actions github-actions bot deleted a comment from alkoleft Sep 22, 2024
@github-actions github-actions bot deleted a comment from coderabbitai bot Sep 22, 2024
@github-actions github-actions bot deleted a comment from alkoleft Sep 22, 2024
@github-actions github-actions bot deleted a comment from coderabbitai bot Sep 22, 2024
@github-actions github-actions bot deleted a comment from alkoleft Sep 22, 2024
@github-actions github-actions bot deleted a comment from coderabbitai bot Sep 22, 2024
@github-actions github-actions bot deleted a comment from alkoleft Sep 22, 2024
@github-actions github-actions bot deleted a comment from coderabbitai bot Sep 24, 2024
@github-actions github-actions bot deleted a comment from coderabbitai bot Sep 24, 2024
@github-actions github-actions bot deleted a comment from coderabbitai bot Sep 24, 2024
@github-actions github-actions bot deleted a comment from coderabbitai bot Sep 24, 2024
@github-actions github-actions bot deleted a comment from alkoleft Sep 24, 2024
@github-actions github-actions bot deleted a comment from coderabbitai bot Sep 24, 2024
@github-actions github-actions bot deleted a comment from alkoleft Sep 24, 2024
@github-actions github-actions bot deleted a comment from coderabbitai bot Sep 24, 2024
@alkoleft
Copy link
Member Author

@coderabbitai Сделай переводы всех строк в коде и создай suggestions.

Используя подход НСтр("ru='Курс не может быть отрицательным или нулем';en='Exchange rate cannot be negative or zero'");

Copy link
Contributor

coderabbitai bot commented Sep 24, 2024

Oops, something went wrong! Please try again later. 🐰 💔

Copy link
Contributor

@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: 6

Outside diff range and nitpick comments (3)
tests/src/CommonModules/Обр_ЮТКонструкторДвижений_МО/Module.bsl (3)

92-93: Проверка выброса исключения на корректность использования метода

В строках 92-93 выполняется проверка выброса исключения при вызове метода "Установить" без предварительного добавления строки:

ЮТест.ОжидаетЧто(Конструктор)
    .Метод("Установить", ЮТКоллекции.ЗначениеВМассиве("Покупатель", Покупатель)).ВыбрасываетИсключение("Сначала необходимо добавить строку");

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


193-196: Единообразие использования кавычек в сообщениях исключений

В сообщении исключения используются обратные кавычки для обозначения названий объектов:

.ВыбрасываетИсключение("`РегистрНакопления.ТоварныеЗапасы` не содержит реквизит `НесуществующийРеквизит`");

Для улучшения читаемости и единообразия рекомендуется использовать один стиль кавычек в сообщениях, например, двойные кавычки или кавычки «ёлочки».


280-295: Улучшение читаемости проверок записей регистра сведений

В блоке проверки записей регистра:

ЮТест.ОжидаетЧто(ЗаписиРегистра)
    .Заполнено()
    .ИмеетДлину(1)
    .Свойство("[0].Регистратор").Равно(Документ)
    .Свойство("[0].Товар").Равно(Товар)
    .Свойство("[0].ВидЦен").Равно(ВидыЦены)
    .Свойство("[0].Цена").Равно(Цена)
;

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

Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between 0b72452 and 6ea961c.

Files selected for processing (3)
  • exts/yaxunit/src/CommonModules/ЮТКонструкторТестовыхДанныхСлужебный/Module.bsl (17 hunks)
  • fixtures/demo-configuration/src/InformationRegisters/КурсыВалют/RecordSetModule.bsl (1 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
  • fixtures/demo-configuration/src/InformationRegisters/КурсыВалют/RecordSetModule.bsl
Additional comments not posted (1)
tests/src/CommonModules/Обр_ЮТКонструкторДвижений_МО/Module.bsl (1)

109-114: Проверка корректности установки пользовательского периода

При установке периода в конструкторе движений:

.Установить("Период", Период);

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

Comment on lines +38 to +60
Процедура Инициализировать() Экспорт

// Создаем документ
Документ = ЮТест.Данные().СоздатьДокумент("Документы.ПриходТовара");

// Инициализируем конструктор движений
Конструктор = ЮТест.Данные().КонструкторДвижений(Документ, "ТоварныеЗапасы");

// Проверяем, что конструктор инициализирован
ЮТест.ОжидаетЧто(Конструктор, "Конструктор должен быть инициализирован")
.НеРавно(Неопределено);

// Проверяем, что данные конструктора пусты
Данные = Конструктор.Данные();
ЮТест.ОжидаетЧто(Данные, "Данные конструктора должны быть пустым массивом")
.ИмеетТип("Массив")
.Равно(Новый Массив);

ЮТест.ОжидаетЧто(ЮТест.Данные())
.Метод("КонструкторДвижений", ЮТКоллекции.ЗначениеВМассиве(Документ, "НесуществующийРегистр"))
.ВыбрасываетИсключение("Документ " + Документ + " не делает движений по регистру ""НесуществующийРегистр""");

КонецПроцедуры
Copy link
Contributor

@coderabbitai coderabbitai bot Sep 24, 2024

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Предложение по устранению дублирования кода при создании документов

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

Copy link
Member Author

Choose a reason for hiding this comment

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

Думаю что в тестах дублирование оправдано

Copy link
Contributor

Choose a reason for hiding this comment

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

@alkoleft, понятно, спасибо за пояснение.

(っ˘̩╭╮˘̩)っ


Learnings added
Learnt from: alkoleft
PR: bia-technologies/yaxunit#413
File: tests/src/CommonModules/Обр_ЮТКонструкторДвижений_МО/Module.bsl:38-60
Timestamp: 2024-09-24T21:57:03.102Z
Learning: В тестах дублирование кода при создании документов и инициализации конструкторов движений оправдано.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.


Learnings used
Learnt from: alkoleft
PR: bia-technologies/yaxunit#413
File: tests/src/CommonModules/Обр_ЮТКонструкторДвижений_МО/Module.bsl:207-207
Timestamp: 2024-09-23T00:09:43.463Z
Learning: При написании тестов необходимо добавлять проверку записанных в регистр значений, используя методы `ЮТест.ОжидаетЧто` и `ЮТЗапросы.ДвиженияДокумента`, формируя проверки по образцу, например:

```bsl
ЮТест.ОжидаетЧто(ЮТЗапросы.ДвиженияДокумента(Документ, "Регистр"))
    .Заполнено()
    .ИмеетДлину(N)
    .Свойство("[0].Параметр").Равно(Значение)
;

</details>

<!-- This is an auto-generated reply by CodeRabbit -->


ЮТест.ОжидаетЧто(ЮТест.Данные())
.Метод("КонструкторДвижений", ЮТКоллекции.ЗначениеВМассиве(Документ, "НесуществующийРегистр"))
.ВыбрасываетИсключение("Документ " + Документ + " не делает движений по регистру ""НесуществующийРегистр""");
Copy link
Contributor

@coderabbitai coderabbitai bot Sep 24, 2024

Choose a reason for hiding this comment

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

⚠️ Potential issue

Некорректное использование кавычек в сообщении исключения

В строке 58 при формировании сообщения исключения используются двойные кавычки внутри строки, что может привести к ошибкам при выводе сообщения:

"Документ " + Документ + " не делает движений по регистру ""НесуществующийРегистр"""

Рекомендуется использовать одинарные кавычки для обозначения имени регистра или экранировать двойные кавычки, чтобы сообщение отображалось корректно.

Copy link
Member Author

Choose a reason for hiding this comment

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

Это синтаксис языка 1с (bsl), это способ экранирования двойных кавычек

Copy link
Contributor

Choose a reason for hiding this comment

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

@alkoleft, спасибо за разъяснение. Я учту это при будущих обзорах.

(_/)
(•.•)
( 💭)


Learnings added
Learnt from: alkoleft
PR: bia-technologies/yaxunit#413
File: tests/src/CommonModules/Обр_ЮТКонструкторДвижений_МО/Module.bsl:58-58
Timestamp: 2024-09-24T21:56:56.855Z
Learning: В языке 1С (BSL) для экранирования двойных кавычек внутри строк используется удвоенная кавычка (`""`).

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.


Learnings used
Learnt from: alkoleft
PR: bia-technologies/yaxunit#413
File: tests/src/CommonModules/Обр_ЮТКонструкторДвижений_МО/Module.bsl:207-207
Timestamp: 2024-09-23T00:09:43.463Z
Learning: При написании тестов необходимо добавлять проверку записанных в регистр значений, используя методы `ЮТест.ОжидаетЧто` и `ЮТЗапросы.ДвиженияДокумента`, формируя проверки по образцу, например:

```bsl
ЮТест.ОжидаетЧто(ЮТЗапросы.ДвиженияДокумента(Документ, "Регистр"))
    .Заполнено()
    .ИмеетДлину(N)
    .Свойство("[0].Параметр").Равно(Значение)
;

</details>

<!-- This is an auto-generated reply by CodeRabbit -->

Comment on lines +75 to +77
.Свойство(0)
.ИмеетТип("Структура")
.НеЗаполнено();
Copy link
Contributor

@coderabbitai coderabbitai bot Sep 24, 2024

Choose a reason for hiding this comment

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

⚠️ Potential issue

Потенциальная ошибка при обращении к первому элементу массива

В блоке:

ЮТест.ОжидаетЧто(Данные)
    .Заполнено()
    .ИмеетТип("Массив")
    .ИмеетДлину(1)
    .Свойство(0)
        .ИмеетТип("Структура")
        .НеЗаполнено();

Обращение к элементу массива по индексу 0 может привести к ошибке, если массив пустой или не содержит элементов. Рекомендуется добавить проверку наличия элементов в массиве перед обращением по индексу.

Copy link
Member Author

Choose a reason for hiding this comment

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

Наличие элементов проверяется утверждением Заполнено() и ИмеетДлину(1)

Copy link
Contributor

Choose a reason for hiding this comment

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

@alkoleft, спасибо за уточнение. Вы правы, наличие элементов проверяется при помощи утверждений Заполнено() и ИмеетДлину(1), поэтому дополнительная проверка не требуется. Извините за беспокойство.

(。•́︿•̀。)


Learnings added
Learnt from: alkoleft
PR: bia-technologies/yaxunit#413
File: tests/src/CommonModules/Обр_ЮТКонструкторДвижений_МО/Module.bsl:75-77
Timestamp: 2024-09-24T21:57:02.761Z
Learning: При проверке массивов в тестах, если используются утверждения `Заполнено()` и `ИмеетДлину(N)`, обращение к элементам массива по индексу считается безопасным, и не требуется дополнительной проверки наличия элементов.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.


Learnings used
Learnt from: alkoleft
PR: bia-technologies/yaxunit#413
File: tests/src/CommonModules/Обр_ЮТКонструкторДвижений_МО/Module.bsl:207-207
Timestamp: 2024-09-23T00:09:43.463Z
Learning: При написании тестов необходимо добавлять проверку записанных в регистр значений, используя методы `ЮТест.ОжидаетЧто` и `ЮТЗапросы.ДвиженияДокумента`, формируя проверки по образцу, например:

```bsl
ЮТест.ОжидаетЧто(ЮТЗапросы.ДвиженияДокумента(Документ, "Регистр"))
    .Заполнено()
    .ИмеетДлину(N)
    .Свойство("[0].Параметр").Равно(Значение)
;

</details>

<!-- This is an auto-generated reply by CodeRabbit -->

Comment on lines +228 to +231
МассивПараметров = ЮТКоллекции.ЗначениеВМассиве("Несуществующий1");
ЮТест.ОжидаетЧто(Конструктор)
.Метод("ФикцияРеквизитов", МассивПараметров)
.ВыбрасываетИсключение("`РегистрНакопления.ТоварныеЗапасы` не содержит реквизит `Несуществующий1`");
Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Устранение дублирования в проверках выброса исключений

Код проверки выброса исключения при указании несуществующего реквизита повторяется:

ЮТест.ОжидаетЧто(Конструктор)
    .Метод("ФикцияРеквизитов", МассивПараметров)
    .ВыбрасываетИсключение("`РегистрНакопления.ТоварныеЗапасы` не содержит реквизит `Несуществующий1`");

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

Comment on lines +250 to +257
ОбязательныеПоля = ЮТКоллекции.ЗначениеВМассиве("Товар", "Склад");

// Проверяем, что все обязательные поля заполнены
Утверждение = ЮТест.ОжидаетЧто(Данные);
Для Каждого Поле Из ОбязательныеПоля Цикл
Утверждение.Свойство(Поле)
.Заполнено();
КонецЦикла;
Copy link
Contributor

@coderabbitai coderabbitai bot Sep 24, 2024

Choose a reason for hiding this comment

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

⚠️ Potential issue

Проверка наличия реквизитов в данных строки перед проверкой заполненности

В цикле проверки обязательных полей:

Для Каждого Поле Из ОбязательныеПоля Цикл
    Утверждение.Свойство(Поле)
        .Заполнено();
КонецЦикла;

Если в данных строки отсутствует какой-либо из обязательных реквизитов, это приведет к ошибке выполнения. Рекомендуется добавить проверку наличия реквизита в данных перед проверкой его заполненности.

Copy link
Member Author

Choose a reason for hiding this comment

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

Утверждение Свойство(Поле) как раз проверяет наличие реквизита

Copy link
Contributor

Choose a reason for hiding this comment

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

@alkoleft, спасибо за разъяснение. Действительно, метод Свойство(Поле) проверяет наличие реквизита, что предотвращает ошибку выполнения при его отсутствии.

(_/)
( •_•)
( >💡< )


Learnings added
Learnt from: alkoleft
PR: bia-technologies/yaxunit#413
File: tests/src/CommonModules/Обр_ЮТКонструкторДвижений_МО/Module.bsl:250-257
Timestamp: 2024-09-24T21:57:11.772Z
Learning: Метод `Свойство(Поле)` в `ЮТест.ОжидаетЧто` проверяет наличие реквизита и предотвращает ошибку выполнения, если реквизит отсутствует.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.

Comment on lines +302 to +313
Документ = ЮТест.Данные().СоздатьДокумент("Документы.РасходТовара");

// Инициализируем конструктор движений
ЮТест.Данные().КонструкторДвижений(Документ, "ТоварныеЗапасы")
.ДобавитьСтроку()
.ФикцияРеквизитов("Товар, Склад, Количество")
.Записать();

ЮТест.ОжидаетЧтоТаблицаБазы("РегистрНакопления.ТоварныеЗапасы")
.СодержитЗаписи(ЮТест.Предикат()
.Реквизит("Регистратор").Равно(Документ));

Copy link
Contributor

@coderabbitai coderabbitai bot Sep 24, 2024

Choose a reason for hiding this comment

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

⚠️ Potential issue

Отсутствие проверки результата записи движений регистра накопления

После записи движений в процедуре "Записать_РегистрНакопления" отсутствует проверка того, что записи были успешно созданы и содержат ожидаемые данные. Рекомендуется добавить проверки, аналогичные тем, что используются в процедуре "Записать_РегистрСведений", чтобы убедиться в корректности записанных движений.

Copy link
Member Author

Choose a reason for hiding this comment

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

Наличие записей проверяется утверждением ЮТест.ОжидаетЧтоТаблицаБазы("РегистрНакопления.ТоварныеЗапасы").СодержитЗаписи() этого достаточно

Copy link
Contributor

Choose a reason for hiding this comment

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

@alkoleft, спасибо за уточнение. Если проверка ЮТест.ОжидаетЧтоТаблицаБазы("РегистрНакопления.ТоварныеЗапасы").СодержитЗаписи() достаточна для ваших нужд, то дополнительных замечаний нет.


Learnings added
Learnt from: alkoleft
PR: bia-technologies/yaxunit#413
File: tests/src/CommonModules/Обр_ЮТКонструкторДвижений_МО/Module.bsl:302-313
Timestamp: 2024-09-24T21:56:58.470Z
Learning: В процедуре "Записать_РегистрНакопления" наличие записей проверяется с помощью `ЮТест.ОжидаетЧтоТаблицаБазы("РегистрНакопления.ТоварныеЗапасы").СодержитЗаписи()`, что достаточно для проверки записей.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.

@alkoleft
Copy link
Member Author

@coderabbitai Сделай переводы всех строк в коде и создай suggestions.

Используя подход НСтр("ru='Курс не может быть отрицательным или нулем';en='Exchange rate cannot be negative or zero'");

Copy link
Contributor

coderabbitai bot commented Sep 24, 2024

Oops, something went wrong! Please try again later. 🐰 💔

@alkoleft alkoleft merged commit 11b8110 into develop Sep 24, 2024
18 of 21 checks passed
@alkoleft alkoleft deleted the feature/120 branch September 24, 2024 21:59
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