Обмен — приём СФ выданного без полей аванса в ТЧ (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)
|
## 1.3.0.46 (2026-07-30)
|
||||||
|
|
||||||
### Обмен — приоритетный ВидНоменклатуры из ра_ВидНоменклатурыCRM326
|
### Обмен — приоритетный ВидНоменклатуры из ра_ВидНоменклатуры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>
|
<xr:Item xsi:type="xr:MDObjectRef">Role.РК_ОсновнаяРоль</xr:Item>
|
||||||
</DefaultRoles>
|
</DefaultRoles>
|
||||||
<Vendor/>
|
<Vendor/>
|
||||||
<Version>1.3.0.46</Version>
|
<Version>1.3.0.47</Version>
|
||||||
<DefaultStyle/>
|
<DefaultStyle/>
|
||||||
<DefaultLanguage>Language.Русский</DefaultLanguage>
|
<DefaultLanguage>Language.Русский</DefaultLanguage>
|
||||||
<BriefInformation/>
|
<BriefInformation/>
|
||||||
@@ -97,6 +97,7 @@
|
|||||||
<CommonModule>РК_ОбщегоНазначенияВызовСервера</CommonModule>
|
<CommonModule>РК_ОбщегоНазначенияВызовСервера</CommonModule>
|
||||||
<CommonModule>ОбщегоНазначенияКлиентСервер</CommonModule>
|
<CommonModule>ОбщегоНазначенияКлиентСервер</CommonModule>
|
||||||
<CommonModule>МенеджерОбменаЧерезУниверсальныйФормат</CommonModule>
|
<CommonModule>МенеджерОбменаЧерезУниверсальныйФормат</CommonModule>
|
||||||
|
<CommonModule>ОбменДаннымиXDTOСервер</CommonModule>
|
||||||
<CommonModule>ПартнерыИКонтрагентыЛокализация</CommonModule>
|
<CommonModule>ПартнерыИКонтрагентыЛокализация</CommonModule>
|
||||||
<XDTOPackage>EnterpriseData_1_8_7</XDTOPackage>
|
<XDTOPackage>EnterpriseData_1_8_7</XDTOPackage>
|
||||||
<XDTOPackage>EnterpriseData_1_8_6</XDTOPackage>
|
<XDTOPackage>EnterpriseData_1_8_6</XDTOPackage>
|
||||||
|
|||||||
Reference in New Issue
Block a user