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