Взаимозачет задолженности / Форма документа / Модуль формы

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

&НаКлиенте
Перем ПроверкаКонтрагентовПараметрыОбработчикаОжидания Экспорт;

&НаКлиенте
Перем ФормаДлительнойОперации Экспорт;

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

&НаКлиенте
Перем ПараметрыДляЗаписи Экспорт;

&НаКлиенте
Перем ПредыдущиеЗначения;

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

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
		Возврат;
	КонецЕсли;

	УстановитьУсловноеОформление();
	
	ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект);

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

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

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)

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

&НаКлиенте
Процедура ОбработкаВыбора(РезультатВыбора, ИсточникВыбора)

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

&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)

	// СтандартныеПодсистемы.УправлениеДоступом
	УправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
	// Конец СтандартныеПодсистемы.УправлениеДоступом
	
	ОбновитьСлужебныеРеквизитыТабличнойЧасти("Дт");
	ОбновитьСлужебныеРеквизитыТабличнойЧасти("Кт");
	
	Элементы.ГруппаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Объект.Комментарий);

	// ИнтернетПоддержкаПользователей.РаботаСКонтрагентами
	ПроверкаКонтрагентов.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект);
	// Конец ИнтернетПоддержкаПользователей.РаботаСКонтрагентами	
	
	МодификацияКонфигурацииПереопределяемый.ПослеЗаписиНаСервере(ЭтаФорма, ТекущийОбъект, ПараметрыЗаписи);
	
	ФормированиеФискальныхЧековСервер.ФормаПриИзмененииРеквизитов(ЭтотОбъект);
	
	СобытияФорм.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)

	Оповестить("Запись_ВзаимозачетЗадолженности", ПараметрыЗаписи, Объект.Ссылка);

	МодификацияКонфигурацииКлиентПереопределяемый.ПослеЗаписи(ЭтаФорма, ПараметрыЗаписи);

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

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

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

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

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

	ИсправлениеДокументовКлиент.ОбработкаОповещения(ЭтаФорма, ИмяСобытия, Параметр, Источник);

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

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	// СтандартныеПодсистемы.Свойства
	УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
	// Конец СтандартныеПодсистемы.Свойства
	
	// ИнтернетПоддержкаПользователей.РаботаСКонтрагентами
	ПроверкаКонтрагентовКлиент.ПриОткрытииДокумент(ЭтотОбъект);
	// Конец ИнтернетПоддержкаПользователей.РаботаСКонтрагентами
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	// СтандартныеПодсистемы.РаботаСФайлами
	РаботаСФайламиКлиент.ПриОткрытии(ЭтотОбъект, Отказ);
	// Конец СтандартныеПодсистемы.РаботаСФайлами
	
	ИнициализироватьПредыдущиеЗначения();
	
КонецПроцедуры

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

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

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

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

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

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

&НаКлиенте
Процедура ВидОперацииПриИзменении(Элемент)
	ВидОперацииПриИзмененииСервер();
КонецПроцедуры

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ДатаПриИзменении(Элемент)
	
	ДатаПриИзмененииСервер();
	
	// ИнтернетПоддержкаПользователей.РаботаСКонтрагентами
	ПроверкаКонтрагентовКлиент.ЗапуститьПроверкуКонтрагентовВДокументе(ЭтотОбъект, Объект.Дата);
	// Конец ИнтернетПоддержкаПользователей.РаботаСКонтрагентами
	
КонецПроцедуры

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

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

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

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

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

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

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

	Если НЕ ЗначениеЗаполнено(ЗначенияОтбора.Организация) Тогда
		ВызватьИсключение НСтр("ru = 'Не указана организация'");
	КонецЕсли;

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура СтрокаИсправлениеОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
	
	ИсправлениеДокументовКлиент.СтрокаИсправлениеОбработкаНавигационныйСсылки(
		ЭтотОбъект, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка);
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ОбъектРасчетовДебиторКредиторЗеркальныйПриИзменении(Элемент)
	ЗаблокироватьОбъектыРасчетов();
КонецПроцедуры

&НаКлиенте
Процедура ПартнерКомиссионнойПродажиПриИзменении(Элемент)
	
	ПартнерКомиссионнойПродажиПриИзмененииНаСервере();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ДебиторскаяЗадолженностьПослеУдаления(Элемент)
	ОчиститьВалютуВзаиморасчетов();
	ЗаблокироватьОбъектыРасчетов();
КонецПроцедуры

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

&НаКлиенте
Процедура ДебиторскаяЗадолженностьБезРазбиенияОбъектРасчетовОчистка(Элемент, СтандартнаяОбработка)
	ОчиститьВалютуВзаиморасчетов();
	ЗаблокироватьОбъектыРасчетов();
КонецПроцедуры

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

&НаКлиенте
Процедура ДебиторскаяЗадолженностьБезРазбиенияОбъектРасчетовЗеркальныйПриИзменении(Элемент)
	ЗаблокироватьОбъектыРасчетов();
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура КредиторскаяЗадолженностьСуммаВзаиморасчетовПриИзменении(Элемент)

	ТекущиеДанные = ТекущаяСтрокаЗадолженности("Кт");
	ТекущиеДанные.СуммаУпр  = 0;
	ТекущиеДанные.СуммаРегл = 0;
	
	ЗаполнитьСуммыУпрРегл(СтруктураПараметровЗадолженности(ЭтаФорма, Истина), Истина);
	
	ПересчитатьСуммыУпрРеглВызовСервера(ТекущиеДанные);
	
КонецПроцедуры

&НаКлиенте
Процедура КредиторскаяЗадолженностьПослеУдаления(Элемент)
	ОчиститьВалютуВзаиморасчетов();
	ЗаблокироватьОбъектыРасчетов();
КонецПроцедуры

&НаКлиенте
Процедура КредиторскаяЗадолженностьОбъектРасчетовОчистка(Элемент, СтандартнаяОбработка)
	ОчиститьВалютуВзаиморасчетов();
	ЗаблокироватьОбъектыРасчетов();
КонецПроцедуры

&НаКлиенте
Процедура КредиторскаяЗадолженностьБезРазбиенияОбъектРасчетовОчистка(Элемент, СтандартнаяОбработка)
	ОчиститьВалютуВзаиморасчетов();
	ЗаблокироватьОбъектыРасчетов();
КонецПроцедуры

&НаКлиенте
Процедура КредиторскаяЗадолженностьОбъектРасчетовЗеркальныйПриИзменении(Элемент)
	ЗаблокироватьОбъектыРасчетов();
КонецПроцедуры

&НаКлиенте
Процедура КредиторскаяЗадолженностьБезРазбиенияОбъектРасчетовЗеркальныйПриИзменении(Элемент)
	ЗаблокироватьОбъектыРасчетов();
КонецПроцедуры

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

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

&НаКлиенте
Процедура ОбъектРасчетаКомиссионераНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	ОбъектРасчетовНачалоВыбора("Кт", Элемент, ДанныеВыбора);
	
КонецПроцедуры

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

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

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

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

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

// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаСервере
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
	ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Объект);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды


// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
	ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды


// СтандартныеПодсистемы.РаботаСФайлами
&НаКлиенте
Процедура Подключаемый_КомандаПанелиПрисоединенныхФайлов(Команда)
	 РаботаСФайламиКлиент.КомандаУправленияПрисоединеннымиФайлами(ЭтотОбъект, Команда);
КонецПроцедуры
// Конец СтандартныеПодсистемы.РаботаСФайлами

// СтандартныеПодсистемы.РаботаСФайлами
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
	 РаботаСФайламиКлиент.ПолеПредпросмотраПроверкаПеретаскивания(ЭтотОбъект, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка);
КонецПроцедуры
// Конец СтандартныеПодсистемы.РаботаСФайлами

// СтандартныеПодсистемы.РаботаСФайлами
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
	 РаботаСФайламиКлиент.ПолеПредпросмотраПеретаскивание(ЭтотОбъект, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка);
КонецПроцедуры
// Конец СтандартныеПодсистемы.РаботаСФайлами

// СтандартныеПодсистемы.РаботаСФайлами
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраНажатие(Элемент, СтандартнаяОбработка)
	 РаботаСФайламиКлиент.ПолеПредпросмотраНажатие(ЭтотОбъект, Элемент, СтандартнаяОбработка);
КонецПроцедуры
// Конец СтандартныеПодсистемы.РаботаСФайлами

&НаКлиенте
Процедура ПровестиДокумент(Команда)
	
	ОбщегоНазначенияУТКлиент.Провести(ЭтаФорма, Истина);
	
КонецПроцедуры

&НаКлиенте
Процедура ПровестиИЗакрыть(Команда)
	
	ОбщегоНазначенияУТКлиент.ПровестиИЗакрыть(ЭтаФорма, Истина);
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ЗаписатьДокумент(Команда)
	
	ОбщегоНазначенияУТКлиент.Записать(ЭтаФорма, Истина);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

// ИнтеграцияС1СДокументооборотом
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуИнтеграции(Команда)
	
	ИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент.ВыполнитьПодключаемуюКомандуИнтеграции(Команда, ЭтотОбъект, Объект);
	
КонецПроцедуры
// Конец ИнтеграцияС1СДокументооборотом

&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
	
	СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);
	
КонецПроцедуры

// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
	ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
	ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

// СтандартныеПодсистемы.Свойства

&НаКлиенте
Процедура Подключаемый_СвойстваВыполнитьКоманду(ЭлементИлиКоманда, НавигационнаяСсылка = Неопределено, СтандартнаяОбработка = Неопределено)
	УправлениеСвойствамиКлиент.ВыполнитьКоманду(ЭтотОбъект, ЭлементИлиКоманда, СтандартнаяОбработка);
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьЗависимостиДополнительныхРеквизитов()
	УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент)
	УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры

// Конец СтандартныеПодсистемы.Свойства

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

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

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

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

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

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

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

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

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

&НаКлиенте
Функция ТекущаяСтрокаЗадолженности(Вид)

	ИмяТЧ = ?(Вид = "Дт", "ДебиторскаяЗадолженность", "КредиторскаяЗадолженность");
	СтрокаТаблицы = Элементы[ИмяТЧ].ТекущиеДанные;
	Если СтрокаТаблицы = Неопределено Тогда
		СтрокаТаблицы = Объект[ИмяТЧ][0];
	КонецЕсли;
	Возврат СтрокаТаблицы;
	
КонецФункции

&НаСервере
Процедура УстановитьДоступностьЭлементовДебиторскаяЗадолженностьБезРазбиения()

	Если Объект.ДебиторскаяЗадолженность.Количество() > 0 Тогда
		
		ТекСтрока = Объект.ДебиторскаяЗадолженность[0];
		
		Элементы.ДебиторскаяЗадолженностьБезРазбиенияСуммаРегл.Доступность = ТекСтрока.ВалютаВзаиморасчетов <> ВалютаРегламентированногоУчета;
		Элементы.ДебиторскаяЗадолженностьБезРазбиенияСуммаУпр.Доступность = ТекСтрока.ВалютаВзаиморасчетов <> ВалютаУправленческогоУчета;
		
		Элементы.СуммаРеглКлиента.Доступность = ТекСтрока.ВалютаВзаиморасчетов <> ВалютаРегламентированногоУчета;
		Элементы.СуммаУпрКлиента.Доступность = ТекСтрока.ВалютаВзаиморасчетов <> ВалютаУправленческогоУчета;
		
		Элементы.СуммаРеглВозвратаКомиссионера.Доступность = ТекСтрока.ВалютаВзаиморасчетов <> ВалютаРегламентированногоУчета;
		Элементы.СуммаУпрВозвратаКомиссионера.Доступность = ТекСтрока.ВалютаВзаиморасчетов <> ВалютаУправленческогоУчета;
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура УстановитьДоступностьЭлементовКредиторскаяЗадолженностьБезРазбиения()
	
	Если Объект.КредиторскаяЗадолженность.Количество() > 0 Тогда
		
		ТекСтрока = Объект.КредиторскаяЗадолженность[0];
		
		Элементы.КредиторскаяЗадолженностьБезРазбиенияСуммаРегл.Доступность = ТекСтрока.ВалютаВзаиморасчетов <> ВалютаРегламентированногоУчета;
		Элементы.КредиторскаяЗадолженностьБезРазбиенияСуммаУпр.Доступность = ТекСтрока.ВалютаВзаиморасчетов <> ВалютаУправленческогоУчета;
		
		Элементы.СуммаРеглКомиссионера.Доступность = ТекСтрока.ВалютаВзаиморасчетов <> ВалютаРегламентированногоУчета;
		Элементы.СуммаУпрКомиссионера.Доступность = ТекСтрока.ВалютаВзаиморасчетов <> ВалютаУправленческогоУчета;
		
		Элементы.СуммаРеглВозвратаКлиента.Доступность = ТекСтрока.ВалютаВзаиморасчетов <> ВалютаРегламентированногоУчета;
		Элементы.СуммаУпрВозвратаКлиента.Доступность = ТекСтрока.ВалютаВзаиморасчетов <> ВалютаУправленческогоУчета;
		
	КонецЕсли;
	
КонецПроцедуры
	
&НаСервере
Процедура УстановитьУсловноеОформление()

	УсловноеОформление.Элементы.Очистить();
	
	// Валюта расчетов = ВалютаРегл

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

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

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
	
	// Валюта расчетов = ВалютаУпр
	
	Элемент = УсловноеОформление.Элементы.Добавить();

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура УстановитьВидимостьФилиалов()
	
	ЕстьФилиалы = Справочники.Организации.ФилиалыСРасчетамиЧерезГоловнуюОрганизацию(Объект.Организация).Количество() > 0;
	МеждуОрганизациями = ВыбранВидОперацииМеждуОрганизациями(Объект.ВидОперации);
	ОрганизацияДтСовпадает = Объект.ДебиторскаяЗадолженность.Количество() = 1 
		И ЗначениеЗаполнено(Объект.ДебиторскаяЗадолженность[0].Организация)
		И Объект.Организация = Объект.ДебиторскаяЗадолженность[0].Организация;
	ОрганизацияКтСовпадает = Объект.КредиторскаяЗадолженность.Количество() = 1 
		И ЗначениеЗаполнено(Объект.КредиторскаяЗадолженность[0].Организация)
		И Объект.Организация = Объект.КредиторскаяЗадолженность[0].Организация;
	
	Элементы.ДебиторскаяЗадолженностьОрганизация.Видимость  = ЕстьФилиалы;
	Элементы.ДебиторскаяЗадолженностьБезРазбиенияОрганизация.Видимость  = ЕстьФилиалы И НЕ ОрганизацияДтСовпадает;
	Элементы.КредиторскаяЗадолженностьОрганизация.Видимость = ЕстьФилиалы И НЕ МеждуОрганизациями;
	Элементы.КредиторскаяЗадолженностьБезРазбиенияОрганизация.Видимость = ЕстьФилиалы И НЕ МеждуОрганизациями И НЕ ОрганизацияКтСовпадает;
	
КонецПроцедуры

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

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

#Область Заполнение

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

&НаСервере
Процедура АвтоТест_РассчитатьВзаимозачетЗавершениеНаСервере()
	УстановитьСвойстваЭлементовФормыПоВидуОперации();
	ЗаблокироватьОбъектыРасчетов();
КонецПроцедуры

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

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

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

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

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

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

&НаСервере
Процедура ЗаполнитьПартнераДебитора()

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

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

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

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

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

#Область ПриИзмененииРеквизитов

&НаКлиенте
Процедура ОбъектРасчетовРасчетовПриИзменении(ИмяТаблицы)
	Если Объект[ИмяТаблицы].Количество() = 1 
			И НЕ ЗначениеЗаполнено(Объект[ИмяТаблицы][0].ОбъектРасчетов) Тогда
			Объект[ИмяТаблицы][0].ВалютаВзаиморасчетов = Неопределено;
			Объект[ИмяТаблицы][0].Организация = Неопределено;
	КонецЕсли;
КонецПроцедуры

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

	ОткрытьФормуВыбораОбъектовРасчетов(Элемент, ЗначенияОтбора, НастройкиВыбора);
	
КонецПроцедуры

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

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

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

&НаСервере
Процедура ДатаПриИзмененииСервер()
	
	ОтветственныеЛицаСервер.ПриИзмененииСвязанныхРеквизитовДокумента(Объект);
	
КонецПроцедуры

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

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

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

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

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

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

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

&НаСервере
Процедура КонтрагентДебиторПриИзмененииНаСервере()
	
	ОбновитьСлужебныеРеквизитыКонтрагента("Дт");
	ЗаполнитьПартнераДебитора();
	ФормированиеФискальныхЧековСервер.ФормаПриИзмененииРеквизитов(ЭтотОбъект);
	УстановитьВидимостьОбъектаРасчетовДтКт();
	ЗаблокироватьОбъектыРасчетов();
	
КонецПроцедуры

&НаСервере
Процедура КонтрагентКредиторПриИзмененииНаСервере()
	
	ОбновитьСлужебныеРеквизитыКонтрагента("Кт");
	ЗаполнитьПартнераКредитора();
	ФормированиеФискальныхЧековСервер.ФормаПриИзмененииРеквизитов(ЭтотОбъект);
	УстановитьВидимостьОбъектаРасчетовДтКт();
	ЗаблокироватьОбъектыРасчетов();
	
КонецПроцедуры

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

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

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

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

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

#Область РаботаСКонтрагентами
// ИнтернетПоддержкаПользователей.РаботаСКонтрагентами
&НаКлиенте
Процедура Подключаемый_ПоказатьПредложениеИспользоватьПроверкуКонтрагентов()
	ПроверкаКонтрагентовКлиент.ПредложитьВключитьПроверкуКонтрагентов(ЭтотОбъект);
КонецПроцедуры
// Конец ИнтернетПоддержкаПользователей.РаботаСКонтрагентами
// ИнтернетПоддержкаПользователей.РаботаСКонтрагентами
&НаКлиенте
Процедура Подключаемый_ОбработатьРезультатПроверкиКонтрагентов()
	ПроверкаКонтрагентовКлиент.ОбработатьРезультатПроверкиКонтрагентовВДокументе(ЭтотОбъект);
КонецПроцедуры
// Конец ИнтернетПоддержкаПользователей.РаботаСКонтрагентами
// ИнтернетПоддержкаПользователей.РаботаСКонтрагентами
&НаСервере
Процедура ОтобразитьРезультатПроверкиКонтрагента() Экспорт
	ПроверкаКонтрагентов.ОтобразитьРезультатПроверкиКонтрагентаВДокументе(ЭтотОбъект);
КонецПроцедуры
// Конец ИнтернетПоддержкаПользователей.РаботаСКонтрагентами
// ИнтернетПоддержкаПользователей.РаботаСКонтрагентами
&НаСервере
Процедура ПроверитьКонтрагентовФоновоеЗадание(ПараметрыФоновогоЗадания) Экспорт
	ПроверкаКонтрагентов.ПроверитьКонтрагентовВДокументеФоновоеЗадание(ЭтотОбъект, ПараметрыФоновогоЗадания);
КонецПроцедуры
// Конец ИнтернетПоддержкаПользователей.РаботаСКонтрагентами
&НаКлиенте
Процедура ПроверитьКонтрагентов(Команда)
	
	// ИнтернетПоддержкаПользователей.РаботаСКонтрагентами
	ПроверкаКонтрагентовКлиент.ПроверитьКонтрагентовВДокументеПоКнопке(ЭтотОбъект);
	// Конец ИнтернетПоддержкаПользователей.РаботаСКонтрагентами
	Возврат; // не пустой обработчик
	
КонецПроцедуры

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

#Область ФискальнаяОперация 

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

&НаСервере
Процедура ИмяКомандыПробитияЧекаПриИзмененииНаСервере()
	
	ФормированиеФискальныхЧековСервер.ФормаПриИзмененииРеквизитов(ЭтотОбъект);
	
КонецПроцедуры

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

&НаСервере
Процедура ФискальнаяОперацияЗавершениеНаСервере()
	
	ФормированиеФискальныхЧековСервер.ОбновитьГиперссылкуПробитияФискальногоЧека(Объект.Ссылка, ЭтотОбъект, ТекстДокументыНаОснованииПодвал);
	
КонецПроцедуры

#Область ФискальнаяОперацияЛокализация

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

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

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

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

&НаКлиенте
Процедура Подключаемый_ЗакрытьФорму()
	
	Закрыть();
	
КонецПроцедуры

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

	ОбновитьСлужебныеРеквизитыКонтрагента("Дт");
	ОбновитьСлужебныеРеквизитыКонтрагента("Кт");
	
	ОбновитьСлужебныеРеквизитыТабличнойЧасти("Дт");
	ОбновитьСлужебныеРеквизитыТабличнойЧасти("Кт");
	
	ЗаполнитьДанныеКонечногоКлиента();
	
	ПереключитьСтраницы = Истина;
	УстановитьСвойстваЭлементовФормыПоВидуОперации(ПереключитьСтраницы);
	
	ОграничитьВыборВидаОперации();
	
КонецПроцедуры

&НаСервере
Функция ПоместитьРасшифровкуПлатежаВХранилище(Знач РасшифровкаПлатежа)
	
	ТЗ = РасшифровкаПлатежа.Выгрузить();
	ТЗ.Колонки.Удалить("Сумма");
	ТЗ.Колонки.СуммаВзаиморасчетов.Имя = "Сумма";
	
	АдресПлатежейВХранилище = ПоместитьВоВременноеХранилище(
		ТЗ,
		УникальныйИдентификатор);
	
	Возврат АдресПлатежейВХранилище;
	
КонецФункции

&НаСервере
Процедура ПолучитьДебиторскуюЗадолженностиИзХранилища(АдресПлатежейВХранилище)

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

&НаСервере
Процедура ПолучитьКредиторскуюЗадолженностиИзХранилища(АдресПлатежейВХранилище)

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

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

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

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

&НаСервере
Процедура ПрезапролнитьСуммыУпрРегл(ИмяРесурса,Запрос,МассивТабличныйЧастей)

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

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

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

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

&НаСервере
Процедура ИнициализироватьЗадолженностьНаСервере()
	
	ИнициализироватьЗадолженность("Дт");
	ИнициализироватьЗадолженность("Кт");
	УстановитьСвойстваЭлементовФормыПоВидуОперации();
	
КонецПроцедуры

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

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

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

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

&НаСервере
Функция ВыбранВидОперацииСПоставщиком()
	
	Возврат Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносАвансаПоставщикуОрганизацияКонтрагент
		ИЛИ Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносАвансаПоставщикуМеждуКонтрагентами
		ИЛИ Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносАвансаПоставщикуМеждуОрганизациями
		ИЛИ Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносАвансаПоставщикуМеждуДвумяОрганизациями
		
		ИЛИ Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносДолгаПоставщикуОрганизацияКонтрагент
		ИЛИ Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносДолгаПоставщикуМеждуКонтрагентами
		ИЛИ Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносДолгаПоставщикуМеждуОрганизациями
		ИЛИ Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносДолгаПоставщикуМеждуДвумяОрганизациями;
	
КонецФункции

&НаСервере
Функция ВыбранВидОперацииСКлиентом()
	
	Возврат Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносАвансаКлиентаОрганизацияКонтрагент
		ИЛИ Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносАвансаКлиентаМеждуКонтрагентами
		ИЛИ Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносАвансаКлиентаМеждуОрганизациями
		ИЛИ Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносАвансаКлиентаМеждуДвумяОрганизациями
		
		ИЛИ Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносДолгаКлиентаОрганизацияКонтрагент
		ИЛИ Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносДолгаКлиентаМеждуКонтрагентами
		ИЛИ Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносДолгаКлиентаМеждуОрганизациями
		ИЛИ Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносДолгаКлиентаМеждуДвумяОрганизациями
		
		ИЛИ Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ОплатаПодарочнымСертификатом
		
		ИЛИ Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ОтражениеОплатыЧерезКомиссионера
		ИЛИ Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ОтражениеВозвратаОплатыЧерезКомиссионера;
		
КонецФункции

&НаСервере
Функция ВыбранВидОперацииВРамкахОдногоКонтрагента()
	
	Возврат Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносАвансаКлиентаОрганизацияКонтрагент
		ИЛИ Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносАвансаКлиентаМеждуОрганизациями
		ИЛИ Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносДолгаКлиентаОрганизацияКонтрагент
		ИЛИ Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносДолгаКлиентаМеждуОрганизациями
		ИЛИ Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.Бартер
		ИЛИ Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносАвансаПоставщикуОрганизацияКонтрагент
		ИЛИ Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносАвансаПоставщикуМеждуОрганизациями
		ИЛИ Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносДолгаПоставщикуОрганизацияКонтрагент
		ИЛИ Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносДолгаПоставщикуМеждуОрганизациями
		
КонецФункции

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

&НаСервере
Функция ВыбранВидОперацииПереносАванса()
	
	Возврат Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносАвансаКлиентаОрганизацияКонтрагент
		ИЛИ Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносАвансаКлиентаМеждуКонтрагентами
		ИЛИ Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносАвансаКлиентаМеждуОрганизациями
		ИЛИ Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносАвансаКлиентаМеждуДвумяОрганизациями
		
		ИЛИ Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносАвансаПоставщикуОрганизацияКонтрагент
		ИЛИ Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносАвансаПоставщикуМеждуКонтрагентами
		ИЛИ Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносАвансаПоставщикуМеждуОрганизациями
		ИЛИ Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносАвансаПоставщикуМеждуДвумяОрганизациями
		
		ИЛИ Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ОплатаПодарочнымСертификатом;
		
КонецФункции
	
&НаСервере
Функция ВыбранВидОперацииПереносДолга()
	
	Возврат Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносДолгаКлиентаОрганизацияКонтрагент
		ИЛИ Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносДолгаКлиентаМеждуКонтрагентами
		ИЛИ Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносДолгаКлиентаМеждуОрганизациями
		ИЛИ Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносДолгаКлиентаМеждуДвумяОрганизациями
		
		ИЛИ Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносДолгаПоставщикуОрганизацияКонтрагент
		ИЛИ Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносДолгаПоставщикуМеждуКонтрагентами
		ИЛИ Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносДолгаПоставщикуМеждуОрганизациями
		ИЛИ Объект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносДолгаПоставщикуМеждуДвумяОрганизациями;
		
КонецФункции

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

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

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

&НаСервере
Процедура ОбновитьЭлементыДополнительныхРеквизитов()
	
	УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтаФорма);
	
КонецПроцедуры

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

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

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

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

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

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

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

&НаСервере
Функция ПересчитатьВСуммуРегл(Сумма,Валюта,ОбъектРасчетов)
	Возврат РаботаСКурсамиВалютУТ.ПересчитатьВВалюту(Сумма,
				ВалютаРегламентированногоУчета,
				Валюта,
				ВалютаРегламентированногоУчета,
				Объект.Дата,
				ОбъектРасчетов);
КонецФункции

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

&НаСервере
Функция ПересчитатьВСуммуВзаиморасчетов(Сумма,Валюта,ОбъектРасчетов)
	Возврат РаботаСКурсамиВалютУТ.ПересчитатьВВалюту(Сумма,
				ВалютаРегламентированногоУчета,
				ВалютаРегламентированногоУчета,
				Валюта,
				Объект.Дата,
				ОбъектРасчетов);
КонецФункции

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

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

&НаКлиенте
Процедура УстановитьВалютуВзаиморасчетов(НоваяВалютаВзаиморасчетов)
	
	Если Объект.ВидОперации <> ПредопределенноеЗначение("Перечисление.ВидыОперацийВзаимозачетаЗадолженности.Произвольный") Тогда
		Если НЕ ЗначениеЗаполнено(ВалютаВзаиморасчетов) Тогда
			ВалютаВзаиморасчетов = НоваяВалютаВзаиморасчетов;
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

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

&НаСервере
Процедура ЗаблокироватьОбъектыРасчетов()
	
	РазблокироватьДанныеДляРедактирования(, УникальныйИдентификатор);
	
	МассивОбъектовРасчета = Новый Массив;
	Для Каждого СтрокаТаблицы Из Объект.ДебиторскаяЗадолженность Цикл
		Если ЗначениеЗаполнено(СтрокаТаблицы.ОбъектРасчетов) Тогда
			МассивОбъектовРасчета.Добавить(СтрокаТаблицы.ОбъектРасчетов);
		КонецЕсли;
		Если ЗначениеЗаполнено(СтрокаТаблицы.ОбъектРасчетовЗеркальный) Тогда
			МассивОбъектовРасчета.Добавить(СтрокаТаблицы.ОбъектРасчетовЗеркальный);
		КонецЕсли;
	КонецЦикла;
	Для Каждого СтрокаТаблицы Из Объект.КредиторскаяЗадолженность Цикл
		Если ЗначениеЗаполнено(СтрокаТаблицы.ОбъектРасчетов) Тогда
			МассивОбъектовРасчета.Добавить(СтрокаТаблицы.ОбъектРасчетов);
		КонецЕсли;
		Если ЗначениеЗаполнено(СтрокаТаблицы.ОбъектРасчетовЗеркальный) Тогда
			МассивОбъектовРасчета.Добавить(СтрокаТаблицы.ОбъектРасчетовЗеркальный);
		КонецЕсли;
	КонецЦикла;
	Если ЗначениеЗаполнено(Объект.ОбъектРасчетовИнтеркампани) Тогда
		МассивОбъектовРасчета.Добавить(Объект.ОбъектРасчетовИнтеркампани);
	КонецЕсли;
	Если ЗначениеЗаполнено(Объект.ОбъектРасчетовИнтеркампаниЗеркальный) Тогда
		МассивОбъектовРасчета.Добавить(Объект.ОбъектРасчетовИнтеркампаниЗеркальный);
	КонецЕсли;
	Если ЗначениеЗаполнено(Объект.ОбъектРасчетовДебиторКредитор) Тогда
		МассивОбъектовРасчета.Добавить(Объект.ОбъектРасчетовДебиторКредитор);
	КонецЕсли;
	Если ЗначениеЗаполнено(Объект.ОбъектРасчетовДебиторКредиторЗеркальный) Тогда
		МассивОбъектовРасчета.Добавить(Объект.ОбъектРасчетовДебиторКредиторЗеркальный);
	КонецЕсли;
	
	МассивОбъектовРасчета = ОбщегоНазначенияКлиентСервер.СвернутьМассив(МассивОбъектовРасчета);
	
	Для Каждого ОбъектРасчетов Из МассивОбъектовРасчета Цикл
		//@skip-warning
		Попытка
			ЗаблокироватьДанныеДляРедактирования(ОбъектРасчетов,, УникальныйИдентификатор);
		Исключение
		КонецПопытки;
	КонецЦикла;
	
КонецПроцедуры

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


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

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

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

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

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

&НаСервере
Функция ПоместитьТаблицуПодарочныхСертификатов(ИдТекущейСтроки = Неопределено)

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

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

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

		СтрокаТабличнойЧасти.СуммаРегл 			 = СтрокаТабличнойЧасти.СуммаВзаиморасчетов;
		СтрокаТабличнойЧасти.СуммаУпр 			 = СтрокаТабличнойЧасти.СуммаВзаиморасчетов;
		Если ВалютаВзаиморасчетовПодобранныхПодарочныхСертификатов <> ВалютаРегламентированногоУчета Тогда
			СтрокаТабличнойЧасти.СуммаРегл = РаботаСКурсамиВалютУТ.ПересчитатьСуммуДокументаВВалюту(
				СтрокаТабличнойЧасти.СуммаВзаиморасчетов, ВалютаВзаиморасчетовПодобранныхПодарочныхСертификатов, ВалютаРегламентированногоУчета, Объект.Дата, ВалютаРегламентированногоУчета);
		КонецЕсли;			
		Если ВалютаВзаиморасчетовПодобранныхПодарочныхСертификатов <> ВалютаУправленческогоУчета Тогда
			СтрокаТабличнойЧасти.СуммаУпр = РаботаСКурсамиВалютУТ.ПересчитатьСуммуДокументаВВалюту(
				СтрокаТабличнойЧасти.СуммаВзаиморасчетов, ВалютаВзаиморасчетовПодобранныхПодарочныхСертификатов, ВалютаУправленческогоУчета, Объект.Дата, ВалютаРегламентированногоУчета);
		КонецЕсли;
				
	КонецЦикла;
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура Подключаемый_ОбработатьЗаписьОбъекта()
	
	ОбщегоНазначенияУТКлиент.ОбработатьЗаписьОбъектаВФорме(ЭтотОбъект, ПараметрыДляЗаписи);
	
КонецПроцедуры

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

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