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

Merged
merged 3 commits into from
Oct 17, 2024

Conversation

thvvmas
Copy link
Contributor

@thvvmas thvvmas commented Oct 11, 2024

Разработан метод получения содержимого каталога SFTP #117; Добавлены реквизиты для хранения файла в НЕ текстовом формате в историю интеграции #112. Рефакторинг общего модуля пбп_ИнтеграцииСервер
#121 Добавление метода удаления файлов на SFTP. Содержит исправления для #124 и #125

Summary by CodeRabbit

  • New Features

    • Introduced new attributes to the integration history catalog for enhanced data management.
    • Added functionality for retrieving message file data and saving exchange message files.
    • New common modules for FTP/SFTP integration and file system operations to improve system connectivity.
    • New role for viewing integration history added to enhance user permissions.
    • Enhanced integration history management and logging capabilities.
  • Bug Fixes

    • Updated versioning and improved error handling mechanisms across various modules.
  • Documentation

    • New XML files defining metadata objects and roles for better configuration management.

…реквизиты для хранения файла в НЕ текстовом формате в историю интеграции #112. Рефакторинг общего модуля пбп_ИнтеграцииСервер
@thvvmas thvvmas added the enhancement Улучшение существующей функциональности label Oct 11, 2024
@thvvmas thvvmas requested a review from ivanmolodec October 11, 2024 10:59
@thvvmas thvvmas self-assigned this Oct 11, 2024
Copy link

coderabbitai bot commented Oct 11, 2024

Walkthrough

The pull request introduces enhancements to the integration management system, including new attributes in XML files, additional functions for handling file messages, and modifications to existing forms and modules. New XML files define metadata for common modules and roles, while existing modules have been updated with new procedures and functions. The changes also include updates to versioning and the addition of rights definitions, reflecting a comprehensive update to the integration framework.

Changes

File Path Change Summary
src/cf/Catalogs/пбп_ИсторияИнтеграции.xml Added attributes ИмяФайлаСообщения and ФайлСообщения to Catalog.
src/cf/Catalogs/пбп_ИсторияИнтеграции/Ext/ObjectModule.bsl Introduced function ПолучитьДанныеФайлаСообщения.
src/cf/Catalogs/пбп_ИсторияИнтеграции/Forms/ФормаЭлемента/Ext/Form.xml Renamed fields and added new groups and command.
src/cf/Catalogs/пбп_ИсторияИнтеграции/Forms/ФормаЭлемента/Ext/Form/Module.bsl Updated visibility logic, added new procedures, and refactored existing functions.
src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP.xml New XML file created for пбп_ИнтеграцииFTPSFTP.
src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl Introduced functions for FTP/SFTP integration.
src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl Removed FTP/SFTP functions, added HTTP request handling functions.
src/cf/CommonModules/пбп_ИнтеграцииСлужебный.xml New XML file created for пбп_ИнтеграцииСлужебный.
src/cf/CommonModules/пбп_ИнтеграцииСлужебный/Ext/Module.bsl Introduced functions for integration history management.
src/cf/CommonModules/пбп_ОбновлениеИнформационнойБазыПБП/Ext/Module.bsl Updated version number in ПриДобавленииПодсистемы.
src/cf/CommonModules/пбп_ПредопределенныеЗначенияПереопределяемый/Ext/Module.bsl Added predefined values for integration methods.
src/cf/CommonModules/пбп_ФайловаяСистемаКлиент.xml New XML file created for пбп_ФайловаяСистемаКлиент.
src/cf/CommonModules/пбп_ФайловаяСистемаКлиент/Ext/Module.bsl Introduced procedures for file handling.
src/cf/CommonModules/пбп_ФайловаяСистемаКлиентПереадресация.xml New XML file created for пбп_ФайловаяСистемаКлиентПереадресация.
src/cf/CommonModules/пбп_ФайловаяСистемаКлиентПереадресация/Ext/Module.bsl Introduced procedures for file system client interactions.
src/cf/CommonModules/пбп_ФайловаяСистемаПереадресация/Ext/Module.bsl Converted procedures to functions, altering return behavior.
src/cf/CommonModules/пбп_ФайловаяСистемаСлужебныйКлиент.xml New XML file created for пбп_ФайловаяСистемаСлужебныйКлиент.
src/cf/CommonModules/пбп_ФайловаяСистемаСлужебныйКлиент/Ext/Module.bsl Introduced procedures for file system operations.
src/cf/Configuration.xml Updated version number and added new roles and modules.
src/cf/Roles/пбп_ПросмотрИсторииИнтеграции.xml New XML file created for role пбп_ПросмотрИсторииИнтеграции.
src/cf/Roles/пбп_ПросмотрИсторииИнтеграции/Ext/Rights.xml New XML file created for rights definitions.
src/cf/Subsystems/пбп_УправлениеИнтеграциями.xml Added new items in the <Content> section.

Possibly related PRs

Suggested labels

bug

Suggested reviewers

  • ivanmolodec

🐇 In the garden where changes bloom,
New attributes and functions loom.
With files and roles, we weave a tale,
Integration's dance will never fail!
Hopping through code, we celebrate,
A project reborn, it’s never too late! 🌼


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

  • C Reliability Rating on New Code (is worse than A)
  • 0.00% Security Hotspots Reviewed on New Code (is less than 100.00%)

Analysis Details

97 Issues

  • Bug 3 Bugs
  • Vulnerability 2 Vulnerabilities
  • Code Smell 92 Code Smells

Coverage and Duplications

  • Coverage No coverage information (0.00% Estimated after merge)
  • Duplications 0.00% Duplicated Code (0.40% 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: 19

🧹 Outside diff range and nitpick comments (24)
src/cf/Roles/пбп_ПросмотрИсторииИнтеграции.xml (2)

3-13: Role structure is correct, consider adding a comment for clarity.

The Role element and its properties are well-structured and follow the expected format. The use of a prefix in the Name and the inclusion of a localized Synonym are good practices.

However, the Comment element is currently empty. Consider adding a brief description of the role's purpose or any specific permissions it grants. This can help with future maintenance and understanding of the role's function within the system.


1-15: Summary: New role addition aligns with PR objectives.

This new XML file successfully introduces a role for viewing integration history, which aligns with the PR's objective of enhancing the integration subsystem. The file is well-structured, follows 1C:Enterprise standards, and provides necessary metadata including a localized name.

To further improve documentation:

  1. Consider adding a brief description in the Comment element to clarify the role's specific permissions or purpose.
  2. If this role is part of a larger set of changes related to integration history, ensure that it's properly referenced in other relevant files or documentation.

Overall, this addition contributes positively to the goal of improving the integration history functionality.

src/cf/Roles/пбп_ПросмотрИсторииИнтеграции/Ext/Rights.xml (1)

3-5: Global rights settings are appropriate, consider adding documentation.

The global settings for rights assignment are well-defined:

  • New objects won't automatically inherit rights
  • Attributes will have default rights
  • Child objects don't have independent rights

This configuration prioritizes explicit rights assignment, which is good for security but may require more manual configuration.

Consider adding inline comments or separate documentation explaining the implications of these settings for future maintenance.

src/cf/Catalogs/пбп_ИсторияИнтеграции/Ext/ObjectModule.bsl (1)

23-27: New function added: ПолучитьДанныеФайлаСообщения

The addition of this exported function enhances the module's functionality by providing access to message file data. This is likely beneficial for integration processes.

However, there are a few suggestions for improvement:

  1. Consider adding error handling to manage cases where ФайлСообщения might not be initialized:
Функция ПолучитьДанныеФайлаСообщения() Экспорт
    Если ФайлСообщения = Неопределено Тогда
        ВызватьИсключение НСтр("ru = 'ФайлСообщения не инициализирован.'; en = 'MessageFile is not initialized.'");
    КонецЕсли;
    
    Возврат ФайлСообщения.Получить();
КонецФункции
  1. It's recommended to move this function to a more appropriate section, such as after the event handlers or in a dedicated "Public Methods" section:
#Область ПрограммныйИнтерфейс

Функция ПолучитьДанныеФайлаСообщения() Экспорт
    // Function implementation
КонецФункции

#КонецОбласти
  1. Please add a comment describing the purpose and usage of this function:
// Возвращает данные файла сообщения.
//
// Возвращаемое значение:
//  - Произвольный - Данные файла сообщения.
//
Функция ПолучитьДанныеФайлаСообщения() Экспорт
    // Function implementation
КонецФункции
src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP.xml (1)

4-21: Properties are well-defined, but consider adding a comment for documentation.

The properties of the CommonModule are correctly set up:

  • The module name "пбп_ИнтеграцииFTPSFTP" follows the expected naming convention.
  • The Russian synonym accurately describes the module's purpose.
  • The boolean flags are appropriately set for a server-side module with external connection support.

Consider adding a brief description in the <Comment> element to provide context about the module's purpose and functionality. This can help with future maintenance and understanding of the module's role in the system.

Example:

<Comment>Модуль для работы с FTP и SFTP протоколами в рамках интеграций</Comment>
src/cf/CommonModules/пбп_ФайловаяСистемаКлиентПереадресация.xml (1)

3-21: Consider adding a comment for better documentation.

The CommonModule element and its properties are well-defined. The module name follows a good naming convention with the "пбп_" prefix. However, the Comment element is empty. Consider adding a brief description of the module's purpose for better documentation and maintainability.

Example:

<Comment>Клиентский модуль для обработки переадресации в файловой системе</Comment>

The rest of the properties look good and appropriately define the module's behavior and scope.

src/cf/CommonModules/пбп_ФайловаяСистемаПереадресация/Ext/Module.bsl (1)

32-37: LGTM! Consider updating the documentation.

The conversion of ПараметрыЗапускаПрограммы() from a procedure to a function is a logical improvement. It now correctly returns the result of the redirected call, which is consistent with the module's pattern.

Consider updating the comment on line 31 to reflect that this is now a function rather than a procedure. For example:

// См. пбп_ФайловаяСистема.ПараметрыЗапускаПрограммы.
// 
// Возвращаемое значение:
//  - Произвольный - Результат выполнения пбп_ФайловаяСистема.ПараметрыЗапускаПрограммы
src/cf/CommonModules/пбп_ФайловаяСистемаКлиентПереадресация/Ext/Module.bsl (4)

24-29: LGTM: Well-structured wrapper procedure.

The СоздатьВременныйКаталог procedure is well-designed as a wrapper for functionality in another module. The use of a notification parameter suggests proper handling of asynchronous operations.

Consider adding a brief comment explaining the purpose of the Расширение parameter for better code documentation.


32-41: LGTM: Well-structured wrapper function with flexible parameters.

The ПодключитьРасширениеДляРаботыСФайлами function is well-designed as a wrapper for functionality in another module. The use of a notification parameter for closure suggests proper handling of asynchronous operations.

Consider adding brief comments explaining the purpose of ТекстПредложения and ВозможноПродолжениеБезУстановки parameters for better code documentation.


47-49: LGTM: Efficient module retrieval function.

The ПолучитьМодуль function efficiently encapsulates the logic for obtaining the required module, allowing for flexibility in module naming and potential overrides.

Consider adding a brief comment explaining the fallback mechanism between "ФайловаяСистемаКлиент" and "пбп_ФайловаяСистемаКлиент" for better code documentation.


1-51: LGTM: Well-structured and modular code.

This file demonstrates good coding practices:

  1. Clear structure with separate sections for different types of code elements.
  2. Modular approach, delegating implementations to another module, which promotes code reusability and maintainability.
  3. Consistent naming conventions and structure.
  4. Use of wrapper functions allowing for potential customization or interception of functionality.
  5. Good separation of concerns.

Consider adding more detailed comments for each function, explaining their purpose, parameters, and return values (if any) to improve code documentation and maintainability.

src/cf/CommonModules/пбп_ОбновлениеИнформационнойБазыПБП/Ext/Module.bsl (1)

Line range hint 1-124: Consider updating related documentation.

While the version update is correct, it's important to ensure that this change is reflected in any related documentation or changelog files. Please make sure to update any documents that reference the library version.

src/cf/Catalogs/пбп_ИсторияИнтеграции.xml (1)

1048-1087: LGTM: New attribute "ФайлСообщения" (Message File) added correctly.

The new attribute for storing the message file content is well-defined:

  • Appropriate v8:ValueStorage type for storing binary data.
  • Necessary properties are set, including indexing and full-text search.
  • This attribute complements the "ИмяФайлаСообщения" attribute, allowing for comprehensive file storage within the integration history.

Consider adding a comment to explain the relationship between "ИмяФайлаСообщения" and "ФайлСообщения" attributes for better maintainability. For example:

<Comment/>
+<Comment>This attribute stores the content of the file whose name is specified in the ИмяФайлаСообщения attribute.</Comment>
src/cf/CommonModules/пбп_ФайловаяСистемаСлужебныйКлиент/Ext/Module.bsl (1)

83-96: Enhance Uniqueness of Temporary Directory Names

The procedure СоздатьВременныйКаталогПослеПолученияВременногоКаталога generates a temporary directory name using a unique identifier. To further enhance the uniqueness and aid in debugging, consider incorporating a timestamp into the directory name.

You might adjust the directory name generation as follows:

-	ИмяКаталога = "v8_" + Строка(Новый УникальныйИдентификатор);
+	ИмяКаталога = "v8_" + Формат(ТекущаяДата(), "ДФ=yyyyMMddHHmmss") + "_" + Строка(Новый УникальныйИдентификатор);

This change adds a timestamp, making it easier to track and manage temporary directories.

src/cf/CommonModules/пбп_ФайловаяСистемаКлиент/Ext/Module.bsl (2)

34-45: Consider adding unit tests for СоздатьВременныйКаталог

To ensure the reliability and correctness of this new exported procedure, please consider adding unit tests that cover various scenarios, including edge cases.


40-41: Avoid reassigning the parameter Оповещение to enhance code clarity

Reassigning the parameter Оповещение within the procedure can lead to confusion and reduce code readability. Consider using a different variable name for the new ОписаниеОповещения instance to make the code clearer.

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

217-234: Use case-insensitive search for XML tags

In the procedure ДополнительноОбработатьЗапросыИнтеграцииПередЗаписьюВИсторию, the search for "xml" in messages is case-sensitive. If the message contains "XML" in uppercase, the condition may fail.

Modify the search to be case-insensitive to ensure all XML messages are processed:

...

Using СтрРег converts the string to uppercase, allowing for case-insensitive comparison.

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

Line range hint 182-200: Optimize the Construction of HTTP Status Codes Table

The function ПодготовитьТаблицуКодовОтветаHTTP manually adds each HTTP status code, which is repetitive and prone to errors.

Consider initializing the table using a predefined array or data structure:

Функция ПодготовитьТаблицуКодовОтветаHTTP() Экспорт
	
	ТаблицаКодовОтвета = Новый ТаблицаЗначений;
	ТаблицаКодовОтвета.Колонки.Добавить("КодОтвета"			, пбп_ОбщегоНазначенияСлужебный.ОписаниеТипаЧисло(3));
	ТаблицаКодовОтвета.Колонки.Добавить("КраткоеОписание"	, пбп_ОбщегоНазначенияСлужебный.ОписаниеТипаСтрока(150));
	
+	МассивКодов = [100, 200, 300, 301, 302, 303, 304, 305, 306, 307, 308, 400, 401, 402, 403,
+	                404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 429,
+	                500, 501, 502, 503, 504, 505, 506, 507, 509, 510, 511];
+	Для Каждого Код Из МассивКодов Цикл
+		НоваяСтрока = ТаблицаКодовОтвета.Добавить();
+		НоваяСтрока.КодОтвета = Код;
+		НоваяСтрока.КраткоеОписание = РасшифровкаКодаСостоянияHTTP(Код);
+	КонецЦикла;
	
	Возврат ТаблицаКодовОтвета;
	
КонецФункции

This simplifies the code and makes it easier to maintain.

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

183-183: Revise dialog title for clarity in 'СохранитьФайлСообщенияОбмена'

The dialog title 'Укажите файл внешней компоненты' may not accurately represent the action of saving an exchange message file. Consider updating the title to 'Укажите имя файла для сохранения сообщения' for improved user understanding.

Suggested change:

-	ЗаголовокДиалога = НСтр("ru = 'Укажите файл внешней компоненты'");
+	ЗаголовокДиалога = НСтр("ru = 'Укажите имя файла для сохранения сообщения'");

214-215: Distinguish labels for saving incoming and outgoing messages

Currently, both СохранитьФайлСообщенияОбменаИсх and СохранитьФайлСообщенияОбменаВх use the same label Объект.ИмяФайлаСообщения. To avoid confusion, consider using distinct labels that indicate whether the message is incoming or outgoing.

Suggested change:

-	Элементы.СохранитьФайлСообщенияОбменаИсх.Заголовок = Объект.ИмяФайлаСообщения;
+	Элементы.СохранитьФайлСообщенияОбменаИсх.Заголовок = Объект.ИмяФайлаСообщения + " (Исходящее)";
-	Элементы.СохранитьФайлСообщенияОбменаВх.Заголовок = Объект.ИмяФайлаСообщения;
+	Элементы.СохранитьФайлСообщенияОбменаВх.Заголовок = Объект.ИмяФайлаСообщения + " (Входящее)";

334-334: Improve exception message for better user understanding

The exception message 'Редактор ' + ФорматИнтеграцииСтрокой + ' не предназначен для веб-клиента' could be clearer. Consider rephrasing it to 'Редактор ' + ФорматИнтеграцииСтрокой + ' не поддерживается в веб-клиенте' for better user comprehension.

Suggested change:

-	ВызватьИсключение НСтр("ru = 'Редактор " + ФорматИнтеграцииСтрокой + " не предназначен для веб-клиента'");
+	ВызватьИсключение НСтр("ru = 'Редактор " + ФорматИнтеграцииСтрокой + " не поддерживается в веб-клиенте'");
src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl (3)

839-862: Add missing descriptions for return values and parameters

Some functions and methods lack descriptions of their return values and parameters, which can affect code readability and maintainability.

Consider adding comments to describe the purpose of parameters and return values.

Example:

// Инициализирует и возвращает таблицу файлов SFTP.
// Возвращаемое значение:
//   ТаблицаЗначений - таблица с колонками "ИмяФайла" и "ДатаИзменения"
Функция ИнициализироватьТаблицуФайловSFTP()
🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[notice] 851-851: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L851
Возможная опечатка в "Количествово"


[warning] 839-839: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L839
Создайте константу с понятным названием, присвойте ей значение "150" и используйте эту константу вместо магического числа.


[warning] 850-850: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L850
Создайте константу с понятным названием, присвойте ей значение "30" и используйте эту константу вместо магического числа.


[warning] 852-852: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L852
Создайте константу с понятным названием, присвойте ей значение "3" и используйте эту константу вместо магического числа.


[warning] 853-853: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L853
Создайте константу с понятным названием, присвойте ей значение "50" и используйте эту константу вместо магического числа.


[warning] 854-854: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L854
Создайте константу с понятным названием, присвойте ей значение "50" и используйте эту константу вместо магического числа.


[warning] 856-856: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L856
Создайте константу с понятным названием, присвойте ей значение "15" и используйте эту константу вместо магического числа.


[warning] 857-857: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L857
Создайте константу с понятным названием, присвойте ей значение "10" и используйте эту константу вместо магического числа.


[warning] 859-859: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L859
Создайте константу с понятным названием, присвойте ей значение "2" и используйте эту константу вместо магического числа.


[warning] 860-860: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L860
Создайте константу с понятным названием, присвойте ей значение "5" и используйте эту константу вместо магического числа.


[warning] 862-862: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L862
Создайте константу с понятным названием, присвойте ей значение "150" и используйте эту константу вместо магического числа.


33-33: Add description for the return value of "ПараметрыСообщенияFTPSFTP" function

The function lacks a description of its return value in the comments.

Consider adding a description to improve code documentation.

Example:

// Возвращаемое значение:
//   Структура - структура с параметрами сообщения для FTP/SFTP обмена
🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 33-33: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L33
Добавьте описание возвращаемого значения функции


839-839: Use constants instead of magic numbers

A magic number "150" is used when defining the column "ИмяФайла". Using constants improves readability.

Define a constant for the length.

Константа ДлинаИмениФайла = 150;

...

ТаблицаФайлов.Колонки.Добавить("ИмяФайла", пбп_ОбщегоНазначенияСервер.ОписаниеТипаСтрока(ДлинаИмениФайла));
🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 839-839: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L839
Создайте константу с понятным названием, присвойте ей значение "150" и используйте эту константу вместо магического числа.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between b4b7c46 and 293f478.

📒 Files selected for processing (22)
  • src/cf/Catalogs/пбп_ИсторияИнтеграции.xml (1 hunks)
  • src/cf/Catalogs/пбп_ИсторияИнтеграции/Ext/ObjectModule.bsl (1 hunks)
  • src/cf/Catalogs/пбп_ИсторияИнтеграции/Forms/ФормаЭлемента/Ext/Form.xml (3 hunks)
  • src/cf/Catalogs/пбп_ИсторияИнтеграции/Forms/ФормаЭлемента/Ext/Form/Module.bsl (9 hunks)
  • src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP.xml (1 hunks)
  • src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl (1 hunks)
  • src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl (8 hunks)
  • src/cf/CommonModules/пбп_ИнтеграцииСлужебный.xml (1 hunks)
  • src/cf/CommonModules/пбп_ИнтеграцииСлужебный/Ext/Module.bsl (1 hunks)
  • src/cf/CommonModules/пбп_ОбновлениеИнформационнойБазыПБП/Ext/Module.bsl (1 hunks)
  • src/cf/CommonModules/пбп_ПредопределенныеЗначенияПереопределяемый/Ext/Module.bsl (2 hunks)
  • src/cf/CommonModules/пбп_ФайловаяСистемаКлиент.xml (1 hunks)
  • src/cf/CommonModules/пбп_ФайловаяСистемаКлиент/Ext/Module.bsl (1 hunks)
  • src/cf/CommonModules/пбп_ФайловаяСистемаКлиентПереадресация.xml (1 hunks)
  • src/cf/CommonModules/пбп_ФайловаяСистемаКлиентПереадресация/Ext/Module.bsl (1 hunks)
  • src/cf/CommonModules/пбп_ФайловаяСистемаПереадресация/Ext/Module.bsl (1 hunks)
  • src/cf/CommonModules/пбп_ФайловаяСистемаСлужебныйКлиент.xml (1 hunks)
  • src/cf/CommonModules/пбп_ФайловаяСистемаСлужебныйКлиент/Ext/Module.bsl (1 hunks)
  • src/cf/Configuration.xml (4 hunks)
  • src/cf/Roles/пбп_ПросмотрИсторииИнтеграции.xml (1 hunks)
  • src/cf/Roles/пбп_ПросмотрИсторииИнтеграции/Ext/Rights.xml (1 hunks)
  • src/cf/Subsystems/пбп_УправлениеИнтеграциями.xml (1 hunks)
✅ Files skipped from review due to trivial changes (3)
  • src/cf/CommonModules/пбп_ИнтеграцииСлужебный.xml
  • src/cf/CommonModules/пбп_ФайловаяСистемаКлиент.xml
  • src/cf/CommonModules/пбп_ФайловаяСистемаСлужебныйКлиент.xml
🧰 Additional context used
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results
src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl

[failure] 868-868: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L868
Уменьшите когнитивную сложность "ЗаполнитьСвойстваФайловИзСтрокиСпискаФайлов" с 16 до 15


[failure] 928-928: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L928
Уменьшите когнитивную сложность "ПолучитьНомерМесяцаПоСтроковомуПредставлению" с 23 до 15


[notice] 930-930: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L930
Возможная опечатка в "Янв"


[notice] 944-944: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L944
Возможная опечатка в "Авг"


[notice] 851-851: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L851
Возможная опечатка в "Количествово"


[notice] 879-879: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L879
Возможная опечатка в "Количествово"


[notice] 940-940: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L940
Возможная опечатка в "Июн"


[notice] 942-942: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L942
Возможная опечатка в "Июл"


[notice] 932-932: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L932
Возможная опечатка в "Фев"


[notice] 948-948: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L948
Возможная опечатка в "Окт"


[warning] 839-839: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L839
Создайте константу с понятным названием, присвойте ей значение "150" и используйте эту константу вместо магического числа.


[warning] 850-850: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L850
Создайте константу с понятным названием, присвойте ей значение "30" и используйте эту константу вместо магического числа.


[warning] 852-852: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L852
Создайте константу с понятным названием, присвойте ей значение "3" и используйте эту константу вместо магического числа.


[warning] 853-853: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L853
Создайте константу с понятным названием, присвойте ей значение "50" и используйте эту константу вместо магического числа.


[warning] 854-854: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L854
Создайте константу с понятным названием, присвойте ей значение "50" и используйте эту константу вместо магического числа.


[warning] 856-856: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L856
Создайте константу с понятным названием, присвойте ей значение "15" и используйте эту константу вместо магического числа.


[warning] 857-857: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L857
Создайте константу с понятным названием, присвойте ей значение "10" и используйте эту константу вместо магического числа.


[warning] 859-859: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L859
Создайте константу с понятным названием, присвойте ей значение "2" и используйте эту константу вместо магического числа.


[warning] 860-860: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L860
Создайте константу с понятным названием, присвойте ей значение "5" и используйте эту константу вместо магического числа.


[warning] 862-862: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L862
Создайте константу с понятным названием, присвойте ей значение "150" и используйте эту константу вместо магического числа.


[warning] 881-881: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L881
Создайте константу с понятным названием, присвойте ей значение "2" и используйте эту константу вместо магического числа.


[warning] 883-883: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L883
Создайте константу с понятным названием, присвойте ей значение "3" и используйте эту константу вместо магического числа.


[warning] 885-885: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L885
Создайте константу с понятным названием, присвойте ей значение "4" и используйте эту константу вместо магического числа.


[warning] 888-888: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L888
Создайте константу с понятным названием, присвойте ей значение "5" и используйте эту константу вместо магического числа.


[warning] 890-890: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L890
Создайте константу с понятным названием, присвойте ей значение "6" и используйте эту константу вместо магического числа.


[warning] 893-893: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L893
Создайте константу с понятным названием, присвойте ей значение "7" и используйте эту константу вместо магического числа.


[warning] 901-901: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L901
Создайте константу с понятным названием, присвойте ей значение "7" и используйте эту константу вместо магического числа.


[warning] 33-33: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L33
Добавьте описание возвращаемого значения функции


[failure] 928-928: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L928
Уменьшите цикломатическую сложность "ПолучитьНомерМесяцаПоСтроковомуПредставлению" с 24 до 20

src/cf/CommonModules/пбп_ПредопределенныеЗначенияПереопределяемый/Ext/Module.bsl

[warning] 191-191: src/cf/CommonModules/пбп_ПредопределенныеЗначенияПереопределяемый/Ext/Module.bsl#L191
Необходимо избавиться от многократного использования строкового литерала "СистемаN"

🔇 Additional comments (41)
src/cf/Roles/пбп_ПросмотрИсторииИнтеграции.xml (2)

1-2: LGTM: XML declaration and root element are correctly structured.

The XML declaration and root MetaDataObject element are properly formatted with the correct encoding and necessary namespace declarations. This ensures compatibility and extensibility within the 1C:Enterprise ecosystem.


14-15: LGTM: File structure is well-formed and consistent.

The XML file is properly structured with correct closing tags for both the Role and MetaDataObject elements. The overall layout is clean and follows the expected format for 1C:Enterprise configuration files.

src/cf/Roles/пбп_ПросмотрИсторииИнтеграции/Ext/Rights.xml (4)

1-2: XML structure and namespace declarations look good.

The XML declaration and namespace definitions are correctly specified. The use of a versioned schema (2.16) is a good practice for maintaining backwards compatibility.


6-32: Rights for Configuration.ПроектнаяБиблиотекаПодсистем are comprehensive, verify if all are necessary.

The rights granted for Configuration.ПроектнаяБиблиотекаПодсистем cover various main window modes and analytics access:

  • MainWindowModeNormal
  • MainWindowModeWorkplace
  • MainWindowModeEmbeddedWorkplace
  • MainWindowModeFullscreenWorkplace
  • MainWindowModeKiosk
  • AnalyticsSystemClient

All these rights are set to true, providing full access.

Please review if all these rights are necessary for the "View Integration History" role. It's important to adhere to the principle of least privilege. Consider running a security review to ensure that only the minimum required rights are granted.


33-43: Rights for Catalog.пбп_ИсторияИнтеграции are appropriate for a view-only role.

The rights granted for Catalog.пбп_ИсторияИнтеграции (Integration History) are:

  • Read: true
  • View: true

These permissions are appropriate for a "View Integration History" role, allowing users to retrieve and view data without the ability to modify it. This adheres to the principle of least privilege.


1-44: Overall, the Rights.xml file is well-structured and appropriate for its purpose.

This new file successfully defines the "View Integration History" role with appropriate permissions. Key points:

  1. The XML structure and namespace declarations are correct.
  2. Global settings prioritize explicit rights assignment, enhancing security.
  3. Configuration.ПроектнаяБиблиотекаПодсистем rights provide comprehensive UI access, though a security review is recommended to ensure adherence to the principle of least privilege.
  4. Catalog.пбп_ИсторияИнтеграции rights are correctly limited to read and view operations, aligning with the role's purpose.

The file achieves its goal of defining a view-only role for integration history while granting necessary UI access rights. Consider adding documentation for maintainability and conducting a security review to validate the extensive UI access rights.

src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP.xml (2)

1-2: LGTM: XML declaration and namespace definitions are correct.

The XML declaration and namespace definitions are properly set up for a 1C:Enterprise configuration file. The UTF-8 encoding and the comprehensive list of namespaces provide a solid foundation for the module definition.


2-3: LGTM: MetaDataObject and CommonModule elements are correctly structured.

The MetaDataObject and CommonModule elements are properly defined. The UUID for the CommonModule is present, which is essential for object identification in the 1C:Enterprise system.

To ensure the UUID's uniqueness, please run the following command:

✅ Verification successful

UUID Uniqueness Verified

The UUID for the CommonModule is unique across all XML files. No duplicate UUIDs were found.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for duplicate UUIDs across all XML files

# Test: Search for duplicate UUIDs
duplicate_uuids=$(grep -r -h -o 'uuid="[^"]*"' | sort | uniq -d)

if [ -n "$duplicate_uuids" ]; then
    echo "Warning: Duplicate UUIDs found:"
    echo "$duplicate_uuids"
else
    echo "No duplicate UUIDs found."
fi

Length of output: 146

src/cf/CommonModules/пбп_ФайловаяСистемаКлиентПереадресация.xml (2)

1-2: LGTM: XML declaration and namespace definitions are correct.

The XML declaration, encoding, and namespace definitions are properly set up and follow 1C:Enterprise standards. The version number (2.16) appears to be up-to-date.


13-23: Module settings are appropriate for a client-side module.

The module settings correctly define this as a client-side module, which aligns with its name and purpose. The security and scope settings are appropriate.

Note on performance:
The ReturnValuesReuse is set to "DontUse", which ensures data consistency but might have a slight impact on performance. This is generally the safer option, especially for modules dealing with file systems. If performance becomes an issue in the future, you might consider reviewing this setting.

The overall structure of the file is correct and follows 1C:Enterprise standards.

src/cf/CommonModules/пбп_ФайловаяСистемаПереадресация/Ext/Module.bsl (2)

Line range hint 1-58: Overall, the changes improve the module's functionality and consistency.

The modifications to convert procedures to functions in this module enhance its capabilities by allowing the return of values from redirected calls. This change is consistent throughout the module and aligns with good programming practices.

Key points:

  1. The changes are in line with the AI-generated summary.
  2. The implementation follows a consistent pattern of redirecting calls.
  3. The modifications improve the overall functionality of the module.

40-47: LGTM! Consider documentation update and clarify BSLLS comments.

The conversion of ЗапуститьПрограмму() from a procedure to a function is a logical improvement. It now correctly returns the result of the redirected call, which is consistent with the module's pattern.

  1. Consider updating the comment on line 39 to reflect that this is now a function rather than a procedure. For example:
// См. пбп_ФайловаяСистема.ЗапуститьПрограмму.
// 
// Возвращаемое значение:
//  - Произвольный - Результат выполнения пбп_ФайловаяСистема.ЗапуститьПрограмму
  1. The BSLLS comments suggest that a linter rule is being temporarily disabled. Could you provide more context on why this is necessary? If it's a known issue, consider adding a brief comment explaining the reason for disabling the rule.
✅ Verification successful

Action Required: Update Shell Script to Search .bsl Files Correctly

The previous rg command failed because the bsl file type is not recognized. Please update the script to search within .bsl files by specifying the appropriate glob pattern.


LGTM! BSLLS comments are consistently used across the codebase.

The BSLLS:ExternalAppStarting comments are part of our standard practice for managing specific linter rules within the project. To enhance clarity, consider documenting the purpose and usage of BSLLS comments in the project documentation.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for other occurrences of BSLLS:ExternalAppStarting
rg --type bsl "BSLLS:ExternalAppStarting"

Length of output: 69


Script:

#!/bin/bash
# Search for other occurrences of BSLLS:ExternalAppStarting in .bsl files
rg "BSLLS:ExternalAppStarting" --glob "*.bsl"

Length of output: 1167

src/cf/CommonModules/пбп_ФайловаяСистемаКлиентПереадресация/Ext/Module.bsl (1)

1-20: LGTM: Proper copyright and license information included.

The inclusion of copyright notice, license information, and the GitHub URL is commendable. This provides clear attribution and licensing terms for the code.

src/cf/CommonModules/пбп_ОбновлениеИнформационнойБазыПБП/Ext/Module.bsl (1)

77-77: Version update looks good.

The version number has been incremented from "1.0.2.6" to "1.0.2.7", which is consistent with the PR objectives of refactoring and improving the integration subsystem.

Let's verify if this version update is consistent across the project:

This script will help us ensure that the version update has been applied consistently across the project.

✅ Verification successful

Version update verified successfully.

The version number "1.0.2.7" is consistently updated across the project with no remaining references to "1.0.2.6".

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for version number occurrences across the project

# Search for the old version number
echo "Occurrences of the old version number (1.0.2.6):"
rg --type-add 'bsl:*.bsl' --type bsl '1\.0\.2\.6'

# Search for the new version number
echo "Occurrences of the new version number (1.0.2.7):"
rg --type-add 'bsl:*.bsl' --type bsl '1\.0\.2\.7'

Length of output: 419

src/cf/Configuration.xml (5)

60-60: Version update approved.

The configuration version has been incremented from 1.0.2.6 to 1.0.2.7, which is consistent with semantic versioning for a minor update or bugfix.


269-269: New role addition approved.

The new role "пбп_ПросмотрИсторииИнтеграции" (View Integration History) has been added, which aligns with the PR objective of improving the integration history functionality. This role will likely be used to manage access to the integration history feature.


282-283: New common modules addition approved.

Three new common modules have been added:

  1. пбп_ИнтеграцииСлужебный (Integration Service)
  2. пбп_ИнтеграцииFTPSFTP (FTP/SFTP Integrations)
  3. пбп_ФайловаяСистемаКлиентПереадресация (File System Client Redirection)

These additions align with the PR objective of refactoring the integration subsystem and enhancing file handling capabilities.

Also applies to: 326-326


327-328: New client modules addition approved.

Two new client-side modules have been added:

  1. пбп_ФайловаяСистемаКлиент (File System Client)
  2. пбп_ФайловаяСистемаСлужебныйКлиент (File System Service Client)

These additions enhance the file handling capabilities on the client side, which supports the overall objective of improving the integration subsystem.


60-60: Overall changes are consistent with PR objectives.

The modifications to the Configuration.xml file include:

  1. Version update from 1.0.2.6 to 1.0.2.7
  2. Addition of a new role for viewing integration history
  3. Introduction of new common and client modules related to integrations and file system operations

These changes align well with the PR objectives of refactoring the integration subsystem, improving integration history functionality, and enhancing file handling capabilities. The modifications appear to be consistent and purposeful, with no apparent conflicts with existing components.

Also applies to: 269-269, 282-283, 326-328

src/cf/Catalogs/пбп_ИсторияИнтеграции/Forms/ФормаЭлемента/Ext/Form.xml (6)

287-292: Approved: Improved field naming for clarity

The renaming of "ЗапросИсходящий" to "ИсходящееСообщение" enhances the clarity of the form by using more precise terminology. This change is consistent across the TextDocumentField, ContextMenu, and ExtendedTooltip elements.


294-327: Approved: Enhanced form structure for file handling

The addition of "ГруппаДанныеСообщенияИсходящего" improves the form's organization and introduces functionality for handling attached files. This aligns well with the PR objective of adding attributes for storing files in a non-text format within the integration history (issue #112).


350-355: Approved: Consistent field naming improvement

The renaming of "ЗапросВходящий" to "ВходящееСообщение" enhances clarity and maintains consistency with the previously renamed outgoing message field. This change is applied correctly across the TextDocumentField, ContextMenu, and ExtendedTooltip elements.


357-390: Approved: Consistent form enhancement for incoming messages

The addition of "ГруппаДанныеСообщенияВходящего" maintains consistency with the previously added outgoing message group. This new group provides similar functionality for handling attached files for incoming messages, aligning with the PR objectives and maintaining a consistent user interface.


657-671: Approved: New command for saving exchange message files

The addition of the "СохранитьФайлСообщенияОбмена" command supports the new functionality for handling attached files in both incoming and outgoing messages. This command aligns well with the PR objective of improving file handling within the integration history.


Line range hint 1-671: Overall assessment: Successful form enhancement

The changes in this file successfully improve the integration history form by:

  1. Renaming fields for better clarity ("ЗапросИсходящий" to "ИсходящееСообщение" and "ЗапросВходящий" to "ВходящееСообщение").
  2. Adding new groups ("ГруппаДанныеСообщенияИсходящего" and "ГруппаДанныеСообщенияВходящего") for handling attached files.
  3. Introducing a new command ("СохранитьФайлСообщенияОбмена") to support file saving functionality.

These enhancements align well with the PR objectives, particularly the addition of attributes for storing files in a non-text format within the integration history (issue #112). The changes maintain consistency throughout the form and improve the overall user experience for managing integration data.

src/cf/Catalogs/пбп_ИсторияИнтеграции.xml (2)

1004-1047: LGTM: New attribute "ИмяФайлаСообщения" (Message File Name) added correctly.

The new attribute for storing the message file name is well-defined:

  • Appropriate string type with a reasonable maximum length of 150 characters.
  • Necessary properties are set, including indexing and full-text search.
  • The attribute aligns well with the catalog's purpose of tracking integration history.

1004-1087: Summary: New attributes successfully implement non-text file storage in integration history.

The addition of "ИмяФайлаСообщения" (Message File Name) and "ФайлСообщения" (Message File) attributes successfully implements the capability to store files in a non-text format within the integration history, as outlined in issue #112. These changes enhance the catalog's functionality while maintaining consistency with the existing structure and naming conventions.

src/cf/CommonModules/пбп_ФайловаяСистемаСлужебныйКлиент/Ext/Module.bsl (5)

28-38: Proper Handling of Extension Connection

The procedure НачатьПодключениеРасширенияРаботыСФайламиПриУстановкеРасширения correctly checks the connection status of the file system extension. It handles the scenario where the extension is already connected and appropriately raises an exception when the operation cannot proceed due to the browser environment limitations.


40-46: Consistent Processing Based on User Action

The procedure НачатьПодключениеРасширенияРаботыСФайламиПриОтветеНаВопросОбУстановке accurately interprets the user's action and determines the connection status of the extension. The use of ВыполнитьОбработкуОповещения ensures that the callback is invoked with the correct status.


62-73: Efficient Initiation of Temporary Directory Creation

In СоздатьВременныйКаталогПослеПроверкиРасширенияРаботыСФайлами, the logic appropriately initiates the process to create a temporary directory when the extension is connected. It also handles failure by notifying the user about the inability to establish the extension.


98-105: Error Handling is Correctly Implemented

The procedure СоздатьВременныйКаталогПриОбработкеОшибки effectively captures and processes errors during the temporary directory creation. Suppressing the standard error processing and providing a concise error description ensures that the user is informed appropriately.


108-114: Verify Parameters in Warning Display Function

In СоздатьВременныйКаталогОповеститьОбОшибке, the call to ПоказатьПредупреждение has an empty first parameter:

ПоказатьПредупреждение(, ОписаниеОшибки);

Please confirm whether the ПоказатьПредупреждение function supports an empty first parameter. If not, consider adjusting the function call to ensure the warning message is displayed correctly:

-	ПоказатьПредупреждение(, ОписаниеОшибки);
+	ПоказатьПредупреждение(ОписаниеОшибки);

This change removes the empty parameter and passes the error description directly, aligning with standard function usage.

src/cf/CommonModules/пбп_ФайловаяСистемаКлиент/Ext/Module.bsl (2)

83-87: Verify that the extension is always connected in non-web clients

The code assumes that in mobile, thin, and thick clients, the extension is always connected. Please verify that this assumption holds true in all environments to prevent potential issues.


1-106: Overall code is well-structured and aligns with best practices

The implementation provides essential functionality for managing temporary directories and ensuring necessary extensions are available. The code is well-documented and maintains consistency with the existing codebase.

src/cf/CommonModules/пбп_ПредопределенныеЗначенияПереопределяемый/Ext/Module.bsl (1)

167-171: Verify the correctness of the integration system retrieval

At lines 167 to 171, the integration system is retrieved using:

НоваяНастройка.ИнтегрируемаяСистема = пбп_ИнтеграцииСлужебный.ИнтегрируемаяСистема("RabbitMq");

Please ensure that the function пбп_ИнтеграцииСлужебный.ИнтегрируемаяСистема("RabbitMq") correctly returns the intended integration system. Verify that "RabbitMq" is a valid identifier and that the integration system exists.

Run the following script to check for the definition of "RabbitMq":

This script searches for occurrences where the integration system "Rabbit Mq" is defined, helping to confirm its existence.

✅ Verification successful

Integration system "RabbitMq" is correctly defined and retrieved.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify that the integration system "RabbitMq" is defined in the codebase.

# Search for the definition of "RabbitMq" in the integration systems module.
rg --type-add 'bsl:*.bsl' -t bsl -A 5 'Наименование\s*=\s*"Rabbit Mq"' src/

Length of output: 1615

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

36-36: Extension of status checks to include 'ОшибкаЗагрузки'

The added condition to include Объект.Статус = Перечисления.пбп_СтатусыИнтеграции.ОшибкаЗагрузки ensures that the form correctly handles cases where an error occurs during loading. This enhances the robustness of status handling.


44-51: Include support for JSON integration format

By adding checks for Перечисления.пбп_ФорматыИнтеграций.JSON, the code now supports JSON integration formats in addition to XML. Ensure that all necessary components for JSON rendering are properly initialized and tested.

Consider verifying that JSON-specific elements like ВидОтображенияЗапроса are correctly displayed and that the rendering of JSON messages functions as intended.


123-124: Ensure compatibility with XML editor methods

The usage of Xonomy.plusminus("xonomy1", true) suggests reliance on specific XML editor functionality. Verify that this method is compatible with the current version of the editor and ensure that it behaves as expected for collapsing and expanding XML nodes.


142-143: Consistency in method calls for collapsing XML nodes

Similar to the expansion functionality, ensure that the usage of Xonomy.plusminus("xonomy1", false) correctly collapses all XML nodes. Consistency in these methods is crucial for user experience.


277-315: New procedure 'ВывестиСсылкуНаФайлПриНеобходимости' is well-structured

The procedure effectively manages the visibility of elements based on whether a file link should be displayed instead of the message content, considering different integration types. This enhances the dynamic UI adjustments.


Line range hint 395-424: Ensure proper initialization and disposal of JSON objects

In the procedures for initializing and filling JSON objects (ИнициализироватьИЗаполнитьТекстомОбъектJSON), make sure that the ДокументВнешнийОбъектИсходящий and ДокументВнешнийОбъектВходящий are properly destroyed before reinitialization to prevent memory leaks. The current implementation appears to handle this correctly.

Comment on lines +49 to +51
<xr:Item xsi:type="xr:MDObjectRef">Role.пбп_ПросмотрИсторииИнтеграции</xr:Item>
<xr:Item xsi:type="xr:MDObjectRef">CommonModule.пбп_ИнтеграцииСлужебный</xr:Item>
<xr:Item xsi:type="xr:MDObjectRef">CommonModule.пбп_ИнтеграцииFTPSFTP</xr:Item>
Copy link

Choose a reason for hiding this comment

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

💡 Codebase verification

Missing Definitions for New Components

The new components added in src/cf/Subsystems/пбп_УправлениеИнтеграциями.xml were not found in the expected locations:

  • пбп_ПросмотрИсторииИнтеграции in Roles/*.xml
  • пбп_ИнтеграцииСлужебный and пбп_ИнтеграцииFTPSFTP in CommonModules/*.xml

However, there are references to these components in several .bsl files without corresponding definitions. Please ensure that these components are properly defined and implemented.

🔗 Analysis chain

LGTM! Verify consistency with related components.

The additions to the subsystem content align well with the PR objectives, enhancing the integration management capabilities:

  1. Role.пбп_ПросмотрИсторииИнтеграции: Adds a role for viewing integration history, improving access control.
  2. CommonModule.пбп_ИнтеграцииСлужебный: Introduces a service module for integrations, potentially centralizing common integration logic.
  3. CommonModule.пбп_ИнтеграцииFTPSFTP: Adds a module specifically for FTP/SFTP integrations, which aligns with the new SFTP directory content retrieval mentioned in the PR objectives.

These changes appear to be correct and beneficial.

To ensure consistency, please run the following script to verify the existence and proper implementation of these new components:

This script will help ensure that the new components are properly defined and used throughout the codebase.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the existence and implementation of new components

# Test 1: Check if the role is properly defined
echo "Checking Role definition:"
rg --type xml "пбп_ПросмотрИсторииИнтеграции" -g "Roles/*.xml"

# Test 2: Check if the CommonModules are properly implemented
echo "Checking CommonModule implementations:"
rg --type xml "пбп_ИнтеграцииСлужебный" -g "CommonModules/*.xml"
rg --type xml "пбп_ИнтеграцииFTPSFTP" -g "CommonModules/*.xml"

# Test 3: Look for usage of these new components in other files
echo "Checking usage of new components:"
rg "пбп_ПросмотрИсторииИнтеграции|пбп_ИнтеграцииСлужебный|пбп_ИнтеграцииFTPSFTP" -g "*.bsl"

Length of output: 4992

НоваяНастройка = Результат.Добавить();
НоваяНастройка.Наименование = "SFTP";
НоваяНастройка.ИдентификаторНастройки = "SFTP";
НоваяНастройка.ИнтегрируемаяСистема = пбп_ИнтеграцииСлужебный.ИнтегрируемаяСистема("СистемаN");
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

⚠️ Potential issue

Eliminate multiple uses of the string literal "СистемаN"

As indicated by the static analysis tool, the string literal "СистемаN" is used multiple times at lines 191 and 198:

...

To improve maintainability and reduce the risk of errors due to typos, consider defining a constant for the string "СистемаN".

Apply this diff to define a constant and replace the string literals:

+// Define a constant for "СистемаN"
+Перем ИдентификаторСистемаN;
+ИдентификаторСистемаN = "СистемаN";
...
...

This change centralizes the definition of the string, making it easier to update in the future and enhancing code readability.

Also applies to: 198-198

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

[warning] 191-191: src/cf/CommonModules/пбп_ПредопределенныеЗначенияПереопределяемый/Ext/Module.bsl#L191
Необходимо избавиться от многократного использования строкового литерала "СистемаN"

Comment on lines 116 to 144
// НачалоУдаления
НовыйМетод = Результат.Добавить();
НовыйМетод.Наименование = "SFTP исх";
НовыйМетод.ИдентификаторНастройки = "SFTPИсх";

НовыйМетод = Результат.Добавить();
НовыйМетод.Наименование = "SFTP вх";
НовыйМетод.ИдентификаторНастройки = "SFTPВх";

НовыйМетод = Результат.Добавить();
НовыйМетод.Наименование = "Каталог исх";
НовыйМетод.ИдентификаторНастройки = "КаталогИсх";

НовыйМетод = Результат.Добавить();
НовыйМетод.Наименование = "Каталог вх";
НовыйМетод.ИдентификаторНастройки = "КаталогВх";

НовыйМетод = Результат.Добавить();
НовыйМетод.Наименование = "Rest вх";
НовыйМетод.ИдентификаторНастройки = "RESTВх";

НовыйМетод = Результат.Добавить();
НовыйМетод.Наименование = "Rest исх";
НовыйМетод.ИдентификаторНастройки = "RESTИсх";

НовыйМетод = Результат.Добавить();
НовыйМетод.Наименование = "COM";
НовыйМетод.ИдентификаторНастройки = "COM";
// КонецУдаления
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Correct the use of deletion markers in added code

The code segment from lines 116 to 144 is enclosed between // НачалоУдаления and // КонецУдаления, which indicate the start and end of a deletion. However, the code within these markers appears to be additions of new methods.

To prevent confusion and maintain clarity in the codebase, consider updating the comments to reflect that this block is being added rather than deleted.

Apply this diff to correct the comments:

-    // НачалоУдаления
+    // НачалоДобавления
     НовыйМетод = Результат.Добавить();
     НовыйМетод.Наименование = "SFTP исх";
     НовыйМетод.ИдентификаторНастройки = "SFTPИсх";
     ...
     НовыйМетод.ИдентификаторНастройки = "COM";
-    // КонецУдаления
+    // КонецДобавления
📝 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
// НачалоУдаления
НовыйМетод = Результат.Добавить();
НовыйМетод.Наименование = "SFTP исх";
НовыйМетод.ИдентификаторНастройки = "SFTPИсх";
НовыйМетод = Результат.Добавить();
НовыйМетод.Наименование = "SFTP вх";
НовыйМетод.ИдентификаторНастройки = "SFTPВх";
НовыйМетод = Результат.Добавить();
НовыйМетод.Наименование = "Каталог исх";
НовыйМетод.ИдентификаторНастройки = "КаталогИсх";
НовыйМетод = Результат.Добавить();
НовыйМетод.Наименование = "Каталог вх";
НовыйМетод.ИдентификаторНастройки = "КаталогВх";
НовыйМетод = Результат.Добавить();
НовыйМетод.Наименование = "Rest вх";
НовыйМетод.ИдентификаторНастройки = "RESTВх";
НовыйМетод = Результат.Добавить();
НовыйМетод.Наименование = "Rest исх";
НовыйМетод.ИдентификаторНастройки = "RESTИсх";
НовыйМетод = Результат.Добавить();
НовыйМетод.Наименование = "COM";
НовыйМетод.ИдентификаторНастройки = "COM";
// КонецУдаления
// НачалоДобавления
НовыйМетод = Результат.Добавить();
НовыйМетод.Наименование = "SFTP исх";
НовыйМетод.ИдентификаторНастройки = "SFTPИсх";
НовыйМетод = Результат.Добавить();
НовыйМетод.Наименование = "SFTP вх";
НовыйМетод.ИдентификаторНастройки = "SFTPВх";
НовыйМетод = Результат.Добавить();
НовыйМетод.Наименование = "Каталог исх";
НовыйМетод.ИдентификаторНастройки = "КаталогИсх";
НовыйМетод = Результат.Добавить();
НовыйМетод.Наименование = "Каталог вх";
НовыйМетод.ИдентификаторНастройки = "КаталогВх";
НовыйМетод = Результат.Добавить();
НовыйМетод.Наименование = "Rest вх";
НовыйМетод.ИдентификаторНастройки = "RESTВх";
НовыйМетод = Результат.Добавить();
НовыйМетод.Наименование = "Rest исх";
НовыйМетод.ИдентификаторНастройки = "RESTИсх";
НовыйМетод = Результат.Добавить();
НовыйМетод.Наименование = "COM";
НовыйМетод.ИдентификаторНастройки = "COM";
// КонецДобавления

Comment on lines 187 to 208
// НачалоУдаления
НоваяНастройка = Результат.Добавить();
НоваяНастройка.Наименование = "SFTP";
НоваяНастройка.ИдентификаторНастройки = "SFTP";
НоваяНастройка.ИнтегрируемаяСистема = пбп_ИнтеграцииСлужебный.ИнтегрируемаяСистема("СистемаN");
НоваяНастройка.ТипИнтеграции = Справочники.пбп_ТипыИнтеграций.SFTP;
НоваяНастройка.ТипАвторизации = Перечисления.пбп_ТипыАвторизации.Базовая;

НоваяНастройка = Результат.Добавить();
НоваяНастройка.Наименование = "Каталог";
НоваяНастройка.ИдентификаторНастройки = "Каталог";
НоваяНастройка.ИнтегрируемаяСистема = пбп_ИнтеграцииСлужебный.ИнтегрируемаяСистема("СистемаN");
НоваяНастройка.ТипИнтеграции = Справочники.пбп_ТипыИнтеграций.Локальный;
НоваяНастройка.ТипАвторизации = Перечисления.пбп_ТипыАвторизации.Базовая;

НоваяНастройка = Результат.Добавить();
НоваяНастройка.Наименование = "REST API";
НоваяНастройка.ИдентификаторНастройки = "RestAPI";
НоваяНастройка.ИнтегрируемаяСистема = пбп_ИнтеграцииСлужебный.ИнтегрируемаяСистема("СистемаN");
НоваяНастройка.ТипИнтеграции = Справочники.пбп_ТипыИнтеграций.RESTAPI;
НоваяНастройка.ТипАвторизации = Перечисления.пбп_ТипыАвторизации.Базовая;
// КонецУдаления
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Correct the use of deletion markers in added code

Similar to the previous issue, the code block from lines 187 to 208 is enclosed within // НачалоУдаления and // КонецУдаления, but it contains additions rather than deletions.

To maintain consistency and prevent misunderstandings, update the comments to correctly indicate that this block is added code.

Apply this diff to correct the comments:

-    // НачалоУдаления
     НоваяНастройка = Результат.Добавить();
     НоваяНастройка.Наименование = "SFTP";
     ...
     НоваяНастройка.ТипАвторизации = Перечисления.пбп_ТипыАвторизации.Базовая;
-    // КонецУдаления
+    // НачалоДобавления
+    ...
+    // КонецДобавления

Committable suggestion was skipped due to low confidence.

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

[warning] 191-191: src/cf/CommonModules/пбп_ПредопределенныеЗначенияПереопределяемый/Ext/Module.bsl#L191
Необходимо избавиться от многократного использования строкового литерала "СистемаN"

Comment on lines +74 to +85
Если НовоеСообщение.Ошибка Тогда
НовоеСообщение.Статус = Перечисления.пбп_СтатусыИнтеграции.ОшибкаЗагрузки;
Иначе
НовоеСообщение.Статус = Перечисления.пбп_СтатусыИнтеграции.Загружено;
КонецЕсли;
Иначе
Если НовоеСообщение.Ошибка Тогда
НовоеСообщение.Статус = Перечисления.пбп_СтатусыИнтеграции.ОшибкаВыгрузки;
Иначе
НовоеСообщение.Статус = Перечисления.пбп_СтатусыИнтеграции.Выгружено;
КонецЕсли;
КонецЕсли;
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Refactor conditional statements to reduce code duplication

The nested Если statements can be simplified to reduce duplication and improve readability.

Consider refactoring the code as follows:

This refactoring minimizes duplication and makes the logic clearer.

Comment on lines 868 to 910
Процедура ЗаполнитьСвойстваФайловИзСтрокиСпискаФайлов(ТаблицаСвойствФайлов, ТекущаяСтрока)

МассивСвойств = пбп_СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ТекущаяСтрока, " ", Истина, Истина);
Инкремент = 0;
ИмяФайла = "";
НоваяСтрока = ТаблицаСвойствФайлов.Добавить();
Для Каждого СтрокаСвойств Из МассивСвойств Цикл
ТекущееЗначение = СтрокаСвойств;
Если Инкремент = 0 Тогда
ИмяКолонки = "Права";
ИначеЕсли Инкремент = 1 Тогда
ИмяКолонки = "КоличествовоСсылок";
ТекущееЗначение = Число(ТекущееЗначение);
ИначеЕсли Инкремент = 2 Тогда
ИмяКолонки = "Владелец";
ИначеЕсли Инкремент = 3 Тогда
ИмяКолонки = "Группа";
ИначеЕсли Инкремент = 4 Тогда
ИмяКолонки = "Размер";
ТекущееЗначение = Число(ТекущееЗначение);
ИначеЕсли Инкремент = 5 Тогда
ИмяКолонки = "Месяц";
ИначеЕсли Инкремент = 6 Тогда
ИмяКолонки = "Число";
ТекущееЗначение = Число(ТекущееЗначение);
ИначеЕсли Инкремент = 7 Тогда
ИмяКолонки = "ГодВремя";
НоваяСтрока.ЭтоВремя = СтрНайти(ТекущееЗначение, ":") > 0;
Иначе
ИмяФайла = ИмяФайла + ?(ПустаяСтрока(ИмяФайла), "", " ") + ТекущееЗначение;
КонецЕсли;

// Далее должно быть имя файла
Если Инкремент <= 7 Тогда
НоваяСтрока[ИмяКолонки] = ТекущееЗначение;
КонецЕсли;

Инкремент = Инкремент + 1;
КонецЦикла;

НоваяСтрока.ИмяФайла = ИмяФайла;

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

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

⚠️ Potential issue

Reduce cognitive complexity in "ЗаполнитьСвойстваФайловИзСтрокиСпискаФайлов" function

The function ЗаполнитьСвойстваФайловИзСтрокиСпискаФайлов has high cognitive complexity (16). This can make the code harder to read and maintain.

Consider refactoring the function to reduce complexity. One approach is to replace the large Если chain with a Выбор...КонецВыбора construct or use a mapping array.

Example refactoring using Выбор:

Процедура ЗаполнитьСвойстваФайловИзСтрокиСпискаФайлов(ТаблицаСвойствФайлов, ТекущаяСтрока)
	
	МассивСвойств = пбп_СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ТекущаяСтрока, " ", Истина, Истина);
	Инкремент = 0;
	ИмяФайла = "";
	НоваяСтрока = ТаблицаСвойствФайлов.Добавить();
	Для Каждого СтрокаСвойств Из МассивСвойств Цикл
		ТекущееЗначение = СтрокаСвойств;
		Выбор Инкремент
			Когда 0:
				ИмяКолонки = "Права";
			Когда 1:
				ИмяКолонки = "КоличествоСсылок";
				ТекущееЗначение = Число(ТекущееЗначение);
			Когда 2:
				ИмяКолонки = "Владелец";
			Когда 3:
				ИмяКолонки = "Группа";
			Когда 4:
				ИмяКолонки = "Размер";
				ТекущееЗначение = Число(ТекущееЗначение);
			Когда 5:
				ИмяКолонки = "Месяц";
			Когда 6:
				ИмяКолонки = "Число";
				ТекущееЗначение = Число(ТекущееЗначение);
			Когда 7:
				ИмяКолонки = "ГодВремя";
				НоваяСтрока.ЭтоВремя = СтрНайти(ТекущееЗначение, ":") > 0;
			Иначе
				ИмяФайла = ИмяФайла + ?(ПустаяСтрока(ИмяФайла), "", " ") + ТекущееЗначение;
		КонецВыбора;
		
		// Далее должно быть имя файла
		Если Инкремент <= 7 Тогда
			НоваяСтрока[ИмяКолонки] = ТекущееЗначение;
		КонецЕсли;
		
		Инкремент = Инкремент + 1;
	КонецЦикла;
	
	НоваяСтрока.ИмяФайла = ИмяФайла;
	
КонецПроцедуры
🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[failure] 868-868: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L868
Уменьшите когнитивную сложность "ЗаполнитьСвойстваФайловИзСтрокиСпискаФайлов" с 16 до 15


[notice] 879-879: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L879
Возможная опечатка в "Количествово"


[warning] 881-881: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L881
Создайте константу с понятным названием, присвойте ей значение "2" и используйте эту константу вместо магического числа.


[warning] 883-883: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L883
Создайте константу с понятным названием, присвойте ей значение "3" и используйте эту константу вместо магического числа.


[warning] 885-885: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L885
Создайте константу с понятным названием, присвойте ей значение "4" и используйте эту константу вместо магического числа.


[warning] 888-888: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L888
Создайте константу с понятным названием, присвойте ей значение "5" и используйте эту константу вместо магического числа.


[warning] 890-890: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L890
Создайте константу с понятным названием, присвойте ей значение "6" и используйте эту константу вместо магического числа.


[warning] 893-893: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L893
Создайте константу с понятным названием, присвойте ей значение "7" и используйте эту константу вместо магического числа.


[warning] 901-901: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L901
Создайте константу с понятным названием, присвойте ей значение "7" и используйте эту константу вместо магического числа.

Comment on lines 928 to 980
Функция ПолучитьНомерМесяцаПоСтроковомуПредставлению(МесяцСтрокойСокр)

Если МесяцСтрокойСокр = "Янв" Тогда
МесяцЧислом = 1;
ИначеЕсли МесяцСтрокойСокр = "Фев" Тогда
МесяцЧислом = 2;
ИначеЕсли МесяцСтрокойСокр = "Мар" Тогда
МесяцЧислом = 3;
ИначеЕсли МесяцСтрокойСокр = "Апр" Тогда
МесяцЧислом = 4;
ИначеЕсли МесяцСтрокойСокр = "Май" Тогда
МесяцЧислом = 5;
ИначеЕсли МесяцСтрокойСокр = "Июн" Тогда
МесяцЧислом = 6;
ИначеЕсли МесяцСтрокойСокр = "Июл" Тогда
МесяцЧислом = 7;
ИначеЕсли МесяцСтрокойСокр = "Авг" Тогда
МесяцЧислом = 8;
ИначеЕсли МесяцСтрокойСокр = "Сен" Тогда
МесяцЧислом = 9;
ИначеЕсли МесяцСтрокойСокр = "Окт" Тогда
МесяцЧислом = 10;
ИначеЕсли МесяцСтрокойСокр = "Ноя" Тогда
МесяцЧислом = 11;
ИначеЕсли МесяцСтрокойСокр = "Jan" Тогда
МесяцЧислом = 1;
ИначеЕсли МесяцСтрокойСокр = "Feb" Тогда
МесяцЧислом = 2;
ИначеЕсли МесяцСтрокойСокр = "Mar" Тогда
МесяцЧислом = 3;
ИначеЕсли МесяцСтрокойСокр = "Apr" Тогда
МесяцЧислом = 4;
ИначеЕсли МесяцСтрокойСокр = "May" Тогда
МесяцЧислом = 5;
ИначеЕсли МесяцСтрокойСокр = "Jun" Тогда
МесяцЧислом = 6;
ИначеЕсли МесяцСтрокойСокр = "Jul" Тогда
МесяцЧислом = 7;
ИначеЕсли МесяцСтрокойСокр = "Aug" Тогда
МесяцЧислом = 8;
ИначеЕсли МесяцСтрокойСокр = "Sep" Тогда
МесяцЧислом = 9;
ИначеЕсли МесяцСтрокойСокр = "Oct" Тогда
МесяцЧислом = 10;
ИначеЕсли МесяцСтрокойСокр = "Nov" Тогда
МесяцЧислом = 11;
Иначе // Декабрь
МесяцЧислом = 12;
КонецЕсли;

Возврат МесяцЧислом;

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

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

⚠️ Potential issue

Reduce cognitive complexity in "ПолучитьНомерМесяцаПоСтроковомуПредставлению" function

The function ПолучитьНомерМесяцаПоСтроковомуПредставлению has high cognitive complexity (23). This makes it difficult to read and maintain.

Consider using a mapping structure (e.g., Соответствие) to map month abbreviations to their numeric values.

Example refactoring:

Функция ПолучитьНомерМесяцаПоСтроковомуПредставлению(МесяцСтрокойСокр)
	
	Месяцы = Новый Соответствие;
	Месяцы.Вставить("Янв", 1); Месяцы.Вставить("Jan", 1);
	Месяцы.Вставить("Фев", 2); Месяцы.Вставить("Feb", 2);
	Месяцы.Вставить("Мар", 3); Месяцы.Вставить("Mar", 3);
	Месяцы.Вставить("Апр", 4); Месяцы.Вставить("Apr", 4);
	Месяцы.Вставить("Май", 5); Месяцы.Вставить("May", 5);
	Месяцы.Вставить("Июн", 6); Месяцы.Вставить("Jun", 6);
	Месяцы.Вставить("Июл", 7); Месяцы.Вставить("Jul", 7);
	Месяцы.Вставить("Авг", 8); Месяцы.Вставить("Aug", 8);
	Месяцы.Вставить("Сен", 9); Месяцы.Вставить("Sep", 9);
	Месяцы.Вставить("Окт", 10); Месяцы.Вставить("Oct", 10);
	Месяцы.Вставить("Ноя", 11); Месяцы.Вставить("Nov", 11);
	Месяцы.Вставить("Дек", 12); Месяцы.Вставить("Dec", 12);
	
	Если Месяцы.СодержитКлюч(МесяцСтрокойСокр) Тогда
		Возврат Месяцы[МесяцСтрокойСокр];
	Иначе
		Возврат 0; // Или обработать ошибку
	КонецЕсли;
	
КонецФункции
🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[failure] 928-928: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L928
Уменьшите когнитивную сложность "ПолучитьНомерМесяцаПоСтроковомуПредставлению" с 23 до 15


[notice] 930-930: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L930
Возможная опечатка в "Янв"


[notice] 944-944: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L944
Возможная опечатка в "Авг"


[notice] 940-940: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L940
Возможная опечатка в "Июн"


[notice] 942-942: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L942
Возможная опечатка в "Июл"


[notice] 932-932: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L932
Возможная опечатка в "Фев"


[notice] 948-948: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L948
Возможная опечатка в "Окт"


[failure] 928-928: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L928
Уменьшите цикломатическую сложность "ПолучитьНомерМесяцаПоСтроковомуПредставлению" с 24 до 20

Comment on lines 851 to 862
ТаблицаСвойствФайлов.Колонки.Добавить("КоличествовоСсылок",
пбп_ОбщегоНазначенияСервер.ОписаниеТипаЧисло(3, 0, ДопустимыйЗнак.Неотрицательный));
ТаблицаСвойствФайлов.Колонки.Добавить("Владелец", пбп_ОбщегоНазначенияСервер.ОписаниеТипаСтрока(50));
ТаблицаСвойствФайлов.Колонки.Добавить("Группа", пбп_ОбщегоНазначенияСервер.ОписаниеТипаСтрока(50));
ТаблицаСвойствФайлов.Колонки.Добавить("Размер",
пбп_ОбщегоНазначенияСервер.ОписаниеТипаЧисло(15, 0, ДопустимыйЗнак.Неотрицательный));
ТаблицаСвойствФайлов.Колонки.Добавить("Месяц", пбп_ОбщегоНазначенияСервер.ОписаниеТипаСтрока(10));
ТаблицаСвойствФайлов.Колонки.Добавить("Число",
пбп_ОбщегоНазначенияСервер.ОписаниеТипаЧисло(2, 0, ДопустимыйЗнак.Неотрицательный));
ТаблицаСвойствФайлов.Колонки.Добавить("ГодВремя", пбп_ОбщегоНазначенияСервер.ОписаниеТипаСтрока(5));
ТаблицаСвойствФайлов.Колонки.Добавить("ЭтоВремя", Новый ОписаниеТипов("Булево"));
ТаблицаСвойствФайлов.Колонки.Добавить("ИмяФайла", пбп_ОбщегоНазначенияСервер.ОписаниеТипаСтрока(150));
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Use constants instead of magic numbers in table column definitions

Magic numbers are used when defining the lengths and precisions of table columns. This can reduce code readability and maintainability.

Consider defining constants with meaningful names for these numbers.

Example:

Константа ДлинаСтрокиИмяФайла = 150;
Константа ДлинаСтрокиПрава = 30;
Константа ДлинаСтрокиВладелец = 50;
Константа ДлинаСтрокиМесяц = 10;
Константа ДлинаСтрокиГодВремя = 5;

...

ТаблицаСвойствФайлов.Колонки.Добавить("Права", пбп_ОбщегоНазначенияСервер.ОписаниеТипаСтрока(ДлинаСтрокиПрава));
ТаблицаСвойствФайлов.Колонки.Добавить("Владелец", пбп_ОбщегоНазначенияСервер.ОписаниеТипаСтрока(ДлинаСтрокиВладелец));
...
🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[notice] 851-851: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L851
Возможная опечатка в "Количествово"


[warning] 852-852: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L852
Создайте константу с понятным названием, присвойте ей значение "3" и используйте эту константу вместо магического числа.


[warning] 853-853: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L853
Создайте константу с понятным названием, присвойте ей значение "50" и используйте эту константу вместо магического числа.


[warning] 854-854: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L854
Создайте константу с понятным названием, присвойте ей значение "50" и используйте эту константу вместо магического числа.


[warning] 856-856: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L856
Создайте константу с понятным названием, присвойте ей значение "15" и используйте эту константу вместо магического числа.


[warning] 857-857: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L857
Создайте константу с понятным названием, присвойте ей значение "10" и используйте эту константу вместо магического числа.


[warning] 859-859: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L859
Создайте константу с понятным названием, присвойте ей значение "2" и используйте эту константу вместо магического числа.


[warning] 860-860: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L860
Создайте константу с понятным названием, присвойте ей значение "5" и используйте эту константу вместо магического числа.


[warning] 862-862: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L862
Создайте константу с понятным названием, присвойте ей значение "150" и используйте эту константу вместо магического числа.


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

Функция ПолучитьНомерМесяцаПоСтроковомуПредставлению(МесяцСтрокойСокр)
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

⚠️ Potential issue

Cyclomatic complexity is too high in "ПолучитьНомерМесяцаПоСтроковомуПредставлению"

The function's cyclomatic complexity is 24, exceeding the recommended maximum of 20.

The refactoring suggested earlier (using a mapping structure) will also address this issue by reducing the number of conditional branches.

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

[failure] 928-928: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L928
Уменьшите когнитивную сложность "ПолучитьНомерМесяцаПоСтроковомуПредставлению" с 23 до 15


[failure] 928-928: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L928
Уменьшите цикломатическую сложность "ПолучитьНомерМесяцаПоСтроковомуПредставлению" с 24 до 20

Comment on lines 930 to 974
Если МесяцСтрокойСокр = "Янв" Тогда
МесяцЧислом = 1;
ИначеЕсли МесяцСтрокойСокр = "Фев" Тогда
МесяцЧислом = 2;
ИначеЕсли МесяцСтрокойСокр = "Мар" Тогда
МесяцЧислом = 3;
ИначеЕсли МесяцСтрокойСокр = "Апр" Тогда
МесяцЧислом = 4;
ИначеЕсли МесяцСтрокойСокр = "Май" Тогда
МесяцЧислом = 5;
ИначеЕсли МесяцСтрокойСокр = "Июн" Тогда
МесяцЧислом = 6;
ИначеЕсли МесяцСтрокойСокр = "Июл" Тогда
МесяцЧислом = 7;
ИначеЕсли МесяцСтрокойСокр = "Авг" Тогда
МесяцЧислом = 8;
ИначеЕсли МесяцСтрокойСокр = "Сен" Тогда
МесяцЧислом = 9;
ИначеЕсли МесяцСтрокойСокр = "Окт" Тогда
МесяцЧислом = 10;
ИначеЕсли МесяцСтрокойСокр = "Ноя" Тогда
МесяцЧислом = 11;
ИначеЕсли МесяцСтрокойСокр = "Jan" Тогда
МесяцЧислом = 1;
ИначеЕсли МесяцСтрокойСокр = "Feb" Тогда
МесяцЧислом = 2;
ИначеЕсли МесяцСтрокойСокр = "Mar" Тогда
МесяцЧислом = 3;
ИначеЕсли МесяцСтрокойСокр = "Apr" Тогда
МесяцЧислом = 4;
ИначеЕсли МесяцСтрокойСокр = "May" Тогда
МесяцЧислом = 5;
ИначеЕсли МесяцСтрокойСокр = "Jun" Тогда
МесяцЧислом = 6;
ИначеЕсли МесяцСтрокойСокр = "Jul" Тогда
МесяцЧислом = 7;
ИначеЕсли МесяцСтрокойСокр = "Aug" Тогда
МесяцЧислом = 8;
ИначеЕсли МесяцСтрокойСокр = "Sep" Тогда
МесяцЧислом = 9;
ИначеЕсли МесяцСтрокойСокр = "Oct" Тогда
МесяцЧислом = 10;
ИначеЕсли МесяцСтрокойСокр = "Nov" Тогда
МесяцЧислом = 11;
Иначе // Декабрь
Copy link

Choose a reason for hiding this comment

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

💡 Codebase verification

Incorrect month abbreviation detected

  • In src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl at lines 930-974, the abbreviation "Фев" should be corrected to "Февр" to match the standard Russian month abbreviations.
🔗 Analysis chain

Possible typos in month abbreviations

There are potential typos in the Russian month abbreviations:

  • "Фев" should be "Февр" for February.
  • "Авг" is correct for August.
  • "Июн" and "Июл" are correct for June and July.
  • "Окт" is correct for October.

However, check if the month abbreviations match the expected input format from the SFTP server. Ensure consistency between the abbreviations used and those provided by the server.

To verify the month abbreviations, you can run the following script to check if the abbreviations match those in the data received from the SFTP server.

If needed, I can assist in updating the function to handle additional or corrected abbreviations.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the month abbreviations used in the function against sample data from the SFTP server.

# Expected result: Confirm that the month abbreviations in the data match those handled by the function.

# Since we cannot access the SFTP server, ensure that the abbreviations correspond to standard month abbreviations in English and Russian.

echo "Standard Russian abbreviations: Янв, Февр, Мар, Апр, Май, Июн, Июл, Авг, Сен, Окт, Ноя, Дек"
echo "Standard English abbreviations: Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec"

Length of output: 383

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

[notice] 930-930: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L930
Возможная опечатка в "Янв"


[notice] 944-944: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L944
Возможная опечатка в "Авг"


[notice] 940-940: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L940
Возможная опечатка в "Июн"


[notice] 942-942: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L942
Возможная опечатка в "Июл"


[notice] 932-932: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L932
Возможная опечатка в "Фев"


[notice] 948-948: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L948
Возможная опечатка в "Окт"

Copy link

Passed

Analysis Details

41 Issues

  • Bug 0 Bugs
  • Vulnerability 2 Vulnerabilities
  • Code Smell 39 Code Smells

Coverage and Duplications

  • Coverage No coverage information (0.00% Estimated after merge)
  • Duplications 0.00% Duplicated Code (0.40% 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 (6)
.bsl-language-server.json (1)

13-13: LGTM! Consider improving readability.

The additions to the "excludeWords" list are appropriate and align with the PR objectives. They correctly exclude new technical terms related to Linux servers, FTP, and SFTP operations from the "LatinAndCyrillicSymbolInWord" check.

For improved readability, consider breaking the long line into multiple lines, with one term per line. This would make future additions or modifications easier. For example:

"excludeWords": [
  "ЧтениеXML",
  "ЧтениеJSON",
  "ЗаписьXML",
  "ЗаписьJSON",
  "ComОбъект",
  "ФабрикаXDTO",
  "ОбъектXDTO",
  "СоединениеFTP",
  "HTTPСоединение",
  "HTTPЗапрос",
  "HTTPСервисОтвет",
  "SMSСообщение",
  "WSПрокси",
  "ИмяCOMОбъекта",
  "ЭтоWindowsКлиент",
  "ЭтоLinuxСервер",
  "ВыполнитьПодключениеКFTPСерверуДляИнтеграционногоПотока",
  "ЗаполнитьПараметрыПодключенияКSFTPСерверу",
  "ПолучитьТаблицуФайловСодержимогоSFTPСервера"
],
src/cf/CommonModules/пбп_ФайловаяСистемаКлиентПереадресация/Ext/Module.bsl (3)

23-29: Procedure implementation looks good, consider enhancing documentation.

The СоздатьВременныйКаталог procedure is well-structured and serves as a wrapper for the same method in another module. This approach promotes code reusability and maintainability.

Consider adding a brief description of the procedure's purpose directly in this file, in addition to the reference to the other module's documentation. This would improve readability and make the code more self-documenting.


31-41: Procedure implementation is correct, consider enhancing documentation.

The ПодключитьРасширениеДляРаботыСФайлами procedure is well-structured and serves as a wrapper for the same method in another module. This approach is consistent with the previous procedure and promotes code reusability and maintainability.

Similar to the previous suggestion, consider adding a brief description of the procedure's purpose directly in this file, in addition to the reference to the other module's documentation. This would improve readability and make the code more self-documenting.


47-49: Function implementation is correct, consider adding documentation.

The ПолучитьМодуль function is concise and serves its purpose of obtaining the correct module for file system operations. Its internal-only visibility (not exported) is appropriate for its usage within this module.

Consider adding a brief comment above the function to describe its purpose and return value. This would improve the code's self-documentation and make it easier for other developers to understand its role in the module.

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

146-146: Adjust line lengths to comply with coding standards

Lines 146, 182, 194, and 206 exceed the maximum allowed line length of 120 characters, as indicated by the static analysis tools.

Consider splitting these comment lines to improve readability and adhere to the project's style guidelines.

For example:

//  ИнтеграционныйПоток - СправочникСсылка.пбп_ИнтеграционныеПотоки - ссылка на метод,
//    параметры которого получаем.

Also applies to: 182-182, 194-194, 206-206

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

[warning] 146-146: src/cf/CommonModules/пбп_ИнтеграцииСлужебный/Ext/Module.bsl#L146
Длина строки 121 превышает максимально допустимую 120

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

432-432: Add description for parameter "ПроверитьНаличиеПередУдалением"

In the function УдалитьФайлSFTP, the parameter ПроверитьНаличиеПередУдалением is missing a description in the function comments. Including a description will enhance the documentation and make the function's purpose clearer to other developers.

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

[warning] 432-432: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L432
Необходимо добавить описание параметра "ПроверитьНаличиеПередУдалением"

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 293f478 and c563d42.

📒 Files selected for processing (9)
  • .bsl-language-server.json (1 hunks)
  • src/cf/Catalogs/пбп_ИсторияИнтеграции/Ext/ObjectModule.bsl (1 hunks)
  • src/cf/Catalogs/пбп_ИсторияИнтеграции/Forms/ФормаЭлемента/Ext/Form/Module.bsl (9 hunks)
  • src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl (1 hunks)
  • src/cf/CommonModules/пбп_ИнтеграцииСлужебный/Ext/Module.bsl (1 hunks)
  • src/cf/CommonModules/пбп_ПредопределенныеЗначенияПереопределяемый/Ext/Module.bsl (1 hunks)
  • src/cf/CommonModules/пбп_ФайловаяСистемаКлиент/Ext/Module.bsl (1 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 (4)
  • src/cf/Catalogs/пбп_ИсторияИнтеграции/Ext/ObjectModule.bsl
  • src/cf/Catalogs/пбп_ИсторияИнтеграции/Forms/ФормаЭлемента/Ext/Form/Module.bsl
  • src/cf/CommonModules/пбп_ПредопределенныеЗначенияПереопределяемый/Ext/Module.bsl
  • src/cf/CommonModules/пбп_ФайловаяСистемаКлиент/Ext/Module.bsl
🧰 Additional context used
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results
src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl

[warning] 432-432: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L432
Необходимо добавить описание параметра "ПроверитьНаличиеПередУдалением"


[warning] 1011-1011: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L1011
Создайте константу с понятным названием, присвойте ей значение "30" и используйте эту константу вместо магического числа.


[warning] 1021-1021: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L1021
Создайте константу с понятным названием, присвойте ей значение "5" и используйте эту константу вместо магического числа.


[warning] 1014-1014: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L1014
Создайте константу с понятным названием, присвойте ей значение "50" и используйте эту константу вместо магического числа.


[failure] 1030-1030: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L1030
Уменьшите когнитивную сложность "ЗаполнитьСвойстваФайловИзСтрокиСпискаФайлов" с 16 до 15


[warning] 1018-1018: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L1018
Создайте константу с понятным названием, присвойте ей значение "10" и используйте эту константу вместо магического числа.


[warning] 1048-1048: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L1048
Создайте константу с понятным названием, присвойте ей значение "4" и используйте эту константу вместо магического числа.


[warning] 1053-1053: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L1053
Создайте константу с понятным названием, присвойте ей значение "6" и используйте эту константу вместо магического числа.


[warning] 1064-1064: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L1064
Создайте константу с понятным названием, присвойте ей значение "7" и используйте эту константу вместо магического числа.


[warning] 1044-1044: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L1044
Создайте константу с понятным названием, присвойте ей значение "2" и используйте эту константу вместо магического числа.


[warning] 1046-1046: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L1046
Создайте константу с понятным названием, присвойте ей значение "3" и используйте эту константу вместо магического числа.


[warning] 1013-1013: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L1013
Создайте константу с понятным названием, присвойте ей значение "3" и используйте эту константу вместо магического числа.


[warning] 1017-1017: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L1017
Создайте константу с понятным названием, присвойте ей значение "15" и используйте эту константу вместо магического числа.


[warning] 1023-1023: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L1023
Создайте константу с понятным названием, присвойте ей значение "150" и используйте эту константу вместо магического числа.


[failure] 1092-1092: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L1092
Уменьшите когнитивную сложность "ПолучитьНомерМесяцаПоСтроковомуПредставлению" с 23 до 15


[failure] 1092-1092: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L1092
Уменьшите цикломатическую сложность "ПолучитьНомерМесяцаПоСтроковомуПредставлению" с 24 до 20


[warning] 1015-1015: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L1015
Создайте константу с понятным названием, присвойте ей значение "50" и используйте эту константу вместо магического числа.


[warning] 1051-1051: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L1051
Создайте константу с понятным названием, присвойте ей значение "5" и используйте эту константу вместо магического числа.


[warning] 1056-1056: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L1056
Создайте константу с понятным названием, присвойте ей значение "7" и используйте эту константу вместо магического числа.


[warning] 1020-1020: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L1020
Создайте константу с понятным названием, присвойте ей значение "2" и используйте эту константу вместо магического числа.

src/cf/CommonModules/пбп_ИнтеграцииСлужебный/Ext/Module.bsl

[warning] 146-146: src/cf/CommonModules/пбп_ИнтеграцииСлужебный/Ext/Module.bsl#L146
Длина строки 121 превышает максимально допустимую 120


[warning] 182-182: src/cf/CommonModules/пбп_ИнтеграцииСлужебный/Ext/Module.bsl#L182
Длина строки 121 превышает максимально допустимую 120


[warning] 194-194: src/cf/CommonModules/пбп_ИнтеграцииСлужебный/Ext/Module.bsl#L194
Длина строки 121 превышает максимально допустимую 120


[warning] 206-206: src/cf/CommonModules/пбп_ИнтеграцииСлужебный/Ext/Module.bsl#L206
Длина строки 121 превышает максимально допустимую 120

🔇 Additional comments (10)
src/cf/CommonModules/пбп_ФайловаяСистемаКлиентПереадресация/Ext/Module.bsl (2)

1-20: Excellent inclusion of copyright and license information.

The file starts with a clear copyright notice and license information, which is a best practice in open-source software development. The Apache License 2.0 is appropriately referenced, and the inclusion of the GitHub URL is helpful for users and potential contributors.


1-51: Overall, the module is well-implemented and follows good practices.

The пбп_ФайловаяСистемаКлиентПереадресация module demonstrates a clean and consistent implementation. It effectively acts as a redirection layer, forwarding calls to appropriate methods in other modules. This approach promotes code reusability and maintainability.

Key strengths:

  1. Consistent structure across procedures
  2. Clear separation of concerns
  3. Appropriate use of export keywords
  4. Inclusion of copyright and license information

Suggestions for improvement:

  1. Add brief inline documentation for each procedure and function to enhance self-documentation
src/cf/CommonModules/пбп_ФайловаяСистемаСлужебныйКлиент/Ext/Module.bsl (6)

28-38: Procedure correctly handles extension connection during installation

The procedure НачатьПодключениеРасширенияРаботыСФайламиПриУстановкеРасширения effectively checks the extension's connection status and handles scenarios appropriately by invoking notifications or raising exceptions as needed.


40-46: Procedure accurately processes user responses for extension installation

The procedure НачатьПодключениеРасширенияРаботыСФайламиПриОтветеНаВопросОбУстановке correctly interprets user actions and updates the connection status, ensuring the system responds accordingly.


62-73: Temporary directory creation initiated correctly based on extension status

The procedure СоздатьВременныйКаталогПослеПроверкиРасширенияРаботыСФайлами appropriately initiates the creation of a temporary directory when the extension is connected and handles errors by notifying the user.


83-96: Secure generation of unique temporary directory names

The procedure СоздатьВременныйКаталогПослеПолученияВременногоКаталога securely generates a unique temporary directory name using a new unique identifier, minimizing naming conflicts and enhancing security.


98-105: Effective error handling during temporary directory creation

The procedure СоздатьВременныйКаталогПриОбработкеОшибки suppresses standard error processing and provides a concise error notification, ensuring errors are handled gracefully.


108-114: User-friendly error notifications

The procedure СоздатьВременныйКаталогОповеститьОбОшибке displays warnings to the user and ensures that error notifications are properly communicated to the context for further handling.

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

30-51: Function 'ПолучитьСтруктуруЗаписиИстории' is well-implemented

The function correctly initializes all necessary fields in the integration history structure, ensuring that all expected properties are set with appropriate default values.


96-112: Procedure 'ДобавитьЗаписьВПротоколОбмена' operates correctly

The procedure effectively appends messages to the exchange protocol with the specified delimiter, handling default values appropriately.

Comment on lines +187 to +189
Функция ИнтеграционныйПоток(ИдентификаторНастройки) Экспорт
Возврат Справочники.пбп_ИнтеграционныеПотоки.НайтиПоРеквизиту("ИдентификаторНастройки", ИдентификаторНастройки);
КонецФункции
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Add input validation in exported functions

The exported functions ИнтеграционныйПоток, ИнтегрируемаяСистема, and НастройкаИнтеграции do not check if the input parameter ИдентификаторНастройки is Неопределено or an empty string. This may lead to runtime errors if these functions are called with invalid arguments.

Consider adding input validation at the beginning of each function to ensure proper handling of invalid inputs:

// At the start of each function
Если ПустаяСтрока(ИдентификаторНастройки) Тогда
    Возврат Неопределено;
КонецЕсли;

Also applies to: 199-201, 211-213

Comment on lines +260 to +269
МаксимальныйРазмерСтроки = 1000;
ИтераторДерева = Новый ОбходДереваDOM(ДокументDOM);
Пока ИтераторДерева.СледующийУзел() <> Неопределено Цикл
Если ТипЗнч(ИтераторДерева.ТекущийУзел) = Тип("ЭлементDOM") Тогда
Если СтрДлина(ИтераторДерева.ТекущийУзел.ТекстовоеСодержимое) > МаксимальныйРазмерСтроки Тогда
ИтераторДерева.ТекущийУзел.ТекстовоеСодержимое = "X";
ТребуетсяПерезаписатьXML = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Enhance the handling of large XML content

In the procedure ОчиститьДлинныеАтрибутыСообщенияXML, when the text content exceeds МаксимальныйРазмерСтроки, it is replaced with "X". Replacing large content with a single character may not be informative for debugging or logging purposes.

Consider replacing the large content with a placeholder that indicates the content was removed and provides the original length. This can aid in troubleshooting without exposing the full content:

ИтераторДерева.ТекущийУзел.ТекстовоеСодержимое = "[CONTENT REMOVED - Length: " + СтрДлина(ИтераторДерева.ТекущийУзел.ТекстовоеСодержимое) + "]"

Comment on lines +249 to +283
Процедура ОчиститьДлинныеАтрибутыСообщенияXML(XMLСтрока)

ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(XMLСтрока);

ПостроительDOM = Новый ПостроительDOM;
ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML);

ТребуетсяПерезаписатьXML = Ложь;

// Перебрать все узлы
МаксимальныйРазмерСтроки = 1000;
ИтераторДерева = Новый ОбходДереваDOM(ДокументDOM);
Пока ИтераторДерева.СледующийУзел() <> Неопределено Цикл
Если ТипЗнч(ИтераторДерева.ТекущийУзел) = Тип("ЭлементDOM") Тогда
Если СтрДлина(ИтераторДерева.ТекущийУзел.ТекстовоеСодержимое) > МаксимальныйРазмерСтроки Тогда
ИтераторДерева.ТекущийУзел.ТекстовоеСодержимое = "X";
ТребуетсяПерезаписатьXML = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;

Если ТребуетсяПерезаписатьXML Тогда

ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку(Новый ПараметрыЗаписиXML(, , Истина, Истина));

ЗаписьDOM = Новый ЗаписьDOM;
ЗаписьDOM.Записать(ДокументDOM, ЗаписьXML);

XMLСтрока = ЗаписьXML.Закрыть();

КонецЕсли;

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

Choose a reason for hiding this comment

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

⚠️ Potential issue

Add error handling for potential XML parsing exceptions

The procedure ОчиститьДлинныеАтрибутыСообщенияXML does not include error handling for cases where XMLСтрока might be invalid or malformed. This could lead to unhandled exceptions during XML parsing.

Include a try-catch block (Попытка...Исключение) to handle potential exceptions when working with XML:

Попытка
    // Existing code for XML processing
Исключение
    // Handle the exception or log an appropriate error message
КонецПопытки;

This ensures that any issues with XML parsing do not cause runtime errors in your application.

Comment on lines +1140 to +1168
Функция ПроверитьСуществованиеУтилитыПодключенияКSFTPWindows()

Возврат Ложь;

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

Функция ПолучитьТекстСкриптаОтправкиДляWinSCP(ПараметрыСоединения)

Возврат "";

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

Функция ПолучитьТекстСкриптаСодержимогоКаталоговДляWinSCP(ПараметрыСоединения)

Возврат "";

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

Функция ПолучитьТекстСкриптаПолученияДляWinSCP(ПараметрыСоединения)

Возврат "";

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

Функция ПолучитьТекстСкриптаУдаленияФайлаДляWinSCP(ПараметрыСоединения)

Возврат "";

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

Choose a reason for hiding this comment

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

⚠️ Potential issue

Implement SFTP utility functions for Windows

The functions responsible for SFTP operations on Windows platforms (lines 1140-1168) currently return default or empty values, indicating that they are not implemented. This could prevent the module from functioning correctly on Windows systems.

Consider implementing these functions to provide SFTP support on Windows platforms. If Windows support is not intended, consider updating the documentation to reflect this limitation.

Copy link

Passed

Analysis Details

26 Issues

  • Bug 0 Bugs
  • Vulnerability 2 Vulnerabilities
  • Code Smell 24 Code Smells

Coverage and Duplications

  • Coverage No coverage information (0.00% Estimated after merge)
  • Duplications 0.00% Duplicated Code (0.40% 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 (11)
src/cf/CommonModules/пбп_ИнтеграцииСлужебный/Ext/Module.bsl (10)

30-51: LGTM with a minor suggestion.

The function ПолучитьСтруктуруЗаписиИстории is well-implemented and properly documented. It initializes all necessary fields for the integration history structure.

Consider using a more concise initialization for the ОбъектыИнтеграции table:

ОбъектыИнтеграции = Новый ТаблицаЗначений;
ОбъектыИнтеграции.Колонки.Добавить("ОбъектИнтеграции");
ОбъектыИнтеграции.Колонки.Добавить("СозданОбновлен");

This approach is more idiomatic in 1C and slightly more efficient.


102-112: LGTM with a minor readability suggestion.

The procedure ДобавитьЗаписьВПротоколОбмена is well-implemented. It correctly handles the separator logic and uses НСтр for potential localization.

Consider using a more descriptive variable name instead of ВыводРазделителя. For example:

РазделительДляДобавления = ?(ПустаяСтрока(СтруктураОтвета.ПротоколОбмена), "", Разделитель);

This makes the purpose of the variable clearer and improves code readability.


125-141: Approved with a suggestion for input validation.

The function ПолучитьСтруктуруНастроекИнтеграции is well-implemented. It correctly uses privileged mode, retrieves data from both object properties and secure storage, and combines them into a single structure.

Consider adding input validation for the НастройкаИнтеграции parameter at the beginning of the function:

Если НЕ ЗначениеЗаполнено(НастройкаИнтеграции) Тогда
    Возврат Новый Структура;
КонецЕсли;

This will ensure that the function handles cases where an empty or invalid reference is passed, improving its robustness.


151-159: Approved with suggestions for improvement.

The function ПолучитьСтруктуруПотокаИНастроекИнтеграции is well-implemented, correctly retrieving and combining data from the integration flow object and integration settings.

  1. Add input validation for the ИнтеграционныйПоток parameter:
Если НЕ ЗначениеЗаполнено(ИнтеграционныйПоток) Тогда
    Возврат Новый Структура;
КонецЕсли;
  1. Update the function comment to include a description of the ИнтеграционныйПоток parameter:
// Возвращает структуру с настройками для интеграции
//
// Параметры:
//  ИнтеграционныйПоток - СправочникСсылка.пбп_ИнтеграционныеПотоки - Ссылка на элемент справочника интеграционные потоки
//
// Возвращаемое значение:
//  Структура - Структура, содержащая настройки интеграционного потока и связанные настройки интеграции

These changes will improve the function's robustness and documentation.

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

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


173-178: Approved with a suggestion for input validation.

The function ПолучитьСтруктуруПараметровВхода is well-implemented and documented. It correctly delegates the work to the appropriate catalog method, promoting code reuse and maintainability.

Consider adding input validation for the ИнтеграционныйПоток parameter at the beginning of the function:

Если НЕ ЗначениеЗаполнено(ИнтеграционныйПоток) Тогда
    Возврат Новый Структура;
КонецЕсли;

This will ensure that the function handles cases where an empty or invalid reference is passed, improving its robustness.


189-191: Approved with suggestions for improvement.

The function ИнтеграционныйПоток is concise and correctly uses the catalog method to find the integration flow.

  1. Add input validation for the ИдентификаторНастройки parameter:
Если ПустаяСтрока(ИдентификаторНастройки) Тогда
    Возврат Справочники.пбп_ИнтеграционныеПотоки.ПустаяСсылка();
КонецЕсли;
  1. Update the function comment to include a description of the ИдентификаторНастройки parameter:
// Получает предопределенный метод интеграции по идентификатору настройки
//
// Параметры:
//  ИдентификаторНастройки - Строка - Строковый идентификатор предопределенного значения, реквизит ИдентификаторНастройки
//
// Возвращаемое значение:
//  СправочникСсылка.пбп_МетодыИнтеграции - Искомый метод интеграции

These changes will improve the function's robustness and documentation.

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

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


202-204: Approved with suggestions for improvement.

The function ИнтегрируемаяСистема is concise and correctly uses the catalog method to find the integrable system.

  1. Add input validation for the ИдентификаторНастройки parameter:
Если ПустаяСтрока(ИдентификаторНастройки) Тогда
    Возврат Справочники.пбп_ИнтегрируемыеСистемы.ПустаяСсылка();
КонецЕсли;
  1. Update the function comment to include a description of the ИдентификаторНастройки parameter:
// Получает предопределенную интегрируемую систему по идентификатору настройки
//
// Параметры:
//  ИдентификаторНастройки - Строка - Строковый идентификатор предопределенного значения, реквизит ИдентификаторНастройки
//
// Возвращаемое значение:
//  СправочникСсылка.пбп_ИнтегрируемыеСистемы - Искомая система интеграции

These changes will improve the function's robustness and documentation.

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

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


215-217: Approved with suggestions for improvement.

The function НастройкаИнтеграции is concise and correctly uses the catalog method to find the integration settings.

  1. Add input validation for the ИдентификаторНастройки parameter:
Если ПустаяСтрока(ИдентификаторНастройки) Тогда
    Возврат Справочники.пбп_НастройкиИнтеграции.ПустаяСсылка();
КонецЕсли;
  1. Update the function comment to include a description of the ИдентификаторНастройки parameter:
// Получает предопределенную настройку интеграции по идентификатору настройки
//
// Параметры:
//  ИдентификаторНастройки - Строка - Строковый идентификатор предопределенного значения, реквизит ИдентификаторНастройки
//
// Возвращаемое значение:
//  СправочникСсылка.пбп_НастройкиИнтеграции - Искомая настройка интеграции

These changes will improve the function's robustness and documentation.

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

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


230-246: Approved with suggestions for improvement.

The procedure ДополнительноОбработатьЗапросыИнтеграцииПередЗаписьюВИсторию correctly processes both incoming and outgoing messages for XML content.

Consider the following improvements:

  1. Use a more robust method to detect XML content. Instead of using СтрНайти, you could check if the string starts with <?xml or use a regular expression:
Если СтрНачинаетсяС(СокрЛП(СтруктураЗаписиИстории.ИсходящееСообщение), "<?xml") Тогда
    // Process XML
КонецЕсли;
  1. Add error handling to catch potential exceptions during XML processing:
Попытка
    ОчиститьДлинныеАтрибутыСообщенияXML(СтруктураЗаписиИстории.ИсходящееСообщение);
Исключение
    ЗаписьЖурналаРегистрации("ОбработкаXML", УровеньЖурналаРегистрации.Ошибка,
        , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;

These changes will make the procedure more robust and easier to debug.


253-287: Approved with suggestions for improvement.

The procedure ОчиститьДлинныеАтрибутыСообщенияXML effectively processes XML content using DOM and handles cases where no changes are needed.

Consider the following improvements:

  1. Make the maximum string length configurable:
Процедура ОчиститьДлинныеАтрибутыСообщенияXML(XMLСтрока, МаксимальныйРазмерСтроки = 1000)
  1. Replace long content with a more informative placeholder:
ИтераторДерева.ТекущийУзел.ТекстовоеСодержимое = СтрШаблон("(Содержимое удалено. Длина: %1)", СтрДлина(ИтераторДерева.ТекущийУзел.ТекстовоеСодержимое));
  1. Add error handling for XML parsing:
Попытка
    ЧтениеXML = Новый ЧтениеXML;
    ЧтениеXML.УстановитьСтроку(XMLСтрока);
    
    ПостроительDOM = Новый ПостроительDOM;
    ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML);
    // ... rest of the code ...
Исключение
    ЗаписьЖурналаРегистрации("ОбработкаXML", УровеньЖурналаРегистрации.Ошибка,
        , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
    Возврат;
КонецПопытки;

These changes will make the procedure more flexible, informative, and robust.

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

Line range hint 188-269: Refactor РасшифровкаКодаСостоянияHTTP for Maintainability

The function РасшифровкаКодаСостоянияHTTP uses a lengthy series of Если and ИначеЕсли statements to map HTTP status codes to their descriptions. This approach can be cumbersome and difficult to maintain. Recommend refactoring the function to use a Соответствие (dictionary) to store the mappings, which enhances readability and simplifies future updates.

Here's how you might implement it:

Функция РасшифровкаКодаСостоянияHTTP(КодСостояния) Экспорт

    КодыСостояния = Новый Соответствие;
    КодыСостояния.Вставить(100, НСтр("ru = 'Успешно.'"));
    КодыСостояния.Вставить(200, НСтр("ru = 'Успешно.'"));
    КодыСостояния.Вставить(300, НСтр("ru = 'Запрос имеет более чем один из возможных ответов.'"));
    // ... Add other status codes and messages here ...
    КодыСостояния.Вставить(511, НСтр("ru = 'Требуется авторизация на сервере.'"));

    Если КодыСостояния.СодержитКлюч(КодСостояния) Тогда
        Расшифровка = КодыСостояния[КодСостояния];
    Иначе
        Расшифровка = НСтр("ru = '<Неизвестный код состояния>.'");
    КонецЕсли;

    Возврат пбп_СтроковыеФункцииСлужебныйКлиентСервер.ПодставитьПараметрыВСтроку(
        НСтр("ru = '[%1] %2'"),
        КодСостояния,
        Расшифровка);

КонецФункции
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between c563d42 and e996f29.

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

[failure] 1030-1030: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L1030
Уменьшите когнитивную сложность "ЗаполнитьСвойстваФайловИзСтрокиСпискаФайлов" с 16 до 15


[failure] 1092-1092: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L1092
Уменьшите цикломатическую сложность "ПолучитьНомерМесяцаПоСтроковомуПредставлению" с 24 до 20


[failure] 1092-1092: src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl#L1092
Уменьшите когнитивную сложность "ПолучитьНомерМесяцаПоСтроковомуПредставлению" с 23 до 15

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

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


[warning] 432-432: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L432
Необходимо добавить описание всех параметров метода


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


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


[warning] 394-394: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L394
Необходимо добавить описание всех параметров метода


[warning] 403-403: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L403
Необходимо добавить описание всех параметров метода


[warning] 423-423: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L423
Необходимо добавить описание всех параметров метода


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

src/cf/CommonModules/пбп_ИнтеграцииСлужебный/Ext/Module.bsl

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


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


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


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

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

68-75: Possible Incorrect Date Calculation in ДатаИзUnixTime Function


90-107: Avoid Removing Apostrophes from Error Messages


159-166: Add Error Handling for JSON Serialization


413-416: Incorrect Parameter Passing in ПроверитьФайлЕстьНаSFTP Function

Comment on lines +59 to +94
Процедура СоздатьСообщениеИсторииИнтеграции(СтруктураЗаписиИстории, ЭтоЗагрузка) Экспорт

УстановитьПривилегированныйРежим(Истина);

ДополнительноОбработатьЗапросыИнтеграцииПередЗаписьюВИсторию(СтруктураЗаписиИстории);

НовоеСообщение = Справочники.пбп_ИсторияИнтеграции.СоздатьЭлемент();
НовоеСообщение.ДатаИнтеграции = ТекущаяДатаСеанса();
НовоеСообщение.ДатаИнтеграцииВМиллисекундах = ТекущаяУниверсальнаяДатаВМиллисекундах();
НовоеСообщение.Код = Новый УникальныйИдентификатор();
НовоеСообщение.Ошибка = ЗначениеЗаполнено(СтруктураЗаписиИстории.ОписаниеОшибки);
НовоеСообщение.Пользователь = пбп_ПользователиСлужебный.ТекущийПользователь();
НовоеСообщение.ДлительностьОбмена = НовоеСообщение.ДатаИнтеграции - СтруктураЗаписиИстории.ДатаНачалаИнтеграции;
НовоеСообщение.ДлительностьВызова = СтруктураЗаписиИстории.ДлительностьВызова;
Если ЭтоЗагрузка Тогда
Если НовоеСообщение.Ошибка Тогда
НовоеСообщение.Статус = Перечисления.пбп_СтатусыИнтеграции.ОшибкаЗагрузки;
Иначе
НовоеСообщение.Статус = Перечисления.пбп_СтатусыИнтеграции.Загружено;
КонецЕсли;
Иначе
Если НовоеСообщение.Ошибка Тогда
НовоеСообщение.Статус = Перечисления.пбп_СтатусыИнтеграции.ОшибкаВыгрузки;
Иначе
НовоеСообщение.Статус = Перечисления.пбп_СтатусыИнтеграции.Выгружено;
КонецЕсли;
КонецЕсли;
ЗаполнитьЗначенияСвойств(НовоеСообщение, СтруктураЗаписиИстории);
Для Каждого Строка Из СтруктураЗаписиИстории.ОбъектыИнтеграции Цикл
НоваяСтрока = НовоеСообщение.ОбъектыИнтеграции.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
КонецЦикла;

НовоеСообщение.Записать();

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

Choose a reason for hiding this comment

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

⚠️ Potential issue

Approved with a security consideration.

The procedure СоздатьСообщениеИсторииИнтеграции is well-implemented, handling both upload and download scenarios correctly. It properly creates and fills a new entry in the integration history.

However, there's a potential security concern:

УстановитьПривилегированныйРежим(Истина);

The privileged mode is set at the beginning of the procedure but not reset at the end. This could lead to unintended elevated privileges in subsequent code execution.

To address this, add the following line at the end of the procedure:

УстановитьПривилегированныйРежим(Ложь);

This ensures that privileged mode is properly reset after the procedure completes its task.

Comment on lines +394 to +398
Функция ОтправитьСообщениеSFTP(ИнтеграционныйПоток, ПараметрыСообщения, СтруктураИстории = Неопределено) Экспорт

ПараметрыСоединения = ЗаполнитьПараметрыПодключенияКSFTPСерверу(ИнтеграционныйПоток);
Возврат пбп_ИнтеграцииFTPSFTP.ОтправитьСообщениеSFTP(ИнтеграционныйПоток, ПараметрыСообщения, СтруктураИстории);

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

СообщениеОбОшибке = ОпределитьТипОтправкиИОтправитьСообщениеНаSFTP(ПараметрыСоединения, ПараметрыСообщения);
КонецФункции
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Add Missing Documentation for ОтправитьСообщениеSFTP

The function ОтправитьСообщениеSFTP lacks descriptions for its parameters and return value. Including this documentation will improve code readability and help other developers understand the purpose and usage of the function.

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

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


[warning] 394-394: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L394
Необходимо добавить описание всех параметров метода

Comment on lines +403 to 407
Функция ПолучитьСодержимоеКаталогаSFTP(ИнтеграционныйПоток, КаталогПоиска, СтруктураИстории = Неопределено) Экспорт

Возврат СообщениеОбОшибке;
Возврат пбп_ИнтеграцииFTPSFTP.ПолучитьСодержимоеКаталогаSFTP(ИнтеграционныйПоток, КаталогПоиска, СтруктураИстории);

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

Choose a reason for hiding this comment

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

⚠️ Potential issue

Add Missing Documentation for ПолучитьСодержимоеКаталогаSFTP

The function ПолучитьСодержимоеКаталогаSFTP is missing descriptions for its parameters and return value. Providing detailed documentation enhances maintainability and developer comprehension.

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

[warning] 403-403: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L403
Необходимо добавить описание всех параметров метода


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

Comment on lines +423 to +427
Функция ПрочитатьСообщениеSFTP(ИнтеграционныйПоток, ПараметрыСообщения, СтруктураИстории = Неопределено) Экспорт

ПараметрыСоединения = ЗаполнитьПараметрыПодключенияКSFTPСерверу(ИнтеграционныйПоток);
Возврат пбп_ИнтеграцииFTPSFTP.ПрочитатьСообщениеSFTP(ИнтеграционныйПоток, ПараметрыСообщения, СтруктураИстории);

СообщениеОбОшибке = ОпределитьТипПолученияИПолучитьСообщениеНаSFTP(ПараметрыСоединения, ПараметрыСообщения);
КонецФункции
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Add Missing Documentation for ПрочитатьСообщениеSFTP

The function ПрочитатьСообщениеSFTP does not include descriptions for its parameters and return value. Adding this information will make the code more understandable and easier to maintain.

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

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


[warning] 423-423: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L423
Необходимо добавить описание всех параметров метода

Comment on lines +432 to +436
Функция УдалитьФайлSFTP(ИнтеграционныйПоток, ИмяФайла,
КаталогФайла = "/", ПроверитьНаличиеПередУдалением = Истина, СтруктураИстории = Неопределено) Экспорт

Возврат СообщениеОбОшибке;
Возврат пбп_ИнтеграцииFTPSFTP.УдалитьФайлSFTP(ИнтеграционныйПоток,
ИмяФайла, КаталогФайла, ПроверитьНаличиеПередУдалением, СтруктураИстории);
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Add Missing Documentation for УдалитьФайлSFTP

The function УдалитьФайлSFTP is missing descriptions for its parameters and return value. Including detailed documentation improves code clarity and assists others in understanding its functionality.

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

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


[warning] 432-432: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L432
Необходимо добавить описание всех параметров метода

Comment on lines +1227 to +1238
Функция ПолучитьТекстСкриптаОтправкиCURL(ПараметрыСоединения, ПутьОтправляемогоФайла, ПутьФайлаНаСервере)

ТекстСкрипта = "#!/usr/bin/bash
|
|curl -k ""sftp://%1%2"" --user ""%3:%4"" -T %5";

ТекстСкрипта = СтрШаблон(ТекстСкрипта, ПараметрыСоединения.Адрес, ПутьФайлаНаСервере,
ПараметрыСоединения.Логин, ПараметрыСоединения.Пароль, ПутьОтправляемогоФайла);

Возврат ТекстСкрипта;

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

Choose a reason for hiding this comment

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

⚠️ Potential issue

Avoid including passwords directly in script templates

In the function ПолучитьТекстСкриптаОтправкиCURL, the password is embedded directly in the script (--user ""%3:%4""). This practice poses a significant security risk as it exposes sensitive credentials in plaintext within script files.

Consider using more secure authentication methods, such as:

  • SSH Key Authentication: Use SSH keys instead of passwords for authentication. This eliminates the need to include passwords in scripts.
  • Secure Password Handling: If passwords must be used, avoid embedding them in scripts. Instead, prompt for the password at runtime or retrieve it securely from a protected storage.

By implementing one of these methods, you can enhance the security of your application and protect sensitive information.

Comment on lines +1284 to +1302
Функция ПолучитьТекстСкриптаОтправкиSSHPASS(ПараметрыСоединения, ПутьОтправляемогоФайла, ПутьФайлаНаСервере)

ТекстСкрипта = "#!/usr/bin/bash
|
|HOST=""%1""
|USERNAME=""%2""
|PASSWORD=""%3""
|PORT=%4
|
|sshpass -p ""$PASSWORD"" sftp -oPort=$PORT $USERNAME@$HOST <<EOF
|put %5 %6
|EOF";

ТекстСкрипта = СтрШаблон(ТекстСкрипта, ПараметрыСоединения.Адрес, ПараметрыСоединения.КаталогИсходящие,
ПараметрыСоединения.Логин, ПараметрыСоединения.Пароль, ПутьОтправляемогоФайла, ПутьФайлаНаСервере);

Возврат ТекстСкрипта;

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

Choose a reason for hiding this comment

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

⚠️ Potential issue

Avoid including passwords directly in script templates

In the function ПолучитьТекстСкриптаОтправкиSSHPASS, the password is included within the script (PASSWORD=""%3""). Storing passwords in scripts can lead to credential compromise if the script is accessed by unauthorized individuals.

Consider the following alternatives:

  • SSH Key Authentication: Replace password-based authentication with SSH keys to eliminate the need to handle passwords.
  • Secure Password Retrieval: If passwords are necessary, retrieve them securely at runtime without storing them in scripts. This can be done by prompting the user or reading from a secure vault.

Implementing these changes will improve security by reducing the risk of exposing sensitive credentials.

Comment on lines +1368 to +1386
Функция ПолучитьТекстСкриптаОтправкиEXPECT(ПараметрыСоединения, ПутьОтправляемогоФайла, ПутьФайлаНаСервере)

ТекстСкрипта = "#!/usr/bin/expect
|
|spawn sftp -P %1 %2@%3
|expect ""%2@%3's password:""
|send ""%4\n""
|expect ""sftp>""
|send ""put %5 %6\n""
|expect ""sftp>""
|send ""exit\n""
|interact";

ТекстСкрипта = СтрШаблон(ТекстСкрипта, ПараметрыСоединения.Порт, ПараметрыСоединения.Логин,
ПараметрыСоединения.Адрес, ПараметрыСоединения.Пароль, ПутьОтправляемогоФайла, ПутьФайлаНаСервере);

Возврат ТекстСкрипта;

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

Choose a reason for hiding this comment

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

⚠️ Potential issue

Avoid including passwords directly in script templates

In the function ПолучитьТекстСкриптаОтправкиEXPECT, the password is sent in plaintext within the script using the send command. This exposes sensitive information and increases the risk of credential leakage.

To enhance security, consider:

  • SSH Key Authentication: Utilize SSH keys for authentication to remove the need for passwords in scripts.
  • Interactive Password Prompt: Modify the script to prompt for the password interactively, ensuring it is not hard-coded.

These changes will help protect sensitive information and adhere to security best practices.

Comment on lines +1076 to +1091
Функция ПолучитьДатуИзТестовогоФорматаBASHLinux(СтрокаСвойств)

ГодЧислом = ?(СтрокаСвойств.ЭтоВремя, Год(ТекущаяДатаСеанса()), Число(СтрокаСвойств.ГодВремя));
Месяц = ПолучитьНомерМесяцаПоСтроковомуПредставлению(СтрокаСвойств.Месяц);
ЧислоМесяца = СтрокаСвойств.Число;

ЧасВремя = ?(СтрокаСвойств.ЭтоВремя, СтрокаСвойств.ГодВремя, "00:00");

МассивЧасВремя = пбп_СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ЧасВремя, ":");

ДатаИзменения = Дата(ГодЧислом, Месяц, ЧислоМесяца, МассивЧасВремя[0], МассивЧасВремя[1], 0);

Возврат ДатаИзменения;

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

Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Simplify date parsing logic to reduce complexity

The function ПолучитьДатуИзТестовогоФорматаBASHLinux uses multiple conditional statements to parse date and time values, increasing complexity and potential for errors.

Consider refactoring the function to leverage built-in date parsing capabilities or a mapping approach. For example:

Функция ПолучитьДатуИзТестовогоФорматаBASHLinux(СтрокаСвойств)
    ДатаСтрокой = СтрСоединить(" ", СтрокаСвойств.Число, СтрокаСвойств.Месяц, СтрокаСвойств.ГодВремя);
    Попытка
        ДатаИзменения = ДатаЗначение(ДатаСтрокой);
    Исключение
        ДатаИзменения = ТекущаяДатаСеанса();
    КонецПопытки;
    Возврат ДатаИзменения;
КонецФункции

This approach simplifies the logic by constructing a date string and using ДатаЗначение for parsing, which reduces complexity and improves maintainability.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement Улучшение существующей функциональности
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants