Обмен — приём СФ выданного без полей аванса в ТЧ (1.3.0.47).
Не писать СвойстваОтсутствующиеВПолученныхДанных в строку ТЧ без ДополнительныеСвойства. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -4,6 +4,18 @@
|
||||
|
||||
---
|
||||
|
||||
## 1.3.0.47 (2026-07-30)
|
||||
|
||||
### Обмен — приём СФ выданного без полей аванса в ТЧ
|
||||
|
||||
Модуль: `ОбменДаннымиXDTOСервер` (`&ИзменениеИКонтроль` `КонвертацияСвойстваСтруктурыОбъектаXDTO`).
|
||||
|
||||
Пакет из **crm3-dev** в `ПлатежноРасчетныеДокументы` передаёт только `ДатаДокумента` / `НомерДокумента`. Целевое ПКО также ждёт поля аванса (`ДатаИсправленияСчетаФактурыНаАванс` и др.). Типовой код при отсутствии свойства писал в `ПриемникДанных.ДополнительныеСвойства`, но у строки ТЧ этого поля нет → ошибка конвертации.
|
||||
|
||||
Исправление: фиксировать `СвойстваОтсутствующиеВПолученныхДанных` только если у приёмника есть `ДополнительныеСвойства`.
|
||||
|
||||
---
|
||||
|
||||
## 1.3.0.46 (2026-07-30)
|
||||
|
||||
### Обмен — приоритетный ВидНоменклатуры из ра_ВидНоменклатурыCRM326
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.20">
|
||||
<CommonModule uuid="392bf65e-0667-4464-ab9f-98e9af6de114">
|
||||
<InternalInfo>
|
||||
<xr:PropertyState>
|
||||
<xr:Property>Module</xr:Property>
|
||||
<xr:State>Extended</xr:State>
|
||||
</xr:PropertyState>
|
||||
</InternalInfo>
|
||||
<Properties>
|
||||
<ObjectBelonging>Adopted</ObjectBelonging>
|
||||
<Name>ОбменДаннымиXDTOСервер</Name>
|
||||
<Comment/>
|
||||
<ExtendedConfigurationObject>4c8eb34e-0bb6-487a-a2ae-24083b1f6d2e</ExtendedConfigurationObject>
|
||||
<Global>false</Global>
|
||||
<ClientManagedApplication>false</ClientManagedApplication>
|
||||
<Server>true</Server>
|
||||
<ExternalConnection>true</ExternalConnection>
|
||||
<ClientOrdinaryApplication>true</ClientOrdinaryApplication>
|
||||
<ServerCall>false</ServerCall>
|
||||
</Properties>
|
||||
</CommonModule>
|
||||
</MetaDataObject>
|
||||
@@ -0,0 +1,162 @@
|
||||
// Исправление падения приёма XDTO: отсутствующие свойства формата в строке ТЧ.
|
||||
// Типовой код пишет в ПриемникДанных.ДополнительныеСвойства, но у строки ТЧ этого поля нет
|
||||
// (типичный кейс: СчетФактураВыданный.ПлатежноРасчетныеДокументы из crm3-dev без полей аванса).
|
||||
|
||||
&ИзменениеИКонтроль("КонвертацияСвойстваСтруктурыОбъектаXDTO")
|
||||
Процедура РК_КонвертацияСвойстваСтруктурыОбъектаXDTO(
|
||||
КомпонентыОбмена,
|
||||
ДанныеXDTO,
|
||||
ДополнительныеСвойства,
|
||||
ПриемникДанных,
|
||||
ПКС,
|
||||
НомерЭтапа = 1,
|
||||
ИмяТЧ = "")
|
||||
// Обрабатывается ПКС где указано только свойство формата - оно используется только при выгрузке.
|
||||
Если СокрЛП(ПКС.СвойствоКонфигурации) = "" Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
ПравилоКонвертацииСвойства = ПКС.ПравилоКонвертацииСвойства;
|
||||
|
||||
ЗначениеСвойства = "";
|
||||
Попытка
|
||||
Если НомерЭтапа = 1 Тогда
|
||||
|
||||
Если Не ЗначениеЗаполнено(ПКС.СвойствоФормата) Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Если ПКС.ОбработкаКлючевогоСвойства
|
||||
И Не ДанныеXDTO.Свойство("ЭтоНаборКлючевыхСвойств") Тогда
|
||||
ИсточникДанных = ДанныеXDTO[КлассКлючевыеСвойства()];
|
||||
Иначе
|
||||
ИсточникДанных = ДанныеXDTO;
|
||||
КонецЕсли;
|
||||
|
||||
СвойствоФормата_Имя = СокрЛП(ПКС.СвойствоФормата);
|
||||
ПозицияТочки = СтрНайти(СвойствоФормата_Имя, ".");
|
||||
// Указано полное имя свойства, входящего в группу общих свойств.
|
||||
Если ПозицияТочки > 0 Тогда
|
||||
ВложенныеСвойства = СтрРазделить(СвойствоФормата_Имя,".",Ложь);
|
||||
ПолучитьЗначениеВложенныхСвойств(ИсточникДанных, ВложенныеСвойства, ЗначениеСвойства);
|
||||
Иначе
|
||||
|
||||
Если НЕ ИсточникДанных.Свойство(СвойствоФормата_Имя, ЗначениеСвойства)
|
||||
И НЕ ПКС.ОбработкаКлючевогоСвойства
|
||||
И НЕ ПКС.ИспользуетсяАлгоритмКонвертации
|
||||
Тогда
|
||||
|
||||
#Удаление
|
||||
Если ПриемникДанных.ДополнительныеСвойства.Свойство("СвойстваОтсутствующиеВПолученныхДанных") Тогда
|
||||
|
||||
ПриемникДанных.ДополнительныеСвойства.СвойстваОтсутствующиеВПолученныхДанных = ПриемникДанных.ДополнительныеСвойства.СвойстваОтсутствующиеВПолученныхДанных + "," + СвойствоФормата_Имя;
|
||||
|
||||
Иначе
|
||||
|
||||
ПриемникДанных.ДополнительныеСвойства.Вставить("СвойстваОтсутствующиеВПолученныхДанных", СвойствоФормата_Имя);
|
||||
|
||||
КонецЕсли;
|
||||
#КонецУдаления
|
||||
#Вставка
|
||||
// === [РК] НАЧАЛО БЛОКА ВСТАВКИ ===
|
||||
// У строки ТЧ нет ДополнительныеСвойства (пакет без опциональных полей формата,
|
||||
// например ДатаИсправленияСчетаФактурыНаАванс из crm3-dev).
|
||||
Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(ПриемникДанных, "ДополнительныеСвойства") Тогда
|
||||
|
||||
Если ПриемникДанных.ДополнительныеСвойства.Свойство("СвойстваОтсутствующиеВПолученныхДанных") Тогда
|
||||
|
||||
ПриемникДанных.ДополнительныеСвойства.СвойстваОтсутствующиеВПолученныхДанных =
|
||||
ПриемникДанных.ДополнительныеСвойства.СвойстваОтсутствующиеВПолученныхДанных + "," + СвойствоФормата_Имя;
|
||||
|
||||
Иначе
|
||||
|
||||
ПриемникДанных.ДополнительныеСвойства.Вставить("СвойстваОтсутствующиеВПолученныхДанных", СвойствоФормата_Имя);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
// === [РК] КОНЕЦ БЛОКА ВСТАВКИ ===
|
||||
#КонецВставки
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ИначеЕсли НомерЭтапа = 2 Тогда
|
||||
|
||||
Если НомерЭтапа = 2 И Не ПКС.ИспользуетсяАлгоритмКонвертации Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
// На 2-м этапе значения свойств получаются из дополнительных свойств объекта полученных данных
|
||||
// и представляют из себя структуру, содержащую инструкцию для конвертации, либо значение XDTO.
|
||||
// Если приемником значения является строка табличной части, то значение свойства располагается
|
||||
// в ДополнительныеСвойства[ИмяТабличнойЧасти][ИндексСтроки].
|
||||
Если ЗначениеЗаполнено(ИмяТЧ) Тогда
|
||||
ИсточникДанных = ДополнительныеСвойства[ИмяТЧ][ПриемникДанных.НомерСтроки - 1];
|
||||
Иначе
|
||||
ИсточникДанных = ДополнительныеСвойства;
|
||||
КонецЕсли;
|
||||
|
||||
Если ИсточникДанных.Свойство(ПКС.СвойствоКонфигурации) Тогда
|
||||
ЗначениеСвойства = ИсточникДанных[ПКС.СвойствоКонфигурации];
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если Не ЗначениеЗаполнено(ЗначениеСвойства) Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
УдалятьСозданныеПоКлючевымСвойствам = КомпонентыОбмена.УдалятьСозданныеПоКлючевымСвойствам;
|
||||
Если ТипЗнч(ЗначениеСвойства) = Тип("Структура")
|
||||
И ЗначениеСвойства.Свойство("ИмяПКО")
|
||||
И ЗначениеСвойства.Свойство("Значение") Тогда
|
||||
|
||||
// Значением является инструкция.
|
||||
Если ЗначениеСвойства.Свойство("УдалятьСозданныеПоКлючевымСвойствам") Тогда
|
||||
УдалятьСозданныеПоКлючевымСвойствам = ЗначениеСвойства.УдалятьСозданныеПоКлючевымСвойствам;
|
||||
КонецЕсли;
|
||||
|
||||
ПравилоКонвертацииСвойства = ЗначениеСвойства.ИмяПКО;
|
||||
ЗначениеСвойства = ЗначениеСвойства.Значение;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если ТипЗнч(ЗначениеСвойства) = Тип("Структура") Тогда
|
||||
Если Не ЗначениеЗаполнено(ПравилоКонвертацииСвойства) Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
ПКПД = КомпонентыОбмена.ПравилаКонвертацииПредопределенныхДанных.Найти(ПравилоКонвертацииСвойства, "ИмяПКПД");
|
||||
Если ПКПД <> Неопределено Тогда
|
||||
|
||||
Значение = ПКПД.КонвертацииЗначенийПриПолучении.Получить(ЗначениеСвойства.Значение);
|
||||
ПриемникДанных[ПКС.СвойствоКонфигурации] = Значение;
|
||||
Возврат;
|
||||
|
||||
Иначе
|
||||
ПравилоКонвертацииСвойства = ПКОПоИмени(КомпонентыОбмена, ПравилоКонвертацииСвойства);
|
||||
КонецЕсли;
|
||||
Иначе
|
||||
// Конвертацию простых свойств выполняем только на 1-м этапе.
|
||||
ПриемникДанных[ПКС.СвойствоКонфигурации] = ЗначениеСвойства;
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
ПравилоКонвертации = Новый Структура("ПравилоКонвертации, УдалятьСозданныеПоКлючевымСвойствам",
|
||||
ПравилоКонвертацииСвойства, УдалятьСозданныеПоКлючевымСвойствам);
|
||||
ДанныеДляЗаписиВИБ = СтруктураОбъектаXDTOВДанныеИБ(КомпонентыОбмена, ЗначениеСвойства, ПравилоКонвертации, "ПолучитьСсылку");
|
||||
|
||||
Если ДанныеДляЗаписиВИБ <> Неопределено Тогда
|
||||
ПриемникДанных[ПКС.СвойствоКонфигурации] = ДанныеДляЗаписиВИБ.Ссылка;
|
||||
КонецЕсли;
|
||||
|
||||
Исключение
|
||||
ПредставлениеОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||||
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка конвертации свойства объекта XDTO, имя свойства: <%1>.'"), ПКС.СвойствоКонфигурации)
|
||||
+ Символы.ПС + Символы.ПС + ПредставлениеОшибки;
|
||||
ВызватьИсключение ТекстОшибки;
|
||||
КонецПопытки;
|
||||
|
||||
КонецПроцедуры
|
||||
@@ -62,7 +62,7 @@
|
||||
<xr:Item xsi:type="xr:MDObjectRef">Role.РК_ОсновнаяРоль</xr:Item>
|
||||
</DefaultRoles>
|
||||
<Vendor/>
|
||||
<Version>1.3.0.46</Version>
|
||||
<Version>1.3.0.47</Version>
|
||||
<DefaultStyle/>
|
||||
<DefaultLanguage>Language.Русский</DefaultLanguage>
|
||||
<BriefInformation/>
|
||||
@@ -97,6 +97,7 @@
|
||||
<CommonModule>РК_ОбщегоНазначенияВызовСервера</CommonModule>
|
||||
<CommonModule>ОбщегоНазначенияКлиентСервер</CommonModule>
|
||||
<CommonModule>МенеджерОбменаЧерезУниверсальныйФормат</CommonModule>
|
||||
<CommonModule>ОбменДаннымиXDTOСервер</CommonModule>
|
||||
<CommonModule>ПартнерыИКонтрагентыЛокализация</CommonModule>
|
||||
<XDTOPackage>EnterpriseData_1_8_7</XDTOPackage>
|
||||
<XDTOPackage>EnterpriseData_1_8_6</XDTOPackage>
|
||||
|
||||
Reference in New Issue
Block a user