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

Add functions for ftp #108

Closed
wants to merge 5 commits into from
Closed

Add functions for ftp #108

wants to merge 5 commits into from

Conversation

thvvmas
Copy link
Contributor

@thvvmas thvvmas commented Sep 23, 2024

#100

Summary by CodeRabbit

  • New Features

    • Enhanced integration capabilities with the addition of FTP resource support in forms.
    • Updated user interface labels for clarity, changing "Путь к каталогу" to "Адрес сервера."
    • Introduced new functions for FTP operations, including connection handling, file management, and error checking.
    • Added functionality to check for the existence of subsystems and retrieve the primary language code.
    • Expanded the set of excluded words during processing to improve relevance.
  • Bug Fixes

    • Adjusted logic for integration elements to improve handling of FTP resources.

@thvvmas thvvmas added the new function Новая функциональность label Sep 23, 2024
Copy link

coderabbitai bot commented Sep 23, 2024

Walkthrough

The pull request introduces updates to enhance FTP integration within the application. It adds new functionalities for handling FTP operations, modifies existing forms to better manage FTP resource configurations, and includes checks for subsystem existence. These changes improve the application's capability to manage FTP connections and refine integration settings in user interfaces.

Changes

File Path Change Summary
src/cf/Catalogs/пбп_ИнтеграционныеПотоки/Forms/ФормаЭлемента/Ext/Form/Module.bsl Updated conditional logic for ЭлементНаследования to handle FTPРесурсы, setting new properties for FTP integration elements, including a new entry point title.
src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl Introduced several new FTP-related functions, including connection handling, message sending/receiving, and file existence checks.
src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl Added functions to check for subsystem existence and retrieve the primary language code, along with reintroducing a placeholder procedure for scheduled task execution.
src/cf/CommonModules/пбп_СтандартныеПодсистемыПовтИсп/Ext/Module.bsl Added functions for retrieving subsystem names based on specific inclusion criteria, enhancing the module's functionality.
src/cf/CommonModules/пбп_СтандартныеПодсистемыСлужебныйПовтИсп/Ext/Module.bsl Introduced a new exported function to retrieve subsystem names, expanding the module's capabilities.

Possibly related PRs

Suggested labels

enhancement

Suggested reviewers

  • ivanmolodec

Poem

In the realm of code, where rabbits play,
New FTP paths light up the way.
With connections strong and messages clear,
Integration hops, bringing us cheer!
Let's celebrate this change so bright,
A leap for progress, a joyful sight! 🐇✨


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

Failed

  • E Reliability Rating on New Code (is worse than A)

Analysis Details

20 Issues

  • Bug 4 Bugs
  • Vulnerability 0 Vulnerabilities
  • Code Smell 16 Code Smells

Coverage and Duplications

  • Coverage No coverage information (0.00% Estimated after merge)
  • Duplications 0.00% Duplicated Code (0.50% Estimated after merge)

Project ID: PSSL

View in SonarQube

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: 9

Outside diff range and nitpick comments (3)
src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl (1)

1995-1996: Add parameter description and consider adding a TODO comment.

The ПриНачалеВыполненияРегламентногоЗадания procedure is currently implemented as a stub for a BSP (Standard Subsystems Library) method. While this is intentional, there are a couple of improvements that can be made:

  1. Add a description for the РегламентноеЗадание parameter.
  2. Consider adding a TODO comment to remind about future implementation.

Here's a suggested improvement:

-Процедура ПриНачалеВыполненияРегламентногоЗадания(РегламентноеЗадание = Неопределено) Экспорт
+// Процедура-заглушка, вызываемая при начале выполнения регламентного задания.
+//
+// Параметры:
+//  РегламентноеЗадание - РегламентноеЗаданиеОбъект - Выполняемое регламентное задание.
+//
+Процедура ПриНачалеВыполненияРегламентногоЗадания(РегламентноеЗадание = Неопределено) Экспорт
+    // TODO: Реализовать обработку начала выполнения регламентного задания.
 КонецПроцедуры

This change adds the missing parameter description and includes a TODO comment for future implementation.

Tools
GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 1995-1995: src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl#L1995
Необходимо добавить описание всех параметров метода

src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl (2)

585-586: Clarify error message for file creation failure

The error message "Файл не был создан. Подробно: " may not provide enough context to the user.

Consider providing more detailed information or guidance in the error message to help users understand and resolve the issue.


776-783: Include 'Экспорт' keyword for consistency

The function ПараметрыСоединенияFTP does not have the Экспорт keyword, unlike other functions in the module. For consistency and clarity, consider adding it if the function is intended to be accessible from other modules.

- Функция ПараметрыСоединенияFTP()
+ Функция ПараметрыСоединенияFTP() Экспорт
Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between c64d466 and 2f0d804.

Files selected for processing (4)
  • src/cf/Catalogs/пбп_ИнтеграционныеПотоки/Forms/ФормаЭлемента/Ext/Form/Module.bsl (1 hunks)
  • src/cf/Catalogs/пбп_НастройкиИнтеграции/Forms/ФормаЭлемента/Ext/Form/Module.bsl (1 hunks)
  • src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl (2 hunks)
  • src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl (3 hunks)
Additional context used
GitHub Check: 1C: Project SubSystems Library Sonarqube Results
src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl

[notice] 547-547: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L547
Метод "ПодробноеПредставлениеОшибки" устарел. Следует использовать одноименный метод объекта типа МенеджерОбработкиОшибок


[notice] 564-564: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L564
Метод "ПодробноеПредставлениеОшибки" устарел. Следует использовать одноименный метод объекта типа МенеджерОбработкиОшибок


[notice] 607-607: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L607
Метод "ПодробноеПредставлениеОшибки" устарел. Следует использовать одноименный метод объекта типа МенеджерОбработкиОшибок


[notice] 647-647: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L647
Метод "ПодробноеПредставлениеОшибки" устарел. Следует использовать одноименный метод объекта типа МенеджерОбработкиОшибок


[failure] 542-542: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L542
Не указан таймаут при работе с внешним ресурсом


[warning] 546-546: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L546
Уберите инициализацию параметров метода "НСтр" вложенными методами


[warning] 563-563: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L563
Уберите инициализацию параметров метода "НСтр" вложенными методами


[warning] 602-602: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L602
Уберите инициализацию параметров метода "НСтр" вложенными методами


[warning] 606-606: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L606
Уберите инициализацию параметров метода "НСтр" вложенными методами


[warning] 635-635: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L635
Уберите инициализацию параметров метода "НСтр" вложенными методами


[warning] 646-646: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L646
Уберите инициализацию параметров метода "НСтр" вложенными методами


[warning] 590-590: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L590
Нужно добавить удаление временного файла после использования


[warning] 641-641: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L641
Нужно добавить удаление временного файла после использования


[warning] 532-532: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L532
Нельзя использовать латинские и кириллические символы в одном идентификаторе

src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl

[failure] 839-839: src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl#L839
Метод ИменаПодсистем общего модуля пбп_СтандартныеПодсистемыСлужебныйПовтИсп не существует


[notice] 1513-1513: src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl#L1513
Возможная опечатка в "Мультиязычность"


[notice] 1514-1514: src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl#L1514
Возможная опечатка в "Мультиязычность"


[notice] 1514-1514: src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl#L1514
Возможная опечатка в "Мультиязычность"


[warning] 1995-1995: src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl#L1995
Необходимо добавить описание всех параметров метода

Additional comments not posted (8)
src/cf/Catalogs/пбп_ИнтеграционныеПотоки/Forms/ФормаЭлемента/Ext/Form/Module.bsl (1)

Line range hint 1-524: Overall, the changes for FTP Resources are well-implemented.

The additions for handling FTP Resources in the УстановитьСвойстваЭлементов procedure are consistent with the existing code structure and correctly set the appropriate form element properties. The changes are localized and don't introduce any apparent issues in the rest of the file.

Two suggestions for improvement have been made:

  1. Extracting repeated code patterns to reduce duplication and improve maintainability.
  2. Adding error handling and logging for the FTP Resources section to improve robustness and debuggability.

These improvements would further enhance the quality of the code without changing its core functionality.

src/cf/Catalogs/пбп_НастройкиИнтеграции/Forms/ФормаЭлемента/Ext/Form/Module.bsl (3)

281-281: Label change for FTP server address is correct.

The change from "Путь к каталогу" (Path to the directory) to "Адрес сервера" (Server address) is appropriate for the FTP resource type. This modification accurately reflects the expected input for an FTP connection.


Line range hint 279-294: The label change is consistent with the FTP integration type.

The modification of the label to "Адрес сервера" (Server address) for FTP resources is consistent with the purpose of this integration type. This change improves the user experience by providing a more accurate description of the expected input. The rest of the conditional block remains unchanged, maintaining the overall structure and functionality of the form setup.


Line range hint 1-1006: Overall, the code is well-structured and the change is appropriate.

The modification to the FTP resource label is a small but meaningful improvement to the user interface. The entire file demonstrates good organization, with clear separation of concerns for different integration types. The consistent use of Russian naming conventions aligns with common 1C:Enterprise development practices. The change fits well within the existing structure and enhances the user experience for FTP integrations.

src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl (3)

1511-1520: Well-implemented function for retrieving the primary language code.

The КодОсновногоЯзыка function is correctly implemented and aligns with the AI-generated summary. It efficiently handles both cases: when the "Мультиязычность" subsystem exists and when it doesn't.

The function:

  1. Checks for the existence of the "Мультиязычность" subsystem.
  2. If it exists, uses the МультиязычностьСервер module to get the language code.
  3. Otherwise, falls back to Метаданные.ОсновнойЯзык.КодЯзыка.

This implementation provides a flexible way to retrieve the primary language code, accommodating configurations with and without the multilanguage subsystem.

Tools
GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[notice] 1513-1513: src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl#L1513
Возможная опечатка в "Мультиязычность"


[notice] 1514-1514: src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl#L1514
Возможная опечатка в "Мультиязычность"


[notice] 1514-1514: src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl#L1514
Возможная опечатка в "Мультиязычность"


Line range hint 1-1999: Overall, the module is well-structured and provides useful utility functions.

The пбп_ОбщегоНазначенияСервер module appears to be well-organized and contains a variety of utility functions and procedures. The code style is consistent, and the reviewed functions are implemented correctly.

Key observations:

  1. Many functions are analogues of BSP (Standard Subsystems Library) methods, which is good for maintaining compatibility and familiar interfaces.
  2. The module provides a wide range of utility functions, living up to its "General Purpose Server" name.
  3. Functions are properly exported and documented.

To further improve the module:

  1. Consider reviewing the remaining functions in detail to ensure they all meet the same high standards as the ones we've examined.
  2. Look for opportunities to add unit tests for these utility functions to ensure their correctness and prevent regressions.
  3. If not already done, consider creating a module-level comment explaining the purpose and scope of this module, which can help developers understand its role in the larger system.

To help with the detailed review of remaining functions, you can use this script to list all function and procedure declarations in the module:

#!/bin/bash
# List all function and procedure declarations
rg -i --type bsl "^(Функция|Процедура)\s+\w+" src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl

This will help identify any functions that may need closer examination or improved documentation.

Tools
GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[failure] 839-839: src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl#L839
Метод ИменаПодсистем общего модуля пбп_СтандартныеПодсистемыСлужебныйПовтИсп не существует


817-842: Implementation looks good, but verify the existence of ИменаПодсистем method.

The function ПодсистемаСуществует is well-implemented and properly documented. It checks for the existence of a functional subsystem in the configuration, which aligns with the AI-generated summary.

However, there's a potential issue flagged by the static analysis tool:

Please ensure that the ИменаПодсистем method exists in the пбп_СтандартныеПодсистемыСлужебныйПовтИсп module. If it doesn't exist, you may need to implement it or use an alternative method to retrieve subsystem names.

Tools
GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[failure] 839-839: src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl#L839
Метод ИменаПодсистем общего модуля пбп_СтандартныеПодсистемыСлужебныйПовтИсп не существует

src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl (1)

476-489: LGTM!

The function ПараметрыСообщенияFTP is well-defined and correctly returns the required structure.

Comment on lines 183 to 192
ИначеЕсли ЭлементНаследования = Справочники.пбп_ТипыИнтеграций.FTPРесурсы Тогда
Элементы.ТочкаВхода.Заголовок = НСтр("ru = 'Путь к каталогу на сервере'");

пбп_ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы, "ТочкаВхода", УстанавливаемоеСвойство, Истина);
пбп_ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы, "ПараметрыВхода", УстанавливаемоеСвойство, Ложь);
пбп_ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы, "ПользовательскаяФункция", УстанавливаемоеСвойство,
РеквизитыОбъекта.ИспользоватьПользовательскиеФункции);
Copy link

Choose a reason for hiding this comment

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

LGTM! Consider extracting repeated code patterns.

The changes for handling FTP Resources are consistent with the existing code structure and correctly set the appropriate form element properties. Good job on maintaining consistency with other integration types.

Consider extracting the repeated pattern of setting form element properties into a separate helper function to reduce code duplication and improve maintainability. For example:

&НаСервере
Процедура УстановитьСвойствоЭлементаФормы(ИмяЭлемента, Свойство, Значение)
    пбп_ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
        Элементы, ИмяЭлемента, Свойство, Значение);
КонецПроцедуры

// Usage in the main procedure
УстановитьСвойствоЭлементаФормы("ТочкаВхода", УстанавливаемоеСвойство, Истина);
УстановитьСвойствоЭлементаФормы("ПараметрыВхода", УстанавливаемоеСвойство, Ложь);
УстановитьСвойствоЭлементаФормы("ПользовательскаяФункция", УстанавливаемоеСвойство, РеквизитыОбъекта.ИспользоватьПользовательскиеФункции);

This refactoring would make the code more concise and easier to maintain.


Consider adding error handling and logging for FTP Resources.

While the changes for FTP Resources are well-integrated, it would be beneficial to add error handling and logging to improve the robustness and debuggability of the code.

Consider wrapping the FTP Resources section in a try-catch block and adding logging. For example:

ИначеЕсли ЭлементНаследования = Справочники.пбп_ТипыИнтеграций.FTPРесурсы Тогда
    Попытка
        Элементы.ТочкаВхода.Заголовок = НСтр("ru = 'Путь к каталогу на сервере'");
        
        УстановитьСвойствоЭлементаФормы("ТочкаВхода", УстанавливаемоеСвойство, Истина);
        УстановитьСвойствоЭлементаФормы("ПараметрыВхода", УстанавливаемоеСвойство, Ложь);
        УстановитьСвойствоЭлементаФормы("ПользовательскаяФункция", УстанавливаемоеСвойство, РеквизитыОбъекта.ИспользоватьПользовательскиеФункции);
        
        ЗаписьЖурналаРегистрации("УстановитьСвойстваЭлементов", УровеньЖурналаРегистрации.Информация,
            Метаданные.Справочники.пбп_ИнтеграционныеПотоки,, 
            "Успешно установлены свойства элементов для FTP ресурсов");
    Исключение
        ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
        ЗаписьЖурналаРегистрации("УстановитьСвойстваЭлементов", УровеньЖурналаРегистрации.Ошибка,
            Метаданные.Справочники.пбп_ИнтеграционныеПотоки,, 
            "Ошибка при установке свойств элементов для FTP ресурсов: " + ТекстОшибки);
        ВызватьИсключение;
    КонецПопытки;

This addition will help in identifying and troubleshooting any issues that may arise when handling FTP Resources.

Comment on lines 542 to 543
FTPСоединение = Новый FTPСоединение(ПараметрыСоединения.Адрес,
Порт, ПараметрыСоединения.Логин, ПараметрыСоединения.Пароль);
Copy link

Choose a reason for hiding this comment

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

Specify a timeout when connecting to external resources

No timeout is specified when creating the FTPСоединение object. This can lead to potential hangs or long delays if the FTP server is unresponsive.

Consider specifying a timeout value when creating the FTP connection:

- FTPСоединение = Новый FTPСоединение(ПараметрыСоединения.Адрес,
-     Порт, ПараметрыСоединения.Логин, ПараметрыСоединения.Пароль);
+ FTPСоединение = Новый FTPСоединение(ПараметрыСоединения.Адрес,
+     Порт, ПараметрыСоединения.Логин, ПараметрыСоединения.Пароль, ТаймаутСоединения);

Ensure that ТаймаутСоединения is defined appropriately, for example:

ТаймаутСоединения = 30; // Таймаут в секундах
Tools
GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[failure] 542-542: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L542
Не указан таймаут при работе с внешним ресурсом


Inconsistent use of parameter names: 'Логин' vs 'ИмяПользователя'

There is an inconsistency in the parameter names used for the username. In ПолучитьПараметрыПодключенияFTPSFTP, the username is stored in ПараметрыСоединения.ИмяПользователя, but when creating the FTPСоединение, you are using ПараметрыСоединения.Логин.

To maintain consistency and avoid confusion, use the same property name throughout:

- Если СтруктураНастроек.Свойство("Логин") Тогда
-     ПараметрыСоединения.ИмяПользователя = СтруктураНастроек.Логин.Значение;
+ Если СтруктураНастроек.Свойство("Логин") Тогда
+     ПараметрыСоединения.Логин = СтруктураНастроек.Логин.Значение;

...

- FTPСоединение = Новый FTPСоединение(ПараметрыСоединения.Адрес,
-     Порт, ПараметрыСоединения.Логин, ПараметрыСоединения.Пароль);
+ FTPСоединение = Новый FTPСоединение(ПараметрыСоединения.Адрес,
+     Порт, ПараметрыСоединения.Логин, ПараметрыСоединения.Пароль);

Alternatively, you can change the property in ПараметрыСоединения to ИмяПользователя and use it consistently.

Committable suggestion was skipped due to low confidence.

Tools
GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[failure] 542-542: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L542
Не указан таймаут при работе с внешним ресурсом

Comment on lines 546 to 547
СообщениеОбОшибке = НСтр(СтрШаблон("ru = '%1%2'",
ЗаголовокОшибки, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())));
Copy link

Choose a reason for hiding this comment

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

Use updated error handling methods

The method ПодробноеПредставлениеОшибки is deprecated. It's recommended to use the same method from the МенеджерОбработкиОшибок object.

Update your error handling code as follows:

- СообщениеОбОшибке = НСтр(СтрШаблон("ru = '%1%2'",
-     ЗаголовокОшибки, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())));
+ МенеджерОшибок = Новый МенеджерОбработкиОшибок();
+ СообщениеОбОшибке = НСтр("ru = '%1%2'").СтрЗаменить("%1", ЗаголовокОшибки).СтрЗаменить("%2", МенеджерОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())));

Apply this change to all occurrences where ПодробноеПредставлениеОшибки is used:

  • Lines 546-547
  • Lines 563-564
  • Lines 606-607
  • Lines 646-647

Also applies to: 563-564, 606-607, 646-647

Tools
GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[notice] 547-547: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L547
Метод "ПодробноеПредставлениеОшибки" устарел. Следует использовать одноименный метод объекта типа МенеджерОбработкиОшибок


[warning] 546-546: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L546
Уберите инициализацию параметров метода "НСтр" вложенными методами


Avoid initializing 'НСтр' parameters with nested method calls

Initializing parameters of the НСтр method with nested methods like СтрШаблон decreases code readability.

Refactor the code to separate method calls:

- СообщениеОбОшибке = НСтр(СтрШаблон("ru = '%1%2'", ЗаголовокОшибки, ДеталиОшибки));
+ ТекстСообщения = СтрШаблон("%1%2", ЗаголовокОшибки, ДеталиОшибки);
+ СообщениеОбОшибке = НСтр("ru = '%1'").СтрЗаменить("%1", ТекстСообщения);

This enhances readability and maintains the functionality.

Apply this refactoring to the relevant lines.

Also applies to: 563-564, 606-607, 635-636, 646-647

Tools
GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[notice] 547-547: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L547
Метод "ПодробноеПредставлениеОшибки" устарел. Следует использовать одноименный метод объекта типа МенеджерОбработкиОшибок


[warning] 546-546: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L546
Уберите инициализацию параметров метода "НСтр" вложенными методами

Comment on lines +669 to +683
ФайлыНаРесурсе = FTPСоединение.НайтиФайлы(КаталогПоиска);
Для Каждого ФайлНаСервере Из ФайлыНаРесурсе Цикл
Если ПоТочномуСовпадению Тогда
Если ВРег(ФайлНаСервере) = ВРег(ИмяФайла) Тогда
Результат = Истина;
Прервать;
КонецЕсли;
Иначе
Если СтрНайти(ВРег(ФайлНаСервере), ВРег(ИмяФайла), НаправлениеПоиска.СНачала) > 0 Тогда
Результат = Истина;
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;

Copy link

Choose a reason for hiding this comment

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

Optimize file search on FTP server

The method ПроверитьФайлЕстьНаFTP retrieves the entire list of files in the directory and iterates over them to find the desired file. This may lead to performance issues if the directory contains a large number of files.

Consider using a method that checks for the existence of a file directly, if available, or optimizes the search to prevent performance degradation.

// Возвращаемое значение:
// FTPСоединение, Строка - возвращает FTP-соединение по указанным настройкам, либо строку с описанием ошибки
//
Функция ВыполнитьПодключениеКFTPСерверуДляИнтеграционногоПотока(ИнтеграционныйПоток) Экспорт
Copy link

Choose a reason for hiding this comment

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

Avoid mixing Latin and Cyrillic characters in identifiers

The function name ВыполнитьПодключениеКFTPСерверуДляИнтеграционногоПотока mixes Latin letters ("FTP") with Cyrillic letters. This can lead to confusion and potential errors. Consider using consistent character sets in identifiers.

You can rename the function to use only Cyrillic characters:

- Функция ВыполнитьПодключениеКFTPСерверуДляИнтеграционногоПотока(ИнтеграционныйПоток) Экспорт
+ Функция ВыполнитьПодключениеКФТПСерверуДляИнтеграционногоПотока(ИнтеграционныйПоток) Экспорт
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
Функция ВыполнитьПодключениеКFTPСерверуДляИнтеграционногоПотока(ИнтеграционныйПоток) Экспорт
Функция ВыполнитьПодключениеКФТПСерверуДляИнтеграционногоПотока(ИнтеграционныйПоток) Экспорт
Tools
GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 532-532: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L532
Нельзя использовать латинские и кириллические символы в одном идентификаторе

Copy link

Failed

  • C Reliability Rating on New Code (is worse than A)

Analysis Details

9 Issues

  • Bug 1 Bug
  • Vulnerability 0 Vulnerabilities
  • Code Smell 8 Code Smells

Coverage and Duplications

  • Coverage No coverage information (0.00% Estimated after merge)
  • Duplications 0.00% Duplicated Code (0.50% Estimated after merge)

Project ID: PSSL

View in SonarQube

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: 4

🧹 Outside diff range and nitpick comments (1)
src/cf/CommonModules/пбп_СтандартныеПодсистемыСлужебныйПовтИсп/Ext/Module.bsl (1)

33-34: Add return value description to the function comment.

The function comment is missing a description of the return value. To improve code documentation and address the static analysis warning, please add information about what the function returns.

Here's a suggested improvement:

-// См. пбп_СтандартныеПодсистемыПовтИсп.ИменаПодсистем.
+// См. пбп_СтандартныеПодсистемыПовтИсп.ИменаПодсистем.
+//
+// Возвращаемое значение:
+//  <Тип возвращаемого значения> - <Описание возвращаемого значения>

Replace <Тип возвращаемого значения> and <Описание возвращаемого значения> with the appropriate information based on what пбп_СтандартныеПодсистемыПовтИсп.ИменаПодсистем returns.

🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 34-34: src/cf/CommonModules/пбп_СтандартныеПодсистемыСлужебныйПовтИсп/Ext/Module.bsl#L34
Добавьте описание возвращаемого значения функции

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 2f0d804 and 398d155.

📒 Files selected for processing (5)
  • .bsl-language-server.json (1 hunks)
  • src/cf/Catalogs/пбп_ИнтеграционныеПотоки/Forms/ФормаЭлемента/Ext/Form/Module.bsl (1 hunks)
  • src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl (2 hunks)
  • src/cf/CommonModules/пбп_СтандартныеПодсистемыПовтИсп/Ext/Module.bsl (1 hunks)
  • src/cf/CommonModules/пбп_СтандартныеПодсистемыСлужебныйПовтИсп/Ext/Module.bsl (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/cf/Catalogs/пбп_ИнтеграционныеПотоки/Forms/ФормаЭлемента/Ext/Form/Module.bsl
🧰 Additional context used
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results
src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl

[warning] 610-610: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L610
Вместо синхронного метода УдалитьФайлы необходимо использовать НачатьУдалениеФайлов


[warning] 548-548: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L548
Уберите инициализацию параметров метода "НСтр" вложенными методами


[warning] 593-593: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L593
Нужно добавить удаление временного файла после использования


[notice] 549-549: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L549
Метод "ПодробноеПредставлениеОшибки" устарел. Следует использовать одноименный метод объекта типа МенеджерОбработкиОшибок

src/cf/CommonModules/пбп_СтандартныеПодсистемыСлужебныйПовтИсп/Ext/Module.bsl

[warning] 34-34: src/cf/CommonModules/пбп_СтандартныеПодсистемыСлужебныйПовтИсп/Ext/Module.bsl#L34
Добавьте описание возвращаемого значения функции

🔇 Additional comments (9)
.bsl-language-server.json (1)

13-13: LGTM! The addition is consistent with the PR objectives.

The new excluded word "ВыполнитьПодключениеКFTPСерверуДляИнтеграционногоПотока" (which translates to "PerformConnectionToFTPServerForIntegrationFlow") is appropriate and aligns with the PR's goal of adding FTP functions. It follows the existing pattern of excluded words, mixing Cyrillic and Latin characters in CamelCase.

To ensure comprehensive coverage, please verify if there are any other FTP-related terms that should be excluded. You can use the following script to search for potential candidates:

This will help identify any other FTP-related terms that might need to be added to the excludeWords list for consistency.

✅ Verification successful

All FTP-related terms are now excluded consistently.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Search for FTP-related terms in the codebase that might need exclusion

# Test: Search for FTP-related terms in .bsl files
rg --type bsl -i '\bftp\b' -C 2

Length of output: 61


Script:

#!/bin/bash
# Description: Search for FTP-related terms in the codebase that might need exclusion

# Test: Search for FTP-related terms in .bsl files
rg -i '\bftp\b' -C 2 -g '*.bsl'

Length of output: 8646

src/cf/CommonModules/пбп_СтандартныеПодсистемыСлужебныйПовтИсп/Ext/Module.bsl (2)

33-39: Implementation looks good, follows existing patterns.

The new function ИменаПодсистем() is correctly implemented and follows the existing pattern in the file for method redirection. It properly uses the ПолучитьМодуль() function to get the required module and then calls the corresponding method on it.

🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 34-34: src/cf/CommonModules/пбп_СтандартныеПодсистемыСлужебныйПовтИсп/Ext/Module.bsl#L34
Добавьте описание возвращаемого значения функции


33-39: Verify the impact and usage of the new function.

The addition of ИменаПодсистем() expands the module's functionality. To ensure this change aligns with the module's purpose and doesn't introduce unintended side effects:

  1. Confirm that this addition is related to the FTP functions mentioned in the PR description.
  2. Verify that any code calling this new function is prepared to handle its return value correctly.
  3. Check if there are any performance implications, especially if this function might be called frequently.

To help with verification, you can run the following script to find potential usages of this new function:

This will help identify any immediate impacts on other parts of the codebase.

✅ Verification successful

Usage of ИменаПодсистем() verified successfully.

  • Found usage in src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl where the function's return value is properly handled.
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for potential usages of ИменаПодсистем() in the codebase
rg --type bsl "ИменаПодсистем\(\)" -g '!**/пбп_СтандартныеПодсистемыСлужебныйПовтИсп/**'

Length of output: 118


Script:

#!/bin/bash
# Search for potential usages of ИменаПодсистем() in .bsl files, excluding specific directory
rg "ИменаПодсистем\(\)" -g '*.bsl' -g '!**/пбп_СтандартныеПодсистемыСлужебныйПовтИсп/**'

Length of output: 333


Script:

#!/bin/bash
# Retrieve lines around the usage of ИменаПодсистем() to understand its context
rg "ИменаПодсистем\(\)" -g '*.bsl' -A 3 -B 3

Length of output: 2334

🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 34-34: src/cf/CommonModules/пбп_СтандартныеПодсистемыСлужебныйПовтИсп/Ext/Module.bsl#L34
Добавьте описание возвращаемого значения функции

src/cf/CommonModules/пбп_СтандартныеПодсистемыПовтИсп/Ext/Module.bsl (2)

40-47: Documentation is clear and accurate

The comments for the ИменаПодсистем() function effectively describe its purpose, return value, and usage, making it easy for other developers to understand.


48-55: Function implementation is correct

The ИменаПодсистем() function correctly initializes the correspondence, populates it by calling ВставитьИменаПодчиненныхПодсистем, and returns a new ФиксированноеСоответствие. The logic is sound and follows best practices.

src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl (4)

483-488: LGTM

The function ПараметрыСообщенияFTP correctly defines the structure for FTP message parameters. The implementation is clear and follows best practices.


508-545: Inconsistent use of 'Логин' and 'ИмяПользователя' in connection parameters

There is inconsistency in using Логин and ИмяПользователя within ПараметрыСоединения. This may lead to confusion or errors when establishing the FTP connection. Please ensure consistent naming throughout the code to maintain clarity.


548-549: Avoid initializing parameters of 'НСтр' with nested method calls

Initializing the parameters of the НСтр method with nested methods like СтрШаблон decreases code readability. Refactoring can enhance the clarity of the code.

🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 548-548: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L548
Уберите инициализацию параметров метода "НСтр" вложенными методами


[notice] 549-549: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L549
Метод "ПодробноеПредставлениеОшибки" устарел. Следует использовать одноименный метод объекта типа МенеджерОбработкиОшибок


549-549: Use updated error handling methods

The method ПодробноеПредставлениеОшибки is deprecated. It's recommended to use the same method from the МенеджерОбработкиОшибок object for improved error handling.

🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[notice] 549-549: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L549
Метод "ПодробноеПредставлениеОшибки" устарел. Следует использовать одноименный метод объекта типа МенеджерОбработкиОшибок

Comment on lines +61 to +79

Для Каждого ТекущаяПодсистема Из РодительскаяПодсистема.Подсистемы Цикл

Если ТекущаяПодсистема.ВключатьВКомандныйИнтерфейс Тогда
Продолжить;
КонецЕсли;

ИмяТекущейПодсистемы = ИмяРодительскойПодсистемы + ТекущаяПодсистема.Имя;
Имена.Вставить(ИмяТекущейПодсистемы, Истина);

Если ТекущаяПодсистема.Подсистемы.Количество() = 0 Тогда
Продолжить;
КонецЕсли;

ВставитьИменаПодчиненныхПодсистем(Имена, ТекущаяПодсистема, ИмяТекущейПодсистемы + ".");
КонецЦикла;

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

Choose a reason for hiding this comment

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

⚠️ Potential issue

Potential issue with subsystem name concatenation

In line 69, when assembling ИмяТекущейПодсистемы, the parent subsystem name and the current subsystem name are concatenated without a separator. This may result in names like "ParentSubsystemChildSubsystem" instead of "ParentSubsystem.ChildSubsystem". However, in line 76, a dot is appended when passing the name to the recursive call, which can cause inconsistencies in the subsystem names.

To ensure consistent and correctly formatted subsystem names, consider modifying the concatenation to include a separator when the ИмяРодительскойПодсистемы is not empty. Here's a suggested fix:

- ИмяТекущейПодсистемы = ИмяРодительскойПодсистемы + ТекущаяПодсистема.Имя;
+ Если ПустаяСтрока(ИмяРодительскойПодсистемы) Тогда
+     ИмяТекущейПодсистемы = ТекущаяПодсистема.Имя;
+ Иначе
+     ИмяТекущейПодсистемы = ИмяРодительскойПодсистемы + "." + ТекущаяПодсистема.Имя;
+ КонецЕсли;

This adjustment will produce subsystem names like "ParentSubsystem.ChildSubsystem", ensuring consistency throughout.

📝 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
Процедура ВставитьИменаПодчиненныхПодсистем(Имена, РодительскаяПодсистема, ИмяРодительскойПодсистемы = "")
Для Каждого ТекущаяПодсистема Из РодительскаяПодсистема.Подсистемы Цикл
Если ТекущаяПодсистема.ВключатьВКомандныйИнтерфейс Тогда
Продолжить;
КонецЕсли;
ИмяТекущейПодсистемы = ИмяРодительскойПодсистемы + ТекущаяПодсистема.Имя;
Имена.Вставить(ИмяТекущейПодсистемы, Истина);
Если ТекущаяПодсистема.Подсистемы.Количество() = 0 Тогда
Продолжить;
КонецЕсли;
ВставитьИменаПодчиненныхПодсистем(Имена, ТекущаяПодсистема, ИмяТекущейПодсистемы + ".");
КонецЦикла;
КонецПроцедуры
Процедура ВставитьИменаПодчиненныхПодсистем(Имена, РодительскаяПодсистема, ИмяРодительскойПодсистемы = "")
Для Каждого ТекущаяПодсистема Из РодительскаяПодсистема.Подсистемы Цикл
Если ТекущаяПодсистема.ВключатьВКомандныйИнтерфейс Тогда
Продолжить;
КонецЕсли;
Если ПустаяСтрока(ИмяРодительскойПодсистемы) Тогда
ИмяТекущейПодсистемы = ТекущаяПодсистема.Имя;
Иначе
ИмяТекущейПодсистемы = ИмяРодительскойПодсистемы + "." + ТекущаяПодсистема.Имя;
КонецЕсли;
Имена.Вставить(ИмяТекущейПодсистемы, Истина);
Если ТекущаяПодсистема.Подсистемы.Количество() = 0 Тогда
Продолжить;
КонецЕсли;
ВставитьИменаПодчиненныхПодсистем(Имена, ТекущаяПодсистема, ИмяТекущейПодсистемы + ".");
КонецЦикла;
КонецПроцедуры

Comment on lines +681 to +694
ФайлыНаРесурсе = FTPСоединение.НайтиФайлы(КаталогПоиска);
Для Каждого ФайлНаСервере Из ФайлыНаРесурсе Цикл
Если ПоТочномуСовпадению Тогда
Если ВРег(ФайлНаСервере) = ВРег(ИмяФайла) Тогда
Результат = Истина;
Прервать;
КонецЕсли;
Иначе
Если СтрНайти(ВРег(ФайлНаСервере), ВРег(ИмяФайла), НаправлениеПоиска.СНачала) > 0 Тогда
Результат = Истина;
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Optimize file existence check to improve performance

Currently, the method retrieves the entire list of files from the directory and iterates over them to find the desired file. This approach can lead to performance issues if the directory contains a large number of files.

Consider using a method that checks for the existence of a specific file directly, if available in the FTPСоединение class, such as a СуществуетФайл method. This would improve performance by avoiding unnecessary retrieval and iteration over all files.

Comment on lines 593 to 596
НовыйФайл = ПолучитьИмяВременногоФайла(ПараметрыСообщения.Расширение);
ПараметрыСообщения.Данные.Записать(НовыйФайл);
ПараметрыСообщения.Путь = НовыйФайл;
КонецЕсли;
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Ensure temporary files are deleted after use to prevent resource leaks

Currently, the temporary file НовыйФайл may not be deleted if an exception occurs, potentially leading to resource leaks. Consider adding deletion of the temporary file in the exception handling block to ensure it is always cleaned up.

Apply this diff to ensure the temporary file is deleted even when an exception occurs:

     Попытка
         Если ПустаяСтрока(ПараметрыСообщения.Путь) Тогда
             НовыйФайл = ПолучитьИмяВременногоФайла(ПараметрыСообщения.Расширение);
             ПараметрыСообщения.Данные.Записать(НовыйФайл);
             ПараметрыСообщения.Путь = НовыйФайл;
         КонецЕсли;

         ...

         УдалитьФайлы(НовыйФайл);
     Исключение
+        Если ФайлСуществует(НовыйФайл) Тогда
+            УдалитьФайлы(НовыйФайл);
+        КонецЕсли;
         ПолноеОписаниеОшибки = СтрШаблон("ru = '%1%2'",
             ЗаголовокОшибки, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
         СообщениеОбОшибке = НСтр(ПолноеОписаниеОшибки);
     КонецПопытки;

Committable suggestion was skipped due to low confidence.

🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 593-593: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L593
Нужно добавить удаление временного файла после использования

Copy link

Passed

Analysis Details

6 Issues

  • Bug 0 Bugs
  • Vulnerability 0 Vulnerabilities
  • Code Smell 6 Code Smells

Coverage and Duplications

  • Coverage No coverage information (0.00% Estimated after merge)
  • Duplications 0.00% Duplicated Code (0.50% Estimated after merge)

Project ID: PSSL

View in SonarQube

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: 2

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 398d155 and 047ffd0.

📒 Files selected for processing (1)
  • src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl (2 hunks)
🧰 Additional context used
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results
src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl

[warning] 614-614: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L614
Вместо синхронного метода УдалитьФайлы необходимо использовать НачатьУдалениеФайлов

🔇 Additional comments (4)
src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl (4)

508-545: Inconsistent use of 'ИмяПользователя' and 'Логин' in FTP connection parameters

There is an inconsistency in the parameter names used for the username. In ПолучитьПараметрыПодключенияFTPSFTP, the username is stored in ПараметрыСоединения.ИмяПользователя (line 508), but when creating the FTPСоединение, you are using ПараметрыСоединения.Логин (line 545).

To maintain consistency and avoid confusion, use the same property name throughout the code. Consider standardizing on either ИмяПользователя or Логин.


549-549: Use updated error handling methods

The method ОбработкаОшибок.ПодробноеПредставлениеОшибки is deprecated. It's recommended to use the ПодробноеПредставлениеОшибки method from the МенеджерОбработкиОшибок object.

Also applies to: 567-567, 617-617


682-699: Optimize file existence check to improve performance

The method ПроверитьФайлЕстьНаFTP retrieves the entire list of files and iterates over them to find the desired file. This can lead to performance issues if the directory contains a large number of files.

Consider using a method that checks for the existence of a specific file directly, if available in the FTPСоединение class, such as a СуществуетФайл method. This would improve performance by avoiding unnecessary iteration.


793-798: Inconsistent use of 'Логин' and 'ИмяПользователя' in connection parameters

In the function ПараметрыСоединенияFTP, the structure uses the key Логин, but elsewhere in the code ИмяПользователя is used for the username. For consistency and to avoid confusion, it's recommended to use the same key throughout the codebase.

СообщениеОбОшибке = НСтр(ПолноеОписаниеОшибки);
КонецЕсли;

УдалитьФайлы(НовыйФайл);
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Use asynchronous file deletion to prevent blocking operations

Consider using НачатьУдалениеФайлов instead of the synchronous method УдалитьФайлы to delete files asynchronously. This will prevent blocking the main thread and improve performance.

Apply this diff to make the change:

-        УдалитьФайлы(НовыйФайл);
+        НачатьУдалениеФайлов(НовыйФайл);
📝 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
УдалитьФайлы(НовыйФайл);
НачатьУдалениеФайлов(НовыйФайл);
🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 614-614: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L614
Вместо синхронного метода УдалитьФайлы необходимо использовать НачатьУдалениеФайлов

Comment on lines +593 to +619
Если ПустаяСтрока(ПараметрыСообщения.Путь) Тогда
// BSLLS:MissingTemporaryFileDeletion-off
// Необходимо пропустить проверку, так как файл удаляется позже
НовыйФайл = ПолучитьИмяВременногоФайла(ПараметрыСообщения.Расширение);
// BSLLS:MissingTemporaryFileDeletion-on
ПараметрыСообщения.Данные.Записать(НовыйФайл);
ПараметрыСообщения.Путь = НовыйФайл;
КонецЕсли;

НовоеИмяФайлаНаСервере = СтрШаблон("%1.%2", ПараметрыСообщения.ИмяФайла, ПараметрыСообщения.Расширение);
ПодключениеКFTP.Записать(ПараметрыСообщения.Путь, НовоеИмяФайлаНаСервере);

// Повторно проверяем наличие записанного файла
КаталогИсходящие = ПодключениеКFTP.ТекущийКаталог();

Если Не ПроверитьФайлЕстьНаFTP(ПодключениеКFTP, НовоеИмяФайлаНаСервере, КаталогИсходящие) Тогда
ПолноеОписаниеОшибки = СтрШаблон("ru = '%1%2'",
ЗаголовокОшибки, "подробности уточните у администратора системы");
СообщениеОбОшибке = НСтр(ПолноеОписаниеОшибки);
КонецЕсли;

УдалитьФайлы(НовыйФайл);
Исключение
ПолноеОписаниеОшибки = СтрШаблон("ru = '%1%2'",
ЗаголовокОшибки, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
СообщениеОбОшибке = НСтр(ПолноеОписаниеОшибки);
КонецПопытки;
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Ensure temporary files are deleted after exceptions to prevent resource leaks

If an exception occurs after creating the temporary file НовыйФайл, it may not be deleted, potentially leading to resource leaks. To ensure the temporary file is always cleaned up, add deletion of the file in the exception handling block.

Apply this diff to ensure the temporary file is deleted even when an exception occurs:

     УдалитьФайлы(НовыйФайл);
 Исключение
+    Если ФайлСуществует(НовыйФайл) Тогда
+        УдалитьФайлы(НовыйФайл);
+    КонецЕсли;
     ПолноеОписаниеОшибки = СтрШаблон("ru = '%1%2'",
         ЗаголовокОшибки, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
     СообщениеОбОшибке = НСтр(ПолноеОписаниеОшибки);
 КонецПопытки;
📝 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
Если ПустаяСтрока(ПараметрыСообщения.Путь) Тогда
// BSLLS:MissingTemporaryFileDeletion-off
// Необходимо пропустить проверку, так как файл удаляется позже
НовыйФайл = ПолучитьИмяВременногоФайла(ПараметрыСообщения.Расширение);
// BSLLS:MissingTemporaryFileDeletion-on
ПараметрыСообщения.Данные.Записать(НовыйФайл);
ПараметрыСообщения.Путь = НовыйФайл;
КонецЕсли;
НовоеИмяФайлаНаСервере = СтрШаблон("%1.%2", ПараметрыСообщения.ИмяФайла, ПараметрыСообщения.Расширение);
ПодключениеКFTP.Записать(ПараметрыСообщения.Путь, НовоеИмяФайлаНаСервере);
// Повторно проверяем наличие записанного файла
КаталогИсходящие = ПодключениеКFTP.ТекущийКаталог();
Если Не ПроверитьФайлЕстьНаFTP(ПодключениеКFTP, НовоеИмяФайлаНаСервере, КаталогИсходящие) Тогда
ПолноеОписаниеОшибки = СтрШаблон("ru = '%1%2'",
ЗаголовокОшибки, "подробности уточните у администратора системы");
СообщениеОбОшибке = НСтр(ПолноеОписаниеОшибки);
КонецЕсли;
УдалитьФайлы(НовыйФайл);
Исключение
ПолноеОписаниеОшибки = СтрШаблон("ru = '%1%2'",
ЗаголовокОшибки, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
СообщениеОбОшибке = НСтр(ПолноеОписаниеОшибки);
КонецПопытки;
Если ПустаяСтрока(ПараметрыСообщения.Путь) Тогда
// BSLLS:MissingTemporaryFileDeletion-off
// Необходимо пропустить проверку, так как файл удаляется позже
НовыйФайл = ПолучитьИмяВременногоФайла(ПараметрыСообщения.Расширение);
// BSLLS:MissingTemporaryFileDeletion-on
ПараметрыСообщения.Данные.Записать(НовыйФайл);
ПараметрыСообщения.Путь = НовыйФайл;
КонецЕсли;
НовоеИмяФайлаНаСервере = СтрШаблон("%1.%2", ПараметрыСообщения.ИмяФайла, ПараметрыСообщения.Расширение);
ПодключениеКFTP.Записать(ПараметрыСообщения.Путь, НовоеИмяФайлаНаСервере);
// Повторно проверяем наличие записанного файла
КаталогИсходящие = ПодключениеКFTP.ТекущийКаталог();
Если Не ПроверитьФайлЕстьНаFTP(ПодключениеКFTP, НовоеИмяФайлаНаСервере, КаталогИсходящие) Тогда
ПолноеОписаниеОшибки = СтрШаблон("ru = '%1%2'",
ЗаголовокОшибки, "подробности уточните у администратора системы");
СообщениеОбОшибке = НСтр(ПолноеОписаниеОшибки);
КонецЕсли;
УдалитьФайлы(НовыйФайл);
Исключение
Если ФайлСуществует(НовыйФайл) Тогда
УдалитьФайлы(НовыйФайл);
КонецЕсли;
ПолноеОписаниеОшибки = СтрШаблон("ru = '%1%2'",
ЗаголовокОшибки, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
СообщениеОбОшибке = НСтр(ПолноеОписаниеОшибки);
КонецПопытки;
🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 614-614: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L614
Вместо синхронного метода УдалитьФайлы необходимо использовать НачатьУдалениеФайлов

@ivanmolodec ivanmolodec closed this Oct 2, 2024
@thvvmas thvvmas deleted the add-functions-for-ftp branch October 3, 2024 21:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
new function Новая функциональность
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants