Платежный календарь / Форма / Модуль формы

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

&НаКлиенте
Перем СоответвиеКомандИРежимовОтображения;

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

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

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

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

&НаСервере
Процедура ПриСохраненииДанныхВНастройкахНаСервере(Настройки)
	
	ПотенциальноДнейПланирования =
		ПотенциальноДнейПланирования(ОсновнойКалендарьПредприятия, Объект.ПланироватьСДаты, ДнейПланирования, Объект.СкрыватьВыходные);
		
	Если Объект.ДнейПланирования - ПотенциальноДнейПланирования > 10 Тогда
		Настройки.Вставить("Объект.ДнейПланирования", ПотенциальноДнейПланирования + 10);
		ХранилищеОбщихНастроек.Сохранить("Обработка.ПлатежныйКалендарь", "ДеревоПлатежей", Неопределено);
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

&НаКлиенте
Процедура ИзменитьРежим(Команда)
	
	НовыйРежим = СоответвиеКомандИРежимовОтображения[Команда.Имя];
	
	Если РежимОтображения <> НовыйРежим Тогда
		РежимОтображения = НовыйРежим;
		ИзменитьРежимНаСервере();
		УправлениеЭлементамиИстории();
		
		НастроитьОтображениеГруппировки();
		
	КонецЕсли;
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ФильтрСчетовВыбранные(Команда)
	
	ОткрытьФормуНастройкиБанковскихСчетов();
	
КонецПроцедуры

&НаКлиенте
Процедура ФильтрСчетовПодходящие(Команда)
	
	Объект.ФильтрСчетовКалендаря = 2;
	Объект.ОтборБанковскиеСчетаКассы.Очистить();
	ОбновитьСписки();
	
КонецПроцедуры

&НаКлиенте
Процедура ОткрытьДокумент(Команда)
	
	ОткрытьОбъектОплаты();
	
КонецПроцедуры

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

&НаКлиенте
Процедура ОтменитьОперацию(Команда)
	
	ТекущийИндексИстории = ТекущийИндексИстории - 1;
	ОтменитьПовторитьОперацию(0);
	
КонецПроцедуры

&НаКлиенте
Процедура ПовторитьОперацию(Команда)
	
	ТекущийИндексИстории = ТекущийИндексИстории + 1;
	ОтменитьПовторитьОперацию(-1);
	
КонецПроцедуры

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

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

#Область ВидСписков

&НаКлиенте
Процедура ЗаявкиКРаспределению(Команда)
	
	Элементы.ЗаявкиКРаспределению.Пометка = Не Элементы.ЗаявкиКРаспределению.Пометка;
	
	ОтборЗаявок = Элементы.ЗаявкиКРаспределению.Пометка;
	ОтборЗаявокПриИзмененииНаСервере();
	
КонецПроцедуры

&НаКлиенте
Процедура ИзменитьГруппировкуПлатежей(Команда)
	
	ИзменитьГруппировкуПлатежейСервер(Команда.Имя);
	
КонецПроцедуры

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

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

#Область ИнтерактивныеДействия

&НаКлиенте
Процедура СдвигВправо(Команда)
	
	СдвинутьЗаявки("Вправо");
	
КонецПроцедуры

&НаКлиенте
Процедура СдвигВКонец(Команда)
	
	СдвинутьЗаявки("ВКонец");
	
КонецПроцедуры

&НаКлиенте
Процедура СдвигВлево(Команда)
	
	СдвинутьЗаявки("Влево");
	
КонецПроцедуры

&НаКлиенте
Процедура СдвигВНачало(Команда)
	
	СдвинутьЗаявки("ВНачало");
	
КонецПроцедуры

&НаКлиенте
Процедура СдвигНаДату(Команда)
	
	СдвинутьЗаявки("НаДату");
	
КонецПроцедуры

&НаКлиенте
Процедура СдвигСчета(Команда)
	
	СдвинутьЗаявки("НаСчет");
	
КонецПроцедуры

&НаКлиенте
Процедура СдвигСРазбиением(Команда)
	
	СдвинутьЗаявки("Разбить");
	
КонецПроцедуры

&НаКлиенте
Процедура СдвигНеРаспределено(Команда)
	
	СдвинутьЗаявки("НеРаспределено");
	
КонецПроцедуры

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

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

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

#Область ДеревоПлатежей

&НаКлиенте
Процедура СдвинутьВверх(Команда)
	
	Если Не СтрокуМожноСдвинуть(-1) Тогда
		ПоказатьПредупреждение(, НСтр("ru = 'Команда не может быть выполнена для текущей строки.'"));
		Возврат;
	КонецЕсли;
	
	СдвинутьСтроку(-1);
	
КонецПроцедуры

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

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

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

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

#Область СозданиеДокументов

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область НастройкиИОтборы

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура НастроитьОтображениеГруппировки()
	
	ПользовательскиеНастройки = Этаформа[ИмяТекущегоСписка].КомпоновщикНастроек.ПользовательскиеНастройки; // ПользовательскиеНастройкиКомпоновкиДанных 
	НастройкаГруппировки = ПользовательскиеНастройки.Элементы[3];
	
	ИмяГруппировки = "";
	Если НастройкаГруппировки.Структура.Количество() = 1 Тогда
		ПоляГруппировки = НастройкаГруппировки.Структура[0].ПоляГруппировки; // ПоляГруппировкиКомпоновкиДанных
		ИмяГруппировки = Строка(ПоляГруппировки.Элементы[0].Поле);
	КонецЕсли;
	
	ОтметитьГруппировкуСписка(ИмяГруппировки);
	
КонецПроцедуры

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

&НаСервере
Процедура ОтметитьФильтрСчетов()
	
	Элементы.ФильтрСчетовВсе.Пометка = (Объект.ФильтрСчетовКалендаря = 0);
	Элементы.ФильтрСчетовВыбранные.Пометка = (Объект.ФильтрСчетовКалендаря = 1);
	Элементы.ФильтрСчетовПодходящие.Пометка = (Объект.ФильтрСчетовКалендаря = 2);
	
	Если Объект.ФильтрСчетовКалендаря = 0 Тогда
		ЗаголовокФильтра = НСтр("ru = 'Счета / Кассы: Все'");
	ИначеЕсли Объект.ФильтрСчетовКалендаря = 1 Тогда
		ЗаголовокФильтра = НСтр("ru = 'Счета / Кассы: Выбранные'");
	ИначеЕсли Объект.ФильтрСчетовКалендаря = 2 Тогда
		ЗаголовокФильтра = НСтр("ru = 'Счета / Кассы: Подходящие'");
	КонецЕсли;
	
	Элементы.ГруппаФильтрСчетовИКасс.Заголовок = ЗаголовокФильтра;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область Перетаскивание

&НаКлиенте
Процедура ИзменитьФлагДоступностиСчетов(СтрокаДерева, ДоступныеСчетаКассы)
	
	СтрокаДерева.ДоступноДляПереноса = (ДоступныеСчетаКассы.Найти(СтрокаДерева.БанковскийСчетКасса) <> Неопределено);
	
	Для Каждого СтрокаДерева Из СтрокаДерева.ПолучитьЭлементы() Цикл
		ИзменитьФлагДоступностиСчетов(СтрокаДерева, ДоступныеСчетаКассы);
	КонецЦикла;
	
КонецПроцедуры

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

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

&НаКлиенте
Функция НомерДняПеретаскивания(ИмяПоля)
	
	НомерДня = 0;
	
	ПозДня = СтрНайти(ИмяПоля, "День");
	Если ПозДня Тогда
		НомерДня = Число(Прав(ИмяПоля, СтрДлина(ИмяПоля) - СтрДлина("День") - ПозДня + 1));
	Иначе
		НомерДня = 1;
	КонецЕсли;
	
	Возврат НомерДня;
	
КонецФункции

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Функция ОтборПредставление(Список)
	
	Представление = "";
	Для Каждого ЭлементСписка Из Список Цикл
		Если ЭлементСписка.Пометка Тогда
			ПредставлениеЭлемента = ?(ЗначениеЗаполнено(ЭлементСписка.Представление), ЭлементСписка.Представление, ЭлементСписка.Значение);
			Представление = Представление + ?(ЗначениеЗаполнено(Представление), ", ", "") + ПредставлениеЭлемента;
		КонецЕсли;
	КонецЦикла;
	
	Возврат Представление;
	
КонецФункции

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

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

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

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

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

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

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

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