Skip to content

359 backward compatibility#361

Open
perlusha wants to merge 5 commits into
developfrom
359-backward-compatibility
Open

359 backward compatibility#361
perlusha wants to merge 5 commits into
developfrom
359-backward-compatibility

Conversation

@perlusha

@perlusha perlusha commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

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

Summary by CodeRabbit

  • Новые функции
    • Добавлена возможность получать предопределённые значения для одиночных и массовых запросов с опцией использования кэша.
  • Изменение поведения
    • Массовые запросы теперь всегда возвращают результаты в виде массива вместо прежнего структурированного формата.
  • Тестирование
    • Автотесты переименованы и обновлены для согласования с новым форматом и поведением кэширования.

perlusha added 3 commits June 1, 2026 14:41
Сделал обратную совместимость для получения предопределенных значений, добавил возможность использовать кэш в функции получения множественных значений
@coderabbitai

coderabbitai Bot commented Jun 1, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: baa4002d-0c2f-466a-be1f-e3bfdc631106

📥 Commits

Reviewing files that changed from the base of the PR and between 290c9b0 and 2ae5904.

📒 Files selected for processing (1)
  • src/cf/CommonModules/пбп_ПредопределенныеЗначения/Ext/Module.bsl

Walkthrough

PR вводит кэширующий вспомогательный модуль и публичные обёртки для получения предопределённых значений, добавляет флаг ИспользоватьКэш в сигнатуры основных функций и обновляет тесты под возвращаемый формат (массив).

Changes

Система кэширования предопределённых значений

Layer / File(s) Summary
Функции кэширования предопределённых элементов
src/cf/CommonModules/пбп_ПредопределенныеЗначенияПовтИсп/Ext/Module.bsl
Добавлены экспортируемые ПредопределенныеЭлементы и ЗначенияПредопределенныхЭлементов для массового получения элементов и получения значений через менеджер с прокидыванием ВРазрезеКлючей.
Параметр кэширования в основном модуле
src/cf/CommonModules/пбп_ПредопределенныеЗначения/Ext/Module.bsl
ПредопределенныеЭлементы изменена: ВРазрезеКлючейИспользоватьКэш, формирование Значения фиксировано как Новый Массив; ЗначенияПредопределенныхЭлементов получил параметр ИспользоватьКэш и при Истина делегирует вызов в повторно используемый модуль.
Публичные функции в общем модуле сервера
src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl
Добавлены ПолучитьПредопределенноеЗначение(Идентификатор, ИспользоватьКэш = Ложь) и ПолучитьПредопределенныеЗначения(Идентификаторы, ВРазрезеКлючей = Ложь, ИспользоватьКэш = Ложь) — обёртки для получения одного или нескольких значений с опциональным кэшем.
Обновление тестов
src/cfe/YAXUnit/CommonModules/ОМ_ПредопределенныеЗначения/Ext/Module.bsl
Переименована тестовая процедура, вызов ПредопределенныеЭлементы(...) изменён (последний параметр ИстинаЛожь), ассерты ожидают Массив и проверяют элементы по индексам.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • firstBitSportivnaya/PSSL#167: изменения по кешируемым экспортным функциям получения предопределённых значений и связанным переименованиям функций.

Suggested labels

Предопределенные значений

Suggested reviewers

  • denisushakov
  • ivanmolodec
  • thvvmas
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Title check ❓ Inconclusive Заголовок является чрезмерно обобщенным и не отражает основной смысл изменений. Фраза '359 backward compatibility' содержит номер задачи и общее понятие совместимости, но не описывает конкретные изменения в функциях получения предопределённых значений. Рекомендуется переформулировать заголовок более конкретно, например: 'Добавить функции для получения предопределённых значений с поддержкой кэширования' или 'Рефакторинг функций предопределённых значений с кэшем'.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch 359-backward-compatibility

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🧹 Nitpick comments (1)
src/cf/CommonModules/пбп_ПредопределенныеЗначенияПовтИсп/Ext/Module.bsl (1)

134-141: ⚡ Quick win

Результат из модуля ПовтИсп нельзя модифицировать: возвращается изменяемый Массив/делегируется изменяемый результат без фиксации

  • пбп_ПредопределенныеЗначенияПовтИсп.ПредопределенныеЭлементы создаёт ЗначениеПоУмолчанию = Новый Массив и возвращает его, передавая как Результат в пбп_ПредопределенныеЗначения.ПолучитьПредопределенныеПоИдентификаторам(..., Результат, Истина, ...) (в базовой функции заполняется/возвращается именно Результат).
  • По механике «Повторное использование возвращаемых значений» такие объекты нельзя менять: изменение повлияет на будущие вызовы, потому что будет переиспользовано кэшированное состояние.
  • Аналогично ЗначенияПредопределенныхЭлементов возвращает результат Менеджер.ПолучитьЗначения(...) без превращения в фиксированный/копию.

Лучше зафиксировать контракт «только чтение» (комментом/инвариантом) или возвращать фиксированную копию (например, ФиксированныйМассив) из ПовтИсп-обёрток.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/cf/CommonModules/пбп_ПредопределенныеЗначенияПовтИсп/Ext/Module.bsl`
around lines 134 - 141, Функция ПредопределенныеЭлементы возвращает изменяемый
Массив, который далее переиспользуется из
пбп_ПредопределенныеЗначения.ПолучитьПредопределенныеПоИдентификаторам и из-за
кэширования может быть мутирован между вызовами; исправьте это в обёртках
(ПредопределенныеЭлементы и Аналогично ЗначенияПредопределенныхЭлементов) —
вместо возврата прямого результата возвращайте фиксированную/неконвертируемую
копию (например с помощью ФиксированныйМассив или явного создания нового
массива/копии значений) или документируйте и жёстко гарантируйте контракт
«только для чтения» в комментарии/инварианте; используйте имена функций
пбп_ПредопределенныеЗначения.ПолучитьПредопределенныеПоИдентификаторам и
Менеджер.ПолучитьЗначения чтобы найти точки возврата и заменить их на возврат
фиксации/копии.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl`:
- Around line 477-485: The wrapper ПолучитьПредопределенныеЗначения declares
that keys are identifiers but currently passes Элементы to
пбп_ПредопределенныеЗначения.ЗначенияПредопределенныхЭлементов, which yields
mappings by ссылки when ВРазрезеКлючей=Истина; fix by, when ВРазрезеКлючей =
Истина, converting Элементы into their идентификаторы (extract the id from each
element) and pass that id array to ЗначенияПредопределенныхЭлементов (use the
existing variables Источник, Элементы, Идентификаторы to perform the conversion)
so the public contract matches expected identifier-based keys.

In `@src/cf/CommonModules/пбп_ПредопределенныеЗначения/Ext/Module.bsl`:
- Around line 449-454: При использовании кэша текущая ветка вызывает
пбп_ПредопределенныеЗначенияПовтИсп.ЗначенияПредопределенныхЭлементов только с
тремя аргументами, из‑за чего параметр ВРазрезеКлючей остаётся по умолчанию
(Ложь) и возвращается неправильный тип; исправьте вызов так, чтобы при
ИспользоватьКэш = Истина передавать в пбп_ПредопределенныеЗначенияПовтИсп все те
же аргументы, которые ожидает вызывающий код (включая ВРазрезеКлючей), чтобы
поведение пбп_ОбщегоНазначенияСервер.ПолучитьПредопределенныеЗначения не
изменялось и возвращался корректный Соответствие при ВРазрезеКлючей = Истина.

In `@src/cfe/YAXUnit/CommonModules/ОМ_ПредопределенныеЗначения/Ext/Module.bsl`:
- Line 61: Тест-раннер всё ещё регистрирует старое имя процедуры
("...ВозвращаетСоответствие"), тогда как фактическая экспортируемая процедура
теперь называется
ПредопределенныеЭлементы_ВРазрезеКлючей_БезКэша_ВозвращаетМассив; найдите место
регистрации в сценариях/раннере и замените старую строку регистрации на новое
имя процедуры (используйте точное имя
ПредопределенныеЭлементы_ВРазрезеКлючей_БезКэша_ВозвращаетМассив) чтобы тесты
корректно вызывали переименованную процедуру.

---

Nitpick comments:
In `@src/cf/CommonModules/пбп_ПредопределенныеЗначенияПовтИсп/Ext/Module.bsl`:
- Around line 134-141: Функция ПредопределенныеЭлементы возвращает изменяемый
Массив, который далее переиспользуется из
пбп_ПредопределенныеЗначения.ПолучитьПредопределенныеПоИдентификаторам и из-за
кэширования может быть мутирован между вызовами; исправьте это в обёртках
(ПредопределенныеЭлементы и Аналогично ЗначенияПредопределенныхЭлементов) —
вместо возврата прямого результата возвращайте фиксированную/неконвертируемую
копию (например с помощью ФиксированныйМассив или явного создания нового
массива/копии значений) или документируйте и жёстко гарантируйте контракт
«только для чтения» в комментарии/инварианте; используйте имена функций
пбп_ПредопределенныеЗначения.ПолучитьПредопределенныеПоИдентификаторам и
Менеджер.ПолучитьЗначения чтобы найти точки возврата и заменить их на возврат
фиксации/копии.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 0f270204-d15d-4ac6-ad46-7b39a9b089cc

📥 Commits

Reviewing files that changed from the base of the PR and between 1ff3c10 and 70bad74.

📒 Files selected for processing (4)
  • src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl
  • src/cf/CommonModules/пбп_ПредопределенныеЗначения/Ext/Module.bsl
  • src/cf/CommonModules/пбп_ПредопределенныеЗначенияПовтИсп/Ext/Module.bsl
  • src/cfe/YAXUnit/CommonModules/ОМ_ПредопределенныеЗначения/Ext/Module.bsl

Comment on lines +477 to +485
Функция ПолучитьПредопределенныеЗначения(Идентификаторы, ВРазрезеКлючей = Ложь, ИспользоватьКэш = Ложь) Экспорт

Источник = ПланыВидовХарактеристик.пбп_ПредопределенныеЗначения;

Элементы = пбп_ПредопределенныеЗначения.ПредопределенныеЭлементы(Источник, Идентификаторы,, ИспользоватьКэш);

Значения = пбп_ПредопределенныеЗначения.ЗначенияПредопределенныхЭлементов(Источник, Элементы,,ВРазрезеКлючей, ИспользоватьКэш);

Возврат Значения;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Несоответствие контракта ВРазрезеКлючей: вероятно возвращаются ключи-ссылки, а не идентификаторы

На Line 470 заявлен контракт «Ключ - Идентификатор переменной», но на Line 483 вызывается ЗначенияПредопределенныхЭлементов только с массивом Элементы. По тестовому контракту из src/cfe/YAXUnit/CommonModules/ОМ_ПредопределенныеЗначения/Ext/Module.bsl (Line 137-168) такой вызов в режиме Истина формирует соответствие по ссылкам. Проверьте и приведите к одному поведению: либо преобразуйте ключи в идентификаторы в этой обертке, либо скорректируйте публичный контракт и тесты.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl` around lines
477 - 485, The wrapper ПолучитьПредопределенныеЗначения declares that keys are
identifiers but currently passes Элементы to
пбп_ПредопределенныеЗначения.ЗначенияПредопределенныхЭлементов, which yields
mappings by ссылки when ВРазрезеКлючей=Истина; fix by, when ВРазрезеКлючей =
Истина, converting Элементы into their идентификаторы (extract the id from each
element) and pass that id array to ЗначенияПредопределенныхЭлементов (use the
existing variables Источник, Элементы, Идентификаторы to perform the conversion)
so the public contract matches expected identifier-based keys.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
src/cf/CommonModules/пбп_ПредопределенныеЗначения/Ext/Module.bsl (2)

417-438: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Добавьте описание параметра ИспользоватьКэш.

Новый параметр ИспользоватьКэш (строка 438) не отражён в блоке документации функции (строки 419-432).

📝 Предлагаемая правка описания
 //  ВРазрезеКлючей			 - Булево - признак получения данных в виде соответствия, где ключ - Ссылка.
+//  ИспользоватьКэш			 - Булево - признак получения данных из кэша.
 // 
 // Возвращаемое значение:
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/cf/CommonModules/пбп_ПредопределенныеЗначения/Ext/Module.bsl` around
lines 417 - 438, The function documentation for
ЗначенияПредопределенныхЭлементов lacks a description for the new parameter
ИспользоватьКэш; update the docblock above the function (the commented parameter
list) to add a line describing ИспользоватьКэш: type Булево, default Ложь, and
that when true the function will attempt to read predefined element values from
cache (if available) instead of reloading them, and when false forces fresh
retrieval; mention that behavior applies to both return forms (Массив and
Соответствие) and that an empty Ссылки still results in an empty corresponding
return value.

326-345: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Описание ПредопределенныеЭлементы рассинхронизировано с сигнатурой.

В блоке документации всё ещё описан параметр ВРазрезеКлючей и вариант возврата Соответствие (строки 340, 344-345), хотя в коде он удалён, а новый параметр ИспользоватьКэш не задокументирован. Приведите описание в соответствие с фактической сигнатурой.

📝 Предлагаемая правка описания
 //  ВыбрасыватьИсключение	 - Булево - выбрасывать исключение, если есть ошибки.
-//  ВРазрезеКлючей			 - Булево - признак получения данных в виде соответствия, где ключ - Идентификатор.
+//  ИспользоватьКэш			 - Булево - признак получения данных из кэша.
 // 
 // Возвращаемое значение:
 //  Массив - Содержит ссылки на предопределенные элементы в порядке, в котором были переданы идентификаторы.
-//  Соответствие - содержит идентификаторы (ключи) и ссылки затребованных предопределенных элементов.
-//                 Если в параметр Идентификаторы передана пустая строка, то возвращается пустое соответствие.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/cf/CommonModules/пбп_ПредопределенныеЗначения/Ext/Module.bsl` around
lines 326 - 345, Обновите документацию процедуры ПредопределенныеЭлементы чтобы
она соответствовала текущей сигнатуре: удалите упоминания параметра
ВРазрезеКлючей и вариант возврата Соответствие; опишите новый параметр
ИспользоватьКэш как Булево (если true — использовать/возвращать значения из
кэша, если false — всегда обновлять из источника), укажите формат входного
параметра Идентификаторы (Строка/Массив/ФиксированныйМассив) и то, что функция
возвращает Массив ссылок на предопределённые элементы в порядке переданных
идентификаторов; сохраните описание поведения при пустой строке (возвращается
пустой массив).
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@src/cf/CommonModules/пбп_ПредопределенныеЗначения/Ext/Module.bsl`:
- Around line 417-438: The function documentation for
ЗначенияПредопределенныхЭлементов lacks a description for the new parameter
ИспользоватьКэш; update the docblock above the function (the commented parameter
list) to add a line describing ИспользоватьКэш: type Булево, default Ложь, and
that when true the function will attempt to read predefined element values from
cache (if available) instead of reloading them, and when false forces fresh
retrieval; mention that behavior applies to both return forms (Массив and
Соответствие) and that an empty Ссылки still results in an empty corresponding
return value.
- Around line 326-345: Обновите документацию процедуры ПредопределенныеЭлементы
чтобы она соответствовала текущей сигнатуре: удалите упоминания параметра
ВРазрезеКлючей и вариант возврата Соответствие; опишите новый параметр
ИспользоватьКэш как Булево (если true — использовать/возвращать значения из
кэша, если false — всегда обновлять из источника), укажите формат входного
параметра Идентификаторы (Строка/Массив/ФиксированныйМассив) и то, что функция
возвращает Массив ссылок на предопределённые элементы в порядке переданных
идентификаторов; сохраните описание поведения при пустой строке (возвращается
пустой массив).

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: ffc2cba4-969e-4b6c-b6f4-3106895f575f

📥 Commits

Reviewing files that changed from the base of the PR and between 70bad74 and 290c9b0.

📒 Files selected for processing (2)
  • src/cf/CommonModules/пбп_ПредопределенныеЗначения/Ext/Module.bsl
  • src/cfe/YAXUnit/CommonModules/ОМ_ПредопределенныеЗначения/Ext/Module.bsl
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/cfe/YAXUnit/CommonModules/ОМ_ПредопределенныеЗначения/Ext/Module.bsl

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

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

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

2 participants