Обмен серий: учитывать маппинг видов номенклатуры на target (1.3.0.43).
Для ПКО серий добавлен поиск существующей серии по владельцу вида с приоритетом Номер+ГоденДо и fallback по сроку при пустом номере; исключено создание дублей при несовпадении GUID. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -4,6 +4,24 @@
|
||||
|
||||
---
|
||||
|
||||
## 1.3.0.43 (2026-07-21)
|
||||
|
||||
### Серии номенклатуры — подбор по владельцу вида и сроку
|
||||
|
||||
Модуль: `МенеджерОбменаЧерезУниверсальныйФормат`.
|
||||
|
||||
- Для ПКО `Справочник_СерииНоменклатуры` добавлен подбор существующей серии с учетом
|
||||
владельца серий вида номенклатуры в целевой ИБ:
|
||||
- `ВладелецВида + Номер + ГоденДо`,
|
||||
- `ВладелецВида + Номер`,
|
||||
- при пустом номере: `ВладелецВида + ГоденДо`.
|
||||
- Поиск теперь опирается на маппинг видов номенклатуры на target (через
|
||||
`РК_ВладелецСерийДляВидаНоменклатуры`), что снимает конфликт, когда вид в source и target различается.
|
||||
- При найденной серии с другим GUID создается предупреждение и запись из пакета пропускается
|
||||
(без создания дубликата).
|
||||
|
||||
---
|
||||
|
||||
## 1.3.0.42 (2026-07-15)
|
||||
|
||||
### Обмен — этапы графика оплаты ЗаказКлиента (Д1.2)
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
| **Номенклатура** (новая) | заполнение учёта по виду номенклатуры **целевой** ИБ |
|
||||
| **Виды номенклатуры** (существует) | пропуск обновления (сопоставление по GUID сохраняется) |
|
||||
| **Склады** (существует) | пропуск перезаписи реквизитов |
|
||||
| **Серии номенклатуры** | проверка владельца серий по настройкам вида в целевой ИБ |
|
||||
| **Серии номенклатуры** | проверка владельца + подбор по `Номер/ГоденДо` в рамках владельца вида (v1.3.0.43+) |
|
||||
| **Ставки НДС** | ПКПД: `НДС22`, `НДС22_122` |
|
||||
|
||||
Защищаемые реквизиты номенклатуры: `ВидНоменклатуры`, `ОсобенностьУчета`, `ТипНоменклатуры`, `ИспользованиеХарактеристик`, `ВладелецСерий`, `ВладелецХарактеристик`, `ГруппаФинансовогоУчета`, `СкладскаяГруппа`.
|
||||
|
||||
@@ -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