@@ -170,14 +170,13 @@
Если ЗначениеЗаполнено(ПолученныеДанные.ВидНоменклатуры) Тогда
Если ЗначениеЗаполнено(ПолученныеДанные.ВидНоменклатуры) Тогда
Справочники.Номенклатура.ЗаполнитьРеквизитыПоВидуНоменклатуры(ПолученныеДанные);
Справочники.Номенклатура.ЗаполнитьРеквизитыПоВидуНоменклатуры(ПолученныеДанные);
КонецЕсли;
КонецЕсли;
Возврат;
Иначе
Если ПолученныеДанные.ДополнительныеСвойства.Свойство("РК_СнимокУчетаНоменклатуры") Тогда
ЗаполнитьЗначенияСвойств(ДанныеИБ, ПолученныеДанные.ДополнительныеСвойства.РК_СнимокУчетаНоменклатуры);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если Не ПолученныеДанные. Дополнительные Свойства.Свойство("РК_СнимокУчетаНоменклатуры") Тогда
РК_ПрименитьВидНоменклатурыCRM326Из Дополнительных Свойств(ПолученныеДанные, ДанныеИБ);
Возврат;
КонецЕсли;
ЗаполнитьЗначенияСвойств(ДанныеИБ, ПолученныеДанные.ДополнительныеСвойства.РК_СнимокУчетаНоменклатуры);
КонецПроцедуры
КонецПроцедуры
@@ -811,26 +810,17 @@
КонецПроцедуры
КонецПроцедуры
// Д1.3: ED 1.8 не передаёт ВидЦены / ВидЦеныПоставщика в строках ТЧ (XDTO не меняем ).
// Д1.3 / issue #10: ВидЦены строк из AdditionalInfo.РК_ Виды ЦенСтрок (не из соглашения ).
// После типовой отложенной обработки дозаполняем вид цены из соглашения
// 1) ПриКонвертацииДанныхXDTO — сохранить карту в ДополнительныеСвойства и ПараметрыКонвертации.
// без пересчёта Цена/Сумма (ПоляЗаполнения только вид цены ).
// 2) ОтложеннаяОбработка_* — применить к ТЧ документа (пустые в источнике остаются пустыми ).
//
//
&После("ВыполнитьПроцедуруМодуляМенеджера")
&После("ВыполнитьПроцедуруМодуляМенеджера")
Процедура РК_ВыполнитьПроцедуруМодуляМенеджера_Дозаполнить ВидЦены (ИмяПроцедуры, Параметры)
Процедура РК_ВыполнитьПроцедуруМодуляМенеджера_Виды ЦенИзAdditionalInfo (ИмяПроцедуры, Параметры)
Если Не СтрНачинаетсяС(ИмяПроцедуры, "ОтложеннаяОбработка_") Тогда
Возврат;
КонецЕсли;
Если Параметры = Неопределено Тогда
Если Параметры = Неопределено Тогда
Возврат;
Возврат;
КонецЕсли;
КонецЕсли;
Объект = Неопределено;
Если Не Параметры.Свойство("Объект", Объект) Или Объект = Неопределено Тогда
Возврат;
КонецЕсли;
КомпонентыОбмена = Неопределено;
КомпонентыОбмена = Неопределено;
Параметры.Свойство("КомпонентыОбмена", КомпонентыОбмена);
Параметры.Свойство("КомпонентыОбмена", КомпонентыОбмена);
@@ -838,135 +828,285 @@
Возврат;
Возврат;
КонецЕсли;
КонецЕсли;
РК_ДозаполнитьВидЦеныВДокументе(Объект);
Если СтрЗаканчиваетсяНа(ИмяПроцедуры, "_ПриКонвертацииДанныхXDTO") Тогда
ДанныеXDTO = Неопределено;
ПолученныеДанные = Неопределено;
Параметры.Свойство("ДанныеXDTO", ДанныеXDTO);
Параметры.Свойство("ПолученныеДанные", ПолученныеДанные);
РК_СохранитьВидыЦенСтрокИзAdditionalInfo(ДанныеXDTO, ПолученныеДанные, КомпонентыОбмена);
РК_СохранитьВидНоменклатурыCRM326ИзAdditionalInfo(ДанныеXDTO, ПолученныеДанные);
ИначеЕсли СтрНачинаетсяС(ИмяПроцедуры, "ОтложеннаяОбработка_") Тогда
Объект = Неопределено;
Если Не Параметры.Свойство("Объект", Объект) Или Объект = Неопределено Тогда
Возврат;
КонецЕсли;
РК_ПрименитьВидыЦенСтрокИзДополнительныхСвойств(Объект, КомпонентыОбмена);
КонецЕсли;
КонецПроцедуры
КонецПроцедуры
// Обходит все ТЧ документа; для рекв изит ов ВидЦены и ВидЦеныПоставщика вызывает доза пол нение.
Процедура РК_Инициал изир оватьКеш Видов ЦенСтрок(Ком понентыОбмена)
Если КомпонентыОбмена = Неопределено Или Не КомпонентыОбмена.Свойство("ПараметрыКонвертации") Тогда
Возврат;
КонецЕсли;
Если Не КомпонентыОбмена.ПараметрыКонвертации.Свойство("РК_ВидыЦенСтрокПоОбъектам") Тогда
КомпонентыОбмена.ПараметрыКонвертации.Вставить("РК_ВидыЦенСтрокПоОбъектам", Новый Соответствие);
КонецЕсли;
КонецПроцедуры
Функция РК_КлючКешаВидовЦенСтрок(Объект)
Попытка
Если ЗначениеЗаполнено(Объект.Ссылка) Тогда
Возврат НРег(XMLСтрока(Объект.Ссылка.УникальныйИдентификатор()));
КонецЕсли;
Исключение
КонецПопытки;
Попытка
СсылкаНового = Объект.ПолучитьСсылкуНового();
Если ЗначениеЗаполнено(СсылкаНового) Тогда
Возврат НРег(XMLСтрока(СсылкаНового.УникальныйИдентификатор()));
КонецЕсли;
Исключение
КонецПопытки;
Возврат "";
КонецФункции
// Копирует РК_ВидыЦенСтрок из AdditionalInfo пакета в ДополнительныеСвойства и кеш сессии обмена.
//
//
// Параметры:
Процедура РК_СохранитьВидыЦенСтрокИзAdditionalInfo(ДанныеXDTO, ПолученныеДанные, КомпонентыОбмена)
// Объект - ДокументОбъект - загружаемый документ после отложенной обработки обмена.
Если ДанныеXDTO = Неопределено Или ПолученныеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
Если Не ДанныеXDTO.Свойство("AdditionalInfo")
Или ТипЗнч(ДанныеXDTO.AdditionalInfo) <> Тип("Структура") Тогда
Возврат;
КонецЕсли;
ВидыЦенСтрок = Неопределено;
Если Не ДанныеXDTO.AdditionalInfo.Свойство("РК_ВидыЦенСтрок", ВидыЦенСтрок)
Или ВидыЦенСтрок = Неопределено Тогда
Возврат;
КонецЕсли;
Попытка
ПолученныеДанные.ДополнительныеСвойства.Вставить("РК_ВидыЦенСтрок", ВидыЦенСтрок);
Исключение
// ПолученныеДанные может быть структурой без ДополнительныеСвойства.
КонецПопытки;
РК_ИнициализироватьКешВидовЦенСтрок(КомпонентыОбмена);
Ключ = РК_КлючКешаВидовЦенСтрок(ПолученныеДанные);
Если ЗначениеЗаполнено(Ключ)
И КомпонентыОбмена <> Неопределено
И КомпонентыОбмена.Свойство("ПараметрыКонвертации")
И КомпонентыОбмена.ПараметрыКонвертации.Свойство("РК_ВидыЦенСтрокПоОбъектам") Тогда
КомпонентыОбмена.ПараметрыКонвертации.РК_ВидыЦенСтрокПоОбъектам.Вставить(Ключ, ВидыЦенСтрок);
КонецЕсли;
КонецПроцедуры
// Проставляет ВидЦены / ВидЦеныПоставщика в строках ТЧ по карте из AdditionalInfo.
//
//
Процедура РК_Дозапол нитьВидЦеныВДокументе(Объект ) Экспорт
Процедура РК_Приме нитьВиды ЦенСтрокИзДополнительныхСвойств(Объект, КомпонентыОбмена = Неопределено ) Экспорт
Если Объект = Неопределено Тогда
Если Объект = Неопределено Тогда
Возврат;
Возврат;
КонецЕсли;
КонецЕсли;
ВидыЦенСтрок = Неопределено;
Попытка
Объект.ДополнительныеСвойства.Свойство("РК_ВидыЦенСтрок", ВидыЦенСтрок);
Исключение
ВидыЦенСтрок = Неопределено;
КонецПопытки;
Если ВидыЦенСтрок = Неопределено И КомпонентыОбмена <> Неопределено Тогда
РК_ИнициализироватьКешВидовЦенСтрок(КомпонентыОбмена);
Ключ = РК_КлючКешаВидовЦенСтрок(Объект);
Если ЗначениеЗаполнено(Ключ)
И КомпонентыОбмена.ПараметрыКонвертации.Свойство("РК_ВидыЦенСтрокПоОбъектам") Тогда
ВидыЦенСтрок = КомпонентыОбмена.ПараметрыКонвертации.РК_ВидыЦенСтрокПоОбъектам.Получить(Ключ);
КонецЕсли;
КонецЕсли;
Если ВидыЦенСтрок = Неопределено Тогда
Возврат;
КонецЕсли;
МетаОбъекта = Объект.Метаданные();
МетаОбъекта = Объект.Метаданные();
Для Каждого МетаТЧ Из МетаОбъекта.ТабличныеЧасти Цикл
Для Каждого ОписаниеСтроки Из ВидыЦенСтрок Цикл
Если МетаТЧ.Реквизиты.Найти("ВидЦены") <> Неопределено Тогда
Если ТипЗнч(ОписаниеСтроки) <> Тип("Структура") Тогда
РК_Дозап олн итьВидЦеныВТабличнойЧасти(Объект, МетаТЧ.Имя, "ВидЦены") ;
Прод олж ить;
КонецЕсли;
КонецЕсли;
Если МетаТЧ.Реквизиты.Найти("ВидЦеныПоставщика") <> Неопределено Тогда
ИмяТЧ = Неопределено;
РК_ДозаполнитьВидЦеныВТабличнойЧасти(Объект, МетаТЧ.Имя, "ВидЦеныПоставщика") ;
НомерСтроки = Неопределено ;
ОписаниеСтроки.Свойство("ТЧ", ИмяТЧ);
ОписаниеСтроки.Свойство("НомерСтроки", НомерСтроки);
Если Не ЗначениеЗаполнено(ИмяТЧ) Или Не ЗначениеЗаполнено(НомерСтроки) Тогда
Продолжить;
КонецЕсли;
МетаТЧ = МетаОбъекта.ТабличныеЧасти.Найти(ИмяТЧ);
Если МетаТЧ = Неопределено Тогда
Продолжить;
КонецЕсли;
ТабличнаяЧасть = Объект[ИмяТЧ];
СтрокаТЧ = Неопределено;
ИндексВТЧ = Неопределено;
Если ОписаниеСтроки.Свойство("ИндексВТЧ", ИндексВТЧ)
И ТипЗнч(ИндексВТЧ) = Тип("Число")
И ИндексВТЧ >= 0
И ИндексВТЧ < ТабличнаяЧасть.Количество() Тогда
СтрокаТЧ = ТабличнаяЧасть[ИндексВТЧ];
КонецЕсли;
Если СтрокаТЧ = Неопределено Тогда
СтрокаТЧ = ТабличнаяЧасть.Найти(НомерСтроки, "НомерСтроки");
КонецЕсли;
Если СтрокаТЧ = Неопределено Тогда
Продолжить;
КонецЕсли;
Если МетаТЧ.Реквизиты.Найти("ВидЦены") <> Неопределено
И ОписаниеСтроки.Свойство("ВидЦены") Тогда
СтрокаТЧ.ВидЦены = РК_НайтиВидЦеныПоОписанию(
ОписаниеСтроки, "ВидЦены", "ВидЦеныИмя", Ложь);
КонецЕсли;
Если МетаТЧ.Реквизиты.Найти("ВидЦеныПоставщика") <> Неопределено
И ОписаниеСтроки.Свойство("ВидЦеныПоставщика") Тогда
СтрокаТЧ.ВидЦеныПоставщика = РК_НайтиВидЦеныПоОписанию(
ОписаниеСтроки, "ВидЦеныПоставщика", "ВидЦеныПоставщикаИмя", Истина);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
КонецПроцедуры
// Дозаполняет пустой вид цены в одной табличной части, если есть строки без значения .
// Разрешает ссылку вида цены: GUID (если объект есть в ИБ), иначе наименование; пусто → пустая ссылка .
//
//
Процедура РК_ДозаполнитьВидЦеныВТабличнойЧасти(Объект , ИмяТЧ , ИмяПоляВидЦены )
Функция РК_НайтиВидЦеныПоОписанию(ОписаниеСтроки , ИмяGUID , ИмяНаименования, ЭтоПоставщика )
ТабличнаяЧасть = Объект[ИмяТЧ];
Если ЭтоПоставщика Тогда
Если ТабличнаяЧасть.Количество() = 0 Тогда
МенеджерВидовЦен = Справочники.ВидыЦенПоставщиков;
Возврат;
Иначе
МенеджерВидовЦен = Справочники.ВидыЦен;
КонецЕсли;
КонецЕсли;
НужноЗаполнить = Ложь ;
GUIDСтрока = "" ;
Для Каждого СтрокаТЧ Из ТабличнаяЧасть Цикл
Наименование = "";
Если Не ЗначениеЗаполнено(СтрокаТЧ[ИмяПоляВидЦены]) Тогда
ОписаниеСтроки.Свойство(ИмяGUID, GUIDСтрока);
НужноЗаполнить = Истина ;
ОписаниеСтроки.Свойство(ИмяНаименования, Наименование) ;
Прервать;
Если ЗначениеЗаполнено(GUIDСтрока) Тогда
Попытка
СсылкаПоGUID = МенеджерВидовЦен.ПолучитьСсылку(Новый УникальныйИдентификатор(GUIDСтрока));
Если ОбщегоНазначения.СсылкаСуществует(СсылкаПоGUID) Тогда
Возврат СсылкаПоGUID;
КонецЕсли;
Исключение
// Некорректный GUID — пробуем наименование.
КонецПопытки;
КонецЕсли;
Если ЗначениеЗаполнено(Наименование) Тогда
СсылкаПоИмени = МенеджерВидовЦен.НайтиПоНаименованию(Наименование, Истина);
Если ЗначениеЗаполнено(СсылкаПоИмени) Тогда
Возврат СсылкаПоИмени;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если Не НужноЗаполнить Тогда
Возврат;
КонецЕсли;
КонецЕсли;
Если ИмяПоляВидЦены = " ВидЦены" Тогда
Возврат Менеджер Видов Цен.ПустаяСсылка();
РК_ЗаполнитьВидЦеныПродажиВТЧ(Объект, ТабличнаяЧасть);
ИначеЕсли ИмяПоляВидЦены = "ВидЦеныПоставщика" Тогда
РК_ЗаполнитьВидЦеныПоставщикаВТЧ(Объект, ТабличнаяЧасть);
КонецЕсли;
КонецПроцедуры
КонецФункции
Процедура РК_ЗаполнитьВидЦеныПродажиВТЧ(Объект, ТабличнаяЧасть)
// Ключ AdditionalInfo для вида номенклатуры CRM3-26 (доп. реквизит ра_ВидНоменклатурыCRM326 в исходной ИБ).
//
Функция РК_КлючAdditionalInfoВидНоменклатурыCRM326()
Возврат "РК_ВидНоменклатурыCRM326";
КонецФункции
// Сохраняет наименование вида номенклатуры из AdditionalInfo пакета в ДополнительныеСвойства номенклатуры.
//
Процедура РК_СохранитьВидНоменклатурыCRM326ИзAdditionalInfo(ДанныеXDTO, ПолученныеДанные)
МетаОбъекта = Объект.Метаданные();
Если ДанныеXDTO = Неопределено Или ПолученныеДанные = Неопределено Тогда
Если МетаОбъекта.Реквизиты.Найти("Соглашение") = Неопределено
Или Не ЗначениеЗаполнено(Объект.Соглашение) Тогда
Возврат;
Возврат;
КонецЕсли;
КонецЕсли;
ПараметрыЗаполнения = Новый Структура;
Если Не ДанныеXDTO.Свойство("AdditionalInfo")
ПараметрыЗаполнения.Вставить("ПоляЗаполнения", "ВидЦены");
Или ТипЗнч(ДанныеXDTO.AdditionalInfo) <> Тип("Структура") Тогда
РК_ДополнитьБазовыеПараметрыЗаполненияЦен(Объект, ПараметрыЗаполнения, Истина) ;
Возврат ;
КонецЕсли;
НаименованиеВида = "";
Если Не ДанныеXDTO.AdditionalInfo.Свойство(РК_КлючAdditionalInfoВидНоменклатурыCRM326(), НаименованиеВида)
Или Не ЗначениеЗаполнено(НаименованиеВида) Тогда
Возврат;
КонецЕсли;
Попытка
Попытка
ЦеныПредприятияЗаполнениеСервер.ЗаполнитьЦены(
ПолученныеДанные.ДополнительныеСвойства.Вставить(РК_КлючAdditionalInfoВидНоменклатурыCRM326(), СокрЛП(Строка(НаименованиеВида)));
ТабличнаяЧасть,, ПараметрыЗаполнения, Новый Структура);
Исключение
Исключение
// Не блокируем загрузку пакета из-за вида цены .
// ПолученныеДанные может быть структурой без ДополнительныеСвойства .
КонецПопытки;
КонецПопытки;
КонецПроцедуры
КонецПроцедуры
Процедура РК_ЗаполнитьВидЦеныПоставщикаВТЧ(Объект, ТабличнаяЧасть)
// Приоритетно сопоставляет ВидНоменклатуры целевой ИБ по наименованию из ра_ВидНоменклатурыCRM326.
// Если значение не передано — остаётся текущий механизм обмена (в т.ч. защита учётных реквизитов).
//
Процедура РК_ПрименитьВидНоменклатурыCRM326ИзДополнительныхСвойств(ПолученныеДанные, ДанныеИБ)
МетаОбъекта = Объект.Метаданные();
Если ПолученныеДанные = Неопределено Тогда
Если МетаОбъекта.Реквизиты.Найти("Соглашение") = Неопределено
Или Не ЗначениеЗаполнено(Объект.Соглашение) Тогда
Возврат;
Возврат;
КонецЕсли;
КонецЕсли;
ПараметрыЗаполнения = ЦеныПартнеровЗаполнениеСервер.НовыйПараметрыЗаполненияЗаполнитьЦены() ;
НаименованиеВида = "" ;
ПараметрыЗаполнения.Вставить("ПоляЗаполнения", "ВидЦеныПоставщика");
РК_ДополнитьБазовыеПараметрыЗаполненияЦен(Объект, ПараметрыЗаполнения, Ложь);
Попытка
Попытка
ЦеныПартнеровЗаполнениеСервер.ЗаполнитьЦены(
Если Не ПолученныеДанные.ДополнительныеСвойства.Свойство(РК_КлючAdditionalInfoВидНоменклатурыCRM326(), НаименованиеВида)
ТабличнаяЧасть, Неопределено, ПараметрыЗаполнения, Новый Структура);
Или Не ЗначениеЗаполнено(НаименованиеВида) Тогда
Возврат;
КонецЕсли;
Исключение
Исключение
// Не блокируем загрузку пакета из-за вида цены.
Возврат;
КонецПопытки;
КонецПопытки;
КонецПроцедуры
ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию(СокрЛП(Строка(НаименованиеВида)), Истина);
Если Не ЗначениеЗаполнено(ВидНоменклатуры) Тогда
// Общие параметры для ЦеныПредприятияЗаполнениеСервер / ЦеныПартнеровЗаполнениеСервер.
Возврат;
//
Процедура РК_ДополнитьБазовыеПараметрыЗаполненияЦен(Объект, ПараметрыЗаполнения, ЭтоПродажа)
МетаОбъекта = Объект.Метаданные();
Если МетаОбъекта.Реквизиты.Найти("Дата") <> Неопределено Тогда
ПараметрыЗаполнения.Вставить("Дата", Объект.Дата);
КонецЕсли;
Если МетаОбъекта.Реквизиты.Найти("Организация") <> Неопределено Тогда
ПараметрыЗаполнения.Вставить("Организация", Объект.Организация);
КонецЕсли;
Если МетаОбъекта.Реквизиты.Найти("Валюта") <> Неопределено Тогда
ПараметрыЗаполнения.Вставить("Валюта", Объект.Валюта);
КонецЕсли;
Если МетаОбъекта.Реквизиты.Найти("Соглашение") <> Неопределено Тогда
ПараметрыЗаполнения.Вставить("Соглашение", Объект.Соглашение);
КонецЕсли;
Если МетаОбъекта.Реквизиты.Найти("НалогообложениеНДС") <> Неопределено Тогда
ПараметрыЗаполнения.Вставить("НалогообложениеНДС", Объект.НалогообложениеНДС);
КонецЕсли;
КонецЕсли;
Если ЭтоПродажа Тогда
ПолученныеДанные.ВидНоменклатуры = ВидНоменклатуры;
Если МетаОбъекта.Реквизиты.Найти("ВернутьМногооборотнуюТару") <> Неопределено Тогда
ПараметрыЗаполнения.Вставить("ВозвращатьМногооборотнуюТару", Объект.ВернутьМногооборотнуюТару);
Если ДанныеИБ <> Неопределено Тогда
КонецЕсли ;
ДанныеИБ.ВидНоменклатуры = ВидНоменклатуры ;
ПараметрыЗаполнения.Вставить("РассчитыватьНаборы", Истина);
Иначе
Справочники.Номенклатура.ЗаполнитьРеквизитыПоВидуНоменклатуры(ПолученныеДанные);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
КонецПроцедуры