Методы коллекции у реквизита-таблицы формы отдают строку этой таблицы - #4367
Conversation
…ё строку У реквизита формы типа ТаблицаЗначений/ДеревоЗначений `НайтиПоИдентификатору`, `Добавить`, `Получить`, `НайтиСтроки` и `Выгрузить` отдавали обобщённую строку данных формы: явные типы элементов закрывают только обход `Для Каждого`, а обращение по методу идёт через его объявление, где платформа называет обобщённую строку. Обращение к колонке сразу за вызовом не резолвилось. registerAttributeCollection делал всё то же, что registerTabularSectionData для зеркала табличной части, кроме CollectionReturnsSpecializer. Общий кусок вынесен в specializeCollectionReturns и зовётся из обеих точек. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (2)
📝 WalkthroughWalkthroughThe registrar now applies shared collection return-type specialization to form attribute collections and tabular-section mirrors. Tests cover specialized row and column inference for value-table methods and unloaded tables. ChangesForm collection inference
Estimated code review effort: 2 (Simple) | ~15 minutes Possibly related PRs
Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 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 |
|



У реквизита формы типа
ТаблицаЗначений/ДеревоЗначенийметоды коллекции отдавали обобщённую строку данных формы вместо строки этой таблицы. Обращение к колонке сразу за вызовом не резолвилось:ТаблицаПодбора.НайтиПоИдентификатору(Ид)ДанныеФормыЭлементКоллекцииДанныеФормыЭлементКоллекции.<форма>.ТаблицаПодбора…НайтиПоИдентификатору(Ид).НоменклатураСправочникСсылка.…ТаблицаПодбора.Добавить().КоличествоЧислоТаблицаПодбора.Выгрузить()ТаблицаЗначенийбез колонокТаблицаПодбора.НайтиСтроки(…)Массивбез типа элементаregisterAttributeCollectionделал всё то же, что иregisterTabularSectionDataдля зеркала табличной части, кроме одного — не вешалCollectionReturnsSpecializer. Явные типы элементов (registerDefaultElementTypes) закрывают только обходДля Каждого, а обращение по методу идёт через его объявление, где платформа называет обобщённую строку. Общий кусок вынесен вspecializeCollectionReturnsи зовётся из обеих точек.Заодно — пометка о смежном дефекте
Форма может добавить табличной части объекта свои колонки — блок
<AdditionalColumns table="Объект.Товары">у основного реквизита. В модель метаданных они не попадают вовсе, поэтому обращение к ним в модуле формы не резолвится, аUnknownMemberсчитает их опечаткой:Живой пример —
Документ.ЗаказПоставщику.Форма.ФормаДокументав 1С:ERP. Завёл mdclasses#679 с разбором, почему теряется (FormElementReaderContext.mergeAdditionalColumnsвливает такие колонки в уже существующую одноимённую колонку реквизита, а у объектного реквизита табличные части вForm.xmlне перечислены — вливать не во что). Здесь толькоTODO mdclasses#679в том месте, где колонки зеркала и берутся.Когда данные появятся, доработка будет не бесплатной, и это записано в самой пометке: дополнительные колонки пер-форменные, а зеркало табличной части у нас одно на прикладной тип — форме с такими колонками понадобится своя специализация и коллекции, и структуры
Объект.Проверки
Два теста в
FormModuleInferenceTest: методы реквизита-таблицы отдают её строку и её колонки;Выгрузить/НайтиСтрокинесут колонки и тип элемента.Получитьв тест не взял — его нет в JSON-фолбэке, а класс гоняется без синтакс-помощника.Полный
cleanTest checkлокально зелёный; отдельно прогонял*Form*/*Type*с включённым HBK.Summary by CodeRabbit
Bug Fixes
ВыгрузитьandНайтиСтрокиnow preserve row and column metadata.Tests