РК_ПроверкаСерий 1.3.1.83: автономер a-YYMMDD из срока годности (#17).

This commit is contained in:
mihailkudravcev
2026-08-18 17:00:34 +03:00
parent 3ff55d63b1
commit 87e9c891d0
4 changed files with 113 additions and 32 deletions
+8
View File
@@ -4,6 +4,14 @@
---
## 1.3.1.83 (2026-08-18)
### РК_ПроверкаСерий — автономер из срока годности (#17)
- Для «Пустой номер» (номер обязателен по политике вида): если из наименования не извлекли — номер `a-YYMMDD` из срока (фактического или предложенного).
- Пример: срок 01.02.2027 → номер `a-270201`, наименование `a-270201 до 01.02.2027` (если наименование пустое).
- Префикс `a-` — автоматически сгенерированный номер для исправления серии.
## 1.3.1.82 (2026-08-18)
### РК_ПроверкаСерий — сохранение срока годности по умолчанию
+1 -1
View File
@@ -1 +1 @@
1.3.1.82
1.3.1.83
+1 -1
View File
@@ -62,7 +62,7 @@
<xr:Item xsi:type="xr:MDObjectRef">Role.РК_ОсновнаяРоль</xr:Item>
</DefaultRoles>
<Vendor/>
<Version>1.3.1.82</Version>
<Version>1.3.1.83</Version>
<DefaultStyle/>
<DefaultLanguage>Language.Русский</DefaultLanguage>
<BriefInformation/>
@@ -1,5 +1,5 @@
// Проверка и исправление данных Справочник.СерииНоменклатуры (#14, #15).
// Заполнение номера/срока — из наименования (не нумератор).
// Проверка и исправление данных Справочник.СерииНоменклатуры (#14, #15, #17).
// Заполнение номера — из наименования; при пустом номере и наличии срока — a-YYMMDD (#17).
// Дубли: вид + номер + ГоденДо (ДатаПроизводства в ключ не входит).
#Область ОбработчикиСобытийФормы
@@ -434,16 +434,21 @@
ПредложенныйГоденДо = '00010101';
ПредложенноеНаименование = "";
Если ИспНомер И ПустойНомер Тогда
ПредложенныйНомер = ИзвлечьНомерИзНаименования(Выборка.Наименование);
Проблемы.Добавить("Пустой номер");
КонецЕсли;
Если ИспСрок И ПустойСрок Тогда
ПредложенныйГоденДо = ПредложенныйГоденДоПоСтроке(Выборка.Наименование);
Проблемы.Добавить("Пустой срок годности");
КонецЕсли;
Если ИспНомер И ПустойНомер Тогда
ПредложенияНомера = ПредложенияПоНомеруИзСрока(
Выборка.Наименование, Выборка.ГоденДо, ПредложенныйГоденДо);
ПредложенныйНомер = ПредложенияНомера.Номер;
Если ПустоеИмя И ЗначениеЗаполнено(ПредложенияНомера.Наименование) Тогда
ПредложенноеНаименование = ПредложенияНомера.Наименование;
КонецЕсли;
Проблемы.Добавить("Пустой номер");
КонецЕсли;
Если Не ИспНомер И ПустоеИмя И СрокГодностиЗаполнен(Выборка.ГоденДо) Тогда
ПредложенноеНаименование = "до " + Формат(Выборка.ГоденДо, "ДФ=dd.MM.yy");
Проблемы.Добавить("Пустое наименование");
@@ -504,13 +509,6 @@
ПересчитатьПредложенияСтрокиПроблемы(Стр, КэшНастроек);
ИзмененийВСтроке = 0;
Если СтрНайти(Стр.Проблема, "Пустой номер") > 0
И ЗначениеЗаполнено(СокрЛП(Стр.ПредложенныйНомер))
И Не ЗначениеЗаполнено(СокрЛП(Стр.Номер)) Тогда
Стр.Номер = СокрЛП(Стр.ПредложенныйНомер);
ИзмененийВСтроке = ИзмененийВСтроке + 1;
КонецЕсли;
Если СтрНайти(Стр.Проблема, "Пустой срок годности") > 0
И СрокГодностиЗаполнен(Стр.ПредложенныйГоденДо)
И Не СрокГодностиЗаполнен(Стр.ГоденДо) Тогда
@@ -518,8 +516,28 @@
ИзмененийВСтроке = ИзмененийВСтроке + 1;
КонецЕсли;
Если СтрНайти(Стр.Проблема, "Пустое наименование") > 0
И ЗначениеЗаполнено(СокрЛП(Стр.ПредложенноеНаименование))
Если СтрНайти(Стр.Проблема, "Пустой номер") > 0
И Не ЗначениеЗаполнено(СокрЛП(Стр.Номер))
И Не ЗначениеЗаполнено(СокрЛП(Стр.ПредложенныйНомер)) Тогда
ПредложенияНомера = ПредложенияПоНомеруИзСрока(
Стр.Наименование, Стр.ГоденДо, Стр.ПредложенныйГоденДо);
Если ЗначениеЗаполнено(ПредложенияНомера.Номер) Тогда
Стр.ПредложенныйНомер = ПредложенияНомера.Номер;
Если Не ЗначениеЗаполнено(СокрЛП(Стр.Наименование))
И ЗначениеЗаполнено(ПредложенияНомера.Наименование) Тогда
Стр.ПредложенноеНаименование = ПредложенияНомера.Наименование;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если СтрНайти(Стр.Проблема, "Пустой номер") > 0
И ЗначениеЗаполнено(СокрЛП(Стр.ПредложенныйНомер))
И Не ЗначениеЗаполнено(СокрЛП(Стр.Номер)) Тогда
Стр.Номер = СокрЛП(Стр.ПредложенныйНомер);
ИзмененийВСтроке = ИзмененийВСтроке + 1;
КонецЕсли;
Если ЗначениеЗаполнено(СокрЛП(Стр.ПредложенноеНаименование))
И Не ЗначениеЗаполнено(СокрЛП(Стр.Наименование)) Тогда
Стр.Наименование = СокрЛП(Стр.ПредложенноеНаименование);
ИзмененийВСтроке = ИзмененийВСтроке + 1;
@@ -568,14 +586,6 @@
Настройки = НастройкиСерийВида(Стр.ВидНоменклатуры, КэшНастроек);
ТекстНаименования = Стр.Наименование;
Если Не ЗначениеЗаполнено(СокрЛП(Стр.Номер)) Или СтрНайти(Стр.Проблема, "Пустой номер") > 0 Тогда
ПредложенныйНомер = ИзвлечьНомерИзНаименования(ТекстНаименования);
Если ЗначениеЗаполнено(ПредложенныйНомер) Тогда
Стр.ПредложенныйНомер = ПредложенныйНомер;
Результат.Номеров = Результат.Номеров + 1;
КонецЕсли;
КонецЕсли;
Если Не СрокГодностиЗаполнен(Стр.ГоденДо) Или СтрНайти(Стр.Проблема, "Пустой срок годности") > 0 Тогда
ПодставлятьУмолчание = СтрНайти(Стр.Проблема, "Пустой срок годности") > 0;
ПредложенныйГоденДо = ПредложенныйГоденДоПоСтроке(ТекстНаименования, ПодставлятьУмолчание);
@@ -585,6 +595,20 @@
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(СокрЛП(Стр.Номер)) Или СтрНайти(Стр.Проблема, "Пустой номер") > 0 Тогда
ПредложенияНомера = ПредложенияПоНомеруИзСрока(
ТекстНаименования, Стр.ГоденДо, Стр.ПредложенныйГоденДо);
Если ЗначениеЗаполнено(ПредложенияНомера.Номер) Тогда
Стр.ПредложенныйНомер = ПредложенияНомера.Номер;
Результат.Номеров = Результат.Номеров + 1;
Если Не ЗначениеЗаполнено(СокрЛП(Стр.Наименование))
И ЗначениеЗаполнено(ПредложенияНомера.Наименование) Тогда
Стр.ПредложенноеНаименование = ПредложенияНомера.Наименование;
Результат.Наименований = Результат.Наименований + 1;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если (Не ЗначениеЗаполнено(СокрЛП(Стр.Наименование)) Или СтрНайти(Стр.Проблема, "Пустое наименование") > 0)
И Не Настройки.ИспользоватьНомерСерии
И СрокГодностиЗаполнен(Стр.ГоденДо) Тогда
@@ -616,14 +640,20 @@
ИспСрок = Настройки.ИспользоватьСрокГодностиСерии;
ТекстНаименования = Стр.Наименование;
Если ИспНомер И СтрНайти(Стр.Проблема, "Пустой номер") > 0 Тогда
Стр.ПредложенныйНомер = ИзвлечьНомерИзНаименования(ТекстНаименования);
КонецЕсли;
Если ИспСрок И СтрНайти(Стр.Проблема, "Пустой срок годности") > 0 Тогда
Стр.ПредложенныйГоденДо = ПредложенныйГоденДоПоСтроке(ТекстНаименования);
КонецЕсли;
Если ИспНомер И СтрНайти(Стр.Проблема, "Пустой номер") > 0 Тогда
ПредложенияНомера = ПредложенияПоНомеруИзСрока(
ТекстНаименования, Стр.ГоденДо, Стр.ПредложенныйГоденДо);
Стр.ПредложенныйНомер = ПредложенияНомера.Номер;
Если Не ЗначениеЗаполнено(СокрЛП(Стр.Наименование))
И ЗначениеЗаполнено(ПредложенияНомера.Наименование) Тогда
Стр.ПредложенноеНаименование = ПредложенияНомера.Наименование;
КонецЕсли;
КонецЕсли;
Если Не ИспНомер И СтрНайти(Стр.Проблема, "Пустое наименование") > 0
И СрокГодностиЗаполнен(Стр.ГоденДо) Тогда
Стр.ПредложенноеНаименование = "до " + Формат(Стр.ГоденДо, "ДФ=dd.MM.yy");
@@ -658,7 +688,9 @@
ЕстьИзменения = Истина;
КонецЕсли;
Если СтрНайти(Стр.Проблема, "Пустое наименование") > 0
Если (СтрНайти(Стр.Проблема, "Пустое наименование") > 0
Или (СтрНайти(Стр.Проблема, "Пустой номер") > 0
И Не ЗначениеЗаполнено(СокрЛП(Стр.Наименование))))
И ЗначениеЗаполнено(НаименованиеЗаписи) Тогда
ЕстьИзменения = Истина;
КонецЕсли;
@@ -682,7 +714,9 @@
И СрокГодностиЗаполнен(ГоденДоЗаписи) Тогда
ОбСерии.ГоденДо = ГоденДоЗаписи;
КонецЕсли;
Если СтрНайти(Стр.Проблема, "Пустое наименование") > 0
Если (СтрНайти(Стр.Проблема, "Пустое наименование") > 0
Или (СтрНайти(Стр.Проблема, "Пустой номер") > 0
И Не ЗначениеЗаполнено(СокрЛП(Стр.Наименование))))
И ЗначениеЗаполнено(НаименованиеЗаписи) Тогда
ОбСерии.Наименование = НаименованиеЗаписи;
КонецЕсли;
@@ -783,6 +817,45 @@
КонецФункции
&НаСервере
Функция ПредложенияПоНомеруИзСрока(ТекстНаименования, ГоденДо, ПредложенныйГоденДо = '00010101')
Результат = Новый Структура("Номер, Наименование", "", "");
Номер = ИзвлечьНомерИзНаименования(ТекстНаименования);
Если ЗначениеЗаполнено(Номер) Тогда
Результат.Номер = Номер;
Возврат Результат;
КонецЕсли;
ГоденДоДляНомера = ГоденДо;
Если Не СрокГодностиЗаполнен(ГоденДоДляНомера) Тогда
ГоденДоДляНомера = ПредложенныйГоденДо;
КонецЕсли;
Если СрокГодностиЗаполнен(ГоденДоДляНомера) Тогда
Результат.Номер = АвтоНомерСерииИзСрока(ГоденДоДляНомера);
Результат.Наименование = НаименованиеСерииПоНомеруИСроку(Результат.Номер, ГоденДоДляНомера);
КонецЕсли;
Возврат Результат;
КонецФункции
&НаСервере
Функция АвтоНомерСерииИзСрока(ГоденДо)
Возврат "a-" + Формат(ГоденДо, "ДФ=yyMMdd");
КонецФункции
&НаСервере
Функция НаименованиеСерииПоНомеруИСроку(Номер, ГоденДо)
Возврат СокрЛП(Номер) + " до " + Формат(ГоденДо, "ДФ=dd.MM.yyyy");
КонецФункции
&НаСервере
Функция ИзвлечьНомерИзНаименования(ТекстНаименования)