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