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