добавление функций для получения предопределенных значений#360
добавление функций для получения предопределенных значений#360perlusha wants to merge 2 commits into
Conversation
Сделал обратную совместимость для получения предопределенных значений, добавил возможность использовать кэш в функции получения множественных значений
WalkthroughДобавлены флаги кэша в core-функции получения предопределённых значений, обёртки в модуле повторного использования для работы с кэшем и публичные API-функции в модуле общего назначения сервера для удобного доступа к значениям ПВХ. ChangesКэширование предопределённых значений
Sequence Diagram(s)sequenceDiagram
participant Client
participant ОбщегоНазначенияСервер
participant пбп_ПредопределенныеЗначения
participant пбп_ПредопределенныеЗначенияПовтИсп
participant Менеджер
Client->>ОбщегоНазначенияСервер: ПолучитьПредопределенныеЗначения(...)
ОбщегоНазначенияСервер->>пбп_ПредопределенныеЗначения: ПредопределенныеЭлементы(..., ИспользоватьКэш)
alt ИспользоватьКэш = Истина
пбп_ПредопределенныеЗначения->>пбп_ПредопределенныеЗначенияПовтИсп: ПредопределенныеЭлементы(...)
пбп_ПредопределенныеЗначенияПовтИсп-->>ОбщегоНазначенияСервер: значения (из кэша)
else
пбп_ПредопределенныеЗначения->>Менеджер: ПолучитьЗначения(Ссылки, ВРазрезеКлючей)
Менеджер-->>ОбщегоНазначенияСервер: значения
end
ОбщегоНазначенияСервер-->>Client: результат
Оценка объёма работы🎯 3 (Средняя) | ⏱️ ~20 минут Possibly related PRs
Suggested labels
Suggested reviewers
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
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
📒 Files selected for processing (3)
src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bslsrc/cf/CommonModules/пбп_ПредопределенныеЗначения/Ext/Module.bslsrc/cf/CommonModules/пбп_ПредопределенныеЗначенияПовтИсп/Ext/Module.bsl
| Если ИспользоватьКэш Тогда | ||
| Возврат пбп_ПредопределенныеЗначенияПовтИсп.ПредопределенныеЭлементы( | ||
| ИмяОбъектаМетаданных, | ||
| Идентификаторы, | ||
| ВыбрасыватьИсключение); | ||
| КонецЕсли; |
There was a problem hiding this comment.
Кэш-ветка не передаёт ВРазрезеКлючей — форма результата отличается от некэш-ветки.
В некэш-ветке (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, передав параметр ВРазрезеКлючей в
пбп_ПредопределенныеЗначенияПовтИсп.ПредопределенныеЭлементы и обновите
сигнатуру этой обёртки в пбп_ПредопределенныеЗначенияПовтИсп, чтобы она
принимала и прокидывала ВРазрезеКлючей дальше к реализации
ПолучитьПредопределенныеПоИдентификаторам, сохраняя поведение (возврат Массив
или Соответствие) в зависимости от флага.
| Если ИспользоватьКэш Тогда | ||
| Возврат пбп_ПредопределенныеЗначенияПовтИсп.ЗначенияПредопределенныхЭлементов( | ||
| ИмяОбъектаМетаданных, | ||
| Ссылки, | ||
| ВыбрасыватьИсключение); | ||
| КонецЕсли; |
There was a problem hiding this comment.
Кэш-ветка не передаёт ВРазрезеКлючей.
Некэш-ветка (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, Кэш-ветка вызывает
пбп_ПредопределенныеЗначенияПовтИсп.ЗначенияПредопределенныхЭлементов без флага
ВРазрезеКлючей, из-за чего при ВРазрезеКлючей = Истина возвращается Массив
вместо Соответствия; исправьте вызов, добавив параметр ВРазрезеКлючей в вызов
обёртки и расширьте сигнатуру
пбп_ПредопределенныеЗначенияПовтИсп.ЗначенияПредопределенныхЭлементов чтобы
принять этот параметр и пробросить его дальше в
Менеджер.ПолучитьЗначения(Ссылки, ВыбрасыватьИсключение, ВРазрезеКлючей),
обеспечив одинаковое поведение кэша и некэша.
There was a problem hiding this comment.
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-м параметромИстина, ожидаяСоответствие, но теперь это интерпретируется какИспользоватьКэш = Истина, а функция всегда возвращаетМассив.Варианты решения:
- Сохранить параметр
ВРазрезеКлючейи добавитьИспользоватьКэшкак 5-й параметр (аналогичноЗначенияПредопределенныхЭлементов).- Обновить тесты и документировать 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
📒 Files selected for processing (3)
src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bslsrc/cf/CommonModules/пбп_ПредопределенныеЗначения/Ext/Module.bslsrc/cf/CommonModules/пбп_ПредопределенныеЗначенияПовтИсп/Ext/Module.bsl
🚧 Files skipped from review as they are similar to previous changes (1)
- src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl
Старый вариант функции все равно не использовал параметр ВРазрезеКлючей, он нужен только в следующей функции |
Сделал обратную совместимость для получения предопределенных значений, добавил возможность использовать кэш в функции получения множественных значений
Summary by CodeRabbit
New Features
Improvements