From fba8671cd201a190528291d53ee74324e38c7897 Mon Sep 17 00:00:00 2001 From: mihailkudravcev Date: Fri, 9 Oct 2026 17:17:37 +0300 Subject: [PATCH] =?UTF-8?q?1.3.1.126:=20#36=20=E2=80=94=20=D1=81=D0=B5?= =?UTF-8?q?=D1=80=D0=B8=D0=B8=20=D0=B2=D0=B2=D0=BE=D0=B4=D0=B0=20=D0=BE?= =?UTF-8?q?=D1=81=D1=82=D0=B0=D1=82=D0=BA=D0=BE=D0=B2=20=D0=B2=20=D0=BE?= =?UTF-8?q?=D0=BA=D0=BD=D0=BE=20=D1=80=D0=B0=D1=81=D0=BF=D1=80=D0=B5=D0=B4?= =?UTF-8?q?=D0=B5=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Лаеннек остаётся в колонке «Серия». Строки без характеристики с одной серией и ГТД сворачиваются. Co-authored-by: Cursor --- CHANGELOG.md | 8 ++ VERSION | 2 +- src/Configuration.xml | 2 +- .../РК_ЗагрузкаОстатков/Ext/ObjectModule.bsl | 107 +++++++++++++++++- 4 files changed, 116 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6c846c0..76348ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,14 @@ --- +## 1.3.1.126 (2026-10-09) + +### #36: серии ввода остатков + +- Тип «учёт себестоимости по сериям» (лаеннек) — серия в колонке строки. +- Тип «управление остатками серий» — колонка пустая, количество в табличной части «Серии» с тем же идентификатором строки. +- Строки без характеристики с одной серией и одним ГТД сворачиваются. + ## 1.3.1.125 (2026-10-07) ### #68: явный отказ партнёр-веток вне узла crm3-dev diff --git a/VERSION b/VERSION index 16f4b2d..494d28a 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.3.1.125 +1.3.1.126 diff --git a/src/Configuration.xml b/src/Configuration.xml index 0f33aa5..4a5ea69 100644 --- a/src/Configuration.xml +++ b/src/Configuration.xml @@ -62,7 +62,7 @@ Role.РК_ОсновнаяРоль - 1.3.1.125 + 1.3.1.126 Language.Русский diff --git a/src/DataProcessors/РК_ЗагрузкаОстатков/Ext/ObjectModule.bsl b/src/DataProcessors/РК_ЗагрузкаОстатков/Ext/ObjectModule.bsl index 96854c2..553d488 100644 --- a/src/DataProcessors/РК_ЗагрузкаОстатков/Ext/ObjectModule.bsl +++ b/src/DataProcessors/РК_ЗагрузкаОстатков/Ext/ObjectModule.bsl @@ -1096,6 +1096,7 @@ Исключение КонецПопытки; + СтрокиСклада = СвернутьСтрокиБезХарактеристики(СтрокиСклада); Для Каждого СтрТ Из СтрокиСклада Цикл ДобавитьСтрокуТоваровДокументаВвода(Док, СтрТ); КонецЦикла; @@ -1168,6 +1169,7 @@ Исключение КонецПопытки; + СтрокиГруппы = СвернутьСтрокиБезХарактеристики(СтрокиГруппы); Для Каждого СтрТ Из СтрокиГруппы Цикл ДобавитьСтрокуТоваровДокументаВвода(Док, СтрТ); КонецЦикла; @@ -1204,7 +1206,14 @@ НовСтр = Док.Товары.Добавить(); НовСтр.Номенклатура = СтрТ.Номенклатура; НовСтр.Характеристика = СтрТ.Характеристика; - НовСтр.Серия = СтрТ.СерияСсылка; + СкладПолитики = СтрТ.Склад; + Если Не ЗначениеЗаполнено(СкладПолитики) Тогда + СкладПолитики = Док.Склад; + КонецЕсли; + // Учёт себестоимости по сериям — колонка «Серия». Управление остатками — окно (ТЧ Серии). + Если СерияУказываетсяВКолонке(Док, СтрТ.Номенклатура, СкладПолитики) Тогда + НовСтр.Серия = СтрТ.СерияСсылка; + КонецЕсли; НовСтр.Количество = КолДок; НовСтр.КоличествоУпаковок = КолДок; НовСтр.Сумма = СтрТ.Стоимость; @@ -1225,16 +1234,112 @@ НовСтр.НомерГТД = СтрТ.НомерГТДСсылка; КонецЕсли; Если ЗначениеЗаполнено(СтрТ.СерияСсылка) Тогда + Если Не ЗначениеЗаполнено(НовСтр.ИдентификаторСтроки) Тогда + НовСтр.ИдентификаторСтроки = Строка(Новый УникальныйИдентификатор); + КонецЕсли; СтрСер = Док.Серии.Добавить(); СтрСер.Номенклатура = НовСтр.Номенклатура; СтрСер.Характеристика = НовСтр.Характеристика; СтрСер.Серия = СтрТ.СерияСсылка; СтрСер.Количество = НовСтр.Количество; СтрСер.КоличествоУпаковок = НовСтр.Количество; + СтрСер.ИдентификаторСтроки = НовСтр.ИдентификаторСтроки; КонецЕсли; КонецПроцедуры +Функция СерияУказываетсяВКолонке(Док, Номенклатура, Склад) + + Кэш = Неопределено; + Если Не Док.ДополнительныеСвойства.Свойство("КэшСерияВКолонке", Кэш) Тогда + Кэш = Новый Соответствие; + Док.ДополнительныеСвойства.Вставить("КэшСерияВКолонке", Кэш); + КонецЕсли; + + КлючСклада = ""; + Если ЗначениеЗаполнено(Склад) Тогда + КлючСклада = Строка(Склад.УникальныйИдентификатор()); + КонецЕсли; + Ключ = Строка(Номенклатура.УникальныйИдентификатор()) + "|" + КлючСклада; + ЗначениеКэша = Кэш.Получить(Ключ); + Если ЗначениеКэша <> Неопределено Тогда + Возврат ЗначениеКэша; + КонецЕсли; + + ТипПолитики = Неопределено; + Вид = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Номенклатура, "ВидНоменклатуры"); + Если ЗначениеЗаполнено(Вид) И ЗначениеЗаполнено(Склад) Тогда + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | Пол.ПолитикаУчетаСерий.ТипПолитики КАК ТипПолитики + |ИЗ + | Справочник.ВидыНоменклатуры.ПолитикиУчетаСерий КАК Пол + |ГДЕ + | Пол.Ссылка = &Вид + | И Пол.Склад = &Склад + | И Пол.ПолитикаУчетаСерий <> ЗНАЧЕНИЕ(Справочник.ПолитикиУчетаСерий.ПустаяСсылка)"; + Запрос.УстановитьПараметр("Вид", Вид); + Запрос.УстановитьПараметр("Склад", Склад); + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + ТипПолитики = Выборка.ТипПолитики; + КонецЕсли; + КонецЕсли; + Если Не ЗначениеЗаполнено(ТипПолитики) И ЗначениеЗаполнено(Вид) Тогда + Политика = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Вид, "ПолитикаУчетаСерий"); + Если ЗначениеЗаполнено(Политика) Тогда + ТипПолитики = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Политика, "ТипПолитики"); + КонецЕсли; + КонецЕсли; + + ВКолонке = ТипПолитики = Перечисления.ТипыПолитикУказанияСерий.УчетСебестоимостиПоСериям + Или ТипПолитики = Перечисления.ТипыПолитикУказанияСерий.СправочноеУказаниеСерий; + Кэш.Вставить(Ключ, ВКолонке); + Возврат ВКолонке; + +КонецФункции + +Функция СвернутьСтрокиБезХарактеристики(Строки) + + Результат = Новый Массив; + Индекс = Новый Соответствие; + Для Каждого СтрТ Из Строки Цикл + Если ЗначениеЗаполнено(СтрТ.Характеристика) Или Не ЗначениеЗаполнено(СтрТ.СерияСсылка) Тогда + Результат.Добавить(СтрТ); + Продолжить; + КонецЕсли; + КлючГТД = ""; + Если ЗначениеЗаполнено(СтрТ.НомерГТДСсылка) Тогда + КлючГТД = Строка(СтрТ.НомерГТДСсылка.УникальныйИдентификатор()); + КонецЕсли; + Ключ = Строка(СтрТ.Номенклатура.УникальныйИдентификатор()) + + "|" + Строка(СтрТ.СерияСсылка.УникальныйИдентификатор()) + + "|" + КлючГТД; + Уже = Индекс.Получить(Ключ); + Если Уже = Неопределено Тогда + Индекс.Вставить(Ключ, СтрТ); + Результат.Добавить(СтрТ); + Иначе + Уже.Количество = КоличествоСтрокиВвода(Уже) + КоличествоСтрокиВвода(СтрТ); + Уже.КоличествоОрганизации = Уже.Количество; + Уже.Стоимость = Уже.Стоимость + СтрТ.Стоимость; + Уже.СтоимостьРегл = Уже.СтоимостьРегл + СтрТ.СтоимостьРегл; + КонецЕсли; + КонецЦикла; + Возврат Результат; + +КонецФункции + +Функция КоличествоСтрокиВвода(СтрТ) + + Если СтрТ.КоличествоОрганизации <> 0 Тогда + Возврат СтрТ.КоличествоОрганизации; + КонецЕсли; + Возврат СтрТ.Количество; + +КонецФункции + // Расчёт СуммаНДС / СуммаСНДС / СуммаБезНДС / НДСРегл после заполнения строк (#33). // Штатный путь — ПакетнаяОбработкаТабличнойЧасти (как в форме/модуле ВводОстатковТоваров). //