Обмен серий: учитывать маппинг видов номенклатуры на target (1.3.0.43).
Для ПКО серий добавлен поиск существующей серии по владельцу вида с приоритетом Номер+ГоденДо и fallback по сроку при пустом номере; исключено создание дублей при несовпадении GUID. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -329,6 +329,85 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Подбор существующей серии в целевой ИБ по владельцу вида номенклатуры.
|
||||
// Приоритет:
|
||||
// 1) Вид + Номер + СрокГодности (если номер и срок заполнены)
|
||||
// 2) Вид + Номер (если номер заполнен)
|
||||
// 3) Вид + СрокГодности (если номер пустой и срок заполнен)
|
||||
//
|
||||
// Параметры:
|
||||
// ВладелецСерий - СправочникСсылка.ВидыНоменклатуры
|
||||
// НомерСерии - Строка
|
||||
// СрокГодности - Дата, Неопределено
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// СправочникСсылка.СерииНоменклатуры, Неопределено
|
||||
//
|
||||
Функция РК_НайтиСериюПоВладельцуНомерСроку(ВладелецСерий, НомерСерии, СрокГодности)
|
||||
|
||||
Если Не ЗначениеЗаполнено(ВладелецСерий) Тогда
|
||||
Возврат Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
НомерСерии = СокрЛП(Строка(НомерСерии));
|
||||
СрокЗаполнен = ЗначениеЗаполнено(СрокГодности) И СрокГодности <> '00010101';
|
||||
|
||||
Если Не ПустаяСтрока(НомерСерии) Тогда
|
||||
Запрос = Новый Запрос;
|
||||
Если СрокЗаполнен Тогда
|
||||
Запрос.Текст =
|
||||
"ВЫБРАТЬ ПЕРВЫЕ 1
|
||||
| Серии.Ссылка КАК Ссылка
|
||||
|ИЗ
|
||||
| Справочник.СерииНоменклатуры КАК Серии
|
||||
|ГДЕ
|
||||
| Серии.ВидНоменклатуры = &Владелец
|
||||
| И НЕ Серии.ПометкаУдаления
|
||||
| И Серии.Номер = &Номер
|
||||
| И Серии.ГоденДо = &Срок";
|
||||
Запрос.УстановитьПараметр("Срок", СрокГодности);
|
||||
Иначе
|
||||
Запрос.Текст =
|
||||
"ВЫБРАТЬ ПЕРВЫЕ 1
|
||||
| Серии.Ссылка КАК Ссылка
|
||||
|ИЗ
|
||||
| Справочник.СерииНоменклатуры КАК Серии
|
||||
|ГДЕ
|
||||
| Серии.ВидНоменклатуры = &Владелец
|
||||
| И НЕ Серии.ПометкаУдаления
|
||||
| И Серии.Номер = &Номер";
|
||||
КонецЕсли;
|
||||
Запрос.УстановитьПараметр("Владелец", ВладелецСерий);
|
||||
Запрос.УстановитьПараметр("Номер", НомерСерии);
|
||||
Выборка = Запрос.Выполнить().Выбрать();
|
||||
Если Выборка.Следующий() Тогда
|
||||
Возврат Выборка.Ссылка;
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
Если СрокЗаполнен Тогда
|
||||
Запрос = Новый Запрос;
|
||||
Запрос.Текст =
|
||||
"ВЫБРАТЬ ПЕРВЫЕ 1
|
||||
| Серии.Ссылка КАК Ссылка
|
||||
|ИЗ
|
||||
| Справочник.СерииНоменклатуры КАК Серии
|
||||
|ГДЕ
|
||||
| Серии.ВидНоменклатуры = &Владелец
|
||||
| И НЕ Серии.ПометкаУдаления
|
||||
| И Серии.ГоденДо = &Срок";
|
||||
Запрос.УстановитьПараметр("Владелец", ВладелецСерий);
|
||||
Запрос.УстановитьПараметр("Срок", СрокГодности);
|
||||
Выборка = Запрос.Выполнить().Выбрать();
|
||||
Если Выборка.Следующий() Тогда
|
||||
Возврат Выборка.Ссылка;
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Неопределено;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// &После ДобавитьПКО_Справочник_СерииНоменклатуры.
|
||||
// Подключает обработчик проверки владельца серии при получении из пакета обмена.
|
||||
//
|
||||
@@ -377,6 +456,8 @@
|
||||
КонецЕсли;
|
||||
|
||||
СсылкаДляЖурнала = ?(ДанныеИБ = Неопределено, ПолученныеДанные.ПолучитьСсылкуНового(), ДанныеИБ.Ссылка);
|
||||
НомерСерии = СокрЛП(Строка(ПолученныеДанные.Номер));
|
||||
СрокГодности = ПолученныеДанные.ГоденДо;
|
||||
|
||||
Если ДанныеИБ <> Неопределено Тогда
|
||||
|
||||
@@ -406,33 +487,16 @@
|
||||
Иначе
|
||||
|
||||
ПолученныеДанные.ВидНоменклатуры = КорректныйВладелец;
|
||||
|
||||
Запрос = Новый Запрос;
|
||||
Запрос.Текст =
|
||||
"ВЫБРАТЬ ПЕРВЫЕ 1
|
||||
| Серии.Ссылка КАК Ссылка
|
||||
|ИЗ
|
||||
| Справочник.СерииНоменклатуры КАК Серии
|
||||
|ГДЕ
|
||||
| Серии.ВидНоменклатуры = &Владелец
|
||||
| И НЕ Серии.ПометкаУдаления
|
||||
| И (Серии.Наименование = &Наименование
|
||||
| ИЛИ Серии.Номер = &Номер
|
||||
| И &НомерЗаполнен)";
|
||||
Запрос.УстановитьПараметр("Владелец", КорректныйВладелец);
|
||||
Запрос.УстановитьПараметр("Наименование", ПолученныеДанные.Наименование);
|
||||
Запрос.УстановитьПараметр("Номер", ПолученныеДанные.Номер);
|
||||
Запрос.УстановитьПараметр("НомерЗаполнен", ЗначениеЗаполнено(ПолученныеДанные.Номер));
|
||||
|
||||
Выборка = Запрос.Выполнить().Выбрать();
|
||||
Если Выборка.Следующий()
|
||||
И Выборка.Ссылка <> СсылкаДляЖурнала Тогда
|
||||
СуществующаяСерия = РК_НайтиСериюПоВладельцуНомерСроку(КорректныйВладелец, НомерСерии, СрокГодности);
|
||||
Если ЗначениеЗаполнено(СуществующаяСерия)
|
||||
И СуществующаяСерия <> СсылкаДляЖурнала Тогда
|
||||
|
||||
ТекстОшибки = СтрШаблон(
|
||||
"Серия с наименованием ""%1"" уже существует у владельца %2 (%3), GUID отличается от пакета.",
|
||||
ПолученныеДанные.Наименование,
|
||||
"Серия уже существует у владельца %1 (%2), GUID отличается от пакета. Номер=""%3"", годен до=""%4"".",
|
||||
КорректныйВладелец,
|
||||
Выборка.Ссылка);
|
||||
СуществующаяСерия,
|
||||
НомерСерии,
|
||||
?(ЗначениеЗаполнено(СрокГодности), Формат(СрокГодности, "ДФ=yyyy-MM-dd"), ""));
|
||||
ЗаписатьОшибкуВЖурналРегистрации(СсылкаДляЖурнала, ТекстОшибки, КомпонентыОбмена,
|
||||
НСтр("ru = 'создать серию номенклатуры'"), УровеньЖурналаРегистрации.Предупреждение);
|
||||
ПолученныеДанные = Неопределено;
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
<xr:Item xsi:type="xr:MDObjectRef">Role.РК_ОсновнаяРоль</xr:Item>
|
||||
</DefaultRoles>
|
||||
<Vendor/>
|
||||
<Version>1.3.0.42</Version>
|
||||
<Version>1.3.0.43</Version>
|
||||
<DefaultStyle/>
|
||||
<DefaultLanguage>Language.Русский</DefaultLanguage>
|
||||
<BriefInformation/>
|
||||
|
||||
Reference in New Issue
Block a user