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