fix(cfe-borrow): связь на незаимствованный реквизит объекта — ссылка на основной реквизит

С -BorrowMainAttribute Form в расширение попадают только реквизиты, используемые
формой; путь связи параметров выбора использованием не считается. Связь на такой
реквизит (Объект.Ответственный, которого нет на форме) оставалась текстом, и
платформа отвергала загрузку: «Неверный путь к полю».

Конфигуратор реквизит не заимствует, а связь пишет id основного реквизита — как
у стандартного поля (эталон УТ Претензии.ФормаЭлементаСамообслуживание:
Объект.Партнер → 1). Навык делает так же: текст — только для реквизита, который
попадёт в расширение (тот же сбор, что в Borrow-MainAttribute). Форма эталона
совпадает построчно в обоих портах.

Найдено ревью диапазона main...dev. Кейсы form-link-codes и -main дополнены
реквизитом вне формы.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-09-27 16:30:48 +03:00
co-authored by Claude Opus 5.5
parent 7381b0503c
commit 3e726495d5
11 changed files with 184 additions and 50 deletions
@@ -126,7 +126,8 @@ $script:mainAttrKinds = @{
}
# Путь связи → текст (разрешается в расширении), код или $null (вырезать).
# $ctx: MainName, MainId, MainBorrowed, MainKind, AttrUuids (имя/«ТЧ.Реквизит» → uuid),
# $ctx: MainName, MainId, MainBorrowed, MainKind, BorrowedNames (реквизиты объекта в расширении;
# $null — все), AttrUuids (имя/«ТЧ.Реквизит» → uuid),
# FormAttrIds, FormAttrCols («Реквизит.Колонка» → id), AddCols («<путь таблицы>.Колонка» → id),
# Tables (имя элемента-таблицы → @{ Id; Path }).
function Resolve-LinkDataPath {
@@ -175,10 +176,13 @@ function Resolve-LinkDataPath {
if ($main -and $path.StartsWith("$main.", [StringComparison]::Ordinal)) {
$rest = $path.Substring($main.Length + 1)
if ($ctx.MainBorrowed) {
# Реквизит объекта разрешается текстом и остаётся читаемым. Стандартное поле
# («Объект.Owner», «Объект.Date») — нет: платформа отвергает «Неверный путь к данным».
# Конфигуратор в этом случае оставляет ссылку на сам реквизит (эталон Issue66Example7_1).
if ($ctx.AttrUuids.ContainsKey($rest)) { return $path }
# Заимствованный реквизит объекта разрешается текстом и остаётся читаемым. Стандартное
# поле («Объект.Owner», «Объект.Date») и реквизит, который в расширение не попал (в режиме
# Form заимствуется только используемое формой) — нет: платформа отвергает «Неверный путь
# к полю». Конфигуратор в обоих случаях ставит ссылку на сам основной реквизит (эталоны
# Issue66Example7_1 и УТ Претензии.ФормаЭлементаСамообслуживание).
$borrowed = $null -eq $ctx.BorrowedNames -or $ctx.BorrowedNames.ContainsKey($rest.Split('.')[0])
if ($borrowed -and $ctx.AttrUuids.ContainsKey($rest)) { return $path }
return $ctx.MainId
}
$segs = $rest.Split('.')
@@ -1064,7 +1068,13 @@ function Borrow-Form {
# Имена реквизитов объекта нужны в обоих режимах: без заимствования — для кода пути в связях
# формы, с заимствованием — чтобы отличить реквизит (разрешается текстом) от стандартного поля
$srcAttrUuids = Get-SourceAttributeUuids $typeName $objName
$linkCtx = Get-LinkContext $srcFormEl $srcMainAttrName ([bool]$mainAttrInfo) $srcAttrUuids $formAttrIds
# Реквизиты объекта, которые попадут в расширение: в режиме Form — только используемые формой
# (тот же сбор, что в Borrow-MainAttribute), в режиме All — все ($null)
$borrowedNames = $null
if ($mainAttrInfo -and $BorrowMainAttribute -eq 'Form') {
$borrowedNames = (Collect-FormDataPaths $srcFormXmlPath $srcMainAttrName).FirstLevel
}
$linkCtx = Get-LinkContext $srcFormEl $srcMainAttrName ([bool]$mainAttrInfo) $borrowedNames $srcAttrUuids $formAttrIds
# AutoCommandBar: keep ChildItems (buttons with CommandName→0), Autofill→false
$autoCmdXml = ""
@@ -1678,7 +1688,7 @@ function Get-FormAttributeIds {
# Контекст разрешения путей в связях формы (см. Resolve-LinkDataPath) — всё по ИСХОДНОЙ форме:
# колонки реквизитов формы, колонки AdditionalColumns, элементы-таблицы и вид основного реквизита.
function Get-LinkContext {
param($formEl, [string]$mainName, [bool]$mainBorrowed, $attrUuids, $formAttrIds)
param($formEl, [string]$mainName, [bool]$mainBorrowed, $borrowedNames, $attrUuids, $formAttrIds)
$cols = @{}; $addCols = @{}; $tables = @{}; $kind = $null
$attrs = $formEl.SelectSingleNode("*[local-name()='Attributes']")
@@ -1718,7 +1728,7 @@ function Get-LinkContext {
}
$mainId = if ($mainName -and $formAttrIds.ContainsKey($mainName)) { $formAttrIds[$mainName] } else { "1" }
return @{
MainName = $mainName; MainId = $mainId; MainBorrowed = $mainBorrowed; MainKind = $kind
MainName = $mainName; MainId = $mainId; MainBorrowed = $mainBorrowed; MainKind = $kind; BorrowedNames = $borrowedNames
AttrUuids = $attrUuids; FormAttrIds = $formAttrIds; FormAttrCols = $cols; AddCols = $addCols; Tables = $tables
}
}
@@ -147,7 +147,8 @@ MAIN_ATTR_KINDS = {
def resolve_link_data_path(path, ctx):
"""Путь связи → текст (разрешается в расширении), код или None (вырезать).
ctx: MainName, MainId, MainBorrowed, MainKind, AttrUuids (имя/«ТЧ.Реквизит» → uuid),
ctx: MainName, MainId, MainBorrowed, MainKind, BorrowedNames (реквизиты объекта в расширении;
None — все), AttrUuids (имя/«ТЧ.Реквизит» → uuid),
FormAttrIds, FormAttrCols («Реквизит.Колонка» → id), AddCols («<путь таблицы>.Колонка» → id),
Tables (имя элемента-таблицы → {Id, Path})."""
# Уже код (форма-источник сама из расширения, или висячая ссылка в типовой) — как есть
@@ -196,10 +197,13 @@ def resolve_link_data_path(path, ctx):
if main and path.startswith(main + '.'):
rest = path[len(main) + 1:]
if ctx['MainBorrowed']:
# Реквизит объекта разрешается текстом и остаётся читаемым. Стандартное поле
# («Объект.Owner», «Объект.Date») — нет: платформа отвергает «Неверный путь к данным».
# Конфигуратор в этом случае оставляет ссылку на сам реквизит (эталон Issue66Example7_1).
if rest in attr_uuids:
# Заимствованный реквизит объекта разрешается текстом и остаётся читаемым. Стандартное
# поле («Объект.Owner», «Объект.Date») и реквизит, который в расширение не попал (в режиме
# Form заимствуется только используемое формой) — нет: платформа отвергает «Неверный путь
# к полю». Конфигуратор в обоих случаях ставит ссылку на сам основной реквизит (эталоны
# Issue66Example7_1 и УТ Претензии.ФормаЭлементаСамообслуживание).
borrowed = ctx['BorrowedNames'] is None or rest.split('.')[0] in ctx['BorrowedNames']
if borrowed and rest in attr_uuids:
return path
return ctx['MainId']
segs = rest.split('.')
@@ -1370,7 +1374,7 @@ def main():
break
return result
def get_link_context(form_el, main_name, main_borrowed, attr_uuids, form_attr_ids):
def get_link_context(form_el, main_name, main_borrowed, borrowed_names, attr_uuids, form_attr_ids):
"""Контекст разрешения путей в связях формы (см. resolve_link_data_path) — всё по ИСХОДНОЙ
форме: колонки реквизитов формы, колонки AdditionalColumns, элементы-таблицы и вид основного
реквизита."""
@@ -1414,6 +1418,7 @@ def main():
break
main_id = form_attr_ids.get(main_name, "1") if main_name else "1"
return {"MainName": main_name, "MainId": main_id, "MainBorrowed": main_borrowed, "MainKind": kind,
"BorrowedNames": borrowed_names,
"AttrUuids": attr_uuids, "FormAttrIds": form_attr_ids, "FormAttrCols": cols,
"AddCols": add_cols, "Tables": tables}
@@ -2080,8 +2085,13 @@ def main():
# Имена реквизитов объекта нужны в обоих режимах: без заимствования — для кода пути в связях
# формы, с заимствованием — чтобы отличить реквизит (разрешается текстом) от стандартного поля
src_attr_uuids = get_source_attribute_uuids(type_name, obj_name)
# Реквизиты объекта, которые попадут в расширение: в режиме Form — только используемые формой
# (тот же сбор, что в borrow_main_attribute), в режиме All — все (None)
borrowed_names = None
if main_attr_info is not None and borrow_main_attribute_mode == "Form":
borrowed_names = collect_form_data_paths(src_form_xml_path, src_main_attr_name)["FirstLevel"]
link_ctx = get_link_context(src_form_el, src_main_attr_name, main_attr_info is not None,
src_attr_uuids, form_attr_ids)
borrowed_names, src_attr_uuids, form_attr_ids)
main_attr_name = main_attr_info["Name"] if main_attr_info else ""
if borrow_main_attr and main_attr_info is None:
warn(" У формы нет основного реквизита — -BorrowMainAttribute проигнорирован")
+4 -2
View File
@@ -482,11 +482,13 @@ Form.xml заимствованной формы — **двухчастный ф
| Путь | Основной реквизит заимствован | Не заимствован |
|---|---|---|
| `<РеквизитФормы>`, `<РеквизитФормы>.<Колонка>` | код `N`, `N/<колонка>` | то же |
| `Объект.<реквизит/ТЧ/измерение/ресурс>`, `Объект.<ТЧ>.<реквизит>` | текст | `N/0:<uuid>`, `N/0:<uuid ТЧ>/0:<uuid>` |
| `Объект.<стандартный>` | `N` (ссылка на сам реквизит) | `N/-k` |
| `Объект.<реквизит/ТЧ/измерение/ресурс>`, `Объект.<ТЧ>.<реквизит>` | текст, если реквизит попал в расширение; иначе `N` | `N/0:<uuid>`, `N/0:<uuid ТЧ>/0:<uuid>` |
| `Объект.<стандартный>` | `N` (ссылка на сам основной реквизит) | `N/-k` |
| `Items.<Т>.CurrentData.<Поле>`, `Т` на `Объект.<ТЧ>` | текст | `<id Т>:CD/0:<uuid>` · `<id Т>:CD/<id>:AC` · `<id Т>:CD/-2` |
| `Items.<Т>.CurrentData.<Колонка>`, `Т` на реквизите формы | `<id Т>:CD/<id колонки>` | то же |
С заимствованным основным реквизитом в режиме `Form` в расширение попадают только реквизиты, используемые формой; путь связи использованием не считается. На реквизит, который так и не попал в расширение, Конфигуратор пишет `N` — как на стандартное поле (эталон УТ `Претензии.ФормаЭлементаСамообслуживание`: `Объект.Партнер` → `1`, реквизит не заимствован).
Здесь `N` и `<id Т>` — id реквизита и элемента **исходной** формы (в расширении реквизиты перенумерованы в 1000000+, ссылка остаётся в нумерации базы); `<uuid>` — uuid метаданных источника; `CD` = `02023637-7868-4a5f-8576-835a76e0c9ba` (текущая строка таблицы), `AC` = `5bdad865-f2c5-434b-8041-ba4aad3b6687` (колонка `AdditionalColumns`, `<id>` — её id). Коды `-k` стандартных реквизитов у каждого вида свои (оракул 8.3.27):
| Вид | Коды |
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -117,16 +117,55 @@
<DataHistory>Use</DataHistory>
</Properties>
</Attribute>
<Attribute uuid="UUID-013">
<Properties>
<Name>Ответственный</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Ответственный</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type>
<v8:Type>cfg:CatalogRef.Склады</v8:Type>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<FillValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Indexing>DontIndex</Indexing>
<FullTextSearch>Use</FullTextSearch>
<DataHistory>Use</DataHistory>
</Properties>
</Attribute>
<Form>ФормаДокумента</Form>
<TabularSection uuid="UUID-013">
<TabularSection uuid="UUID-014">
<InternalInfo>
<xr:GeneratedType name="DocumentTabularSection.Размещение.Товары" category="TabularSection">
<xr:TypeId>UUID-014</xr:TypeId>
<xr:ValueId>UUID-015</xr:ValueId>
<xr:TypeId>UUID-015</xr:TypeId>
<xr:ValueId>UUID-016</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="DocumentTabularSectionRow.Размещение.Товары" category="TabularSectionRow">
<xr:TypeId>UUID-016</xr:TypeId>
<xr:ValueId>UUID-017</xr:ValueId>
<xr:TypeId>UUID-017</xr:TypeId>
<xr:ValueId>UUID-018</xr:ValueId>
</xr:GeneratedType>
</InternalInfo>
<Properties>
@@ -170,7 +209,7 @@
</StandardAttributes>
</Properties>
<ChildObjects>
<Attribute uuid="UUID-018">
<Attribute uuid="UUID-019">
<Properties>
<Name>Номенклатура</Name>
<Synonym>
@@ -207,7 +246,7 @@
<DataHistory>Use</DataHistory>
</Properties>
</Attribute>
<Attribute uuid="UUID-019">
<Attribute uuid="UUID-020">
<Properties>
<Name>Количество</Name>
<Synonym>
@@ -12,6 +12,11 @@
<InputField name="Склад" id="1">
<DataPath>Объект.Склад</DataPath>
<ChoiceParameterLinks>
<xr:Link>
<xr:Name>Отбор.Ответственный</xr:Name>
<xr:DataPath xsi:type="xs:string">Объект.Ответственный</xr:DataPath>
<xr:ValueChange>Clear</xr:ValueChange>
</xr:Link>
<xr:Link>
<xr:Name>Отбор.Дата</xr:Name>
<xr:DataPath xsi:type="xs:string">Объект.Date</xr:DataPath>
@@ -12,6 +12,11 @@
<InputField name="Склад" id="1">
<DataPath>Объект.Склад</DataPath>
<ChoiceParameterLinks>
<xr:Link>
<xr:Name>Отбор.Ответственный</xr:Name>
<xr:DataPath xsi:type="xs:string">39</xr:DataPath>
<xr:ValueChange>Clear</xr:ValueChange>
</xr:Link>
<xr:Link>
<xr:Name>Отбор.Дата</xr:Name>
<xr:DataPath xsi:type="xs:string">39</xr:DataPath>
@@ -175,6 +180,11 @@
<InputField name="Склад" id="1">
<DataPath>Объект.Склад</DataPath>
<ChoiceParameterLinks>
<xr:Link>
<xr:Name>Отбор.Ответственный</xr:Name>
<xr:DataPath xsi:type="xs:string">39</xr:DataPath>
<xr:ValueChange>Clear</xr:ValueChange>
</xr:Link>
<xr:Link>
<xr:Name>Отбор.Дата</xr:Name>
<xr:DataPath xsi:type="xs:string">39</xr:DataPath>
@@ -117,16 +117,55 @@
<DataHistory>Use</DataHistory>
</Properties>
</Attribute>
<Attribute uuid="UUID-013">
<Properties>
<Name>Ответственный</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Ответственный</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type>
<v8:Type>cfg:CatalogRef.Склады</v8:Type>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<FillValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Indexing>DontIndex</Indexing>
<FullTextSearch>Use</FullTextSearch>
<DataHistory>Use</DataHistory>
</Properties>
</Attribute>
<Form>ФормаДокумента</Form>
<TabularSection uuid="UUID-013">
<TabularSection uuid="UUID-014">
<InternalInfo>
<xr:GeneratedType name="DocumentTabularSection.Размещение.Товары" category="TabularSection">
<xr:TypeId>UUID-014</xr:TypeId>
<xr:ValueId>UUID-015</xr:ValueId>
<xr:TypeId>UUID-015</xr:TypeId>
<xr:ValueId>UUID-016</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="DocumentTabularSectionRow.Размещение.Товары" category="TabularSectionRow">
<xr:TypeId>UUID-016</xr:TypeId>
<xr:ValueId>UUID-017</xr:ValueId>
<xr:TypeId>UUID-017</xr:TypeId>
<xr:ValueId>UUID-018</xr:ValueId>
</xr:GeneratedType>
</InternalInfo>
<Properties>
@@ -170,7 +209,7 @@
</StandardAttributes>
</Properties>
<ChildObjects>
<Attribute uuid="UUID-018">
<Attribute uuid="UUID-019">
<Properties>
<Name>Номенклатура</Name>
<Synonym>
@@ -207,7 +246,7 @@
<DataHistory>Use</DataHistory>
</Properties>
</Attribute>
<Attribute uuid="UUID-019">
<Attribute uuid="UUID-020">
<Properties>
<Name>Количество</Name>
<Synonym>
@@ -12,6 +12,11 @@
<InputField name="Склад" id="1">
<DataPath>Объект.Склад</DataPath>
<ChoiceParameterLinks>
<xr:Link>
<xr:Name>Отбор.Ответственный</xr:Name>
<xr:DataPath xsi:type="xs:string">Объект.Ответственный</xr:DataPath>
<xr:ValueChange>Clear</xr:ValueChange>
</xr:Link>
<xr:Link>
<xr:Name>Отбор.Дата</xr:Name>
<xr:DataPath xsi:type="xs:string">Объект.Date</xr:DataPath>
@@ -11,6 +11,11 @@
<ChildItems>
<InputField name="Склад" id="1">
<ChoiceParameterLinks>
<xr:Link>
<xr:Name>Отбор.Ответственный</xr:Name>
<xr:DataPath xsi:type="xs:string">39/0:UUID-001</xr:DataPath>
<xr:ValueChange>Clear</xr:ValueChange>
</xr:Link>
<xr:Link>
<xr:Name>Отбор.Дата</xr:Name>
<xr:DataPath xsi:type="xs:string">39/-3</xr:DataPath>
@@ -18,7 +23,7 @@
</xr:Link>
<xr:Link>
<xr:Name>Отбор.Номенклатура</xr:Name>
<xr:DataPath xsi:type="xs:string">39/0:UUID-001/0:UUID-002</xr:DataPath>
<xr:DataPath xsi:type="xs:string">39/0:UUID-002/0:UUID-003</xr:DataPath>
<xr:ValueChange>Clear</xr:ValueChange>
</xr:Link>
<xr:Link>
@@ -66,13 +71,13 @@
<ChildItems>
<InputField name="ТоварыНоменклатура" id="17">
<TypeLink>
<xr:DataPath>4:UUID-003/1:UUID-004</xr:DataPath>
<xr:DataPath>4:UUID-004/1:UUID-005</xr:DataPath>
<xr:LinkItem>0</xr:LinkItem>
</TypeLink>
<ChoiceParameterLinks>
<xr:Link>
<xr:Name>Отбор.НомерСтроки</xr:Name>
<xr:DataPath xsi:type="xs:string">4:UUID-003/-2</xr:DataPath>
<xr:DataPath xsi:type="xs:string">4:UUID-004/-2</xr:DataPath>
<xr:ValueChange>Clear</xr:ValueChange>
</xr:Link>
</ChoiceParameterLinks>
@@ -83,7 +88,7 @@
<ChoiceParameterLinks>
<xr:Link>
<xr:Name>Отбор.Номенклатура</xr:Name>
<xr:DataPath xsi:type="xs:string">4:UUID-003/0:UUID-002</xr:DataPath>
<xr:DataPath xsi:type="xs:string">4:UUID-004/0:UUID-003</xr:DataPath>
<xr:ValueChange>Clear</xr:ValueChange>
</xr:Link>
</ChoiceParameterLinks>
@@ -125,12 +130,12 @@
<ChoiceParameterLinks>
<xr:Link>
<xr:Name>Отбор.Склад</xr:Name>
<xr:DataPath xsi:type="xs:string">23:UUID-003/41</xr:DataPath>
<xr:DataPath xsi:type="xs:string">23:UUID-004/41</xr:DataPath>
<xr:ValueChange>Clear</xr:ValueChange>
</xr:Link>
<xr:Link>
<xr:Name>Отбор.Страна</xr:Name>
<xr:DataPath xsi:type="xs:string">4:UUID-003/1:UUID-004</xr:DataPath>
<xr:DataPath xsi:type="xs:string">4:UUID-004/1:UUID-005</xr:DataPath>
<xr:ValueChange>Clear</xr:ValueChange>
</xr:Link>
</ChoiceParameterLinks>
@@ -153,6 +158,11 @@
<ChildItems>
<InputField name="Склад" id="1">
<ChoiceParameterLinks>
<xr:Link>
<xr:Name>Отбор.Ответственный</xr:Name>
<xr:DataPath xsi:type="xs:string">39/0:UUID-001</xr:DataPath>
<xr:ValueChange>Clear</xr:ValueChange>
</xr:Link>
<xr:Link>
<xr:Name>Отбор.Дата</xr:Name>
<xr:DataPath xsi:type="xs:string">39/-3</xr:DataPath>
@@ -160,7 +170,7 @@
</xr:Link>
<xr:Link>
<xr:Name>Отбор.Номенклатура</xr:Name>
<xr:DataPath xsi:type="xs:string">39/0:UUID-001/0:UUID-002</xr:DataPath>
<xr:DataPath xsi:type="xs:string">39/0:UUID-002/0:UUID-003</xr:DataPath>
<xr:ValueChange>Clear</xr:ValueChange>
</xr:Link>
<xr:Link>
@@ -208,13 +218,13 @@
<ChildItems>
<InputField name="ТоварыНоменклатура" id="17">
<TypeLink>
<xr:DataPath>4:UUID-003/1:UUID-004</xr:DataPath>
<xr:DataPath>4:UUID-004/1:UUID-005</xr:DataPath>
<xr:LinkItem>0</xr:LinkItem>
</TypeLink>
<ChoiceParameterLinks>
<xr:Link>
<xr:Name>Отбор.НомерСтроки</xr:Name>
<xr:DataPath xsi:type="xs:string">4:UUID-003/-2</xr:DataPath>
<xr:DataPath xsi:type="xs:string">4:UUID-004/-2</xr:DataPath>
<xr:ValueChange>Clear</xr:ValueChange>
</xr:Link>
</ChoiceParameterLinks>
@@ -225,7 +235,7 @@
<ChoiceParameterLinks>
<xr:Link>
<xr:Name>Отбор.Номенклатура</xr:Name>
<xr:DataPath xsi:type="xs:string">4:UUID-003/0:UUID-002</xr:DataPath>
<xr:DataPath xsi:type="xs:string">4:UUID-004/0:UUID-003</xr:DataPath>
<xr:ValueChange>Clear</xr:ValueChange>
</xr:Link>
</ChoiceParameterLinks>
@@ -267,12 +277,12 @@
<ChoiceParameterLinks>
<xr:Link>
<xr:Name>Отбор.Склад</xr:Name>
<xr:DataPath xsi:type="xs:string">23:UUID-003/41</xr:DataPath>
<xr:DataPath xsi:type="xs:string">23:UUID-004/41</xr:DataPath>
<xr:ValueChange>Clear</xr:ValueChange>
</xr:Link>
<xr:Link>
<xr:Name>Отбор.Страна</xr:Name>
<xr:DataPath xsi:type="xs:string">4:UUID-003/1:UUID-004</xr:DataPath>
<xr:DataPath xsi:type="xs:string">4:UUID-004/1:UUID-005</xr:DataPath>
<xr:ValueChange>Clear</xr:ValueChange>
</xr:Link>
</ChoiceParameterLinks>