Обмен — дозаполнение ВидЦены в строках ТЧ при получении (1.3.0.44, Д1.3).

ED 1.8 не передаёт ВидЦены/ВидЦеныПоставщика в XDTO; после отложенной обработки
дозаполняем вид цены из соглашения без пересчёта цены и суммы.

Refs: crm3-migration/-#8
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
mihailkudravcev
2026-07-21 13:27:35 +03:00
parent 997b7fe110
commit 0ebd01d0ba
4 changed files with 177 additions and 2 deletions
+15
View File
@@ -4,6 +4,21 @@
---
## 1.3.0.44 (2026-07-21)
### Обмен — дозаполнение ВидЦены в строках ТЧ (Д1.3, вариант B)
Модуль: `МенеджерОбменаЧерезУниверсальныйФормат`.
ED 1.8 не передаёт `ВидЦены` / `ВидЦеныПоставщика` в строках табличных частей (XDTO-схема не меняется).
- `&После("ВыполнитьПроцедуруМодуляМенеджера")``РК_ВыполнитьПроцедуруМодуляМенеджера_ДозаполнитьВидЦены` для всех процедур `ОтложеннаяОбработка_*`.
- Универсально обходит все ТЧ документа; для пустых `ВидЦены``ЦеныПредприятияЗаполнениеСервер.ЗаполнитьЦены(ПоляЗаполнения = "ВидЦены")`; для `ВидЦеныПоставщика``ЦеныПартнеровЗаполнениеСервер` с тем же ограничением полей.
- Цена и сумма строк **не пересчитываются** (в отличие от `ЗаполнитьУсловияПродажПоСоглашению(Истина)`).
- Только для узла **«Рабочая CRM3»** (`РК_ЭтоОбменС_Crm3Dev`).
---
## 1.3.0.43 (2026-07-21)
### Серии номенклатуры — подбор по владельцу вида и сроку
+1 -1
View File
@@ -1 +1 @@
1.3.0.43
1.3.0.44
@@ -811,4 +811,164 @@
КонецПроцедуры
// Д1.3: ED 1.8 не передаёт ВидЦены / ВидЦеныПоставщика в строках ТЧ (XDTO не меняем).
// После типовой отложенной обработки дозаполняем вид цены из соглашения
// без пересчёта Цена/Сумма (ПоляЗаполнения только вид цены).
//
&После("ВыполнитьПроцедуруМодуляМенеджера")
Процедура РК_ВыполнитьПроцедуруМодуляМенеджера_ДозаполнитьВидЦены(ИмяПроцедуры, Параметры)
Если Не СтрНачинаетсяС(ИмяПроцедуры, "ОтложеннаяОбработка_") Тогда
Возврат;
КонецЕсли;
Если Параметры = Неопределено Тогда
Возврат;
КонецЕсли;
Объект = Неопределено;
Если Не Параметры.Свойство("Объект", Объект) Или Объект = Неопределено Тогда
Возврат;
КонецЕсли;
КомпонентыОбмена = Неопределено;
Параметры.Свойство("КомпонентыОбмена", КомпонентыОбмена);
Если Не РК_ЭтоОбменС_Crm3Dev(КомпонентыОбмена) Тогда
Возврат;
КонецЕсли;
РК_ДозаполнитьВидЦеныВДокументе(Объект);
КонецПроцедуры
// Обходит все ТЧ документа; для реквизитов ВидЦены и ВидЦеныПоставщика вызывает дозаполнение.
//
// Параметры:
// Объект - ДокументОбъект - загружаемый документ после отложенной обработки обмена.
//
Процедура РК_ДозаполнитьВидЦеныВДокументе(Объект) Экспорт
Если Объект = Неопределено Тогда
Возврат;
КонецЕсли;
МетаОбъекта = Объект.Метаданные();
Для Каждого МетаТЧ Из МетаОбъекта.ТабличныеЧасти Цикл
Если МетаТЧ.Реквизиты.Найти("ВидЦены") <> Неопределено Тогда
РК_ДозаполнитьВидЦеныВТабличнойЧасти(Объект, МетаТЧ.Имя, "ВидЦены");
КонецЕсли;
Если МетаТЧ.Реквизиты.Найти("ВидЦеныПоставщика") <> Неопределено Тогда
РК_ДозаполнитьВидЦеныВТабличнойЧасти(Объект, МетаТЧ.Имя, "ВидЦеныПоставщика");
КонецЕсли;
КонецЦикла;
КонецПроцедуры
// Дозаполняет пустой вид цены в одной табличной части, если есть строки без значения.
//
Процедура РК_ДозаполнитьВидЦеныВТабличнойЧасти(Объект, ИмяТЧ, ИмяПоляВидЦены)
ТабличнаяЧасть = Объект[ИмяТЧ];
Если ТабличнаяЧасть.Количество() = 0 Тогда
Возврат;
КонецЕсли;
НужноЗаполнить = Ложь;
Для Каждого СтрокаТЧ Из ТабличнаяЧасть Цикл
Если Не ЗначениеЗаполнено(СтрокаТЧ[ИмяПоляВидЦены]) Тогда
НужноЗаполнить = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если Не НужноЗаполнить Тогда
Возврат;
КонецЕсли;
Если ИмяПоляВидЦены = "ВидЦены" Тогда
РК_ЗаполнитьВидЦеныПродажиВТЧ(Объект, ТабличнаяЧасть);
ИначеЕсли ИмяПоляВидЦены = "ВидЦеныПоставщика" Тогда
РК_ЗаполнитьВидЦеныПоставщикаВТЧ(Объект, ТабличнаяЧасть);
КонецЕсли;
КонецПроцедуры
Процедура РК_ЗаполнитьВидЦеныПродажиВТЧ(Объект, ТабличнаяЧасть)
МетаОбъекта = Объект.Метаданные();
Если МетаОбъекта.Реквизиты.Найти("Соглашение") = Неопределено
Или Не ЗначениеЗаполнено(Объект.Соглашение) Тогда
Возврат;
КонецЕсли;
ПараметрыЗаполнения = Новый Структура;
ПараметрыЗаполнения.Вставить("ПоляЗаполнения", "ВидЦены");
РК_ДополнитьБазовыеПараметрыЗаполненияЦен(Объект, ПараметрыЗаполнения, Истина);
Попытка
ЦеныПредприятияЗаполнениеСервер.ЗаполнитьЦены(
ТабличнаяЧасть,, ПараметрыЗаполнения, Новый Структура);
Исключение
// Не блокируем загрузку пакета из-за вида цены.
КонецПопытки;
КонецПроцедуры
Процедура РК_ЗаполнитьВидЦеныПоставщикаВТЧ(Объект, ТабличнаяЧасть)
МетаОбъекта = Объект.Метаданные();
Если МетаОбъекта.Реквизиты.Найти("Соглашение") = Неопределено
Или Не ЗначениеЗаполнено(Объект.Соглашение) Тогда
Возврат;
КонецЕсли;
ПараметрыЗаполнения = ЦеныПартнеровЗаполнениеСервер.НовыйПараметрыЗаполненияЗаполнитьЦены();
ПараметрыЗаполнения.Вставить("ПоляЗаполнения", "ВидЦеныПоставщика");
РК_ДополнитьБазовыеПараметрыЗаполненияЦен(Объект, ПараметрыЗаполнения, Ложь);
Попытка
ЦеныПартнеровЗаполнениеСервер.ЗаполнитьЦены(
ТабличнаяЧасть, Неопределено, ПараметрыЗаполнения, Новый Структура);
Исключение
// Не блокируем загрузку пакета из-за вида цены.
КонецПопытки;
КонецПроцедуры
// Общие параметры для ЦеныПредприятияЗаполнениеСервер / ЦеныПартнеровЗаполнениеСервер.
//
Процедура РК_ДополнитьБазовыеПараметрыЗаполненияЦен(Объект, ПараметрыЗаполнения, ЭтоПродажа)
МетаОбъекта = Объект.Метаданные();
Если МетаОбъекта.Реквизиты.Найти("Дата") <> Неопределено Тогда
ПараметрыЗаполнения.Вставить("Дата", Объект.Дата);
КонецЕсли;
Если МетаОбъекта.Реквизиты.Найти("Организация") <> Неопределено Тогда
ПараметрыЗаполнения.Вставить("Организация", Объект.Организация);
КонецЕсли;
Если МетаОбъекта.Реквизиты.Найти("Валюта") <> Неопределено Тогда
ПараметрыЗаполнения.Вставить("Валюта", Объект.Валюта);
КонецЕсли;
Если МетаОбъекта.Реквизиты.Найти("Соглашение") <> Неопределено Тогда
ПараметрыЗаполнения.Вставить("Соглашение", Объект.Соглашение);
КонецЕсли;
Если МетаОбъекта.Реквизиты.Найти("НалогообложениеНДС") <> Неопределено Тогда
ПараметрыЗаполнения.Вставить("НалогообложениеНДС", Объект.НалогообложениеНДС);
КонецЕсли;
Если ЭтоПродажа Тогда
Если МетаОбъекта.Реквизиты.Найти("ВернутьМногооборотнуюТару") <> Неопределено Тогда
ПараметрыЗаполнения.Вставить("ВозвращатьМногооборотнуюТару", Объект.ВернутьМногооборотнуюТару);
КонецЕсли;
ПараметрыЗаполнения.Вставить("РассчитыватьНаборы", Истина);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
+1 -1
View File
@@ -62,7 +62,7 @@
<xr:Item xsi:type="xr:MDObjectRef">Role.РК_ОсновнаяРоль</xr:Item>
</DefaultRoles>
<Vendor/>
<Version>1.3.0.43</Version>
<Version>1.3.0.44</Version>
<DefaultStyle/>
<DefaultLanguage>Language.Русский</DefaultLanguage>
<BriefInformation/>