Корректировка задолженности / Модуль объекта

файл
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ОбработчикиСобытий

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

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

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
	
	Если ТипЗнч(ДанныеЗаполнения) = Тип("Структура") 
		И ДанныеЗаполнения.Свойство("АктОРасхождениях") Тогда
		
		ЗаполнитьНаОснованииАктаОРасхождениях(ДанныеЗаполнения);
		
	ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("Структура") 
		И ДанныеЗаполнения.Свойство("Претензия") Тогда

		ЗаполнитьНаОснованииПретензии(ДанныеЗаполнения);

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

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

Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
	
	МассивНепроверяемыхРеквизитов = Новый Массив;
	
	Если РасчетыМеждуОрганизациями Тогда
		МассивНепроверяемыхРеквизитов.Добавить("Задолженность.Партнер");
	КонецЕсли;
	
	Если ДоходыРасходыАктивыПассивы.Количество() = 1 Тогда
		МассивНепроверяемыхРеквизитов.Добавить("ДоходыРасходыАктивыПассивы.Сумма");
		МассивНепроверяемыхРеквизитов.Добавить("ДоходыРасходыАктивыПассивы.Валюта");
	КонецЕсли;
		
	ИсправлениеДокументов.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты);
	
	ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, МассивНепроверяемыхРеквизитов);
	
	Если ЗначениеЗаполнено(Организация) И ЗначениеЗаполнено(Контрагент) И (Организация=Контрагент) Тогда
		Текст = НСтр("ru='Организация и %Контрагент% должны различаться.'");
		
		ТипЗадолженности = ?(ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.СписаниеКредиторскойЗадолженности,
												Перечисления.ТипыЗадолженности.Кредиторская,
												Перечисления.ТипыЗадолженности.Дебиторская);
		
		Текст = СтрЗаменить(Текст,"%Контрагент%",Перечисления.ТипыЗадолженности.СинонимКонтрагента(ТипЗадолженности));
		ОбщегоНазначения.СообщитьПользователю(Текст,ЭтотОбъект,"Контрагент",,Отказ);
	КонецЕсли;
	
	Если ДоходыРасходыАктивыПассивы.Количество() > 1
		И Задолженность.Итог("Сумма") <> ДоходыРасходыАктивыПассивы.Итог("Сумма") Тогда
		Текст = НСтр("ru='Итоговая сумма по статьям не совпадает с суммой корректируемой задолженности.'");
		ОбщегоНазначения.СообщитьПользователю(Текст,ЭтотОбъект,,,Отказ);
	КонецЕсли;
	
	ПараметрыВыбораСтатейИАналитик = Документы.КорректировкаЗадолженности.ПараметрыВыбораСтатейИАналитик(ХозяйственнаяОперация, КорреспонденцияСДоходами);
	ДоходыИРасходыСервер.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты, ПараметрыВыбораСтатейИАналитик);
	
	КорректировкаЗадолженностиЛокализация.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты);
	
	СтатьиБезРазбиения = ДополнительныеСвойства.Свойство("СтатьиБезРазбиения") И ДополнительныеСвойства.СтатьиБезРазбиения;
	Если СтатьиБезРазбиения Тогда
		ПроверитьЗаполнениеСтатей(
			ЭтотОбъект, ПроверяемыеРеквизиты, "ДоходыРасходыАктивыПассивы", ДополнительныеСвойства.ЭлементыСтатьи, Отказ);
	КонецЕсли;

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

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
	
	Если ОбменДанными.Загрузка Тогда
		Возврат;
	КонецЕсли;
	
	ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект);
	
	ИсправлениеДокументов.ПередЗаписью(ЭтотОбъект, Отказ, РежимЗаписи, РежимПроведения);
	
	ПроведениеДокументов.ПередЗаписьюДокумента(ЭтотОбъект, РежимЗаписи, РежимПроведения);
	Если РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда		
		
		Если ДоходыРасходыАктивыПассивы.Количество() = 1 И Задолженность.Количество() > 0 Тогда
			ДоходыРасходыАктивыПассивы[0].Валюта = Задолженность[0].ВалютаВзаиморасчетов;
			ДоходыРасходыАктивыПассивы[0].Сумма = Задолженность.Итог("Сумма");
		КонецЕсли;
		
		Если Задолженность.Количество() = 1 И ДоходыРасходыАктивыПассивы.Количество() > 1 Тогда
			Задолженность[0].ВалютаВзаиморасчетов = ДоходыРасходыАктивыПассивы[0].Валюта;
			Задолженность[0].Сумма = ДоходыРасходыАктивыПассивы.Итог("Сумма");
		КонецЕсли;
		
		// Заполнение валюты взаиморасчетов если выключена ФО "ИспользоватьНесколькоВалют"
		Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоВалют") Тогда
			ВалютаВзаиморасчетов = Константы.ВалютаУправленческогоУчета.Получить();
			Для Каждого СтрокаТЧ Из Задолженность Цикл
				Если НЕ ЗначениеЗаполнено(СтрокаТЧ.ВалютаВзаиморасчетов) Тогда
					СтрокаТЧ.ВалютаВзаиморасчетов = ВалютаВзаиморасчетов;
				КонецЕсли;
			КонецЦикла;
			Для Каждого СтрокаТЧ Из ДоходыРасходыАктивыПассивы Цикл
				Если НЕ ЗначениеЗаполнено(СтрокаТЧ.Валюта) Тогда
					СтрокаТЧ.Валюта = ВалютаВзаиморасчетов;
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;
		
	КонецЕсли;
	
	ПараметрыВыбораСтатейИАналитик = Документы.КорректировкаЗадолженности.ПараметрыВыбораСтатейИАналитик(ХозяйственнаяОперация, КорреспонденцияСДоходами);
	ДоходыИРасходыСервер.ПередЗаписью(ЭтотОбъект, ПараметрыВыбораСтатейИАналитик);
	
	
	Если Задолженность.Количество() > 0 Тогда
		ОбщегоНазначенияУТ.ЗаполнитьИдентификаторыДокумента(ЭтотОбъект, "Задолженность");	
	КонецЕсли;
	
	Если ДоходыРасходыАктивыПассивы.Количество() > 0 Тогда
		ОбщегоНазначенияУТ.ЗаполнитьИдентификаторыДокумента(ЭтотОбъект, "ДоходыРасходыАктивыПассивы");
	КонецЕсли;
	
	КорректировкаЗадолженностиЛокализация.ПередЗаписью(ЭтотОбъект, Отказ, РежимЗаписи, РежимПроведения);
	
	Если ЭтоНачисление Тогда
		Для Каждого СтрокаТЧ Из Задолженность Цикл
			Если Не ЗначениеЗаполнено(СтрокаТЧ.ДатаПлатежа)
				И (ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.НачислениеДебиторскойЗадолженности
					И СтрокаТЧ.ТипРасчетов = Перечисления.ТипыРасчетовСПартнерами.РасчетыСКлиентом
					Или ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.НачислениеКредиторскойЗадолженности
					И СтрокаТЧ.ТипРасчетов = Перечисления.ТипыРасчетовСПартнерами.РасчетыСПоставщиком) Тогда
				СтрокаТЧ.ДатаПлатежа = Дата;
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
	
КонецПроцедуры

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
	
	ПроведениеДокументов.ОбработкаПроведенияДокумента(ЭтотОбъект, Отказ);
	КорректировкаЗадолженностиЛокализация.ОбработкаПроведения(ЭтотОбъект, Отказ, РежимПроведения);
	
КонецПроцедуры

Процедура ОбработкаУдаленияПроведения(Отказ)
	
	ПроведениеДокументов.ОбработкаУдаленияПроведенияДокумента(ЭтотОбъект, Отказ);
	КорректировкаЗадолженностиЛокализация.ОбработкаУдаленияПроведения(ЭтотОбъект, Отказ);
	
КонецПроцедуры

Процедура ПриЗаписи(Отказ)
	
	Если ОбменДанными.Загрузка Тогда
		Возврат;
	КонецЕсли;
	
	ПроведениеДокументов.ПриЗаписиДокумента(ЭтотОбъект, Отказ);
	
	КорректировкаЗадолженностиЛокализация.ПриЗаписи(ЭтотОбъект, Отказ);
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

#Область ИнициализацияИЗаполнение

Процедура ЗаполнитьНаОснованииАктаОРасхождениях(ДанныеЗаполнения)

	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	АктОРасхожденияхПослеПриемки.Организация КАК Организация,
	|	АктОРасхожденияхПослеПриемки.Подразделение КАК Подразделение,
	|	&ОснованиеАкта КАК Основание,
	|	АктОРасхожденияхПослеПриемки.Ссылка КАК АктОРасхожденияхОснование,
	|	АктОРасхожденияхПослеПриемки.Валюта КАК Валюта,
	|	АктОРасхожденияхПослеПриемки.Партнер КАК Партнер,
	|	АктОРасхожденияхПослеПриемки.Контрагент КАК Контрагент
	|ИЗ
	|	Документ.АктОРасхожденияхПослеПриемки КАК АктОРасхожденияхПослеПриемки
	|ГДЕ
	|	АктОРасхожденияхПослеПриемки.Ссылка = &АктОРасхождениях
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ЕСТЬNULL(СУММА(АктОРасхожденияхПослеПриемкиТовары.СуммаПоДокументу - АктОРасхожденияхПослеПриемкиТовары.Сумма), 0) КАК Сумма
	|ИЗ
	|	Документ.АктОРасхожденияхПослеПриемки.Товары КАК АктОРасхожденияхПослеПриемкиТовары
	|ГДЕ
	|	АктОРасхожденияхПослеПриемкиТовары.Ссылка = &АктОРасхождениях
	|	И АктОРасхожденияхПослеПриемкиТовары.ДокументОснование = &ОснованиеАкта
	|	И АктОРасхожденияхПослеПриемкиТовары.СуммаПоДокументу - АктОРасхожденияхПослеПриемкиТовары.Сумма > 0
	|	И АктОРасхожденияхПослеПриемкиТовары.ПоВинеСтороннейКомпании
	|	И АктОРасхожденияхПослеПриемкиТовары.Действие = ЗНАЧЕНИЕ(Перечисление.ВариантыДействийПоРасхождениямВАктеПослеПриемки.ОтнестиНедостачуНаПрочиеРасходы)
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ ПЕРВЫЕ 1
	|	ОбъектыРасчетов.Ссылка КАК Ссылка
	|ИЗ
	|	Справочник.Претензии КАК Претензии
	|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ОбъектыРасчетов КАК ОбъектыРасчетов
	|		ПО (Претензии.Ссылка = (ВЫРАЗИТЬ(ОбъектыРасчетов.Объект КАК Справочник.Претензии)))
	|			И НЕ ОбъектыРасчетов.ПометкаУдаления
	|ГДЕ
	|	Претензии.Основание = &ОснованиеАкта
	|	И НЕ Претензии.ПометкаУдаления";
	
	Запрос.УстановитьПараметр("АктОРасхождениях", ДанныеЗаполнения.АктОРасхождениях);
	Запрос.УстановитьПараметр("ОснованиеАкта", ДанныеЗаполнения.ОснованиеАкта);
	
	Результат = Запрос.ВыполнитьПакет();
	ВыборкаШапка = Результат[0].Выбрать();
	
	Если ВыборкаШапка.Следующий() Тогда
		ЗаполнитьЗначенияСвойств(ЭтотОбъект, ВыборкаШапка);
	Иначе
		Возврат;
	КонецЕсли;
	
	ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.СписаниеДебиторскойЗадолженности;
	
	ВыборкаСумма = Результат[1].Выбрать();
	ВыборкаПретензии = Результат[2].Выбрать();
	Если ВыборкаСумма.Следующий() Тогда
		Если ВыборкаСумма.Сумма > 0 Тогда
			НоваяСтрока = Задолженность.Добавить();
			НоваяСтрока.ВалютаВзаиморасчетов = ВыборкаШапка.Валюта;
			НоваяСтрока.Сумма = ВыборкаСумма.Сумма;
			НоваяСтрока.ТипРасчетов = Перечисления.ТипыРасчетовСПартнерами.РасчетыСПоставщиком;
			НоваяСтрока.Партнер = ВыборкаШапка.Партнер;
			Если ВыборкаПретензии.Следующий() Тогда 
				НоваяСтрока.ОбъектРасчетов = ВыборкаПретензии.Ссылка;
				ЭтоНачисление = Истина;    
				Контрагент = ВыборкаШапка.Контрагент;
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

Процедура ЗаполнитьНаОснованииПретензии(ДанныеЗаполнения)

	Запрос = Новый Запрос;
	Запрос.Текст = "
	|ВЫБРАТЬ
	|	Претензия.Организация				КАК Организация,
	|	Претензия.Контрагент				КАК Контрагент,
	|	Претензия.Партнер					КАК Партнер,
	|	Претензия.ВиновноеПодразделение		КАК Подразделение,
	|	Претензия.ОбъектРасчетов			КАК ОбъектРасчетов,
	|	Претензия.Валюта					КАК ВалютаВзаиморасчетов,
	|	Претензия.Сумма						КАК Сумма
	|ИЗ
	|	Справочник.Претензии КАК Претензия
	|ГДЕ
	|	Претензия.Ссылка = &Претензия
	|";
	
	Запрос.УстановитьПараметр("Претензия", ДанныеЗаполнения.Претензия);
	
	Результат = Запрос.Выполнить();
	ВыборкаШапка = Результат.Выбрать();
	
	Если ВыборкаШапка.Следующий() Тогда
		ЗаполнитьЗначенияСвойств(ЭтотОбъект, ВыборкаШапка);
	Иначе
		Возврат;
	КонецЕсли;
	
	
	НоваяСтрока = Задолженность.Добавить();
	ЗаполнитьЗначенияСвойств(НоваяСтрока, ВыборкаШапка);
	НоваяСтрока.ТипРасчетов = Перечисления.ТипыРасчетовСПартнерами.РасчетыСПоставщиком;
	
КонецПроцедуры

Процедура ИнициализироватьДокумент(ДанныеЗаполнения = Неопределено)
	
	Организация = ЗначениеНастроекПовтИсп.ПолучитьОрганизациюПоУмолчанию(Организация);
	Автор = Пользователи.ТекущийПользователь();
	
КонецПроцедуры

Процедура ЗаполнитьПоСтруктуре(ДанныеЗаполнения)
	
	Если ДанныеЗаполнения.Свойство("ХозяйственнаяОперация") Тогда
		ХозяйственнаяОперация = ДанныеЗаполнения.ХозяйственнаяОперация;
		ЭтоНачисление = ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.НачислениеДебиторскойЗадолженности
			ИЛИ ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.НачислениеКредиторскойЗадолженности;
		КорреспонденцияСДоходами = ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.СписаниеКредиторскойЗадолженности;
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

Процедура ПроверитьЗаполнениеСтатей(ДокументОбъект, ПроверяемыеРеквизиты, ИмяТЧ, Представления, Отказ) Экспорт
	
	Если Не ДокументОбъект[ИмяТЧ].Количество() Тогда
		Возврат;
	КонецЕсли;
	
	МассивНепроверяемыхРеквизитов = Новый Массив;
	
	ТабличныеЧасти = ДокументОбъект.Метаданные().ТабличныеЧасти;
	ТабЧастьДокумента = ТабличныеЧасти[ИмяТЧ];
	
	ШаблонОшибки = НСтр("ru = 'Поле ""%1"" не заполнено'");
	
	Для Каждого ПроверяемыйРеквизит Из ПроверяемыеРеквизиты Цикл
		
		Если СтрНайти(ПроверяемыйРеквизит, ИмяТЧ) = 0 Тогда
			Продолжить;
		КонецЕсли;
		
		ПозТочки = СтрНайти(ПроверяемыйРеквизит, ".");
		Если ПозТочки = 0 Тогда
			Продолжить;
		КонецЕсли;
		
		ИмяРеквизита = Сред(ПроверяемыйРеквизит, ПозТочки + 1);
		ИмяЭлемента = ТабЧастьДокумента.Реквизиты[ИмяРеквизита].Синоним;
		Если Представления.Свойство(ИмяРеквизита) Тогда
			ИмяЭлемента = Представления[ИмяРеквизита];
		КонецЕсли;
		
		Если Не ЗначениеЗаполнено(ДокументОбъект[ИмяТЧ][0][ИмяРеквизита]) Тогда
			
			ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
				СтрШаблон(ШаблонОшибки, ИмяЭлемента),
				,
				"Элементы." + Представления.ЭлементТЧ + ".ТекущиеДанные." + ИмяРеквизита,
				,
				Отказ);
		КонецЕсли;
		
		МассивНепроверяемыхРеквизитов.Добавить(ПроверяемыйРеквизит);
	КонецЦикла;
	
	ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(
		ПроверяемыеРеквизиты,
		МассивНепроверяемыхРеквизитов);

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

Функция ОстатокЗадолженностиПоОбъектуРасчетов(ДанныеЗаполнения)
	
	ОбъектыРасчетов = ОбъектыРасчетовСервер.ОбъектРасчетовИзСсылки(ДанныеЗаполнения);
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	Остатки.ТипРасчетов КАК ТипРасчетов,
	|	Остатки.Партнер КАК Партнер,
	|	Остатки.ОбъектРасчетов КАК ОбъектРасчетов,
	|	Остатки.Валюта КАК ВалютаВзаиморасчетов,
	|	СУММА(Остатки.Сумма) КАК Сумма
	|ИЗ
	|	(ВЫБРАТЬ
	|		ОбъектыРасчетов.ТипРасчетов КАК ТипРасчетов,
	|		ОбъектыРасчетов.Партнер КАК Партнер,
	|		ОбъектыРасчетов.Ссылка КАК ОбъектРасчетов,
	|		ОбъектыРасчетов.Валюта КАК Валюта,
	|		0 КАК Сумма
	|	ИЗ
	|		Справочник.ОбъектыРасчетов КАК ОбъектыРасчетов
	|	ГДЕ
	|		ОбъектыРасчетов.Ссылка В(&ОбъектРасчетов)
	|
	|	ОБЪЕДИНИТЬ ВСЕ
	|
	|	ВЫБРАТЬ
	|		ЗНАЧЕНИЕ(Перечисление.ТипыРасчетовСПартнерами.РасчетыСПоставщиком) КАК ТипРасчетов,
	|		РасчетыСПартнерамиОстатки.АналитикаУчетаПоПартнерам.Партнер КАК Партнер,
	|		РасчетыСПартнерамиОстатки.ОбъектРасчетов КАК ОбъектРасчетов,
	|		РасчетыСПартнерамиОстатки.Валюта КАК ВалютаВзаиморасчетов,
	|		-РасчетыСПартнерамиОстатки.СуммаОстаток КАК Сумма
	|	ИЗ
	|		РегистрНакопления.РасчетыСПоставщиками.Остатки КАК РасчетыСПартнерамиОстатки
	|	ГДЕ
	|		РасчетыСПартнерамиОстатки.ОбъектРасчетов В(&ОбъектРасчетов)
	|) КАК Остатки
	|
	|СГРУППИРОВАТЬ ПО
	|	Остатки.ТипРасчетов,
	|	Остатки.Партнер,
	|	Остатки.ОбъектРасчетов,
	|	Остатки.Валюта";
	
	Запрос.УстановитьПараметр("ОбъектРасчетов", ОбъектыРасчетов);
	
	Остатки = Запрос.Выполнить().Выгрузить();
	
	Возврат Остатки;
	
КонецФункции
#КонецОбласти

#КонецЕсли

Связанные материалы