diff --git a/CHANGELOG.md b/CHANGELOG.md index ece9573..e9b4521 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,13 @@ --- +## 1.3.1.135 (2026-10-14) + +### Ввод остатков: серия по UUID со сроком 01.01.2001 + +- Если карточка серии уже есть по идентификатору источника, новая не создаётся. +- У карточки со сроком 01.01.2001 и цифровым номером срок и номер берутся из имени серии источника. Занятый номер другого элемента не перезаписывается. + ## 1.3.1.134 (2026-10-13) ### Ввод остатков: серия строки в таблице товаров diff --git a/VERSION b/VERSION index 26e8383..8abbfef 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.3.1.134 +1.3.1.135 diff --git a/src/Configuration.xml b/src/Configuration.xml index 3f69b21..835111e 100644 --- a/src/Configuration.xml +++ b/src/Configuration.xml @@ -62,7 +62,7 @@ Role.РК_ОсновнаяРоль - 1.3.1.134 + 1.3.1.135 Language.Русский diff --git a/src/DataProcessors/РК_ЗагрузкаОстатков/Ext/ObjectModule.bsl b/src/DataProcessors/РК_ЗагрузкаОстатков/Ext/ObjectModule.bsl index ab738e3..a4ec674 100644 --- a/src/DataProcessors/РК_ЗагрузкаОстатков/Ext/ObjectModule.bsl +++ b/src/DataProcessors/РК_ЗагрузкаОстатков/Ext/ObjectModule.bsl @@ -2234,6 +2234,53 @@ КонецПроцедуры +Процедура АктуализироватьСериюСПустымСроком(Сер, ИмяСерии, ГоденДо, РежимТест) + + Если РежимТест Или Не ЗначениеЗаполнено(Сер) Или Не ЗначениеЗаполнено(ГоденДо) Тогда + Возврат; + КонецЕсли; + Если НачалоДня(ГоденДо) <= Дата(2001, 1, 1) Тогда + Возврат; + КонецЕсли; + + Рекв = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Сер, "Номер, ГоденДо, ВидНоменклатуры"); + Если ЗначениеЗаполнено(Рекв.ГоденДо) И НачалоДня(Рекв.ГоденДо) > Дата(2001, 1, 1) Тогда + Возврат; + КонецЕсли; + + Попытка + Объект = Сер.ПолучитьОбъект(); + Объект.ГоденДо = ГоденДо; + НомерИсточник = СокрЛП(ИмяСерии); + Если ЗначениеЗаполнено(НомерИсточник) И НомерСерииТолькоЦифры(СокрЛП(Рекв.Номер)) Тогда + Занятый = Справочники.СерииНоменклатуры.НайтиПоРеквизиту( + "Номер", НомерИсточник, , Рекв.ВидНоменклатуры); + Если Не ЗначениеЗаполнено(Занятый) Или Занятый = Сер Тогда + Объект.Номер = НомерИсточник; + КонецЕсли; + КонецЕсли; + Объект.Записать(); + Исключение + // Срок карточки не обновлён. Строка остатка всё равно ссылается на найденную серию. + КонецПопытки; + +КонецПроцедуры + +Функция НомерСерииТолькоЦифры(Номер) + + Если Не ЗначениеЗаполнено(Номер) Тогда + Возврат Ложь; + КонецЕсли; + Для Индекс = 1 По СтрДлина(Номер) Цикл + Символ = Сред(Номер, Индекс, 1); + Если Символ < "0" Или Символ > "9" Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + Возврат Истина; + +КонецФункции + Функция НайтиИлиСоздатьСерию(СтрТ, Ном, СкладЦель, СуффиксДатыСер, РежимТест, КэшТребуетсяСерия, КэшСерий, Результат) @@ -2295,6 +2342,9 @@ СсылкаПоГуид = СсылкаПоUUID(Справочники.СерииНоменклатуры, СтрТ.СерияИдентификатор); Если ЗначениеЗаполнено(СсылкаПоГуид) И ОбщегоНазначения.СсылкаСуществует(СсылкаПоГуид) Тогда + Если Не ЭтоЗаглушка Тогда + АктуализироватьСериюСПустымСроком(СсылкаПоГуид, ИмяСерии, ГоденДо, РежимТест); + КонецЕсли; Если ЭтоЗаглушка Тогда КэшСерий.Вставить(КлючКэшаСерииЗаглушки(ВидСер, Ном, ГоденДо), СсылкаПоГуид); КонецЕсли;