1.3.1.123: fix журнала при fallback партнёра ED (#67).
Не вызывать ЗаписатьОшибкуВЖурналРегистрации с Неопределено; в предупреждение — meta/results load. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -4,6 +4,13 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## 1.3.1.123 (2026-10-07)
|
||||||
|
|
||||||
|
### Fix: журнал при fallback партнёра ED ([#67](https://git.p7net.ru/rhana/crm3-migration/issues/67) comment-1632)
|
||||||
|
|
||||||
|
- `ЗаписатьОшибкуВЖурналРегистрации` больше не вызывается с `Неопределено` (падение `.Метаданные` при create отсутствующего партнёра).
|
||||||
|
- В предупреждение попадают meta/results `partners/load`; `update_existing=true` чтобы дописать `РК_КодСтаройБазы` при match по имени.
|
||||||
|
|
||||||
## 1.3.1.122 (2026-10-07)
|
## 1.3.1.122 (2026-10-07)
|
||||||
|
|
||||||
### ED: fallback партнёра через Transfer API ([#67](https://git.p7net.ru/rhana/crm3-migration/issues/67))
|
### ED: fallback партнёра через Transfer API ([#67](https://git.p7net.ru/rhana/crm3-migration/issues/67))
|
||||||
|
|||||||
@@ -1336,7 +1336,7 @@
|
|||||||
|
|
||||||
ПартнерСсылка = РК_НайтиПартнераПоКодуСтаройБазы(КодПартнера);
|
ПартнерСсылка = РК_НайтиПартнераПоКодуСтаройБазы(КодПартнера);
|
||||||
Если Не ЗначениеЗаполнено(ПартнерСсылка) Тогда
|
Если Не ЗначениеЗаполнено(ПартнерСсылка) Тогда
|
||||||
ПартнерСсылка = РК_ОбеспечитьПартнераЧерезTransferAPI(КодПартнера, КомпонентыОбмена);
|
ПартнерСсылка = РК_ОбеспечитьПартнераЧерезTransferAPI(КодПартнера, КомпонентыОбмена, Объект);
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
Если Не ЗначениеЗаполнено(ПартнерСсылка) Тогда
|
Если Не ЗначениеЗаполнено(ПартнерСсылка) Тогда
|
||||||
@@ -1381,13 +1381,20 @@
|
|||||||
// Export с исходной ИБ (константа РК_РабочееПодключениеЧерезАПИ) + load через РВС_TransferAPIПартнеры.
|
// Export с исходной ИБ (константа РК_РабочееПодключениеЧерезАПИ) + load через РВС_TransferAPIПартнеры.
|
||||||
// Как sync в transfer_partners.py для одного кода. Контрагентов из пакета не создаём (грузятся ED).
|
// Как sync в transfer_partners.py для одного кода. Контрагентов из пакета не создаём (грузятся ED).
|
||||||
//
|
//
|
||||||
Функция РК_ОбеспечитьПартнераЧерезTransferAPI(КодПартнера, КомпонентыОбмена)
|
// Параметры:
|
||||||
|
// КодПартнера - Строка
|
||||||
|
// КомпонентыОбмена - Структура
|
||||||
|
// ОбъектКонтрагента - СправочникОбъект.Контрагенты, Неопределено — для журнала (нельзя Неопределено в ЗаписатьОшибкуВЖурналРегистрации).
|
||||||
|
//
|
||||||
|
Функция РК_ОбеспечитьПартнераЧерезTransferAPI(КодПартнера, КомпонентыОбмена, ОбъектКонтрагента = Неопределено)
|
||||||
|
|
||||||
КодПартнера = СокрЛП(КодПартнера);
|
КодПартнера = СокрЛП(КодПартнера);
|
||||||
Если ПустаяСтрока(КодПартнера) Тогда
|
Если ПустаяСтрока(КодПартнера) Тогда
|
||||||
Возврат Неопределено;
|
Возврат Неопределено;
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
|
СсылкаДляЖурнала = РК_СсылкаДляЖурналаКонтрагента(ОбъектКонтрагента);
|
||||||
|
|
||||||
РК_ИнициализироватьКешПартнеровПоКоду(КомпонентыОбмена);
|
РК_ИнициализироватьКешПартнеровПоКоду(КомпонентыОбмена);
|
||||||
Если КомпонентыОбмена <> Неопределено
|
Если КомпонентыОбмена <> Неопределено
|
||||||
И КомпонентыОбмена.Свойство("ПараметрыКонвертации")
|
И КомпонентыОбмена.Свойство("ПараметрыКонвертации")
|
||||||
@@ -1413,24 +1420,22 @@
|
|||||||
КонецПопытки;
|
КонецПопытки;
|
||||||
|
|
||||||
Если Не ЗначениеЗаполнено(Подключение) Тогда
|
Если Не ЗначениеЗаполнено(Подключение) Тогда
|
||||||
ЗаписатьОшибкуВЖурналРегистрации(
|
РК_ЗаписатьПредупреждениеПартнераTransferAPI(
|
||||||
Неопределено,
|
СсылкаДляЖурнала,
|
||||||
"РК_РабочееПодключениеЧерезАПИ не заполнено — нельзя выгрузить партнёра "
|
"РК_РабочееПодключениеЧерезАПИ не заполнено — нельзя выгрузить партнёра "
|
||||||
+ КодПартнера + " из исходной ИБ.",
|
+ КодПартнера + " из исходной ИБ.",
|
||||||
КомпонентыОбмена,
|
КомпонентыОбмена,
|
||||||
НСтр("ru = 'загрузить партнёра через Transfer API'"),
|
НСтр("ru = 'загрузить партнёра через Transfer API'"));
|
||||||
УровеньЖурналаРегистрации.Предупреждение);
|
|
||||||
Возврат Неопределено;
|
Возврат Неопределено;
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
Если Метаданные.ОбщиеМодули.Найти("РВС_TransferAPIПартнеры") = Неопределено Тогда
|
Если Метаданные.ОбщиеМодули.Найти("РВС_TransferAPIПартнеры") = Неопределено Тогда
|
||||||
ЗаписатьОшибкуВЖурналРегистрации(
|
РК_ЗаписатьПредупреждениеПартнераTransferAPI(
|
||||||
Неопределено,
|
СсылкаДляЖурнала,
|
||||||
"Модуль РВС_TransferAPIПартнеры недоступен (нужен ws-rhana) — партнёр "
|
"Модуль РВС_TransferAPIПартнеры недоступен (нужен ws-rhana) — партнёр "
|
||||||
+ КодПартнера + " не загружен.",
|
+ КодПартнера + " не загружен.",
|
||||||
КомпонентыОбмена,
|
КомпонентыОбмена,
|
||||||
НСтр("ru = 'загрузить партнёра через Transfer API'"),
|
НСтр("ru = 'загрузить партнёра через Transfer API'"));
|
||||||
УровеньЖурналаРегистрации.Предупреждение);
|
|
||||||
Возврат Неопределено;
|
Возврат Неопределено;
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
@@ -1445,30 +1450,29 @@
|
|||||||
Попытка
|
Попытка
|
||||||
ОтветExport = РК_ОбменСВнешнейБазой.ПартнерыВнешнейБазы(Подключение, ПараметрыExport);
|
ОтветExport = РК_ОбменСВнешнейБазой.ПартнерыВнешнейБазы(Подключение, ПараметрыExport);
|
||||||
Исключение
|
Исключение
|
||||||
ЗаписатьОшибкуВЖурналРегистрации(
|
РК_ЗаписатьПредупреждениеПартнераTransferAPI(
|
||||||
Неопределено,
|
СсылкаДляЖурнала,
|
||||||
"partners/export код=" + КодПартнера + ": " + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()),
|
"partners/export код=" + КодПартнера + ": " + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()),
|
||||||
КомпонентыОбмена,
|
КомпонентыОбмена,
|
||||||
НСтр("ru = 'выгрузить партнёра из исходной ИБ'"),
|
НСтр("ru = 'выгрузить партнёра из исходной ИБ'"));
|
||||||
УровеньЖурналаРегистрации.Предупреждение);
|
|
||||||
Возврат Неопределено;
|
Возврат Неопределено;
|
||||||
КонецПопытки;
|
КонецПопытки;
|
||||||
|
|
||||||
ПартнерыПакета = РК_ЗначениеСвойстваОтвета(ОтветExport, "partners");
|
ПартнерыПакета = РК_ЗначениеСвойстваОтвета(ОтветExport, "partners");
|
||||||
Если ТипЗнч(ПартнерыПакета) <> Тип("Массив") Или ПартнерыПакета.Количество() = 0 Тогда
|
Если ТипЗнч(ПартнерыПакета) <> Тип("Массив") Или ПартнерыПакета.Количество() = 0 Тогда
|
||||||
ЗаписатьОшибкуВЖурналРегистрации(
|
РК_ЗаписатьПредупреждениеПартнераTransferAPI(
|
||||||
Неопределено,
|
СсылкаДляЖурнала,
|
||||||
"partners/export: партнёр с кодом " + КодПартнера + " не найден в исходной ИБ.",
|
"partners/export: партнёр с кодом " + КодПартнера + " не найден в исходной ИБ.",
|
||||||
КомпонентыОбмена,
|
КомпонентыОбмена,
|
||||||
НСтр("ru = 'выгрузить партнёра из исходной ИБ'"),
|
НСтр("ru = 'выгрузить партнёра из исходной ИБ'"));
|
||||||
УровеньЖурналаРегистрации.Предупреждение);
|
|
||||||
Возврат Неопределено;
|
Возврат Неопределено;
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
ПараметрыLoad = Новый Структура;
|
ПараметрыLoad = Новый Структура;
|
||||||
ПараметрыLoad.Вставить("dry_run", Ложь);
|
ПараметрыLoad.Вставить("dry_run", Ложь);
|
||||||
ПараметрыLoad.Вставить("create_missing", Истина);
|
ПараметрыLoad.Вставить("create_missing", Истина);
|
||||||
ПараметрыLoad.Вставить("update_existing", Ложь);
|
// renew old_code даже при match по имени (иначе РК_КодСтаройБазы может не появиться).
|
||||||
|
ПараметрыLoad.Вставить("update_existing", Истина);
|
||||||
ПараметрыLoad.Вставить("bind_contractors", Ложь);
|
ПараметрыLoad.Вставить("bind_contractors", Ложь);
|
||||||
ПараметрыLoad.Вставить("add_contacts", Ложь);
|
ПараметрыLoad.Вставить("add_contacts", Ложь);
|
||||||
ПараметрыLoad.Вставить("old_code_mode", "renew");
|
ПараметрыLoad.Вставить("old_code_mode", "renew");
|
||||||
@@ -1478,12 +1482,11 @@
|
|||||||
МодульПартнеров = ОбщегоНазначения.ОбщийМодуль("РВС_TransferAPIПартнеры");
|
МодульПартнеров = ОбщегоНазначения.ОбщийМодуль("РВС_TransferAPIПартнеры");
|
||||||
ОтветLoad = МодульПартнеров.ВыполнитьЗагрузку(ПараметрыLoad);
|
ОтветLoad = МодульПартнеров.ВыполнитьЗагрузку(ПараметрыLoad);
|
||||||
Исключение
|
Исключение
|
||||||
ЗаписатьОшибкуВЖурналРегистрации(
|
РК_ЗаписатьПредупреждениеПартнераTransferAPI(
|
||||||
Неопределено,
|
СсылкаДляЖурнала,
|
||||||
"partners/load код=" + КодПартнера + ": " + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()),
|
"partners/load код=" + КодПартнера + ": " + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()),
|
||||||
КомпонентыОбмена,
|
КомпонентыОбмена,
|
||||||
НСтр("ru = 'загрузить партнёра в целевую ИБ'"),
|
НСтр("ru = 'загрузить партнёра в целевую ИБ'"));
|
||||||
УровеньЖурналаРегистрации.Предупреждение);
|
|
||||||
Возврат Неопределено;
|
Возврат Неопределено;
|
||||||
КонецПопытки;
|
КонецПопытки;
|
||||||
|
|
||||||
@@ -1493,12 +1496,12 @@
|
|||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
Если Не ЗначениеЗаполнено(ПартнерСсылка) Тогда
|
Если Не ЗначениеЗаполнено(ПартнерСсылка) Тогда
|
||||||
ЗаписатьОшибкуВЖурналРегистрации(
|
РК_ЗаписатьПредупреждениеПартнераTransferAPI(
|
||||||
Неопределено,
|
СсылкаДляЖурнала,
|
||||||
"partners/load: после загрузки партнёр с РК_КодСтаройБазы=" + КодПартнера + " не найден.",
|
"partners/load: после загрузки партнёр с РК_КодСтаройБазы=" + КодПартнера
|
||||||
|
+ " не найден. " + РК_КраткоОтветPartnersLoad(ОтветLoad),
|
||||||
КомпонентыОбмена,
|
КомпонентыОбмена,
|
||||||
НСтр("ru = 'загрузить партнёра в целевую ИБ'"),
|
НСтр("ru = 'загрузить партнёра в целевую ИБ'"));
|
||||||
УровеньЖурналаРегистрации.Предупреждение);
|
|
||||||
Возврат Неопределено;
|
Возврат Неопределено;
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
@@ -1507,6 +1510,83 @@
|
|||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
|
Функция РК_СсылкаДляЖурналаКонтрагента(ОбъектКонтрагента)
|
||||||
|
|
||||||
|
Если ОбъектКонтрагента = Неопределено Тогда
|
||||||
|
Возврат Справочники.Контрагенты.ПустаяСсылка();
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Попытка
|
||||||
|
Если ЗначениеЗаполнено(ОбъектКонтрагента.Ссылка) Тогда
|
||||||
|
Возврат ОбъектКонтрагента.Ссылка;
|
||||||
|
КонецЕсли;
|
||||||
|
Исключение
|
||||||
|
КонецПопытки;
|
||||||
|
|
||||||
|
Попытка
|
||||||
|
СсылкаНового = ОбъектКонтрагента.ПолучитьСсылкуНового();
|
||||||
|
Если ЗначениеЗаполнено(СсылкаНового) Тогда
|
||||||
|
Возврат СсылкаНового;
|
||||||
|
КонецЕсли;
|
||||||
|
Исключение
|
||||||
|
КонецПопытки;
|
||||||
|
|
||||||
|
Возврат Справочники.Контрагенты.ПустаяСсылка();
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// ЗаписатьОшибкуВЖурналРегистрации требует объектную ссылку (.Метаданные) — Неопределено недопустим.
|
||||||
|
//
|
||||||
|
Процедура РК_ЗаписатьПредупреждениеПартнераTransferAPI(СсылкаДляЖурнала, ТекстОшибки, КомпонентыОбмена, ОписаниеДействия)
|
||||||
|
|
||||||
|
Если Не ЗначениеЗаполнено(СсылкаДляЖурнала) Тогда
|
||||||
|
СсылкаДляЖурнала = Справочники.Контрагенты.ПустаяСсылка();
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ЗаписатьОшибкуВЖурналРегистрации(
|
||||||
|
СсылкаДляЖурнала,
|
||||||
|
ТекстОшибки,
|
||||||
|
КомпонентыОбмена,
|
||||||
|
ОписаниеДействия,
|
||||||
|
УровеньЖурналаРегистрации.Предупреждение);
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Функция РК_КраткоОтветPartnersLoad(ОтветLoad)
|
||||||
|
|
||||||
|
Части = Новый Массив;
|
||||||
|
Мета = РК_ЗначениеСвойстваОтвета(ОтветLoad, "meta");
|
||||||
|
Если Мета <> Неопределено Тогда
|
||||||
|
Части.Добавить(СтрШаблон(
|
||||||
|
"meta created=%1 updated=%2 skipped=%3 errors=%4",
|
||||||
|
РК_ЗначениеСвойстваОтвета(Мета, "created", 0),
|
||||||
|
РК_ЗначениеСвойстваОтвета(Мета, "updated", 0),
|
||||||
|
РК_ЗначениеСвойстваОтвета(Мета, "skipped", 0),
|
||||||
|
РК_ЗначениеСвойстваОтвета(Мета, "errors", 0)));
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Результаты = РК_ЗначениеСвойстваОтвета(ОтветLoad, "results");
|
||||||
|
Если ТипЗнч(Результаты) = Тип("Массив") Тогда
|
||||||
|
Индекс = 0;
|
||||||
|
Для Каждого СтрокаРез Из Результаты Цикл
|
||||||
|
Индекс = Индекс + 1;
|
||||||
|
Если Индекс > 3 Тогда
|
||||||
|
Части.Добавить("…");
|
||||||
|
Прервать;
|
||||||
|
КонецЕсли;
|
||||||
|
Части.Добавить(СтрШаблон(
|
||||||
|
"[%1] status=%2 action=%3 message=%4",
|
||||||
|
Индекс,
|
||||||
|
РК_ЗначениеСвойстваОтвета(СтрокаРез, "status", ""),
|
||||||
|
РК_ЗначениеСвойстваОтвета(СтрокаРез, "action", ""),
|
||||||
|
РК_ЗначениеСвойстваОтвета(СтрокаРез, "message", "")));
|
||||||
|
КонецЦикла;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат СтрСоединить(Части, "; ");
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
Процедура РК_ЗапомнитьПартнераВКешеСессии(КомпонентыОбмена, КодПартнера, ПартнерСсылка)
|
Процедура РК_ЗапомнитьПартнераВКешеСессии(КомпонентыОбмена, КодПартнера, ПартнерСсылка)
|
||||||
|
|
||||||
РК_ИнициализироватьКешПартнеровПоКоду(КомпонентыОбмена);
|
РК_ИнициализироватьКешПартнеровПоКоду(КомпонентыОбмена);
|
||||||
|
|||||||
@@ -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.1.122</Version>
|
<Version>1.3.1.123</Version>
|
||||||
<DefaultStyle/>
|
<DefaultStyle/>
|
||||||
<DefaultLanguage>Language.Русский</DefaultLanguage>
|
<DefaultLanguage>Language.Русский</DefaultLanguage>
|
||||||
<BriefInformation/>
|
<BriefInformation/>
|
||||||
|
|||||||
Reference in New Issue
Block a user