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