Помощник зачета оплат / Форма / Модуль формы

файл
#Область ОписаниеПеременных

&НаКлиенте
Перем ПараметрыОжидания;

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

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

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

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

&НаКлиенте
Процедура ПередЗакрытиемВопросЗавершение(ОтветНаВопрос, ДополнительныеПараметры) Экспорт
	
	Если ОтветНаВопрос = КодВозвратаДиалога.Да Тогда
		СохранитьРезультатЗачетаОплатыИЗакрыть();
	ИначеЕсли ОтветНаВопрос = КодВозвратаДиалога.Нет Тогда
		РазблокироватьДокументыДляРедактирования();
		ПринудительноЗакрытьФорму = Истина;
		Закрыть();
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	Если НЕ АвансыРассчитаны И НЕ НоваяАрхитектураВзаиморасчетов Тогда
		ПодключитьОбработчикОжидания("ФоновоеЗаданиеПроверитьНаКлиенте", 0.1, Истина);
	КонецЕсли;
	
	УстановитьСтраницуАвансов();
	
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовШапкиФормы

&НаКлиенте
Процедура ПоВсемДоговорамПриИзменении(Элемент)
	
	УстановитьОтборПоДоговорам();
	
КонецПроцедуры

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

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

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыЗачтено

&НаКлиенте
Процедура ЗачтеноВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	СтрокаТаблицы = Элементы.Зачтено.ТекущиеДанные;
	
	Если СтрокаТаблицы <> Неопределено Тогда
		
		Если Поле.Имя = "ЗачтеноЗаказ" Тогда
			Если ЗначениеЗаполнено(СтрокаТаблицы.Документ) Тогда
				ПоказатьЗначение(Неопределено, СтрокаТаблицы.Документ);
			ИначеЕсли ЗначениеЗаполнено(СтрокаТаблицы.ОбъектРасчетов) Тогда
				ПоказатьЗначение(Неопределено, СтрокаТаблицы.ОбъектРасчетов);
			КонецЕсли;
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ЗачтеноПередНачаломИзменения(Элемент, Отказ)
	
	ТекущиеДанные = Элементы.Зачтено.ТекущиеДанные;
	СуммаПередРедактированием = ТекущиеДанные.СуммаЗачтено;
	
КонецПроцедуры

&НаКлиенте
Процедура ЗачтеноПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
	
	ТекущиеДанные = Элементы.Зачтено.ТекущиеДанные;
	Если ТекущиеДанные.СуммаЗачтено <> СуммаПередРедактированием Тогда
		
		ОчиститьСообщения();
		
		Отказ = Ложь;
		
		ИзменениеСуммы = СуммаПередРедактированием - ТекущиеДанные.СуммаЗачтено;
		
		Если ИзменениеСуммы < 0 Тогда
			ТекущиеДанные.СуммаЗачтено = СуммаПередРедактированием;
			ТекстПредупреждения = НСтр("ru = 'Зачтенная сумма может быть только уменьшена'");
			ПоказатьПредупреждение(, ТекстПредупреждения);
			Возврат;
		КонецЕсли;
		
		СтрокаТаблицы = Элементы.Зачтено.ТекущаяСтрока;
		СоответствиеСписания = Новый Соответствие;
		СоответствиеСписания.Вставить(СтрокаТаблицы, ИзменениеСуммы);
		ОтменитьЗачетНаСервере(СоответствиеСписания, , Отказ);
		
		Если Отказ Тогда
			ТекущиеДанные.СуммаЗачтено = СуммаПередРедактированием;
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ЗачтеноПриАктивизацииСтроки(Элемент)
	ДоступноИсправлениеПревышения = Ложь;
	Для Каждого Идентификатор Из Элементы.Зачтено.ВыделенныеСтроки Цикл
		СтрокаТаблицы = Зачтено.НайтиПоИдентификатору(Идентификатор);
		Если СтрокаТаблицы.ДоступноРедактирование Тогда
			ДоступноИсправлениеПревышения = Истина;
		КонецЕсли;
	КонецЦикла;
	Если Элементы.ИсправитьПревышение.Доступность <> ДоступноИсправлениеПревышения Тогда
		Элементы.ИсправитьПревышение.Доступность = ДоступноИсправлениеПревышения;
	КонецЕсли;
КонецПроцедуры

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

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура Обновить(Команда)
	
	ПодключитьОбработчикОжидания("ФоновоеЗаданиеПроверитьНаКлиенте", 0.1, Истина);
	ОбновитьДанныеНаСервере();
	
КонецПроцедуры

&НаКлиенте
Процедура ЗачестьПлатеж(Команда)
	
	МассивСтрок = Элементы.Оплаты.ВыделенныеСтроки;
	Если МассивСтрок.Количество() > 0 Тогда
		ЗачестьПлатежДляВыбранныхСтрок(МассивСтрок);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ЗачестьАванс(Команда)
	
	МассивСтрок = Элементы.Авансы.ВыделенныеСтроки;
	Если МассивСтрок.Количество() > 0 Тогда
		ЗачестьАвансДляВыбранныхСтрок(МассивСтрок);
	КонецЕсли;
	
КонецПроцедуры

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

&НаКлиенте
Процедура ИсправитьПревышение(Команда)
	
	ОчиститьСообщения();
	
	Отказ = Ложь;
	ИсправитьПревышениеНаСервере(Отказ);
	
	Если Не Отказ И Превышение > 0 Тогда
		ТекстПредупреждения = НСтр("ru = 'Не удалось полностью исправить превышение. Возможно документы не доступны для редактирования.'");
		ПоказатьПредупреждение(, ТекстПредупреждения);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ЗачестьОплатуИЗакрыть(Команда)
	
	СохранитьРезультатЗачетаОплатыИЗакрыть();
	
КонецПроцедуры

&НаКлиенте
Процедура Показать(Команда)
	
	Элементы.ГруппаУправлениеПодвалом.ТекущаяСтраница = Элементы.СтраницаСкрытьПодвал;
	Элементы.ГруппаЗачтено.Видимость = Истина;
	
КонецПроцедуры

&НаКлиенте
Процедура Скрыть(Команда)
	
	Элементы.ГруппаУправлениеПодвалом.ТекущаяСтраница = Элементы.СтраницаПоказатьПодвал;
	Элементы.ГруппаЗачтено.Видимость = Ложь;
	
КонецПроцедуры

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

	ПодарочныеСертификатыКлиент.ОткрытьФормуПодбораПодарочныхСертификатов(ЭтотОбъект, ПараметрыПодбора);
		
КонецПроцедуры

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

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

&НаКлиенте
Процедура ПодобратьПодарочныйСертификатЗавершение(Результат, ДополнительныеПараметры) Экспорт

	Если ЭтоАдресВременногоХранилища(Результат) Тогда
		ЗачестьПодарочныеСертификатыНаСервере(Результат);		
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Функция АдресТаблицыЗачтенныхПодарочныхСертификатов(СуммаЗачтеннаяПодарочнымиСертификатами)

	СуммаЗачтеннаяПодарочнымиСертификатами = 0;

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

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

&НаСервере
Процедура УстановитьУсловноеОформление()

	УсловноеОформление.Элементы.Очистить();

	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗачтеноСуммаЗачтено.Имя);
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗачтеноСуммаРегл.Имя);
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗачтеноСуммаУпр.Имя);

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);

	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Оплаты.Имя);

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЗакрытыйДокумент);

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Зачтено.Имя);

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЗакрытыйДокумент);

	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОплатыПартнер.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Оплаты.Партнер");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
	ОтборЭлемента.ПравоеЗначение = Новый ПолеКомпоновкиДанных("Партнер");

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветОтличающейсяСтрокиДокумента);

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.АвансыПартнер.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Авансы.Партнер");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
	ОтборЭлемента.ПравоеЗначение = Новый ПолеКомпоновкиДанных("Партнер");

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветОтличающейсяСтрокиДокумента);

	//
	
	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.АвансыЗаказ.Имя);

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветОтличающейсяСтрокиДокумента);
	
	//
	
	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗачтеноДокумент.Имя);

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

	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<Будет создан документ ""Взаимозачет задолженности"">'"));
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.НовыеДокументы);

	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.АвансыДокумент.Имя);

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

	Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);

	//
	
	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗачтеноЗаказ.Имя);

	
	ГруппаОтбора = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
	ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ;
	
	ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Зачтено.Документ");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Новый ПолеКомпоновкиДанных("Зачтено.Объект");
	
	ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Зачтено.ОбъектРасчетов");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Новый ПолеКомпоновкиДанных("ОбъектРасчетов");

	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", "");

	//
	
	Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗачтеноСуммаРегл.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Зачтено.СуммаРегл");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = 0;

	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<Будет рассчитана автоматически>'"));
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЗакрытыйДокумент);
	Элемент.Оформление.УстановитьЗначениеПараметра("Доступность", Ложь);
	
	//
	
	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗачтеноСуммаУпр.Имя);

	ОтборЭлемента =  Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Зачтено.СуммаУпр");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = 0;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<Будет рассчитана автоматически>'"));
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЗакрытыйДокумент);
	Элемент.Оформление.УстановитьЗначениеПараметра("Доступность", Ложь);

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

#Область УправлениеЭлементамиФормы

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

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

#Область ЗаполнениеТаблицыРасчетовСПартнерами

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

		ИспользуемыеОбъектыРасчетов = Новый Массив;
		ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ИспользуемыеОбъектыРасчетов, Оплаты.Выгрузить( ,
			"ОбъектРасчетов").ВыгрузитьКолонку("ОбъектРасчетов"));
		ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ИспользуемыеОбъектыРасчетов, Авансы.Выгрузить( ,
			"ОбъектРасчетов").ВыгрузитьКолонку("ОбъектРасчетов"));
		ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ИспользуемыеОбъектыРасчетов, Зачтено.Выгрузить( ,
			"ОбъектРасчетов").ВыгрузитьКолонку("ОбъектРасчетов"));
		ИспользуемыеОбъектыРасчетов = ОбщегоНазначенияКлиентСервер.СвернутьМассив(ИспользуемыеОбъектыРасчетов);

		ПериодАктуальныхДанных = РегистрыСведений.ЗаданияКРаспределениюВзаиморасчетов.АктуальныйПериодРассчитанныхДанныхПоВзаиморасчетам(
			Неопределено, ИспользуемыеОбъектыРасчетов);

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

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

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

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

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

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

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

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

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

#Область РасчетыСПоставщиками

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

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

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

#Область РасчетыСКлиентами

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

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

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

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

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

&НаСервере
Функция СостояниеФоновогоЗаданияВзаиморасчетов()
	Отбор = Новый Структура();
	Отбор.Вставить("Ключ", Ключ);
	
	Задания = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор);
	Если Задания.Количество() > 0 Тогда
		Если Задания[0].Состояние = СостояниеФоновогоЗадания.Активно Тогда
			Возврат "Активно";
		ИначеЕсли Задания[0].Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно Тогда
			Возврат "Ошибка";
		Иначе
			Возврат "Завершено";
		КонецЕсли;
	Иначе
		Возврат Неопределено;
	КонецЕсли;
	
КонецФункции

&НаКлиенте
Процедура ФоновоеЗаданиеПроверитьНаКлиенте()
	
	Состояние = СостояниеФоновогоЗаданияВзаиморасчетов();
	
	Если Состояние = Неопределено ИЛИ Состояние = "Завершено" Тогда
		
		АвансыРассчитаны = НЕ ЕстьЗаданияКРаспределениюВзаиморасчетов(ЕстьРасчетыСКлиентами, КлючиАналитики) ИЛИ НоваяАрхитектураВзаиморасчетов;
		
		Если НЕ АвансыРассчитаны Тогда
			
			Ключ = Новый УникальныйИдентификатор();
			СтруктураРасчетов = Новый Структура("АналитикиУчетаПоПартнерам, Организации",КлючиАналитики.ВыгрузитьЗначения(), Неопределено);
			
			Если ЕстьРасчетыСКлиентами Тогда
				РаспределениеВзаиморасчетовВызовСервера.РаспределитьРасчетыФоновымЗаданием(,СтруктураРасчетов,"РасчетыСКлиентами",Ключ);
			Иначе
				РаспределениеВзаиморасчетовВызовСервера.РаспределитьРасчетыФоновымЗаданием(,СтруктураРасчетов,"РасчетыСПоставщиками",Ключ);
			КонецЕсли;
			ПодключитьОбработчикОжидания("ФоновоеЗаданиеПроверитьНаКлиенте", 0.1, Истина);
		Иначе
			Ключ = Неопределено;
			ЗаполнитьТаблицуАвансов();
		КонецЕсли;
		
	ИначеЕсли Состояние = "Активно" Тогда
		ПодключитьОбработчикОжидания("ФоновоеЗаданиеПроверитьНаКлиенте", 0.1, Истина);
	Иначе
		ТекстСообщения = НСтр("ru = 'Во время распределения расчетов по документам произошла ошибка. Подробности см. в Журнале регистрации.'");
		ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
		
		АвансыРассчитаны = Истина;
		Авансы.Очистить();
		УстановитьСтраницуАвансов();
		
	КонецЕсли;
	
КонецПроцедуры

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

#Область ПроведениеЗачетов

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

&НаКлиенте
Процедура ПолучитьПодтверждениеЗачетаПлатежа(Результат, МассивСтрок) Экспорт
	
	Если Результат = КодВозвратаДиалога.Да Тогда
		ЗачестьНаСервере(МассивСтрок, Истина);
	КонецЕсли;
	
КонецПроцедуры

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

&НаКлиенте
Процедура ПолучитьПодтверждениеЗачетаАванса(Результат, МассивСтрок) Экспорт
	
	Если Результат = КодВозвратаДиалога.Да Тогда
		ЗачестьНаСервере(МассивСтрок, Ложь);
	КонецЕсли;
	
КонецПроцедуры

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

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

	КонецЦикла;
	
	Оплаты.Сортировать("Организация, Дата");
	Авансы.Сортировать("Организация, Порядок");
	
	РассчитатьСуммуЗачета();
	РасчитатьКоличествоСтрок();
	
КонецПроцедуры

&НаСервере
Процедура ИсправитьПревышениеНаСервере(Отказ)
	
	СуммаКРаспределению = Превышение;
	
	СоответствиеСписания = Новый Соответствие;
	
	РазмерТаблицы = Зачтено.Количество();
	
	Для Сч = 1 По РазмерТаблицы Цикл
		
		СтрокаТаблицы = Зачтено[РазмерТаблицы - Сч];
		
		Если Не СтрокаТаблицы.ДоступноРедактирование Тогда
			Продолжить;
		КонецЕсли;
		
		Если СтрокаТаблицы.СуммаЗачтено < 0 Тогда
			Продолжить;
		КонецЕсли;
		
		СуммаКОтмене = Мин(СтрокаТаблицы.СуммаЗачтено, СуммаКРаспределению);
		СуммаКРаспределению = СуммаКРаспределению - СуммаКОтмене;
		
		СоответствиеСписания.Вставить(СтрокаТаблицы.ПолучитьИдентификатор(), СуммаКОтмене);
		
		Если СуммаКРаспределению = 0 Тогда
			Прервать;
		КонецЕсли;
		
	КонецЦикла;
	
	ОтменитьЗачетНаСервере(СоответствиеСписания, Ложь, Отказ);
	
КонецПроцедуры

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

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

#Область ЗаписьИзменений

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

		ПоказатьВопрос(Новый ОписаниеОповещения("ВыполнитьЗеркальныеИзмененияДокументовЗавершение", ЭтотОбъект, ДополнительныеПараметры), 
				ТекстВопроса, СписокКнопок);
	КонецЕсли;
	
	ОповеститьОРезультатеЗачетаОплаты(МассивОбработанныхДокументов);
	
	Оповестить("ЗачтенаОплата", Документ);
	
	Если Не Отказ Тогда
		ПринудительноЗакрытьФорму = Истина;
		Закрыть();
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

&НаСервере
Процедура СоздатьВзаимозачетЗадолженности(ДанныеКор, СтруктураСумм, ПолеОшибки, ТекстОшибки)
	
	Сумма = СтруктураСумм.СуммаЗачтено;
	
	ДокументОбъект = Документы.ВзаимозачетЗадолженности.СоздатьДокумент();
	МассивТипов = Новый Массив;
	МассивТипов.Добавить(Тип("СправочникСсылка.ДоговорыКонтрагентов"));
	МассивТипов.Добавить(Тип("СправочникСсылка.ДоговорыМеждуОрганизациями"));
	МассивТипов.Добавить(Тип("ДокументСсылка.ЗаказПоставщику"));
	МассивТипов.Добавить(Тип("ДокументСсылка.ЗаказКлиента"));
	
	//++ НЕ УТ
	
	//++ Устарело_Переработка24
	МассивТипов.Добавить(Тип("ДокументСсылка.ЗаказПереработчику"));
	//-- Устарело_Переработка24
	МассивТипов.Добавить(Тип("ДокументСсылка.ЗаказПереработчику2_5"));
	//-- НЕ УТ
	
	
	ДокументОбъект.Дата = ТекущаяДатаСеанса();
	ДокументОбъект.ДокументОснование = Документ;
	
	ДокументОбъект.Комментарий = НСтр("ru = 'Сформирован автоматически обработкой ""Зачет оплат"".'");
	
	ЗачетПодарочногоСертификата = ТипЗнч(ДанныеКор.Объект) = Тип("СправочникСсылка.ПодарочныеСертификаты");
	ДокументОбъект.КонтрагентКредитор = Контрагент;
	ДокументОбъект.КонтрагентДебитор  = Контрагент;
	
	ТипКонтрагента = Неопределено;
	Если ЕстьРасчетыМеждуОрганизациями Тогда
		
		ДокументОбъект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.Произвольный;
		ТипКонтрагента = ?(ЕстьРасчетыСКлиентами,
			Перечисления.ТипыУчастниковВзаимозачета.ОрганизацияКлиент,
			Перечисления.ТипыУчастниковВзаимозачета.ОрганизацияПоставщик);
			
	ИначеЕсли ЕстьРасчетыСКлиентами Тогда
		Если ДанныеКор.ВалютаВзаиморасчетов = ВалютаВзаиморасчетов Тогда
			Если ЗачетПодарочногоСертификата Тогда
				ДокументОбъект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ОплатаПодарочнымСертификатом;
				ДокументОбъект.КонтрагентКредитор = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДанныеКор.ОбъектРасчетов, "Контрагент");
			Иначе
				ДокументОбъект.ВидОперации  = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносАвансаКлиентаОрганизацияКонтрагент;
			КонецЕсли;
		Иначе
			ДокументОбъект.ВидОперации  = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.Произвольный;
		КонецЕсли;
		ТипКонтрагента = Перечисления.ТипыУчастниковВзаимозачета.Клиент;
	Иначе //РасчетыСПоставщиками
		Если ДанныеКор.ВалютаВзаиморасчетов = ВалютаВзаиморасчетов Тогда
			ДокументОбъект.ВидОперации  = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносАвансаПоставщикуОрганизацияКонтрагент;
		Иначе
			ДокументОбъект.ВидОперации  = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.Произвольный;
		КонецЕсли;
		ТипКонтрагента = Перечисления.ТипыУчастниковВзаимозачета.Поставщик;
	КонецЕсли;
	
	Если ДанныеКор.Организация <> Организация Тогда
		ДокументОбъект.Организация    = ГоловнаяОрганизация;
	Иначе
		ДокументОбъект.Организация    = Организация;
	КонецЕсли;
	
	ДокументОбъект.ТипДебитора        = ТипКонтрагента;
	ДокументОбъект.ТипКредитора       = ТипКонтрагента;
	ДокументОбъект.СуммаРегл          = СтруктураСумм.СуммаРегл;
	ДокументОбъект.СуммаУпр           = СтруктураСумм.СуммаУпр;
	
	Если ЕстьРасчетыСКлиентами Тогда
		СтрокаАванса = ДокументОбъект.ДебиторскаяЗадолженность.Добавить();
		СтрокаЗачета = ДокументОбъект.КредиторскаяЗадолженность.Добавить();
	Иначе
		СтрокаАванса = ДокументОбъект.КредиторскаяЗадолженность.Добавить();
		СтрокаЗачета = ДокументОбъект.ДебиторскаяЗадолженность.Добавить();
	КонецЕсли;
	
	СтрокаАванса.Организация          = Организация;
	СтрокаАванса.Партнер              = ПартнерДокумента;
	СтрокаАванса.ОбъектРасчетов       = ОбъектРасчетов;
	СтрокаАванса.ВалютаВзаиморасчетов = ВалютаВзаиморасчетов;
	СтрокаАванса.СуммаВзаиморасчетов  = Сумма;
	СтрокаАванса.СуммаРегл            = СтруктураСумм.СуммаРегл;
	СтрокаАванса.СуммаУпр             = СтруктураСумм.СуммаУпр;
	
	ЗаполнитьЗначенияСвойств(СтрокаЗачета, ДанныеКор);
	СтрокаЗачета.СуммаВзаиморасчетов = СтруктураСумм.СуммаВВалютеПлатежа;
	СтрокаЗачета.СуммаРегл           = СтруктураСумм.СуммаРегл;
	СтрокаЗачета.СуммаУпр            = СтруктураСумм.СуммаУпр;

	ТекстОшибки = НСтр("ru = 'Не удалось создать документ взаимозачета.'");
	ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);

	ДанныеКор.Документ = ДокументОбъект.Ссылка;
	ТекстОшибки = "";
	
КонецПроцедуры

&НаКлиенте
Процедура ОповеститьОРезультатеЗачетаОплаты(МассивОбработанныхДокументов)
	
	Если МассивОбработанныхДокументов.Количество() = 0 Тогда
		Текст = НСтр("ru = 'Изменений в зачете оплаты не было'");
		Пояснение = НСтр("ru = 'Изменений в документах при зачете оплаты не было'");
		ПоказатьОповещениеПользователя(
			Текст,
			, // НавигационнаяСсылка
			Пояснение,
			БиблиотекаКартинок.Информация32);
	Иначе
		Для Каждого ДокументСсылка Из МассивОбработанныхДокументов Цикл
			Текст = НСтр("ru = 'Изменен зачет оплаты'");
			Пояснение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'Изменен зачет оплаты по документу: %1'"),
				ДокументСсылка);
			ПоказатьОповещениеПользователя(
				Текст,
				ПолучитьНавигационнуюСсылку(ДокументСсылка),
				Пояснение,
				БиблиотекаКартинок.Информация32);
		КонецЦикла;
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура РазблокироватьДокументыДляРедактирования()
	
	РазблокироватьДанныеДляРедактирования(
			, // Ключ
			УникальныйИдентификатор);
	
КонецПроцедуры

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

#Область Прочее

&НаСервере
Процедура ОбновитьДанныеНаСервере()
	
	РазблокироватьДокументыДляРедактирования();
	ПолучитьРеквизитыРасчетовСПартнером();
	ЗаполнитьТаблицуПоРасчетамСПартнерами();
	
КонецПроцедуры

&НаСервере
Процедура РассчитатьСуммуЗачета()
	
	СуммаЗачета = Зачтено.Итог("СуммаЗачтено");
	СуммаОтмененныхЗачетов = Оплаты.Выгрузить(Новый Структура("НесохраненныеДанные",Истина)).Итог("ДоступноКЗачету")
		+Авансы.Выгрузить(Новый Структура("НесохраненныеДанные",Истина)).Итог("ДоступноКЗачету");
	
	Если КОплатеОстатокПоДоговору Тогда
		Если СуммаВзаиморасчетов + СуммаОтмененныхЗачетов> 0 Тогда
			Недостает = СуммаВзаиморасчетов + СуммаОтмененныхЗачетов;
			Превышение = 0;
		Иначе
			Недостает = 0;
			Превышение = -(СуммаВзаиморасчетов +СуммаОтмененныхЗачетов);
		КонецЕсли;
	Иначе
		Если СуммаЗачета < СуммаВзаиморасчетов Тогда
			Недостает = СуммаВзаиморасчетов - СуммаЗачета;
			Превышение = 0;
		Иначе
			Недостает = 0;
			Превышение = СуммаЗачета - СуммаВзаиморасчетов;
		КонецЕсли;
	КонецЕсли;
	
	Если СуммаВзаиморасчетов < 0 Тогда
		СуммаКОплате = 0;
	Иначе
		СуммаКОплате = СуммаВзаиморасчетов + ?(КОплатеОстатокПоДоговору,СуммаОтмененныхЗачетов,0);
	КонецЕсли;
	
	Элементы.ИсправитьПревышение.Видимость = (Превышение > 0);
	
	ОбновитьИнформационнуюНадписьИтогов();
	
КонецПроцедуры

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

&НаСервере
Процедура СформироватьИнформационнуюНадписьОтборы()
	
	НадписьОтборы = НСтр("ru = '%Организация%, %Партнер%, %Контрагент%, %Договор%, %НаправлениеДеятельности%'");
	
	Если Не ИспользоватьДоговоры Тогда
		НадписьОтборы = СтрЗаменить(НадписьОтборы, ", %Договор%", "");
	КонецЕсли;
	
	Если ИспользоватьПартнеровКакКонтрагентов Тогда
		НадписьОтборы = СтрЗаменить(НадписьОтборы, ", %Контрагент%", "");
	КонецЕсли;
	
	Если Не ИспользоватьНесколькоОрганизаций Тогда
		НадписьОтборы = СтрЗаменить(НадписьОтборы, "%Организация%,", "");
	КонецЕсли;
	
	Если Не ЗначениеЗаполнено(НаправлениеДеятельности) Тогда
		НадписьОтборы = СтрЗаменить(НадписьОтборы, ", %НаправлениеДеятельности%", "");
	КонецЕсли;
	
	НадписьОтборы = СтрЗаменить(НадписьОтборы,"%Организация%",
		СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Организация: %1'"), Организация));
	НадписьОтборы = СтрЗаменить(НадписьОтборы,"%Партнер%",
		СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Партнер: %1'"), Партнер));
	НадписьОтборы = СтрЗаменить(НадписьОтборы,"%Контрагент%",
		СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Контрагент: %1'"), Контрагент));
	НадписьОтборы = СтрЗаменить(НадписьОтборы,"%Договор%",
		СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Договор: %1'"), Договор));
	НадписьОтборы = СтрЗаменить(НадписьОтборы,"%НаправлениеДеятельности%",
		СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Направление деятельности: %1'"), НаправлениеДеятельности));
	
КонецПроцедуры

&НаСервере
Процедура УстановитьОтборПоДоговорам()
	
	Если Не ИспользоватьДоговоры Или ПоВсемДоговорам = 1 Тогда
		Элементы.Авансы.ОтборСтрок = Неопределено;
	Иначе
		ОтборАвансы = Новый ФиксированнаяСтруктура("Договор", Договор);
		Элементы.Авансы.ОтборСтрок = ОтборАвансы;
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Функция ПересчитатьСуммуВВалютуВзаиморасчетов(Сумма, ИсходнаяВалюта, Знач ДатаКурса = Неопределено)
	
	Если Не ЗначениеЗаполнено(ДатаКурса) Тогда
		ДатаКурса = ТекущаяДатаСеанса();
	КонецЕсли;
	
	Результат = РаботаСКурсамиВалютУТ.ПересчитатьСуммуДокументаВВалюту(
		Сумма, ИсходнаяВалюта, ВалютаВзаиморасчетов, ДатаКурса, ВалютаРегламентированногоУчета);
		
	Возврат Результат;
	
КонецФункции

&НаСервере
Процедура РасчитатьКоличествоСтрок()
	
	ОплатыКоличествоСтрок = Оплаты.Количество();
	Если АвансыРассчитаны Тогда
		АвансыКоличествоСтрок = Авансы.Количество();
	Иначе
		АвансыКоличествоСтрок = 0;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьЗеркальныеИзмененияДокументовЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
	
	КодОтвета = РезультатВопроса;
	Если КодОтвета = КодВозвратаДиалога.Да Тогда
		МассивОбработанныхДокументов = ВыполнитьЗеркальныеИзмененияДокументовНаСервере(ДополнительныеПараметры.МассивОбработанныхДокументов);
			
		Если МассивОбработанныхДокументов.Количество() > 0 Тогда
			ОповеститьОРезультатеЗачетаОплаты(МассивОбработанныхДокументов);
			
			Оповестить("ЗачтенаОплата", ДополнительныеПараметры.Документ);
		КонецЕсли;

	КонецЕсли;
	
КонецПроцедуры

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

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

		КонецЕсли;
		
	КонецЦикла;
	
	Возврат Соответствуют;
	
КонецФункции

&НаСервереБезКонтекста
Функция ВыполнитьЗеркальныеИзмененияДокументовНаСервере(МассивОбработанныхДокументов)
	
	ОбработанныеДокументы = Новый Массив();
	
	Для Каждого ДокументСсылка Из МассивОбработанныхДокументов Цикл
		
		ЗеркальныйПлатежСсылка = Неопределено;
		Если ТипЗнч(ДокументСсылка) = Тип("ДокументСсылка.СписаниеБезналичныхДенежныхСредств") Тогда
			ЗеркальныйПлатежСсылка = Документы.СписаниеБезналичныхДенежныхСредств.НайтиЗеркальныйПлатеж(ДокументСсылка);
			
			Если ЗначениеЗаполнено(ЗеркальныйПлатежСсылка) Тогда
				ЗеркальныйПлатежОбъект = ЗеркальныйПлатежСсылка.ПолучитьОбъект();
				Успешно = Документы.СписаниеБезналичныхДенежныхСредств.ПривестиВСоответствиеЗеркальныйПлатеж(ДокументСсылка,ЗеркальныйПлатежОбъект);
				
				Если Успешно Тогда
					ЗеркальныйПлатежОбъект.Записать(РежимЗаписиДокумента.Проведение);
					ОбработанныеДокументы.Добавить(ЗеркальныйПлатежОбъект.Ссылка);
				КонецЕсли;
			КонецЕсли;
		ИначеЕсли ТипЗнч(ДокументСсылка) = Тип("ДокументСсылка.ПоступлениеБезналичныхДенежныхСредств") Тогда
			ЗеркальныйПлатежСсылка = Документы.ПоступлениеБезналичныхДенежныхСредств.НайтиЗеркальныйПлатеж(ДокументСсылка);
			
			Если ЗначениеЗаполнено(ЗеркальныйПлатежСсылка) Тогда
				ЗеркальныйПлатежОбъект = ЗеркальныйПлатежСсылка.ПолучитьОбъект();
				Успешно = Документы.ПоступлениеБезналичныхДенежныхСредств.ПривестиВСоответствиеЗеркальныйПлатеж(ДокументСсылка,ЗеркальныйПлатежОбъект);
				
				Если Успешно Тогда
					ЗеркальныйПлатежОбъект.Записать(РежимЗаписиДокумента.Проведение);
					ОбработанныеДокументы.Добавить(ЗеркальныйПлатежОбъект.Ссылка);
				КонецЕсли;
			КонецЕсли;
		КонецЕсли;
		
	КонецЦикла;
	
	Возврат ОбработанныеДокументы;
	
КонецФункции

&НаСервере
Процедура УстановитьСтраницуАвансов()
	Если АвансыРассчитаны Тогда
		Элементы.ГруппаСтраницыАвансы.ТекущаяСтраница = Элементы.СтраницаРаспределениеВыполнено;
	Иначе
		Элементы.ГруппаСтраницыАвансы.ТекущаяСтраница = Элементы.СтраницаРаспределениеВыполняется;
	КонецЕсли;
КонецПроцедуры

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

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

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

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