Загрузка данных
Область СворачиваниеДокументов
// Задачи: сворачивание передач на комиссию + 74011 (возвраты от комиссионера).
&После("ДобавитьПОД_Документ_ВозвратТоваровОтПокупателя")
Процедура к_ДобавитьПОД_Документ_ВозвратТоваровОтПокупателя(ПравилаОбработкиДанных)
// В типовой ПОД на получение нет обработчика ПриОбработке — добавляем имя,
// диспетчер ВыполнитьПроцедуруМодуляМенеджера на неизвестное имя ничего не делает,
// а наш &После его перехватит.
ПравилоОбработки = ПравилаОбработкиДанных.Найти("Документ_ВозвратТоваровОтПокупателя", "Имя");
Если ПравилоОбработки <> Неопределено Тогда
ПравилоОбработки.ПриОбработке = "ПОД_Документ_ВозвратТоваровОтПокупателя_ПриОбработке";
КонецЕсли;
КонецПроцедуры
&Перед("ВыполнитьПроцедуруМодуляМенеджера")
Процедура к_ВыполнитьПроцедуруМодуляМенеджераПеред(ИмяПроцедуры, Параметры)
Настройка = НастройкаПоИмени(ИмяПроцедуры, "ПКО");
Если Настройка = Неопределено Тогда
Возврат;
КонецЕсли;
Если Параметры.ДанныеИБ = Неопределено Тогда
Возврат;
КонецЕсли;
Хранилище = Хранилище(Параметры.КомпонентыОбмена);
Если Не Хранилище.ТекущийВедомый Тогда
Возврат;
КонецЕсли;
Накопленные = Новый Структура;
Для Каждого ИмяТЧ Из Настройка.ТабличныеЧасти Цикл
Накопленные.Вставить(ИмяТЧ, Параметры.ДанныеИБ[ИмяТЧ].Выгрузить());
КонецЦикла;
Хранилище.НакопленныеТЧ = Накопленные;
КонецПроцедуры
&После("ВыполнитьПроцедуруМодуляМенеджера")
Процедура к_ВыполнитьПроцедуруМодуляМенеджераПосле(ИмяПроцедуры, Параметры)
Настройка = НастройкаПоИмени(ИмяПроцедуры, "ПОД");
Если Настройка <> Неопределено Тогда
ПодменитьКлючевыеСвойства(Параметры.ОбъектОбработки, Параметры.КомпонентыОбмена, Настройка);
Возврат;
КонецЕсли;
Настройка = НастройкаПоИмени(ИмяПроцедуры, "ПКО");
Если Настройка <> Неопределено Тогда
ОбъединитьТабличныеЧасти(Параметры.ДанныеИБ, Параметры.КомпонентыОбмена, Настройка);
КонецЕсли;
КонецПроцедуры
&После("ПКО_Документ_РеализацияТоваровУслуг_ПередЗаписьюПолученныхДанных")
Процедура к_ПКО_Документ_РеализацияТоваровУслуг_ПередЗаписьюПолученныхДанных(ПолученныеДанные, ДанныеИБ, КонвертацияСвойств, КомпонентыОбмена)
СнятьПризнакПроведен(ПолученныеДанные, ДанныеИБ,
Перечисления.ВидыОперацийРеализацияТоваров.ПередачаТоваров);
КонецПроцедуры
&После("ПКО_Документ_ВозвратТоваровОтПокупателя_ПередЗаписьюПолученныхДанных")
Процедура к_ПКО_Документ_ВозвратТоваровОтПокупателя_ПередЗаписьюПолученныхДанных(ПолученныеДанные, ДанныеИБ, КонвертацияСвойств, КомпонентыОбмена)
СнятьПризнакПроведен(ПолученныеДанные, ДанныеИБ,
Перечисления.ВидыОперацийВозвратТоваровОтПокупателя.ПереданныеТовары);
КонецПроцедуры
Процедура СнятьПризнакПроведен(ПолученныеДанные, ДанныеИБ, ВидОперации)
Данные = ?(ПолученныеДанные <> Неопределено, ПолученныеДанные, ДанныеИБ);
Если Данные = Неопределено Тогда
Возврат;
КонецЕсли;
Если Данные.ВидОперации = ВидОперации Тогда
Данные.Проведен = Ложь;
КонецЕсли;
КонецПроцедуры
#Область Настройки
Функция НастройкиСворачивания()
Настройки = Новый Массив;
Настройки.Добавить(Новый Структура("Тип, ПОД, ПКО, ВидОперацииXDTO, ТабличныеЧасти, ТЧСуммы",
"РеализацияТоваровУслуг",
"ПОД_Документ_РеализацияТоваровУслуг_ПриОбработке",
"ПКО_Документ_РеализацияТоваровУслуг_ПередЗаписьюПолученныхДанных",
"ПередачаНаКомиссию",
СтрРазделить("Товары,ШтрихкодыУпаковок,СведенияПрослеживаемости", ","),
СтрРазделить("Товары,Услуги,АгентскиеУслуги", ",")));
Настройки.Добавить(Новый Структура("Тип, ПОД, ПКО, ВидОперацииXDTO, ТабличныеЧасти, ТЧСуммы",
"ВозвратТоваровОтПокупателя",
"ПОД_Документ_ВозвратТоваровОтПокупателя_ПриОбработке",
"ПКО_Документ_ВозвратТоваровОтПокупателя_ПередЗаписьюПолученныхДанных",
"ВозвратОтКомиссионера",
СтрРазделить("Товары,СведенияПрослеживаемости", ","),
СтрРазделить("Товары", ",")));
Возврат Настройки;
КонецФункции
Функция НастройкаПоИмени(ИмяПроцедуры, Вид)
Для Каждого Настройка Из НастройкиСворачивания() Цикл
Если Настройка[Вид] = ИмяПроцедуры Тогда
Возврат Настройка;
КонецЕсли;
КонецЦикла;
Возврат Неопределено;
КонецФункции
#КонецОбласти
#Область Реализация
Процедура ПодменитьКлючевыеСвойства(ДанныеXDTO, КомпонентыОбмена, Настройка)
Хранилище = Хранилище(КомпонентыОбмена);
Хранилище.ТекущийВедомый = Ложь;
Если ДанныеXDTO.Количество() = 1 Тогда
Возврат;
КонецЕсли;
// Сворачиваем только нужный вид операции, остальные документы не трогаем (и дату не сдвигаем).
ВидОперации = Неопределено;
Если Не ДанныеXDTO.Свойство("ВидОперации", ВидОперации)
Или ВидОперации = Неопределено
Или ВидОперации.Значение <> Настройка.ВидОперацииXDTO Тогда
Возврат;
КонецЕсли;
КлючГруппы = КлючГруппы(ДанныеXDTO, Настройка.Тип);
Если Не ЗначениеЗаполнено(КлючГруппы) Тогда
Возврат;
КонецЕсли;
Лидер = Хранилище.Лидеры.Получить(КлючГруппы);
Если Лидер = Неопределено Тогда
Лидер = Новый Структура("Ссылка, Номер, Дата",
ДанныеXDTO.КлючевыеСвойства.Ссылка,
ДанныеXDTO.КлючевыеСвойства.Номер,
ДанныеXDTO.КлючевыеСвойства.Дата);
КорневаяСсылка = Неопределено;
Если ДанныеXDTO.Свойство("Ссылка", КорневаяСсылка) Тогда
Лидер.Вставить("КорневаяСсылка", КорневаяСсылка);
КонецЕсли;
Хранилище.Лидеры.Вставить(КлючГруппы, Лидер);
Возврат;
КонецЕсли;
Если Лидер.Свойство("КорневаяСсылка") И ДанныеXDTO.Свойство("Ссылка") Тогда
ДанныеXDTO.Ссылка = Лидер.КорневаяСсылка;
КонецЕсли;
ДанныеXDTO.КлючевыеСвойства.Ссылка = Лидер.Ссылка;
ДанныеXDTO.КлючевыеСвойства.Дата = Лидер.Дата;
ДанныеXDTO.КлючевыеСвойства.Номер = Лидер.Номер;
Хранилище.ТекущийВедомый = Истина;
КонецПроцедуры
Функция КлючГруппы(ДанныеXDTO, ТипДокумента)
Если Не ДанныеXDTO.КлючевыеСвойства.Свойство("Дата") Тогда
Возврат "";
КонецЕсли;
ИННКонтрагента = "";
Контрагент = Неопределено;
Если ДанныеXDTO.Свойство("Контрагент", Контрагент)
И Контрагент <> Неопределено
И Контрагент.Свойство("ИНН") Тогда
ИННКонтрагента = Контрагент.ИНН;
КонецЕсли;
Если ИННКонтрагента = "7704217370" Тогда
Секунда = 1;
ИначеЕсли ИННКонтрагента = "9714053621" Тогда
Секунда = 2;
Иначе
Секунда = 3;
КонецЕсли;
ДанныеXDTO.КлючевыеСвойства.Дата = НачалоДня(ДанныеXDTO.КлючевыеСвойства.Дата) + 36000 + Секунда;
Возврат ТипДокумента + "|"
+ Формат(ДанныеXDTO.КлючевыеСвойства.Дата, "ДФ=yyyyMMdd") + "|"
+ ИННКонтрагента;
КонецФункции
Процедура ОбъединитьТабличныеЧасти(ДанныеИБ, КомпонентыОбмена, Настройка)
Хранилище = Хранилище(КомпонентыОбмена);
Накопленные = Хранилище.НакопленныеТЧ;
Хранилище.НакопленныеТЧ = Неопределено;
Хранилище.ТекущийВедомый = Ложь;
Если ДанныеИБ = Неопределено Или Накопленные = Неопределено Тогда
Возврат;
КонецЕсли;
Для Каждого КлючИЗначение Из Накопленные Цикл
ТЧ = ДанныеИБ[КлючИЗначение.Ключ];
НовыеСтроки = ТЧ.Выгрузить();
ТЧ.Загрузить(КлючИЗначение.Значение);
Для Каждого СтрокаНовая Из НовыеСтроки Цикл
ЗаполнитьЗначенияСвойств(ТЧ.Добавить(), СтрокаНовая);
КонецЦикла;
КонецЦикла;
СуммаДокумента = 0;
Для Каждого ИмяТЧ Из Настройка.ТЧСуммы Цикл
СуммаДокумента = СуммаДокумента
+ УчетНДСПереопределяемый.ПолучитьСуммуДокументаСНДС(ДанныеИБ, ИмяТЧ);
КонецЦикла;
ДанныеИБ.СуммаДокумента = СуммаДокумента;
КонецПроцедуры
Функция Хранилище(КомпонентыОбмена)
ПараметрыКонвертации = КомпонентыОбмена.ПараметрыКонвертации;
Хранилище = Неопределено;
Если Не ПараметрыКонвертации.Свойство("СводныеДокументы", Хранилище)
Или Хранилище = Неопределено Тогда
Хранилище = Новый Структура;
Хранилище.Вставить("Лидеры", Новый Соответствие);
Хранилище.Вставить("НакопленныеТЧ", Неопределено);
Хранилище.Вставить("ТекущийВедомый", Ложь);
ПараметрыКонвертации.Вставить("СводныеДокументы", Хранилище);
КонецЕсли;
Возврат Хранилище;
КонецФункции
#КонецОбласти
#КонецОбласти