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