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, " + СокрЛП(Строка(Первая.Партнер)); + Док.Комментарий = Комментарий; Док.Партия = ПартияВвода; Док.РК_НеПересчитыватьСуммуРеглПоКурсу = Истина; Док.ОтражатьВОперативномУчете = Истина;