Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 июн 2024, 06:20

Запрос СвязанныеДокументы

Автор AIFrame, 03 ноя 2015, 13:06

0 Пользователей и 1 гость просматривают эту тему.

AIFrame

Может кому пригодится.

Процедура ОбработатьДокумент(Док)
Документ = Док.ПолучитьОбъект();
ТЧ = Документ.РасшифровкаПлатежа;
ТЧ.Сортировать("Сделка Возр");

// Дефайны
ЗаполнитьПо = "";
СуммаИтого = 0;
СписокЗаказов = Новый СписокЗначений;
СписокРеализаций = Новый СписокЗначений;
ЗаказКоличество = 0;
РеализацияКоличество = 0;

РезервКурс = Документ.КурсДокумента;
РезервКратность = Документ.КратностьДокумента;

КолвоСтрок = ТЧ.Количество()-1;

// Чистим на всякий случай и идем дальше
ТЧ.Очистить();

// Ищем подчиненные документы. Нас интересует только Реализация и Заказы
Выборка = ПолучитьРодительскиеДокументы(Документ.Ссылка);
Для Каждого Элемент из Выборка Цикл
ДокументВыборки = Элемент.Значение;
Если ДокументВыборки.Ссылка.Метаданные().Имя = "РеализацияТоваровУслуг" Тогда
ИндексСписка = СписокРеализаций.НайтиПоЗначению(ДокументВыборки.Ссылка);
Если ИндексСписка <> ДокументВыборки.Ссылка И ДокументВыборки.СуммаДокумента > 0 Тогда
РеализацияКоличество = РеализацияКоличество + 1;
СписокРеализаций.Добавить(ДокументВыборки.Ссылка);
КонецЕсли;
КонецЕсли;
Если ДокументВыборки.Ссылка.Метаданные().Имя = "ЗаказПокупателя" Тогда
ИндексСписка = СписокЗаказов.НайтиПоЗначению(ДокументВыборки.Ссылка);
Если ИндексСписка <> ДокументВыборки.Ссылка И ДокументВыборки.СуммаДокумента > 0 Тогда
ЗаказКоличество = ЗаказКоличество + 1;
СписокЗаказов.Добавить(ДокументВыборки.Ссылка);
КонецЕсли;
КонецЕсли;
КонецЦикла;

// Документы нашли. Определяем, как будем заполнять.
Если РеализацияКоличество >= 1 Тогда
ЗаполнитьПо = "Реализация";
Иначе
ЗаполнитьПо = "Заказ";
КонецЕсли;

// Заполняем по реализации
Если ЗаполнитьПо = "Реализация" Тогда
Для Каждого Элемент из СписокРеализаций Цикл
ДокументВыборки = Элемент.Значение;

ТЧСтрока = ТЧ.Добавить();
ТЧСтрока.Сделка = ДокументВыборки.Ссылка;
ТЧСтрока.ДоговорКонтрагента = ДокументВыборки.ДоговорКонтрагента;
ТЧСтрока.СуммаПлатежа = ДокументВыборки.СуммаДокумента;
ТЧСтрока.СуммаВзаиморасчетов = ДокументВыборки.СуммаДокумента;
ТЧСтрока.КурсВзаиморасчетов = ДокументВыборки.КурсВзаиморасчетов;
ТЧСтрока.КратностьВзаиморасчетов = ДокументВыборки.КратностьВзаиморасчетов;

СуммаИтого = СуммаИтого + ДокументВыборки.СуммаДокумента;
РезервКурс = ДокументВыборки.КурсВзаиморасчетов;
РезервКратность = ДокументВыборки.КратностьВзаиморасчетов;
КонецЦикла;
КонецЕсли;

// Заполняем по заказам покупателей
Если ЗаполнитьПо = "Заказ" Тогда
Для Каждого Элемент из СписокЗаказов Цикл
ДокументВыборки = Элемент.Значение;

ТЧСтрока = ТЧ.Добавить();
ТЧСтрока.Сделка = ДокументВыборки.Ссылка;
ТЧСтрока.ДоговорКонтрагента = ДокументВыборки.ДоговорКонтрагента;
ТЧСтрока.СуммаПлатежа = ДокументВыборки.СуммаДокумента;
ТЧСтрока.СуммаВзаиморасчетов = ДокументВыборки.СуммаДокумента;
ТЧСтрока.КурсВзаиморасчетов = ДокументВыборки.КурсВзаиморасчетов;
ТЧСтрока.КратностьВзаиморасчетов = ДокументВыборки.КратностьВзаиморасчетов;

СуммаИтого = СуммаИтого + ДокументВыборки.СуммаДокумента;
РезервКурс = ДокументВыборки.КурсВзаиморасчетов;
РезервКратность = ДокументВыборки.КратностьВзаиморасчетов;
КонецЦикла;
КонецЕсли;

// Правим Курс и Кратность на всякий случай
Если РезервКурс = 0 Тогда
РезервКурс = 1;
КонецЕсли;
Если РезервКратность = 0 Тогда
РезервКратность = 1;
КонецЕсли;

Документ.КурсДокумента = РезервКурс;
Документ.КратностьДокумента = РезервКратность;
Если СуммаИтого > 0 Тогда
Документ.СуммаДокумента = СуммаИтого;
КонецЕсли;
Попытка
Документ.Записать(РежимЗаписиДокумента.Проведение);
Исключение
Сообщить(ОписаниеОшибки());
Сообщить("Документ " + Документ + " - не может быть скорректирован обработкой");
Сообщить("---");
КонецПопытки;

КонецПроцедуры

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск