diff --git a/CHANGELOG.md b/CHANGELOG.md
index 79dbdab..e88ce25 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,18 @@
---
+## 1.3.0.47 (2026-07-30)
+
+### Обмен — приём СФ выданного без полей аванса в ТЧ
+
+Модуль: `ОбменДаннымиXDTOСервер` (`&ИзменениеИКонтроль` `КонвертацияСвойстваСтруктурыОбъектаXDTO`).
+
+Пакет из **crm3-dev** в `ПлатежноРасчетныеДокументы` передаёт только `ДатаДокумента` / `НомерДокумента`. Целевое ПКО также ждёт поля аванса (`ДатаИсправленияСчетаФактурыНаАванс` и др.). Типовой код при отсутствии свойства писал в `ПриемникДанных.ДополнительныеСвойства`, но у строки ТЧ этого поля нет → ошибка конвертации.
+
+Исправление: фиксировать `СвойстваОтсутствующиеВПолученныхДанных` только если у приёмника есть `ДополнительныеСвойства`.
+
+---
+
## 1.3.0.46 (2026-07-30)
### Обмен — приоритетный ВидНоменклатуры из ра_ВидНоменклатурыCRM326
diff --git a/VERSION b/VERSION
index 20541a7..6116c79 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.3.0.46
+1.3.0.47
diff --git a/src/CommonModules/ОбменДаннымиXDTOСервер.xml b/src/CommonModules/ОбменДаннымиXDTOСервер.xml
new file mode 100644
index 0000000..5dc9f5c
--- /dev/null
+++ b/src/CommonModules/ОбменДаннымиXDTOСервер.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+ Module
+ Extended
+
+
+
+ Adopted
+ ОбменДаннымиXDTOСервер
+
+ 4c8eb34e-0bb6-487a-a2ae-24083b1f6d2e
+ false
+ false
+ true
+ true
+ true
+ false
+
+
+
diff --git a/src/CommonModules/ОбменДаннымиXDTOСервер/Ext/Module.bsl b/src/CommonModules/ОбменДаннымиXDTOСервер/Ext/Module.bsl
new file mode 100644
index 0000000..83c4067
--- /dev/null
+++ b/src/CommonModules/ОбменДаннымиXDTOСервер/Ext/Module.bsl
@@ -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>.'"), ПКС.СвойствоКонфигурации)
+ + Символы.ПС + Символы.ПС + ПредставлениеОшибки;
+ ВызватьИсключение ТекстОшибки;
+ КонецПопытки;
+
+КонецПроцедуры
diff --git a/src/Configuration.xml b/src/Configuration.xml
index 4cb1ca7..e562f96 100644
--- a/src/Configuration.xml
+++ b/src/Configuration.xml
@@ -62,7 +62,7 @@
Role.РК_ОсновнаяРоль
- 1.3.0.46
+ 1.3.0.47
Language.Русский
@@ -97,6 +97,7 @@
РК_ОбщегоНазначенияВызовСервера
ОбщегоНазначенияКлиентСервер
МенеджерОбменаЧерезУниверсальныйФормат
+ ОбменДаннымиXDTOСервер
ПартнерыИКонтрагентыЛокализация
EnterpriseData_1_8_7
EnterpriseData_1_8_6