Обмен серий: учитывать маппинг видов номенклатуры на 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.3.0.42 (2026-07-15)
|
||||||
|
|
||||||
### Обмен — этапы графика оплаты ЗаказКлиента (Д1.2)
|
### Обмен — этапы графика оплаты ЗаказКлиента (Д1.2)
|
||||||
|
|||||||
@@ -52,7 +52,7 @@
|
|||||||
| **Номенклатура** (новая) | заполнение учёта по виду номенклатуры **целевой** ИБ |
|
| **Номенклатура** (новая) | заполнение учёта по виду номенклатуры **целевой** ИБ |
|
||||||
| **Виды номенклатуры** (существует) | пропуск обновления (сопоставление по GUID сохраняется) |
|
| **Виды номенклатуры** (существует) | пропуск обновления (сопоставление по GUID сохраняется) |
|
||||||
| **Склады** (существует) | пропуск перезаписи реквизитов |
|
| **Склады** (существует) | пропуск перезаписи реквизитов |
|
||||||
| **Серии номенклатуры** | проверка владельца серий по настройкам вида в целевой ИБ |
|
| **Серии номенклатуры** | проверка владельца + подбор по `Номер/ГоденДо` в рамках владельца вида (v1.3.0.43+) |
|
||||||
| **Ставки НДС** | ПКПД: `НДС22`, `НДС22_122` |
|
| **Ставки НДС** | ПКПД: `НДС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 = 'создать серию номенклатуры'"), УровеньЖурналаРегистрации.Предупреждение);
|
НСтр("ru = 'создать серию номенклатуры'"), УровеньЖурналаРегистрации.Предупреждение);
|
||||||
ПолученныеДанные = Неопределено;
|
ПолученныеДанные = Неопределено;
|
||||||
|
|||||||
@@ -62,7 +62,7 @@
|
|||||||
<xr:Item xsi:type="xr:MDObjectRef">Role.РК_ОсновнаяРоль</xr:Item>
|
<xr:Item xsi:type="xr:MDObjectRef">Role.РК_ОсновнаяРоль</xr:Item>
|
||||||
</DefaultRoles>
|
</DefaultRoles>
|
||||||
<Vendor/>
|
<Vendor/>
|
||||||
<Version>1.3.0.42</Version>
|
<Version>1.3.0.43</Version>
|
||||||
<DefaultStyle/>
|
<DefaultStyle/>
|
||||||
<DefaultLanguage>Language.Русский</DefaultLanguage>
|
<DefaultLanguage>Language.Русский</DefaultLanguage>
|
||||||
<BriefInformation/>
|
<BriefInformation/>
|
||||||
|
|||||||
Reference in New Issue
Block a user