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