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