РК_ЗагрузкаОстатков 1.3.1.66: дерево групп и отбор по Отметка/Рекурсивно (#7).

Вложенность из parent_guid; фильтры nomenclature_groups(_recursive) при загрузке.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
mihailkudravcev
2026-08-14 14:26:20 +03:00
parent 546713ecce
commit 96f39f27b1
7 changed files with 263 additions and 39 deletions
+9
View File
@@ -4,6 +4,15 @@
--- ---
## 1.3.1.66 (2026-08-14)
### РК_ЗагрузкаОстатков — дерево групп и отбор (#7)
- Таблица групп номенклатуры — `Representation=Tree` с вложенностью из `parent_guid`.
- Колонки **Отметка** и **Рекурсивно** (булево, по умолчанию Ложь).
- При загрузке остатков отмеченные группы уходят в `nomenclature_groups` /
`nomenclature_groups_recursive` (нужен **ws-rhana ≥ 0.0.0.42**).
## 1.3.1.65 (2026-08-14) ## 1.3.1.65 (2026-08-14)
### РК_ЗагрузкаОстатков — исправление XML формы ### РК_ЗагрузкаОстатков — исправление XML формы
+1 -1
View File
@@ -1 +1 @@
1.3.1.65 1.3.1.66
+1
View File
@@ -88,6 +88,7 @@
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеКомиссионныеТовары.Attribute.ТипЗапасов" id="47c8a3c1-d23c-4d8f-9f7e-7cab805b5be4"/> <Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеКомиссионныеТовары.Attribute.ТипЗапасов" id="47c8a3c1-d23c-4d8f-9f7e-7cab805b5be4"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеКомиссионныеТовары.Attribute.ВидЗапасов" id="4917f342-9c11-4844-8f2e-159f2abe8cb4"/> <Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеКомиссионныеТовары.Attribute.ВидЗапасов" id="4917f342-9c11-4844-8f2e-159f2abe8cb4"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ОтборГруппНоменклатур.Attribute.Рекурсивно" id="4a8245d7-4a23-4416-b352-390932bec18e"/> <Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ОтборГруппНоменклатур.Attribute.Рекурсивно" id="4a8245d7-4a23-4416-b352-390932bec18e"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ОтборГруппНоменклатур.Attribute.РодительИдентификатор" id="a1b2c3d4-e5f6-4789-a012-3456789abcde"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеКомиссионныеТовары.Attribute.ПартнерНаименование" id="4d2b3f2c-99f0-409d-926b-f999231e2e84"/> <Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеКомиссионныеТовары.Attribute.ПартнерНаименование" id="4d2b3f2c-99f0-409d-926b-f999231e2e84"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеКомиссионныеТовары.Attribute.ДоговорНаименование" id="4ece6fa6-3302-41bd-9a6a-2ef27f24d7c3"/> <Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеКомиссионныеТовары.Attribute.ДоговорНаименование" id="4ece6fa6-3302-41bd-9a6a-2ef27f24d7c3"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеСобственныеТовары.Attribute.ОрганизацияИдентификатор" id="4eef5276-30ac-40dd-bc7d-19e708da43e8"/> <Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеСобственныеТовары.Attribute.ОрганизацияИдентификатор" id="4eef5276-30ac-40dd-bc7d-19e708da43e8"/>
+1 -1
View File
@@ -62,7 +62,7 @@
<xr:Item xsi:type="xr:MDObjectRef">Role.РК_ОсновнаяРоль</xr:Item> <xr:Item xsi:type="xr:MDObjectRef">Role.РК_ОсновнаяРоль</xr:Item>
</DefaultRoles> </DefaultRoles>
<Vendor/> <Vendor/>
<Version>1.3.1.65</Version> <Version>1.3.1.66</Version>
<DefaultStyle/> <DefaultStyle/>
<DefaultLanguage>Language.Русский</DefaultLanguage> <DefaultLanguage>Language.Русский</DefaultLanguage>
<BriefInformation/> <BriefInformation/>
@@ -4885,7 +4885,7 @@
<Type> <Type>
<v8:Type>xs:string</v8:Type> <v8:Type>xs:string</v8:Type>
<v8:StringQualifiers> <v8:StringQualifiers>
<v8:Length>10</v8:Length> <v8:Length>0</v8:Length>
<v8:AllowedLength>Variable</v8:AllowedLength> <v8:AllowedLength>Variable</v8:AllowedLength>
</v8:StringQualifiers> </v8:StringQualifiers>
</Type> </Type>
@@ -4936,7 +4936,7 @@
<MinValue xsi:nil="true"/> <MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/> <MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue> <FillFromFillingValue>false</FillFromFillingValue>
<FillValue xsi:nil="true"/> <FillValue xsi:type="xs:boolean">false</FillValue>
<FillChecking>DontCheck</FillChecking> <FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems> <ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/> <ChoiceParameterLinks/>
@@ -4957,13 +4957,9 @@
<v8:content>Рекурсивно</v8:content> <v8:content>Рекурсивно</v8:content>
</v8:item> </v8:item>
</Synonym> </Synonym>
<Comment/> <Comment>Включать вложенные группы исходной базы при отборе остатков</Comment>
<Type> <Type>
<v8:Type>xs:string</v8:Type> <v8:Type>xs:boolean</v8:Type>
<v8:StringQualifiers>
<v8:Length>10</v8:Length>
<v8:AllowedLength>Variable</v8:AllowedLength>
</v8:StringQualifiers>
</Type> </Type>
<PasswordMode>false</PasswordMode> <PasswordMode>false</PasswordMode>
<Format/> <Format/>
@@ -4976,7 +4972,43 @@
<MinValue xsi:nil="true"/> <MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/> <MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue> <FillFromFillingValue>false</FillFromFillingValue>
<FillValue xsi:type="xs:string"/> <FillValue xsi:type="xs:boolean">false</FillValue>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
</Properties>
</Attribute>
<Attribute uuid="a1b2c3d4-e5f6-4789-a012-3456789abcde">
<Properties>
<Name>РодительИдентификатор</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Родитель</v8:content>
</v8:item>
</Synonym>
<Comment>GUID родительской группы в исходной ИБ</Comment>
<Type>
<v8:Type>v8:UUID</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> <FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems> <ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/> <ChoiceParameterLinks/>
@@ -159,10 +159,14 @@
<ExtendedTooltip name="ГруппаОтбораЛевыйСтолбецРасширеннаяПодсказка" id="42"/> <ExtendedTooltip name="ГруппаОтбораЛевыйСтолбецРасширеннаяПодсказка" id="42"/>
<ChildItems> <ChildItems>
<Table name="ОтборГруппНоменклатур" id="1518"> <Table name="ОтборГруппНоменклатур" id="1518">
<AutoInsertNewRow>true</AutoInsertNewRow> <Representation>Tree</Representation>
<EnableStartDrag>true</EnableStartDrag> <ChangeRowSet>false</ChangeRowSet>
<EnableDrag>true</EnableDrag> <ChangeRowOrder>false</ChangeRowOrder>
<DataPath>Объект.ОтборГруппНоменклатур</DataPath> <AutoInsertNewRow>false</AutoInsertNewRow>
<InitialTreeView>ExpandAllLevels</InitialTreeView>
<EnableStartDrag>false</EnableStartDrag>
<EnableDrag>false</EnableDrag>
<DataPath>ОтборГруппНоменклатурДерево</DataPath>
<RowFilter xsi:nil="true"/> <RowFilter xsi:nil="true"/>
<ContextMenu name="ОтборГруппНоменклатурКонтекстноеМеню" id="1519"/> <ContextMenu name="ОтборГруппНоменклатурКонтекстноеМеню" id="1519"/>
<AutoCommandBar name="ОтборГруппНоменклатурКоманднаяПанель" id="1520"> <AutoCommandBar name="ОтборГруппНоменклатурКоманднаяПанель" id="1520">
@@ -200,33 +204,27 @@
<ExtendedTooltip name="ОтборГруппНоменклатурУправлениеПоискомРасширеннаяПодсказка" id="1530"/> <ExtendedTooltip name="ОтборГруппНоменклатурУправлениеПоискомРасширеннаяПодсказка" id="1530"/>
</SearchControlAddition> </SearchControlAddition>
<ChildItems> <ChildItems>
<LabelField name="ОтборГруппНоменклатурНомерСтроки" id="1531">
<DataPath>Объект.ОтборГруппНоменклатур.LineNumber</DataPath>
<EditMode>EnterOnInput</EditMode>
<ContextMenu name="ОтборГруппНоменклатурНомерСтрокиКонтекстноеМеню" id="1532"/>
<ExtendedTooltip name="ОтборГруппНоменклатурНомерСтрокиРасширеннаяПодсказка" id="1533"/>
</LabelField>
<InputField name="ОтборГруппНоменклатурНаименование" id="1534">
<DataPath>Объект.ОтборГруппНоменклатур.Наименование</DataPath>
<EditMode>EnterOnInput</EditMode>
<ExtendedEditMultipleValues>true</ExtendedEditMultipleValues>
<ContextMenu name="ОтборГруппНоменклатурНаименованиеКонтекстноеМеню" id="1535"/>
<ExtendedTooltip name="ОтборГруппНоменклатурНаименованиеРасширеннаяПодсказка" id="1536"/>
</InputField>
<CheckBoxField name="ОтборГруппНоменклатурОтметка" id="1537"> <CheckBoxField name="ОтборГруппНоменклатурОтметка" id="1537">
<DataPath>Объект.ОтборГруппНоменклатур.Отметка</DataPath> <DataPath>ОтборГруппНоменклатурДерево.Отметка</DataPath>
<EditMode>EnterOnInput</EditMode> <EditMode>EnterOnInput</EditMode>
<CheckBoxType>Auto</CheckBoxType> <CheckBoxType>Auto</CheckBoxType>
<ContextMenu name="ОтборГруппНоменклатурОтметкаКонтекстноеМеню" id="1538"/> <ContextMenu name="ОтборГруппНоменклатурОтметкаКонтекстноеМеню" id="1538"/>
<ExtendedTooltip name="ОтборГруппНоменклатурОтметкаРасширеннаяПодсказка" id="1539"/> <ExtendedTooltip name="ОтборГруппНоменклатурОтметкаРасширеннаяПодсказка" id="1539"/>
</CheckBoxField> </CheckBoxField>
<InputField name="ОтборГруппНоменклатурРекурсивно" id="1540"> <InputField name="ОтборГруппНоменклатурНаименование" id="1534">
<DataPath>Объект.ОтборГруппНоменклатур.Рекурсивно</DataPath> <DataPath>ОтборГруппНоменклатурДерево.Наименование</DataPath>
<ReadOnly>true</ReadOnly>
<EditMode>EnterOnInput</EditMode> <EditMode>EnterOnInput</EditMode>
<ExtendedEditMultipleValues>true</ExtendedEditMultipleValues> <ContextMenu name="ОтборГруппНоменклатурНаименованиеКонтекстноеМеню" id="1535"/>
<ExtendedTooltip name="ОтборГруппНоменклатурНаименованиеРасширеннаяПодсказка" id="1536"/>
</InputField>
<CheckBoxField name="ОтборГруппНоменклатурРекурсивно" id="1540">
<DataPath>ОтборГруппНоменклатурДерево.Рекурсивно</DataPath>
<EditMode>EnterOnInput</EditMode>
<CheckBoxType>Auto</CheckBoxType>
<ContextMenu name="ОтборГруппНоменклатурРекурсивноКонтекстноеМеню" id="1541"/> <ContextMenu name="ОтборГруппНоменклатурРекурсивноКонтекстноеМеню" id="1541"/>
<ExtendedTooltip name="ОтборГруппНоменклатурРекурсивноРасширеннаяПодсказка" id="1542"/> <ExtendedTooltip name="ОтборГруппНоменклатурРекурсивноРасширеннаяПодсказка" id="1542"/>
</InputField> </CheckBoxField>
</ChildItems> </ChildItems>
</Table> </Table>
<Table name="ОтборСкладовВнешнейБазы" id="43"> <Table name="ОтборСкладовВнешнейБазы" id="43">
@@ -1258,6 +1256,67 @@
<AdditionalColumns table="Объект.ВходящиеСобственныеТовары"/> <AdditionalColumns table="Объект.ВходящиеСобственныеТовары"/>
</Columns> </Columns>
</Attribute> </Attribute>
<Attribute name="ОтборГруппНоменклатурДерево" id="5">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Группы номенклатуры</v8:content>
</v8:item>
</Title>
<Type>
<v8:Type>v8:ValueTree</v8:Type>
</Type>
<Columns>
<Column name="Отметка" id="1">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Отметка</v8:content>
</v8:item>
</Title>
<Type>
<v8:Type>xs:boolean</v8:Type>
</Type>
</Column>
<Column name="Наименование" id="2">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Наименование</v8:content>
</v8:item>
</Title>
<Type>
<v8:Type>xs:string</v8:Type>
<v8:StringQualifiers>
<v8:Length>0</v8:Length>
<v8:AllowedLength>Variable</v8:AllowedLength>
</v8:StringQualifiers>
</Type>
</Column>
<Column name="Рекурсивно" id="3">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Рекурсивно</v8:content>
</v8:item>
</Title>
<Type>
<v8:Type>xs:boolean</v8:Type>
</Type>
</Column>
<Column name="Идентификатор" id="4">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Идентификатор</v8:content>
</v8:item>
</Title>
<Type>
<v8:Type>v8:UUID</v8:Type>
</Type>
</Column>
</Columns>
</Attribute>
<Attribute name="ПодключениеКСтороннейБазеПредыдущее" id="4"> <Attribute name="ПодключениеКСтороннейБазеПредыдущее" id="4">
<Title> <Title>
<v8:item> <v8:item>
@@ -21,6 +21,8 @@
Объект.ДатаДокументовВвода = Объект.ДатаОстатков; Объект.ДатаДокументовВвода = Объект.ДатаОстатков;
КонецЕсли; КонецЕсли;
ПостроитьДеревоГруппИзТабличнойЧасти();
КонецПроцедуры КонецПроцедуры
#КонецОбласти #КонецОбласти
@@ -251,6 +253,8 @@
Объект.ОтборСкладовВнешнейБазы.Очистить(); Объект.ОтборСкладовВнешнейБазы.Очистить();
Объект.ОтборОрганизацийВнешнейБазы.Очистить(); Объект.ОтборОрганизацийВнешнейБазы.Очистить();
Объект.ОтборГруппНоменклатур.Очистить();
ОтборГруппНоменклатурДерево.ПолучитьЭлементы().Очистить();
Объект.ВходящиеСобственныеТовары.Очистить(); Объект.ВходящиеСобственныеТовары.Очистить();
Объект.ВходящиеКомиссионныеТовары.Очистить(); Объект.ВходящиеКомиссионныеТовары.Очистить();
Объект.СозданныеДокументы.Очистить(); Объект.СозданныеДокументы.Очистить();
@@ -311,6 +315,8 @@
&НаСервере &НаСервере
Функция ЗагрузитьОстаткиНаСервере() Функция ЗагрузитьОстаткиНаСервере()
СинхронизироватьТабличнуюЧастьГруппИзДерева();
СкладыGUID = Новый Массив; СкладыGUID = Новый Массив;
Для Каждого Стр Из Объект.ОтборСкладовВнешнейБазы Цикл Для Каждого Стр Из Объект.ОтборСкладовВнешнейБазы Цикл
Если Стр.Отметка Тогда Если Стр.Отметка Тогда
@@ -337,12 +343,14 @@
ФильтрыСобственные.Вставить("organizations", ОрганизацииGUID); ФильтрыСобственные.Вставить("organizations", ОрганизацииGUID);
КонецЕсли; КонецЕсли;
ФильтрыСобственные.Вставить("only_nonzero", Истина); ФильтрыСобственные.Вставить("only_nonzero", Истина);
ДобавитьФильтрГруппНоменклатуры(ФильтрыСобственные);
ФильтрыКомиссия = Новый Структура; ФильтрыКомиссия = Новый Структура;
Если ОрганизацииGUID.Количество() > 0 Тогда Если ОрганизацииGUID.Количество() > 0 Тогда
ФильтрыКомиссия.Вставить("organizations", ОрганизацииGUID); ФильтрыКомиссия.Вставить("organizations", ОрганизацииGUID);
КонецЕсли; КонецЕсли;
ФильтрыКомиссия.Вставить("only_nonzero", Истина); ФильтрыКомиссия.Вставить("only_nonzero", Истина);
ДобавитьФильтрГруппНоменклатуры(ФильтрыКомиссия);
ПолныйОбходКомиссии = (ОрганизацииGUID.Количество() = 0); ПолныйОбходКомиссии = (ОрганизацииGUID.Количество() = 0);
СтрокиСобственные = ЗагрузитьСтраницыОстатков("combined", ФильтрыСобственные, Ложь); СтрокиСобственные = ЗагрузитьСтраницыОстатков("combined", ФильтрыСобственные, Ложь);
@@ -518,6 +526,7 @@
Ответ = РК_ОбменСВнешнейБазой.СписокГруппНоменклатурыВнешнейБазы(Объект.ПодключениеКСтороннейБазе); Ответ = РК_ОбменСВнешнейБазой.СписокГруппНоменклатурыВнешнейБазы(Объект.ПодключениеКСтороннейБазе);
ЗаполнитьТаблицуГруппНоменклатурИзОтветаAPI(Объект.ОтборГруппНоменклатур, Ответ); ЗаполнитьТаблицуГруппНоменклатурИзОтветаAPI(Объект.ОтборГруппНоменклатур, Ответ);
ПостроитьДеревоГруппИзТабличнойЧасти();
КонецПроцедуры КонецПроцедуры
@@ -546,20 +555,134 @@
Продолжить; Продолжить;
КонецЕсли; КонецЕсли;
НовСтр = ТаблицаОтбора.Добавить(); НовСтр = ТаблицаОтбора.Добавить();
ИмяОтображение = СокрЛП(Строка(ЗначениеСвойстваОтвета(СтрокаAPI, "name_display"))); НовСтр.Наименование = СокрЛП(Строка(ЗначениеСвойстваОтвета(СтрокаAPI, "name")));
Если ПустаяСтрока(ИмяОтображение) Тогда
ИмяОтображение = СокрЛП(Строка(ЗначениеСвойстваОтвета(СтрокаAPI, "name")));
КонецЕсли;
НовСтр.Наименование = ИмяОтображение;
Попытка Попытка
НовСтр.Идентификатор = Новый УникальныйИдентификатор(ГуидТекст); НовСтр.Идентификатор = Новый УникальныйИдентификатор(ГуидТекст);
Исключение Исключение
Продолжить; Продолжить;
КонецПопытки; КонецПопытки;
РодительТекст = СокрЛП(Строка(ЗначениеСвойстваОтвета(СтрокаAPI, "parent_guid")));
Если Не ПустаяСтрока(РодительТекст) Тогда
Попытка
НовСтр.РодительИдентификатор = Новый УникальныйИдентификатор(РодительТекст);
Исключение
КонецПопытки;
КонецЕсли;
СтараяОтметка = БылиОтметки.Получить(Строка(НовСтр.Идентификатор)); СтараяОтметка = БылиОтметки.Получить(Строка(НовСтр.Идентификатор));
НовСтр.Отметка = ?(СтараяОтметка = Неопределено, Ложь, СтараяОтметка = Истина); НовСтр.Отметка = ?(СтараяОтметка = Неопределено, Ложь, СтараяОтметка = Истина);
СтароеРекурсивно = БылоРекурсивно.Получить(Строка(НовСтр.Идентификатор)); СтароеРекурсивно = БылоРекурсивно.Получить(Строка(НовСтр.Идентификатор));
НовСтр.Рекурсивно = ?(СтароеРекурсивно = Неопределено, Истина, СтароеРекурсивно = Истина); НовСтр.Рекурсивно = ?(СтароеРекурсивно = Неопределено, Ложь, СтароеРекурсивно = Истина);
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ПостроитьДеревоГруппИзТабличнойЧасти()
ОтборГруппНоменклатурДерево.ПолучитьЭлементы().Очистить();
Если Объект.ОтборГруппНоменклатур.Количество() = 0 Тогда
Возврат;
КонецЕсли;
УзлыПоGUID = Новый Соответствие;
Корни = Новый Массив;
Для Каждого СтрТЧ Из Объект.ОтборГруппНоменклатур Цикл
ДанныеУзла = Новый Структура;
ДанныеУзла.Вставить("СтрокаТЧ", СтрТЧ);
ДанныеУзла.Вставить("Дети", Новый Массив);
УзлыПоGUID.Вставить(Строка(СтрТЧ.Идентификатор), ДанныеУзла);
КонецЦикла;
Для Каждого СтрТЧ Из Объект.ОтборГруппНоменклатур Цикл
ДанныеУзла = УзлыПоGUID.Получить(Строка(СтрТЧ.Идентификатор));
КлючРодителя = Строка(СтрТЧ.РодительИдентификатор);
РодительУзел = Неопределено;
Если Не ПустаяСтрока(КлючРодителя) И КлючРодителя <> "00000000-0000-0000-0000-000000000000" Тогда
РодительУзел = УзлыПоGUID.Получить(КлючРодителя);
КонецЕсли;
Если РодительУзел = Неопределено Тогда
Корни.Добавить(ДанныеУзла);
Иначе
РодительУзел.Дети.Добавить(ДанныеУзла);
КонецЕсли;
КонецЦикла;
ДобавитьУзлыДереваГрупп(ОтборГруппНоменклатурДерево.ПолучитьЭлементы(), Корни);
КонецПроцедуры
&НаСервере
Процедура ДобавитьУзлыДереваГрупп(КоллекцияСтрок, Узлы)
Для Каждого ДанныеУзла Из Узлы Цикл
СтрТЧ = ДанныеУзла.СтрокаТЧ;
СтрокаДерева = КоллекцияСтрок.Добавить();
СтрокаДерева.Отметка = СтрТЧ.Отметка;
СтрокаДерева.Наименование = СтрТЧ.Наименование;
СтрокаДерева.Рекурсивно = СтрТЧ.Рекурсивно;
СтрокаДерева.Идентификатор = СтрТЧ.Идентификатор;
Если ДанныеУзла.Дети.Количество() > 0 Тогда
ДобавитьУзлыДереваГрупп(СтрокаДерева.ПолучитьЭлементы(), ДанныеУзла.Дети);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура СинхронизироватьТабличнуюЧастьГруппИзДерева()
Объект.ОтборГруппНоменклатур.Очистить();
ЗаписатьСтрокиДереваГруппВТЧ(ОтборГруппНоменклатурДерево.ПолучитьЭлементы(),
Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"));
КонецПроцедуры
&НаСервере
Процедура ЗаписатьСтрокиДереваГруппВТЧ(КоллекцияСтрок, РодительИдентификатор)
Для Каждого СтрокаДерева Из КоллекцияСтрок Цикл
НовСтр = Объект.ОтборГруппНоменклатур.Добавить();
НовСтр.Отметка = СтрокаДерева.Отметка;
НовСтр.Наименование = СтрокаДерева.Наименование;
НовСтр.Рекурсивно = СтрокаДерева.Рекурсивно;
НовСтр.Идентификатор = СтрокаДерева.Идентификатор;
НовСтр.РодительИдентификатор = РодительИдентификатор;
ЗаписатьСтрокиДереваГруппВТЧ(СтрокаДерева.ПолучитьЭлементы(), СтрокаДерева.Идентификатор);
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ДобавитьФильтрГруппНоменклатуры(Фильтры)
ГруппыПрямые = Новый Массив;
ГруппыРекурсивно = Новый Массив;
СобратьОтмеченныеГруппыИзДерева(ОтборГруппНоменклатурДерево.ПолучитьЭлементы(),
ГруппыПрямые, ГруппыРекурсивно);
Если ГруппыПрямые.Количество() > 0 Тогда
Фильтры.Вставить("nomenclature_groups", ГруппыПрямые);
КонецЕсли;
Если ГруппыРекурсивно.Количество() > 0 Тогда
Фильтры.Вставить("nomenclature_groups_recursive", ГруппыРекурсивно);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура СобратьОтмеченныеГруппыИзДерева(КоллекцияСтрок, ГруппыПрямые, ГруппыРекурсивно)
Для Каждого СтрокаДерева Из КоллекцияСтрок Цикл
Если СтрокаДерева.Отметка Тогда
ГуидТекст = Строка(СтрокаДерева.Идентификатор);
Если СтрокаДерева.Рекурсивно Тогда
ГруппыРекурсивно.Добавить(ГуидТекст);
Иначе
ГруппыПрямые.Добавить(ГуидТекст);
КонецЕсли;
КонецЕсли;
СобратьОтмеченныеГруппыИзДерева(СтрокаДерева.ПолучитьЭлементы(),
ГруппыПрямые, ГруппыРекурсивно);
КонецЦикла; КонецЦикла;
КонецПроцедуры КонецПроцедуры