fix(form-validate): корень висячих путей — из основного реквизита формы

Проверка 11d искала висячие пути регуляркой, зашитой на корень «Объект».
Он такой только у формы объекта: у формы списка корень «Список», у формы
записи регистра «Запись». На таких формах регулярка не совпадала, и проверка
молча не срабатывала — валидатор рапортовал «чисто» на форме, которую
платформа отвергает с «Неверный путь к полю».

Узел основного реквизита BaseForm проверка уже доставала строкой выше, но
использовала только как булев признак. Теперь из него берётся имя — и для
регулярки, и для текста сообщения. Если основного реквизита нет и в BaseForm,
корень неизвестен и поведение остаётся прежним.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-08-14 15:28:53 +03:00
co-authored by Claude Opus 5
parent a424e9cd19
commit c63b626dd4
4 changed files with 70 additions and 8 deletions
@@ -0,0 +1,7 @@
{
"name": "Ошибка: путь Список.* в заимствованной форме списка без объявленного основного реквизита",
"setup": "fixture:borrowed-list-path-no-main",
"params": { "formPath": "Documents/Заказ/Forms/ФормаСписка" },
"expectError": true,
"expect": { "stdoutContains": ["Список.Партнер", "rooted at 'Список'"] }
}
@@ -0,0 +1,44 @@
<?xml version="1.0" encoding="UTF-8"?>
<Form xmlns="http://v8.1c.ru/8.3/xcf/logform" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.20">
<AutoCommandBar name="ФормаКоманднаяПанель" id="-1">
<Autofill>false</Autofill>
</AutoCommandBar>
<ChildItems>
<Table name="Список" id="1">
<ChildItems>
<InputField name="СписокПартнер" id="2">
<DataPath>Список.Партнер</DataPath>
<ContextMenu name="СписокПартнерКонтекстноеМеню" id="3"/>
<ExtendedTooltip name="СписокПартнерРасширеннаяПодсказка" id="4"/>
</InputField>
</ChildItems>
<ExtendedTooltip name="СписокРасширеннаяПодсказка" id="5"/>
</Table>
</ChildItems>
<Attributes/>
<BaseForm version="2.20">
<AutoCommandBar name="ФормаКоманднаяПанель" id="-1">
<Autofill>false</Autofill>
</AutoCommandBar>
<ChildItems>
<Table name="Список" id="1">
<ChildItems>
<InputField name="СписокПартнер" id="2">
<DataPath>Список.Партнер</DataPath>
<ContextMenu name="СписокПартнерКонтекстноеМеню" id="3"/>
<ExtendedTooltip name="СписокПартнерРасширеннаяПодсказка" id="4"/>
</InputField>
</ChildItems>
<ExtendedTooltip name="СписокРасширеннаяПодсказка" id="5"/>
</Table>
</ChildItems>
<Attributes>
<Attribute name="Список" id="1">
<Type>
<v8:Type>cfg:DynamicList</v8:Type>
</Type>
<MainAttribute>true</MainAttribute>
</Attribute>
</Attributes>
</BaseForm>
</Form>