1.3.1.110: серии — ГоденДо из API и заглушки по номенклатуре (#30, #31).

series_expire → СерияГоденДо; при создании серии заполняются обязательные
реквизиты; ключ заглушки = владелец серий + номенклатура + ГоденДо.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
mihailkudravcev
2026-09-02 17:13:25 +03:00
parent f3e2d7b032
commit ae64d7b127
6 changed files with 337 additions and 55 deletions
+8
View File
@@ -4,6 +4,14 @@
---
## 1.3.1.110 (2026-09-02)
### РК_ЗагрузкаОстатков — серии: ГоденДо и заглушки по номенклатуре (#30, #31)
- `series_expire` из API → реквизит ТЧ `СерияГоденДо`; при создании серии заполняются `ГоденДо`, `ДатаПроизводства`, `ВидНоменклатуры`.
- Fallback срока из имени серии (`до DD.MM.YY`); при отсутствии данных — дата среза cutover.
- Заглушки: ключ `ВидСер + Номенклатура + ГоденДо`, номер `Перенос_{код номенклатуры}_{yyyyMMdd}` (не одна серия на склад).
## 1.3.1.109 (2026-09-01)
### РК_ЗагрузкаОстатков — маппинг соглашений комиссии cutover (#24)
+1 -1
View File
@@ -1 +1 @@
1.3.1.109
1.3.1.110
+4 -2
View File
@@ -57,7 +57,7 @@
<Metadata name="DataProcessor.ЗагрузкаДанныхИзФайла.Form.ЗагрузкаДанныхИзФайла" id="f47d02ff-17f2-4764-a151-627f4067a479" configVersion="247298ad849a4d46b1f412e90c0184fe64756489"/>
<Metadata name="DataProcessor.ЗагрузкаДанныхИзФайла.Form.ЗагрузкаДанныхИзФайла.Form" id="f47d02ff-17f2-4764-a151-627f4067a479.0" configVersion="e853a6b3591994346f9ce1d3b7d5cf0daf864fb8"/>
<Metadata name="DataProcessor.ЗагрузкаДанныхИзФайла.ManagerModule" id="b6fd11ac-f702-4d13-b328-9a78b0874483.2" configVersion="78276e2de46cee0ce6ddd3972858ba87a64b96c0"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков" id="5922bda8-8f69-487c-823a-8b09e343f59a" configVersion="de8c3f8021f3297ede82b346053d1fb65ee041a9">
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков" id="5922bda8-8f69-487c-823a-8b09e343f59a" configVersion="153a9a8d7d574ab7d159818f9fe623770d339541">
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеКомиссионныеТовары.Attribute.СтоимостьРегл" id="068e3fcc-0bd5-4af0-a192-d100909a8cc1"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеСобственныеТовары.Attribute.СкладИдентификатор" id="086673fd-91b2-4966-8472-144da87650e6"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеСобственныеТовары.Attribute.КомментарийСопоставления" id="09d80a73-1aa6-4ecc-a39a-c667e99e3084"/>
@@ -130,6 +130,8 @@
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеСобственныеТовары.Attribute.ХарактеристикаНаименование" id="8fa984e4-bbf2-4d38-a80d-33827c3645da"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеКомиссионныеТовары.Attribute.ВидЗапасовИдентификатор" id="91c330ed-7136-4788-8516-9a67b86b2189"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеКомиссионныеТовары.Attribute.КоличествоКОтгрузке" id="96d40d10-3374-40d1-9daf-3ddcb1cb6b7a"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеСобственныеТовары.Attribute.СерияГоденДо" id="b2903fb8-adc2-4c9f-8da3-fc39923d5275"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеКомиссионныеТовары.Attribute.СерияГоденДо" id="8b6cec45-bc8b-43ef-925f-74dd3702fbaf"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеСобственныеТовары.Attribute.СерияИдентификатор" id="a0b08c20-f11b-47bb-ab41-3c80166deab5"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ПолитикаУчетаНоменклатуры.Attribute.ТочностьУказанияСрокаГодностиСерии" id="a1296c97-525a-457d-870e-634d893cea01"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.TabularSection.ВходящиеСобственныеТовары.Attribute.ВидНоменклатурыНаименование" id="a1896aca-6eaf-46df-87dc-2e9f3ea8ae64"/>
@@ -201,7 +203,7 @@
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.Form.ПодборСкладов.Form" id="9dfcb2a8-bf22-44c3-97a7-a69f70ca4d61.0" configVersion="8cddcd809beef075b470c32dd5564aebb81e405c"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.Form.Форма" id="dc49348d-9257-4545-9c29-70c138312177" configVersion="4541c8c382171c6c02021bcc8f500135f4358aa8"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.Form.Форма.Form" id="dc49348d-9257-4545-9c29-70c138312177.0" configVersion="3f9b96e3b263b978e4086e5e52f6d507782d1219"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.ObjectModule" id="5922bda8-8f69-487c-823a-8b09e343f59a.0" configVersion="7d05f2c1f47ed05f17d7eeefd806150befbae784"/>
<Metadata name="DataProcessor.РК_ЗагрузкаОстатков.ObjectModule" id="5922bda8-8f69-487c-823a-8b09e343f59a.0" configVersion="b8b7d78016833e5e413fe849b304ff1e52f286c0"/>
<Metadata name="DataProcessor.РК_ЗагрузкаЦен" id="a18e1801-18e0-4000-8000-000000000001" configVersion="800c7286acdc6bcc40d47f7aa70bdf0f18e2aa5d">
<Metadata name="DataProcessor.РК_ЗагрузкаЦен.Attribute.ПодключениеКСтороннейБазе" id="a18e1801-18e0-4000-8000-000000000101"/>
<Metadata name="DataProcessor.РК_ЗагрузкаЦен.Attribute.ДатаЦен" id="a18e1801-18e0-4000-8000-000000000102"/>
+1 -1
View File
@@ -62,7 +62,7 @@
<xr:Item xsi:type="xr:MDObjectRef">Role.РК_ОсновнаяРоль</xr:Item>
</DefaultRoles>
<Vendor/>
<Version>1.3.1.109</Version>
<Version>1.3.1.110</Version>
<DefaultStyle/>
<DefaultLanguage>Language.Русский</DefaultLanguage>
<BriefInformation/>
@@ -1301,6 +1301,45 @@
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
</Properties>
</Attribute>
<Attribute uuid="b2903fb8-adc2-4c9f-8da3-fc39923d5275">
<Properties>
<Name>СерияГоденДо</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Срок годности серии</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type>
<v8:Type>xs:dateTime</v8:Type>
<v8:DateQualifiers>
<v8:DateFractions>DateTime</v8:DateFractions>
</v8:DateQualifiers>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<FillValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
</Properties>
</Attribute>
<Attribute uuid="5ac27167-fc94-42ea-81cb-a29ff122415d">
<Properties>
<Name>СерияСсылка</Name>
@@ -2788,6 +2827,45 @@
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
</Properties>
</Attribute>
<Attribute uuid="8b6cec45-bc8b-43ef-925f-74dd3702fbaf">
<Properties>
<Name>СерияГоденДо</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Срок годности серии</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type>
<v8:Type>xs:dateTime</v8:Type>
<v8:DateQualifiers>
<v8:DateFractions>DateTime</v8:DateFractions>
</v8:DateQualifiers>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<FillValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
</Properties>
</Attribute>
<Attribute uuid="0ecc319e-eb67-4865-b355-b4c4f57caae1">
<Properties>
<Name>СерияСсылка</Name>
@@ -98,7 +98,7 @@
КонецПроцедуры
// Сопоставление строк ТЧ с НСИ целевой ИБ.
// Серии создаются только если не найдены; заглушки Перенос_* — только при СоздаватьЗаглушкиСерий.
// Серии создаются только если не найдены; заглушки Перенос_{номенклатура}_{срок} — только при СоздаватьЗаглушкиСерий.
//
// Параметры:
// РежимТест - Булево - Истина: только поиск, без создания серий/характеристик
@@ -835,6 +835,7 @@
НовСтр.СерияИдентификатор = UUIDИзСтроки(ЗначениеСвойства(СтрокаAPI, "series_guid", ""));
НовСтр.Серия = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "series_name", "")));
НовСтр.СерияНомер = СокрЛП(Строка(ЗначениеСвойства(СтрокаAPI, "series_number", "")));
НовСтр.СерияГоденДо = ДатаИзSeriesExpire(ЗначениеСвойства(СтрокаAPI, "series_expire", ""));
Если ПустаяСтрока(НовСтр.Серия) И Не ПустаяСтрока(НовСтр.СерияНомер) Тогда
НовСтр.Серия = НовСтр.СерияНомер;
КонецЕсли;
@@ -1169,6 +1170,173 @@
КонецПроцедуры
Функция ДатаИзSeriesExpire(СтрокаДаты)
Текст = СокрЛП(Строка(СтрокаДаты));
Если ПустаяСтрока(Текст) Тогда
Возврат '00010101';
КонецЕсли;
Попытка
ПозT = СтрНайти(Текст, "T");
Если ПозT > 0 Тогда
Текст = Лев(Текст, ПозT - 1);
КонецЕсли;
ПозПроб = СтрНайти(Текст, " ");
Если ПозПроб > 0 Тогда
Текст = Лев(Текст, ПозПроб - 1);
КонецЕсли;
Части = СтрРазделить(Текст, "-", Ложь);
Если Части.Количество() >= 3 Тогда
Возврат Дата(Число(Части[0]), Число(Части[1]), Число(Части[2]));
КонецЕсли;
Исключение
КонецПопытки;
Возврат '00010101';
КонецФункции
Функция ДатаИзИмениСерии(ИмяСерии)
Текст = СокрЛП(Строка(ИмяСерии));
Если ПустаяСтрока(Текст) Тогда
Возврат '00010101';
КонецЕсли;
Позиция = СтрНайти(НРег(Текст), " до ");
Если Позиция = 0 Тогда
Возврат '00010101';
КонецЕсли;
Хвост = СокрЛП(Сред(Текст, Позиция + 4));
Части = СтрРазделить(Хвост, ".", Ложь);
Если Части.Количество() < 3 Тогда
Возврат '00010101';
КонецЕсли;
Попытка
День = Число(Части[0]);
Месяц = Число(Части[1]);
Год = Число(Части[2]);
Если Год < 100 Тогда
Если Год >= 50 Тогда
Год = 1900 + Год;
Иначе
Год = 2000 + Год;
КонецЕсли;
КонецЕсли;
Возврат Дата(Год, Месяц, День);
Исключение
Возврат '00010101';
КонецПопытки;
КонецФункции
Функция ДатаСрезаОстатковОбработки()
Если ЗначениеЗаполнено(ДатаДокументовВвода) Тогда
Возврат ДатаДокументовВвода;
КонецЕсли;
Если ЗначениеЗаполнено(ДатаОстатков) Тогда
Возврат ДатаОстатков;
КонецЕсли;
Возврат ТекущаяДатаСеанса();
КонецФункции
Функция ОпределитьГоденДоСерииСтроки(СтрТ)
Если ЗначениеЗаполнено(СтрТ.СерияГоденДо) Тогда
Возврат СтрТ.СерияГоденДо;
КонецЕсли;
ДатаИзИмени = ДатаИзИмениСерии(СокрЛП(СтрТ.Серия));
Если ЗначениеЗаполнено(ДатаИзИмени) Тогда
Возврат ДатаИзИмени;
КонецЕсли;
Возврат '00010101';
КонецФункции
Функция КодНоменклатурыДляЗаглушкиСерии(СтрТ, Ном)
Арт = СокрЛП(СтрТ.Артикул);
Если ЗначениеЗаполнено(Арт) Тогда
Возврат Лев(СтрЗаменить(СтрЗаменить(Арт, " ", "_"), "/", "_"), 20);
КонецЕсли;
Код = СокрЛП(СтрТ.НоменклатураКод);
Если ЗначениеЗаполнено(Код) Тогда
Возврат Лев(СтрЗаменить(Код, " ", "_"), 20);
КонецЕсли;
Если ЗначениеЗаполнено(Ном) Тогда
Попытка
КодНом = СокрЛП(Строка(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ном, "Код")));
Если ЗначениеЗаполнено(КодНом) Тогда
Возврат Лев(СтрЗаменить(КодНом, " ", "_"), 20);
КонецЕсли;
Исключение
КонецПопытки;
Возврат Лев(СтрЗаменить(Строка(Ном.УникальныйИдентификатор()), "-", ""), 8);
КонецЕсли;
Возврат Лев(СтрЗаменить(Строка(СтрТ.НоменклатураИдентификатор), "-", ""), 8);
КонецФункции
Функция СформироватьНомерЗаглушкиСерии(СтрТ, Ном, ГоденДо)
КодНом = КодНоменклатурыДляЗаглушкиСерии(СтрТ, Ном);
СуффиксСрока = Формат(ГоденДо, "ДФ=yyyyMMdd");
Возврат "Перенос_" + КодНом + "_" + СуффиксСрока;
КонецФункции
Функция СформироватьИмяЗаглушкиСерии(СтрТ, Ном, ГоденДо)
Номер = СформироватьНомерЗаглушкиСерии(СтрТ, Ном, ГоденДо);
Возврат Номер + " до " + Формат(ГоденДо, "ДФ=dd.MM.yyyy");
КонецФункции
Функция КлючКэшаСерииЗаглушки(ВидСер, Ном, ГоденДо)
Возврат Строка(ВидСер.УникальныйИдентификатор()) + "|"
+ Строка(Ном.УникальныйИдентификатор()) + "|"
+ Формат(ГоденДо, "ДФ=yyyyMMdd");
КонецФункции
Функция ОпределитьДатуПроизводстваСерии(ГоденДо, ЭтоЗаглушка)
// Политика cutover: дата производства в API не передаётся — дата среза остатков.
Возврат НачалоДня(ДатаСрезаОстатковОбработки());
КонецФункции
Процедура ЗаполнитьОбязательныеРеквизитыСерии(ОбСер, ГоденДо, ВидНом, ЭтоЗаглушка)
Если ЗначениеЗаполнено(ГоденДо) Тогда
ОбСер.ГоденДо = КонецДня(ГоденДо);
КонецЕсли;
Попытка
ОбСер.ДатаПроизводства = ОпределитьДатуПроизводстваСерии(ГоденДо, ЭтоЗаглушка);
Исключение
КонецПопытки;
Попытка
Если ЗначениеЗаполнено(ВидНом) Тогда
ОбСер.ВидНоменклатуры = ВидНом;
КонецЕсли;
Исключение
КонецПопытки;
КонецПроцедуры
Функция НайтиИлиСоздатьСерию(СтрТ, Ном, СкладЦель, СуффиксДатыСер, РежимТест,
КэшТребуетсяСерия, КэшСерий, Результат)
@@ -1176,39 +1344,6 @@
ВидНом = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ном, "ВидНоменклатуры");
ТребуетсяСерия = НоменклатураИспользуетСерии(Ном, КэшТребуетсяСерия);
ИмяСерии = СокрЛП(СтрТ.Серия);
НомерСерии = СокрЛП(СтрТ.СерияНомер);
ЭтоЗаглушка = Ложь;
Если Не ЗначениеЗаполнено(ИмяСерии) И Не ЗначениеЗаполнено(НомерСерии) Тогда
Если Не ТребуетсяСерия Тогда
Возврат Сер;
КонецЕсли;
Если Не СоздаватьЗаглушкиСерий Тогда
СтрТ.КомментарийСопоставления = "Серия обязательна, в источнике пустая (заглушки выключены)";
Возврат Сер;
КонецЕсли;
КодСклЗагл = "КОМ";
Если ЗначениеЗаполнено(СкладЦель) Тогда
Попытка
КодСклЗагл = СокрЛП(Строка(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СкладЦель, "Код")));
Исключение
КодСклЗагл = "";
КонецПопытки;
Если ПустаяСтрока(КодСклЗагл) Тогда
КодСклЗагл = Лев(СтрЗаменить(Строка(СкладЦель.УникальныйИдентификатор()), "-", ""), 8);
КонецЕсли;
КонецЕсли;
ИмяСерии = "Перенос_" + КодСклЗагл + "_" + СуффиксДатыСер;
СтрТ.Серия = ИмяСерии;
ЭтоЗаглушка = Истина;
КонецЕсли;
СсылкаПоГуид = СсылкаПоUUID(Справочники.СерииНоменклатуры, СтрТ.СерияИдентификатор);
Если ЗначениеЗаполнено(СсылкаПоГуид) И ОбщегоНазначения.СсылкаСуществует(СсылкаПоГуид) Тогда
Возврат СсылкаПоГуид;
КонецЕсли;
ВидСер = Неопределено;
ИспНомерСерии = Истина;
Попытка
@@ -1222,43 +1357,102 @@
ВидСер = ВидНом;
КонецЕсли;
КлючПоискаНомера = ?(ЗначениеЗаполнено(НомерСерии), НомерСерии, ИмяСерии);
КлючКэшСер = Строка(ВидСер.УникальныйИдентификатор()) + "|" + ИмяСерии + "|" + КлючПоискаНомера;
ИмяСерии = СокрЛП(СтрТ.Серия);
НомерСерии = СокрЛП(СтрТ.СерияНомер);
ЭтоЗаглушка = Ложь;
ГоденДо = ОпределитьГоденДоСерииСтроки(СтрТ);
Если Не ЗначениеЗаполнено(ИмяСерии) И Не ЗначениеЗаполнено(НомерСерии) Тогда
Если Не ТребуетсяСерия Тогда
Возврат Сер;
КонецЕсли;
Если Не СоздаватьЗаглушкиСерий Тогда
СтрТ.КомментарийСопоставления = "Серия обязательна, в источнике пустая (заглушки выключены)";
Возврат Сер;
КонецЕсли;
Если Не ЗначениеЗаполнено(ГоденДо) Тогда
ГоденДо = КонецДня(ДатаСрезаОстатковОбработки());
КонецЕсли;
СтрТ.СерияГоденДо = ГоденДо;
НомерСерии = СформироватьНомерЗаглушкиСерии(СтрТ, Ном, ГоденДо);
ИмяСерии = СформироватьИмяЗаглушкиСерии(СтрТ, Ном, ГоденДо);
СтрТ.Серия = ИмяСерии;
СтрТ.СерияНомер = НомерСерии;
ЭтоЗаглушка = Истина;
Иначе
Если Не ЗначениеЗаполнено(ГоденДо) Тогда
ГоденДо = ДатаИзИмениСерии(ИмяСерии);
КонецЕсли;
Если ЗначениеЗаполнено(ГоденДо) Тогда
СтрТ.СерияГоденДо = ГоденДо;
КонецЕсли;
КонецЕсли;
СсылкаПоГуид = СсылкаПоUUID(Справочники.СерииНоменклатуры, СтрТ.СерияИдентификатор);
Если ЗначениеЗаполнено(СсылкаПоГуид) И ОбщегоНазначения.СсылкаСуществует(СсылкаПоГуид) Тогда
Если ЭтоЗаглушка Тогда
КэшСерий.Вставить(КлючКэшаСерииЗаглушки(ВидСер, Ном, ГоденДо), СсылкаПоГуид);
КонецЕсли;
Возврат СсылкаПоГуид;
КонецЕсли;
Если ЭтоЗаглушка Тогда
КлючКэшСер = КлючКэшаСерииЗаглушки(ВидСер, Ном, ГоденДо);
Иначе
КлючПоискаНомера = ?(ЗначениеЗаполнено(НомерСерии), НомерСерии, ИмяСерии);
КлючКэшСер = Строка(ВидСер.УникальныйИдентификатор()) + "|" + ИмяСерии + "|" + КлючПоискаНомера;
Если ЗначениеЗаполнено(ГоденДо) Тогда
КлючКэшСер = КлючКэшСер + "|" + Формат(ГоденДо, "ДФ=yyyyMMdd");
КонецЕсли;
КонецЕсли;
СерИзКэш = КэшСерий.Получить(КлючКэшСер);
Если СерИзКэш <> Неопределено Тогда
Возврат СерИзКэш;
КонецЕсли;
Если ИспНомерСерии И ЗначениеЗаполнено(КлючПоискаНомера) Тогда
Сер = Справочники.СерииНоменклатуры.НайтиПоРеквизиту("Номер", КлючПоискаНомера, , ВидСер);
КонецЕсли;
Если Не ЗначениеЗаполнено(Сер) И ЗначениеЗаполнено(ИмяСерии) Тогда
Сер = Справочники.СерииНоменклатуры.НайтиПоНаименованию(ИмяСерии, Истина, , ВидСер);
КонецЕсли;
Если Не ЗначениеЗаполнено(Сер) И ЗначениеЗаполнено(НомерСерии) И НомерСерии <> ИмяСерии Тогда
Сер = Справочники.СерииНоменклатуры.НайтиПоНаименованию(НомерСерии, Истина, , ВидСер);
Если ЭтоЗаглушка Тогда
Если ИспНомерСерии И ЗначениеЗаполнено(НомерСерии) Тогда
Сер = Справочники.СерииНоменклатуры.НайтиПоРеквизиту("Номер", НомерСерии, , ВидСер);
КонецЕсли;
Если Не ЗначениеЗаполнено(Сер) И ЗначениеЗаполнено(ИмяСерии) Тогда
Сер = Справочники.СерииНоменклатуры.НайтиПоНаименованию(ИмяСерии, Истина, , ВидСер);
КонецЕсли;
Иначе
КлючПоискаНомера = ?(ЗначениеЗаполнено(НомерСерии), НомерСерии, ИмяСерии);
Если ИспНомерСерии И ЗначениеЗаполнено(КлючПоискаНомера) Тогда
Сер = Справочники.СерииНоменклатуры.НайтиПоРеквизиту("Номер", КлючПоискаНомера, , ВидСер);
КонецЕсли;
Если Не ЗначениеЗаполнено(Сер) И ЗначениеЗаполнено(ИмяСерии) Тогда
Сер = Справочники.СерииНоменклатуры.НайтиПоНаименованию(ИмяСерии, Истина, , ВидСер);
КонецЕсли;
Если Не ЗначениеЗаполнено(Сер) И ЗначениеЗаполнено(НомерСерии) И НомерСерии <> ИмяСерии Тогда
Сер = Справочники.СерииНоменклатуры.НайтиПоНаименованию(НомерСерии, Истина, , ВидСер);
КонецЕсли;
КонецЕсли;
МожноСоздать = Не РежимТест И ЗначениеЗаполнено(ИмяСерии);
МожноСоздать = Не РежимТест И (ЗначениеЗаполнено(ИмяСерии) Или ЗначениеЗаполнено(НомерСерии));
Если ЭтоЗаглушка Тогда
МожноСоздать = МожноСоздать И СоздаватьЗаглушкиСерий;
МожноСоздать = МожноСоздать И СоздаватьЗаглушкиСерий И ЗначениеЗаполнено(ГоденДо);
КонецЕсли;
Если Не ЗначениеЗаполнено(Сер) И МожноСоздать Тогда
Попытка
Если Не ЗначениеЗаполнено(ГоденДо) Тогда
ГоденДо = КонецДня(ДатаСрезаОстатковОбработки());
СтрТ.СерияГоденДо = ГоденДо;
КонецЕсли;
ОбСер = Справочники.СерииНоменклатуры.ПустойОбъект(ВидСер);
Если ИспНомерСерии Тогда
НомерСер = КлючПоискаНомера;
Если ЭтоЗаглушка И СтрНачинаетсяС(ИмяСерии, "Перенос_") Тогда
НомерСер = Сред(ИмяСерии, СтрДлина("Перенос_") + 1);
КонецЕсли;
ОбСер.Номер = НомерСер;
ОбСер.Номер = ?(ЗначениеЗаполнено(НомерСерии), НомерСерии,
?(ЗначениеЗаполнено(ИмяСерии), ИмяСерии, ""));
Иначе
Попытка
ОбСер.Наименование = ИмяСерии;
Исключение
КонецПопытки;
КонецЕсли;
ЗаполнитьОбязательныеРеквизитыСерии(ОбСер, ГоденДо, ВидНом, ЭтоЗаглушка);
ОбСер.Записать();
Сер = ОбСер.Ссылка;
Результат.СозданоСерий = Результат.СозданоСерий + 1;