diff --git a/CHANGELOG.md b/CHANGELOG.md index 7606341..5f13374 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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) ### Серии номенклатуры — подбор по владельцу вида и сроку diff --git a/VERSION b/VERSION index fdf3631..7003719 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.3.0.43 +1.3.0.44 diff --git a/src/CommonModules/МенеджерОбменаЧерезУниверсальныйФормат/Ext/Module.bsl b/src/CommonModules/МенеджерОбменаЧерезУниверсальныйФормат/Ext/Module.bsl index 96fb7aa..2f54a63 100644 --- a/src/CommonModules/МенеджерОбменаЧерезУниверсальныйФормат/Ext/Module.bsl +++ b/src/CommonModules/МенеджерОбменаЧерезУниверсальныйФормат/Ext/Module.bsl @@ -811,4 +811,164 @@ КонецПроцедуры +// Д1.3: ED 1.8 не передаёт ВидЦены / ВидЦеныПоставщика в строках ТЧ (XDTO не меняем). +// После типовой отложенной обработки дозаполняем вид цены из соглашения +// без пересчёта Цена/Сумма (ПоляЗаполнения только вид цены). +// +&После("ВыполнитьПроцедуруМодуляМенеджера") +Процедура РК_ВыполнитьПроцедуруМодуляМенеджера_ДозаполнитьВидЦены(ИмяПроцедуры, Параметры) + + Если Не СтрНачинаетсяС(ИмяПроцедуры, "ОтложеннаяОбработка_") Тогда + Возврат; + КонецЕсли; + + Если Параметры = Неопределено Тогда + Возврат; + КонецЕсли; + + Объект = Неопределено; + Если Не Параметры.Свойство("Объект", Объект) Или Объект = Неопределено Тогда + Возврат; + КонецЕсли; + + КомпонентыОбмена = Неопределено; + Параметры.Свойство("КомпонентыОбмена", КомпонентыОбмена); + + Если Не РК_ЭтоОбменС_Crm3Dev(КомпонентыОбмена) Тогда + Возврат; + КонецЕсли; + + РК_ДозаполнитьВидЦеныВДокументе(Объект); + +КонецПроцедуры + +// Обходит все ТЧ документа; для реквизитов ВидЦены и ВидЦеныПоставщика вызывает дозаполнение. +// +// Параметры: +// Объект - ДокументОбъект - загружаемый документ после отложенной обработки обмена. +// +Процедура РК_ДозаполнитьВидЦеныВДокументе(Объект) Экспорт + + Если Объект = Неопределено Тогда + Возврат; + КонецЕсли; + + МетаОбъекта = Объект.Метаданные(); + + Для Каждого МетаТЧ Из МетаОбъекта.ТабличныеЧасти Цикл + + Если МетаТЧ.Реквизиты.Найти("ВидЦены") <> Неопределено Тогда + РК_ДозаполнитьВидЦеныВТабличнойЧасти(Объект, МетаТЧ.Имя, "ВидЦены"); + КонецЕсли; + + Если МетаТЧ.Реквизиты.Найти("ВидЦеныПоставщика") <> Неопределено Тогда + РК_ДозаполнитьВидЦеныВТабличнойЧасти(Объект, МетаТЧ.Имя, "ВидЦеныПоставщика"); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Дозаполняет пустой вид цены в одной табличной части, если есть строки без значения. +// +Процедура РК_ДозаполнитьВидЦеныВТабличнойЧасти(Объект, ИмяТЧ, ИмяПоляВидЦены) + + ТабличнаяЧасть = Объект[ИмяТЧ]; + Если ТабличнаяЧасть.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + НужноЗаполнить = Ложь; + Для Каждого СтрокаТЧ Из ТабличнаяЧасть Цикл + Если Не ЗначениеЗаполнено(СтрокаТЧ[ИмяПоляВидЦены]) Тогда + НужноЗаполнить = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Если Не НужноЗаполнить Тогда + Возврат; + КонецЕсли; + + Если ИмяПоляВидЦены = "ВидЦены" Тогда + РК_ЗаполнитьВидЦеныПродажиВТЧ(Объект, ТабличнаяЧасть); + ИначеЕсли ИмяПоляВидЦены = "ВидЦеныПоставщика" Тогда + РК_ЗаполнитьВидЦеныПоставщикаВТЧ(Объект, ТабличнаяЧасть); + КонецЕсли; + +КонецПроцедуры + +Процедура РК_ЗаполнитьВидЦеныПродажиВТЧ(Объект, ТабличнаяЧасть) + + МетаОбъекта = Объект.Метаданные(); + Если МетаОбъекта.Реквизиты.Найти("Соглашение") = Неопределено + Или Не ЗначениеЗаполнено(Объект.Соглашение) Тогда + Возврат; + КонецЕсли; + + ПараметрыЗаполнения = Новый Структура; + ПараметрыЗаполнения.Вставить("ПоляЗаполнения", "ВидЦены"); + РК_ДополнитьБазовыеПараметрыЗаполненияЦен(Объект, ПараметрыЗаполнения, Истина); + + Попытка + ЦеныПредприятияЗаполнениеСервер.ЗаполнитьЦены( + ТабличнаяЧасть,, ПараметрыЗаполнения, Новый Структура); + Исключение + // Не блокируем загрузку пакета из-за вида цены. + КонецПопытки; + +КонецПроцедуры + +Процедура РК_ЗаполнитьВидЦеныПоставщикаВТЧ(Объект, ТабличнаяЧасть) + + МетаОбъекта = Объект.Метаданные(); + Если МетаОбъекта.Реквизиты.Найти("Соглашение") = Неопределено + Или Не ЗначениеЗаполнено(Объект.Соглашение) Тогда + Возврат; + КонецЕсли; + + ПараметрыЗаполнения = ЦеныПартнеровЗаполнениеСервер.НовыйПараметрыЗаполненияЗаполнитьЦены(); + ПараметрыЗаполнения.Вставить("ПоляЗаполнения", "ВидЦеныПоставщика"); + РК_ДополнитьБазовыеПараметрыЗаполненияЦен(Объект, ПараметрыЗаполнения, Ложь); + + Попытка + ЦеныПартнеровЗаполнениеСервер.ЗаполнитьЦены( + ТабличнаяЧасть, Неопределено, ПараметрыЗаполнения, Новый Структура); + Исключение + // Не блокируем загрузку пакета из-за вида цены. + КонецПопытки; + +КонецПроцедуры + +// Общие параметры для ЦеныПредприятияЗаполнениеСервер / ЦеныПартнеровЗаполнениеСервер. +// +Процедура РК_ДополнитьБазовыеПараметрыЗаполненияЦен(Объект, ПараметрыЗаполнения, ЭтоПродажа) + + МетаОбъекта = Объект.Метаданные(); + + Если МетаОбъекта.Реквизиты.Найти("Дата") <> Неопределено Тогда + ПараметрыЗаполнения.Вставить("Дата", Объект.Дата); + КонецЕсли; + Если МетаОбъекта.Реквизиты.Найти("Организация") <> Неопределено Тогда + ПараметрыЗаполнения.Вставить("Организация", Объект.Организация); + КонецЕсли; + Если МетаОбъекта.Реквизиты.Найти("Валюта") <> Неопределено Тогда + ПараметрыЗаполнения.Вставить("Валюта", Объект.Валюта); + КонецЕсли; + Если МетаОбъекта.Реквизиты.Найти("Соглашение") <> Неопределено Тогда + ПараметрыЗаполнения.Вставить("Соглашение", Объект.Соглашение); + КонецЕсли; + Если МетаОбъекта.Реквизиты.Найти("НалогообложениеНДС") <> Неопределено Тогда + ПараметрыЗаполнения.Вставить("НалогообложениеНДС", Объект.НалогообложениеНДС); + КонецЕсли; + + Если ЭтоПродажа Тогда + Если МетаОбъекта.Реквизиты.Найти("ВернутьМногооборотнуюТару") <> Неопределено Тогда + ПараметрыЗаполнения.Вставить("ВозвращатьМногооборотнуюТару", Объект.ВернутьМногооборотнуюТару); + КонецЕсли; + ПараметрыЗаполнения.Вставить("РассчитыватьНаборы", Истина); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти diff --git a/src/Configuration.xml b/src/Configuration.xml index 2b34eed..2c02e04 100644 --- a/src/Configuration.xml +++ b/src/Configuration.xml @@ -62,7 +62,7 @@ Role.РК_ОсновнаяРоль - 1.3.0.43 + 1.3.0.44 Language.Русский