diff --git a/CHANGELOG.md b/CHANGELOG.md
index e9b4521..e1784bc 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,14 @@
---
+## 1.3.1.136 (2026-10-14)
+
+### Ввод остатков: документ на группу-родителя номенклатуры
+
+- Собственные товары: отдельный документ на склад и родителя номенклатуры.
+- Комиссия 2.5: отдельный документ на партнёра, соглашение, договор и родителя номенклатуры.
+- В комментарии документа есть имя этой группы. Номенклатура без родителя собирается в группу «без группы».
+
## 1.3.1.135 (2026-10-14)
### Ввод остатков: серия по UUID со сроком 01.01.2001
diff --git a/VERSION b/VERSION
index 8abbfef..1f30891 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.3.1.135
+1.3.1.136
diff --git a/src/Configuration.xml b/src/Configuration.xml
index 835111e..237f368 100644
--- a/src/Configuration.xml
+++ b/src/Configuration.xml
@@ -62,7 +62,7 @@
Role.РК_ОсновнаяРоль
- 1.3.1.135
+ 1.3.1.136
Language.Русский
diff --git a/src/DataProcessors/РК_ЗагрузкаОстатков/Ext/ObjectModule.bsl b/src/DataProcessors/РК_ЗагрузкаОстатков/Ext/ObjectModule.bsl
index a4ec674..399842f 100644
--- a/src/DataProcessors/РК_ЗагрузкаОстатков/Ext/ObjectModule.bsl
+++ b/src/DataProcessors/РК_ЗагрузкаОстатков/Ext/ObjectModule.bsl
@@ -471,8 +471,9 @@
СтрокиПоСкладу = СгруппироватьСопоставленныеСтрокиПоСкладу();
СтрокиКомиссии = СгруппироватьСопоставленныеСтрокиКомиссии();
- ДобавитьСтрокуПротокола(Результат, "Групп own (складов): " + Формат(СтрокиПоСкладу.Количество(), "ЧН=0; ЧГ=0")
- + "; групп comm: " + Формат(СтрокиКомиссии.Количество(), "ЧН=0; ЧГ=0"));
+ ДобавитьСтрокуПротокола(Результат, "Групп own (склад и родитель номенклатуры): "
+ + Формат(СтрокиПоСкладу.Количество(), "ЧН=0; ЧГ=0")
+ + "; групп comm (партнёр и родитель): " + Формат(СтрокиКомиссии.Количество(), "ЧН=0; ЧГ=0"));
Если СтрокиПоСкладу.Количество() = 0 И СтрокиКомиссии.Количество() = 0 Тогда
ДобавитьСтрокуПротокола(Результат,
"[WARN] Нет сопоставленных строк с количеством > 0 — документы не создаются. Сначала «Сопоставить».");
@@ -501,20 +502,22 @@
Для Каждого ЭлементСклада Из СтрокиПоСкладу Цикл
- СкладДок = ЭлементСклада.Ключ;
СтрокиСклада = ЭлементСклада.Значение;
Если СтрокиСклада.Количество() = 0 Тогда
Продолжить;
КонецЕсли;
+ СкладДок = СтрокиСклада[0].Склад;
+ КомментарийГруппы = КомментарийДокументаСобственных(ТекстТега, СкладДок, СтрокиСклада);
Контекст = "own / склад " + СокрЛП(Строка(СкладДок))
+ + " / группа " + ИмяГруппыРодителя(СтрокиСклада[0].Номенклатура)
+ " / строк " + Формат(СтрокиСклада.Количество(), "ЧН=0; ЧГ=0");
Попытка
Если РежимТест Тогда
Результат.СозданоДокументов = Результат.СозданоДокументов + 1;
Результат.СтрокВДокументах = Результат.СтрокВДокументах + СтрокиСклада.Количество();
ДобавитьВСозданныеДокументы(Неопределено, "Собственные", СкладДок,
- Неопределено, Неопределено, СтрокиСклада, ТекстТега + ", склад " + СокрЛП(Строка(СкладДок)), Истина, Результат);
+ Неопределено, Неопределено, СтрокиСклада, КомментарийГруппы, Истина, Результат);
ДобавитьСтрокуПротокола(Результат, "[TEST] " + Контекст);
ДобавитьСтрокиCSVДокументаИзВходящих(СтрокиCSVДокументов, "own", Неопределено, СкладДок,
Неопределено, Неопределено, Неопределено, СтрокиСклада, Истина);
@@ -527,7 +530,7 @@
КонецЕсли;
ДобавитьСтрокуПротокола(Результат, "[FILL] " + Контекст);
- Док = СоздатьДокументПоСкладу(СкладДок, СтрокиСклада, ТекстТега, ПартияВвода);
+ Док = СоздатьДокументПоСкладу(СкладДок, СтрокиСклада, КомментарийГруппы, ПартияВвода);
Если ДокументВводаСозданУспешно(Док) Тогда
Результат.СозданоДокументов = Результат.СозданоДокументов + 1;
Результат.СтрокВДокументах = Результат.СтрокВДокументах + Док.Товары.Количество();
@@ -560,9 +563,11 @@
КонецЕсли;
Первая = СтрокиГруппы[0];
+ КомментарийГруппы = КомментарийДокументаКомиссии(ТекстТега, СтрокиГруппы);
Контекст = "comm / партнёр " + СокрЛП(Строка(Первая.Партнер))
+ " / соглашение " + СокрЛП(Строка(Первая.Соглашение))
+ " / договор " + СокрЛП(Строка(Первая.Договор))
+ + " / группа " + ИмяГруппыРодителя(Первая.Номенклатура)
+ " / строк " + Формат(СтрокиГруппы.Количество(), "ЧН=0; ЧГ=0");
Попытка
Если РежимТест Тогда
@@ -570,7 +575,7 @@
Результат.СтрокКомиссии = Результат.СтрокКомиссии + СтрокиГруппы.Количество();
ДобавитьВСозданныеДокументы(Неопределено, "Комиссия 2.5", Неопределено,
Первая.Соглашение, Первая.Партнер, СтрокиГруппы,
- ТекстТега + ", комиссия 2.5, " + СокрЛП(Строка(Первая.Партнер)), Истина, Результат);
+ КомментарийГруппы, Истина, Результат);
ДобавитьСтрокуПротокола(Результат, "[TEST] " + Контекст);
ДобавитьСтрокиCSVДокументаИзВходящих(СтрокиCSVДокументов, "comm", Неопределено, Неопределено,
Первая.Партнер, Первая.Соглашение, Первая.Договор, СтрокиГруппы, Истина);
@@ -583,7 +588,7 @@
КонецЕсли;
ДобавитьСтрокуПротокола(Результат, "[FILL] " + Контекст);
- Док = СоздатьДокументКомиссии(СтрокиГруппы, ТекстТега, ПартияВвода);
+ Док = СоздатьДокументКомиссии(СтрокиГруппы, КомментарийГруппы, ПартияВвода);
Если ДокументВводаСозданУспешно(Док) Тогда
Результат.СозданоДокументовКомиссии = Результат.СозданоДокументовКомиссии + 1;
Результат.СтрокКомиссии = Результат.СтрокКомиссии + Док.Товары.Количество();
@@ -1029,6 +1034,53 @@
КонецФункции
+Функция ГруппаРодительНоменклатуры(Номенклатура)
+
+ Если Не ЗначениеЗаполнено(Номенклатура) Тогда
+ Возврат Справочники.Номенклатура.ПустаяСсылка();
+ КонецЕсли;
+ Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Номенклатура, "Родитель");
+
+КонецФункции
+
+Функция КлючГруппыРодителя(Номенклатура)
+
+ Группа = ГруппаРодительНоменклатуры(Номенклатура);
+ Если Не ЗначениеЗаполнено(Группа) Тогда
+ Возврат "без группы";
+ КонецЕсли;
+ Возврат Строка(Группа.УникальныйИдентификатор());
+
+КонецФункции
+
+Функция ИмяГруппыРодителя(Номенклатура)
+
+ Группа = ГруппаРодительНоменклатуры(Номенклатура);
+ Если Не ЗначениеЗаполнено(Группа) Тогда
+ Возврат "без группы";
+ КонецЕсли;
+ Возврат СокрЛП(Строка(Группа));
+
+КонецФункции
+
+Функция КомментарийДокументаСобственных(ТекстТега, СкладДок, СтрокиСклада)
+
+ ИмяГруппы = "без группы";
+ Если СтрокиСклада.Количество() > 0 Тогда
+ ИмяГруппы = ИмяГруппыРодителя(СтрокиСклада[0].Номенклатура);
+ КонецЕсли;
+ Возврат ТекстТега + ", склад " + СокрЛП(Строка(СкладДок)) + ", группа " + ИмяГруппы;
+
+КонецФункции
+
+Функция КомментарийДокументаКомиссии(ТекстТега, СтрокиГруппы)
+
+ Первая = СтрокиГруппы[0];
+ Возврат ТекстТега + ", комиссия 2.5, " + СокрЛП(Строка(Первая.Партнер))
+ + ", группа " + ИмяГруппыРодителя(Первая.Номенклатура);
+
+КонецФункции
+
Функция СгруппироватьСопоставленныеСтрокиПоСкладу()
Группы = Новый Соответствие;
@@ -1042,28 +1094,15 @@
Если СтрТ.Количество <= 0 Тогда
Продолжить;
КонецЕсли;
- КлючСклада = Строка(СтрТ.Склад.УникальныйИдентификатор());
- СтрокиСклада = Группы.Получить(КлючСклада);
+ Ключ = Строка(СтрТ.Склад.УникальныйИдентификатор()) + "|" + КлючГруппыРодителя(СтрТ.Номенклатура);
+ СтрокиСклада = Группы.Получить(Ключ);
Если СтрокиСклада = Неопределено Тогда
СтрокиСклада = Новый Массив;
- Группы.Вставить(КлючСклада, СтрокиСклада);
+ Группы.Вставить(Ключ, СтрокиСклада);
КонецЕсли;
СтрокиСклада.Добавить(СтрТ);
КонецЦикла;
-
- // Переключить ключи на ссылки складов для удобства обхода.
- Результат = Новый Соответствие;
- Для Каждого СтрТ Из ВходящиеСобственныеТовары Цикл
- Если Не СтрТ.Сопоставлено Или Не ЗначениеЗаполнено(СтрТ.Склад) Тогда
- Продолжить;
- КонецЕсли;
- КлючСклада = Строка(СтрТ.Склад.УникальныйИдентификатор());
- СтрокиСклада = Группы.Получить(КлючСклада);
- Если СтрокиСклада <> Неопределено И Результат.Получить(СтрТ.Склад) = Неопределено Тогда
- Результат.Вставить(СтрТ.Склад, СтрокиСклада);
- КонецЕсли;
- КонецЦикла;
- Возврат Результат;
+ Возврат Группы;
КонецФункции
@@ -1082,7 +1121,8 @@
КонецЕсли;
КлючГруппы = Строка(СтрТ.Соглашение.УникальныйИдентификатор())
+ "|" + Строка(СтрТ.Партнер.УникальныйИдентификатор())
- + "|" + Строка(СтрТ.Договор.УникальныйИдентификатор());
+ + "|" + Строка(СтрТ.Договор.УникальныйИдентификатор())
+ + "|" + КлючГруппыРодителя(СтрТ.Номенклатура);
СтрокиГруппы = Группы.Получить(КлючГруппы);
Если СтрокиГруппы = Неопределено Тогда
СтрокиГруппы = Новый Массив;
@@ -1127,14 +1167,14 @@
КонецФункции
-Функция СоздатьДокументПоСкладу(СкладДок, СтрокиСклада, ТекстТега, ПартияВвода)
+Функция СоздатьДокументПоСкладу(СкладДок, СтрокиСклада, Комментарий, ПартияВвода)
Док = Документы.ВводОстатковТоваров.СоздатьДокумент();
Док.Дата = ДатаДокументовВвода;
Док.Организация = Организация;
Док.Склад = СкладДок;
Док.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВводОстатковСобственныхТоваров;
- Док.Комментарий = ТекстТега + ", склад " + СокрЛП(Строка(СкладДок));
+ Док.Комментарий = Комментарий;
Док.Партия = ПартияВвода;
Док.РК_НеПересчитыватьСуммуРеглПоКурсу = Истина;
Док.ОтражатьВОперативномУчете = Истина;
@@ -1195,7 +1235,7 @@
КонецФункции
-Функция СоздатьДокументКомиссии(СтрокиГруппы, ТекстТега, ПартияВвода)
+Функция СоздатьДокументКомиссии(СтрокиГруппы, Комментарий, ПартияВвода)
Первая = СтрокиГруппы[0];
ДоговорШапки = Первая.Договор;
@@ -1215,7 +1255,7 @@
Док.Партнер = Первая.Партнер;
Док.Контрагент = Первая.Контрагент;
Док.Договор = ДоговорШапки;
- Док.Комментарий = ТекстТега + ", комиссия 2.5, " + СокрЛП(Строка(Первая.Партнер));
+ Док.Комментарий = Комментарий;
Док.Партия = ПартияВвода;
Док.РК_НеПересчитыватьСуммуРеглПоКурсу = Истина;
Док.ОтражатьВОперативномУчете = Истина;