Skip to content

добавление функций для получения предопределенных значений#360

Closed
perlusha wants to merge 2 commits into
developfrom
359-backward-compatibility
Closed

добавление функций для получения предопределенных значений#360
perlusha wants to merge 2 commits into
developfrom
359-backward-compatibility

Conversation

@perlusha

@perlusha perlusha commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

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

Summary by CodeRabbit

  • New Features

    • Добавлены возможности получения предопределённых значений по одиночным идентификаторам и наборам идентификаторов.
    • Добавлены удобные обёртки для получения предопределённых элементов по имени объекта.
  • Improvements

    • Появилась опциональная поддержка кэша для ускорения получения предопределённых значений.
    • Упрощено формирование возвращаемых наборов значений и поведение при использовании кэша.

Сделал обратную совместимость для получения предопределенных значений, добавил возможность использовать кэш в функции получения множественных значений
@coderabbitai

coderabbitai Bot commented Jun 1, 2026

Copy link
Copy Markdown

Review Change Stack

Walkthrough

Добавлены флаги кэша в core-функции получения предопределённых значений, обёртки в модуле повторного использования для работы с кэшем и публичные API-функции в модуле общего назначения сервера для удобного доступа к значениям ПВХ.

Changes

Кэширование предопределённых значений

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

Sequence Diagram(s)

sequenceDiagram
  participant Client
  participant ОбщегоНазначенияСервер
  participant пбп_ПредопределенныеЗначения
  participant пбп_ПредопределенныеЗначенияПовтИсп
  participant Менеджер

  Client->>ОбщегоНазначенияСервер: ПолучитьПредопределенныеЗначения(...)
  ОбщегоНазначенияСервер->>пбп_ПредопределенныеЗначения: ПредопределенныеЭлементы(..., ИспользоватьКэш)
  alt ИспользоватьКэш = Истина
    пбп_ПредопределенныеЗначения->>пбп_ПредопределенныеЗначенияПовтИсп: ПредопределенныеЭлементы(...)
    пбп_ПредопределенныеЗначенияПовтИсп-->>ОбщегоНазначенияСервер: значения (из кэша)
  else
    пбп_ПредопределенныеЗначения->>Менеджер: ПолучитьЗначения(Ссылки, ВРазрезеКлючей)
    Менеджер-->>ОбщегоНазначенияСервер: значения
  end
  ОбщегоНазначенияСервер-->>Client: результат
Loading

Оценка объёма работы

🎯 3 (Средняя) | ⏱️ ~20 минут

Possibly related PRs

  • firstBitSportivnaya/PSSL#330: Похожая работа по приведению/повторному экспорту API доступа к предопределённым значениям и связанным тестам.

Suggested labels

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

Suggested reviewers

  • ivanmolodec
  • thvvmas
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed Заголовок полностью соответствует основному изменению: добавлены экспортируемые функции для получения предопределенных значений ПВХ.
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: 5

🤖 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-487: При ВРазрезеКлючей = Истина функция
ПолучитьПредопределенныеЗначения сейчас передаёт в
пбп_ПредопределенныеЗначения.ЗначенияПредопределенныхЭлементов значение Элементы
как есть, но ПредопределенныеЭлементы возвращает Соответствие, а менеджер
ожидает Массив; исправьте это, преобразовав Соответствие в Массив значений перед
передачей: в ПолучитьПредопределенныеЗначения после вызова
пбп_ПредопределенныеЗначения.ПредопределенныеЭлементы проверяйте
ТипЗнч(Элементы) = "Соответствие" и в этом случае присваивайте Элементы =
Элементы.Значения() (или эквивалентный метод получения массива значений), затем
передавайте результат в
пбп_ПредопределенныеЗначения.ЗначенияПредопределенныхЭлементов; это гарантирует,
что менеджерская функция (ЗначенияПредопределенныхЭлементов/ПолучитьЗначения)
всегда получает Массив ссылок.

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

In `@src/cf/CommonModules/пбп_ПредопределенныеЗначенияПовтИсп/Ext/Module.bsl`:
- Around line 134-139: Обёртке ПредопределенныеЭлементы нужно не передавать
Неопределено как накопитель при множественном выборе и также поддержать
проксирование флага ВРазрезеКлючей: в начале функции определить ЛокальнаяПерем
Результат := ЗначениеПоУмолчанию; если Результат = Неопределено тогда
инициализировать его пустой коллекцией (например, Новый СписокЗначений() или
другой ожидаемой коллекцией), добавить новый необязательный параметр
ВРазрезеКлючей = Ложь в сигнатуре функции и при вызове
пбп_ПредопределенныеЗначения.ПолучитьПредопределенныеПоИдентификаторам
передавать Результат и параметр ВРазрезеКлючей вместе с текущими аргументами
(ИмяОбъектаМетаданных, Идентификатор, Результат, Истина, ВыбрасыватьИсключение,
ВРазрезеКлючей), чтобы ДополнитьЗначенияПредопределенных не вызывал исключение
на Неопределено и форма результата соответствовала некэш-пути.
- Around line 143-149: The wrapper ЗначенияПредопределенныхЭлементов currently
forwards the wrong parameter as the third argument to Менеджер.ПолучитьЗначения
(it passes ЗначениеПоУмолчанию where the manager expects ВРазрезеКлючей). Change
the function signature to accept ВРазрезеКлючей as the third parameter (e.g. add
ВРазрезеКлючей = Ложь) and adjust the call to Менеджер.ПолучитьЗначения to pass
(Ссылки, ВРазрезеКлючей, ВыбрасыватьИсключение, ЗначениеПоУмолчанию), ensuring
the new parameter is taken from the caller and propagated to the manager.
🪄 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: fbe8bbcc-1cc8-4e9c-8a65-1dc4f5ea8542

📥 Commits

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

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

Comment on lines +364 to +369
Если ИспользоватьКэш Тогда
Возврат пбп_ПредопределенныеЗначенияПовтИсп.ПредопределенныеЭлементы(
ИмяОбъектаМетаданных,
Идентификаторы,
ВыбрасыватьИсключение);
КонецЕсли;

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 371-375) ПолучитьПредопределенныеПоИдентификаторам формирует Массив или Соответствие в зависимости от ВРазрезеКлючей. Здесь же флаг не пробрасывается в обёртку пбп_ПредопределенныеЗначенияПовтИсп.ПредопределенныеЭлементы, поэтому при ВРазрезеКлючей = Истина кэш-путь вернёт результат иной структуры. Обёртку (файл пбп_ПредопределенныеЗначенияПовтИсп) также нужно расширить параметром ВРазрезеКлючей.

🐛 Проброс `ВРазрезеКлючей` в кэш-обёртку
 	Если ИспользоватьКэш Тогда
 		Возврат пбп_ПредопределенныеЗначенияПовтИсп.ПредопределенныеЭлементы(
 			ИмяОбъектаМетаданных,
 			Идентификаторы,
-			ВыбрасыватьИсключение);
+			ВыбрасыватьИсключение,
+			ВРазрезеКлючей);
 	КонецЕсли;
🤖 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 364 - 369, Кэш-ветка вызывает
пбп_ПредопределенныеЗначенияПовтИсп.ПредопределенныеЭлементы без передачи флага
ВРазрезеКлючей, из‑за чего возвращаемая структура отличается от ветки без кэша;
исправьте вызов в Module.bsl, передав параметр ВРазрезеКлючей в
пбп_ПредопределенныеЗначенияПовтИсп.ПредопределенныеЭлементы и обновите
сигнатуру этой обёртки в пбп_ПредопределенныеЗначенияПовтИсп, чтобы она
принимала и прокидывала ВРазрезеКлючей дальше к реализации
ПолучитьПредопределенныеПоИдентификаторам, сохраняя поведение (возврат Массив
или Соответствие) в зависимости от флага.

Comment on lines +454 to +459
Если ИспользоватьКэш Тогда
Возврат пбп_ПредопределенныеЗначенияПовтИсп.ЗначенияПредопределенныхЭлементов(
ИмяОбъектаМетаданных,
Ссылки,
ВыбрасыватьИсключение);
КонецЕсли;

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 461-463) вызывает Менеджер.ПолучитьЗначения(Ссылки, ВыбрасыватьИсключение, ВРазрезеКлючей), а кэш-ветка флаг не пробрасывает в обёртку. При ВРазрезеКлючей = Истина кэш-путь вернёт Массив вместо Соответствия. Обёртку пбп_ПредопределенныеЗначенияПовтИсп.ЗначенияПредопределенныхЭлементов нужно расширить параметром ВРазрезеКлючей (см. отдельный комментарий).

🐛 Проброс `ВРазрезеКлючей` в кэш-обёртку
 	Если ИспользоватьКэш Тогда
 		Возврат пбп_ПредопределенныеЗначенияПовтИсп.ЗначенияПредопределенныхЭлементов(
 			ИмяОбъектаМетаданных,
 			Ссылки,
-			ВыбрасыватьИсключение);
+			ВыбрасыватьИсключение,
+			ВРазрезеКлючей);
 	КонецЕсли;
🤖 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 454 - 459, Кэш-ветка вызывает
пбп_ПредопределенныеЗначенияПовтИсп.ЗначенияПредопределенныхЭлементов без флага
ВРазрезеКлючей, из-за чего при ВРазрезеКлючей = Истина возвращается Массив
вместо Соответствия; исправьте вызов, добавив параметр ВРазрезеКлючей в вызов
обёртки и расширьте сигнатуру
пбп_ПредопределенныеЗначенияПовтИсп.ЗначенияПредопределенныхЭлементов чтобы
принять этот параметр и пробросить его дальше в
Менеджер.ПолучитьЗначения(Ссылки, ВыбрасыватьИсключение, ВРазрезеКлючей),
обеспечив одинаковое поведение кэша и некэша.

@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 (1)
src/cf/CommonModules/пбп_ПредопределенныеЗначения/Ext/Module.bsl (1)

347-372: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Нарушена обратная совместимость: удалён параметр ВРазрезеКлючей, тест сломается.

Старая сигнатура ПредопределенныеЭлементы(..., ВРазрезеКлючей = Ложь) заменена на ПредопределенныеЭлементы(..., ИспользоватьКэш = Ложь). Существующий тест ПредопределенныеЭлементы_ВРазрезеКлючей_БезКэша_ВозвращаетСоответствие вызывает функцию с 4-м параметром Истина, ожидая Соответствие, но теперь это интерпретируется как ИспользоватьКэш = Истина, а функция всегда возвращает Массив.

Варианты решения:

  1. Сохранить параметр ВРазрезеКлючей и добавить ИспользоватьКэш как 5-й параметр (аналогично ЗначенияПредопределенныхЭлементов).
  2. Обновить тесты и документировать breaking change.
🐛 Вариант исправления: сохранить `ВРазрезеКлючей`
 Функция ПредопределенныеЭлементы(ИсточникМетаданных,
 	Знач Идентификаторы,
 	ВыбрасыватьИсключение = Ложь,
+	ВРазрезеКлючей = Ложь,
 	ИспользоватьКэш = Ложь) Экспорт
 	
-	Значения = Новый Массив;
+	Если ВРазрезеКлючей Тогда
+		Значения = Новый Соответствие;
+	Иначе
+		Значения = Новый Массив;
+	КонецЕсли;
 	
 	ИмяОбъектаМетаданных = ИмяОбъектаМетаданныхПоИсточнику(ИсточникМетаданных, ВыбрасыватьИсключение);
 	Если ИмяОбъектаМетаданных = Неопределено Тогда
 		Возврат Значения;
 	КонецЕсли;
 	
 	Если ИспользоватьКэш Тогда
 		Возврат пбп_ПредопределенныеЗначенияПовтИсп.ПредопределенныеЭлементы(
 			ИмяОбъектаМетаданных,
 			Идентификаторы,
-			ВыбрасыватьИсключение);
+			ВыбрасыватьИсключение,
+			ВРазрезеКлючей);
 	КонецЕсли;
🤖 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 347 - 372, Restore the original 4th parameter ВРазрезеКлючей and make
ИспользоватьКэш the new 5th parameter so existing callers/tests that pass a
boolean as the 4th argument keep the old semantics; change the signature of
ПредопределенныеЭлементы to (ИсточникМетаданных, Знач Идентификаторы,
ВРазрезеКлючей = Ложь, ВыбрасыватьИсключение = Ложь, ИспользоватьКэш = Ложь),
update the internal logic: when ИспользоватьКэш then call
пбп_ПредопределенныеЗначенияПовтИсп.ПредопределенныеЭлементы(ИмяОбъектаМетаданных,
Идентификаторы, ВыбрасыватьИсключение), otherwise call
ПолучитьПредопределенныеПоИдентификаторам(ИмяОбъектаМетаданных, Идентификаторы,
Значения, ВРазрезеКлючей, ВыбрасыватьИсключение) so the ВРазрезеКлючей flag is
respected and backward compatibility is preserved.
🧹 Nitpick comments (1)
src/cf/CommonModules/пбп_ПредопределенныеЗначенияПовтИсп/Ext/Module.bsl (1)

134-141: ⚡ Quick win

Обёртка не поддерживает ВРазрезеКлючей — согласовано ли с API основного модуля?

Обёртка всегда возвращает Массив. Если параметр ВРазрезеКлючей будет восстановлен в основном модуле пбп_ПредопределенныеЗначения.ПредопределенныеЭлементы, необходимо расширить сигнатуру обёртки:

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

Если удаление ВРазрезеКлючей — намеренное решение, текущая реализация корректна.

🤖 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, Обёртка ПредопределенныеЭлементы всегда фиксирует
поведение «в разрезе ключей» (вызовом Истина) и не принимает параметр
ВРазрезеКлючей; если API основного модуля поддерживает/будет поддерживать этот
флаг, расширьте сигнатуру ПредопределенныеЭлементы, добавив параметр
ВРазрезеКлючей с разумным значением по умолчанию (напр., Истина или Ложь), и
передайте этот параметр дальше в вызов
пбп_ПредопределенныеЗначения.ПолучитьПредопределенныеПоИдентификаторам вместо
жёстко заданного Истина; оставьте возвращаемый тип как Массив или обновите
контракт функции, если основной модуль изменит тип возврата.
🤖 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 347-372: Restore the original 4th parameter ВРазрезеКлючей and
make ИспользоватьКэш the new 5th parameter so existing callers/tests that pass a
boolean as the 4th argument keep the old semantics; change the signature of
ПредопределенныеЭлементы to (ИсточникМетаданных, Знач Идентификаторы,
ВРазрезеКлючей = Ложь, ВыбрасыватьИсключение = Ложь, ИспользоватьКэш = Ложь),
update the internal logic: when ИспользоватьКэш then call
пбп_ПредопределенныеЗначенияПовтИсп.ПредопределенныеЭлементы(ИмяОбъектаМетаданных,
Идентификаторы, ВыбрасыватьИсключение), otherwise call
ПолучитьПредопределенныеПоИдентификаторам(ИмяОбъектаМетаданных, Идентификаторы,
Значения, ВРазрезеКлючей, ВыбрасыватьИсключение) so the ВРазрезеКлючей flag is
respected and backward compatibility is preserved.

---

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

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 0b2fa83d-8edc-4295-a8bd-9cdaff55898a

📥 Commits

Reviewing files that changed from the base of the PR and between b3999e8 and fe1faae.

📒 Files selected for processing (3)
  • src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl
  • src/cf/CommonModules/пбп_ПредопределенныеЗначения/Ext/Module.bsl
  • src/cf/CommonModules/пбп_ПредопределенныеЗначенияПовтИсп/Ext/Module.bsl
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl

@perlusha

perlusha commented Jun 1, 2026

Copy link
Copy Markdown
Contributor Author

Caution

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

⚠️ Outside diff range comments (1)

src/cf/CommonModules/пбп_ПредопределенныеЗначения/Ext/Module.bsl (1)> 347-372: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Нарушена обратная совместимость: удалён параметр ВРазрезеКлючей, тест сломается.
Старая сигнатура ПредопределенныеЭлементы(..., ВРазрезеКлючей = Ложь) заменена на ПредопределенныеЭлементы(..., ИспользоватьКэш = Ложь). Существующий тест ПредопределенныеЭлементы_ВРазрезеКлючей_БезКэша_ВозвращаетСоответствие вызывает функцию с 4-м параметром Истина, ожидая Соответствие, но теперь это интерпретируется как ИспользоватьКэш = Истина, а функция всегда возвращает Массив.
Варианты решения:

  1. Сохранить параметр ВРазрезеКлючей и добавить ИспользоватьКэш как 5-й параметр (аналогично ЗначенияПредопределенныхЭлементов).
  2. Обновить тесты и документировать breaking change.

🐛 Вариант исправления: сохранить ВРазрезеКлючей

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

🤖 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 347 - 372, Restore the original 4th parameter ВРазрезеКлючей and make
ИспользоватьКэш the new 5th parameter so existing callers/tests that pass a
boolean as the 4th argument keep the old semantics; change the signature of
ПредопределенныеЭлементы to (ИсточникМетаданных, Знач Идентификаторы,
ВРазрезеКлючей = Ложь, ВыбрасыватьИсключение = Ложь, ИспользоватьКэш = Ложь),
update the internal logic: when ИспользоватьКэш then call
пбп_ПредопределенныеЗначенияПовтИсп.ПредопределенныеЭлементы(ИмяОбъектаМетаданных,
Идентификаторы, ВыбрасыватьИсключение), otherwise call
ПолучитьПредопределенныеПоИдентификаторам(ИмяОбъектаМетаданных, Идентификаторы,
Значения, ВРазрезеКлючей, ВыбрасыватьИсключение) so the ВРазрезеКлючей flag is
respected and backward compatibility is preserved.

🧹 Nitpick comments (1)

src/cf/CommonModules/пбп_ПредопределенныеЗначенияПовтИсп/Ext/Module.bsl (1)> 134-141: ⚡ Quick win

Обёртка не поддерживает ВРазрезеКлючей — согласовано ли с API основного модуля?
Обёртка всегда возвращает Массив. Если параметр ВРазрезеКлючей будет восстановлен в основном модуле пбп_ПредопределенныеЗначения.ПредопределенныеЭлементы, необходимо расширить сигнатуру обёртки:

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

Если удаление ВРазрезеКлючей — намеренное решение, текущая реализация корректна.

🤖 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, Обёртка ПредопределенныеЭлементы всегда фиксирует
поведение «в разрезе ключей» (вызовом Истина) и не принимает параметр
ВРазрезеКлючей; если API основного модуля поддерживает/будет поддерживать этот
флаг, расширьте сигнатуру ПредопределенныеЭлементы, добавив параметр
ВРазрезеКлючей с разумным значением по умолчанию (напр., Истина или Ложь), и
передайте этот параметр дальше в вызов
пбп_ПредопределенныеЗначения.ПолучитьПредопределенныеПоИдентификаторам вместо
жёстко заданного Истина; оставьте возвращаемый тип как Массив или обновите
контракт функции, если основной модуль изменит тип возврата.

🤖 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 347-372: Restore the original 4th parameter ВРазрезеКлючей and
make ИспользоватьКэш the new 5th parameter so existing callers/tests that pass a
boolean as the 4th argument keep the old semantics; change the signature of
ПредопределенныеЭлементы to (ИсточникМетаданных, Знач Идентификаторы,
ВРазрезеКлючей = Ложь, ВыбрасыватьИсключение = Ложь, ИспользоватьКэш = Ложь),
update the internal logic: when ИспользоватьКэш then call
пбп_ПредопределенныеЗначенияПовтИсп.ПредопределенныеЭлементы(ИмяОбъектаМетаданных,
Идентификаторы, ВыбрасыватьИсключение), otherwise call
ПолучитьПредопределенныеПоИдентификаторам(ИмяОбъектаМетаданных, Идентификаторы,
Значения, ВРазрезеКлючей, ВыбрасыватьИсключение) so the ВРазрезеКлючей flag is
respected and backward compatibility is preserved.

---

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

ℹ️ Review info

Старый вариант функции все равно не использовал параметр ВРазрезеКлючей, он нужен только в следующей функции

@perlusha perlusha closed this Jun 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant