#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Ключ.Пустая() Тогда
Если Не ЗначениеЗаполнено(Объект.ВидДокумента) Тогда
Параметры.Свойство("ВидДокумента", Объект.ВидДокумента);
КонецЕсли;
Если ЗначениеЗаполнено(Объект.ВидДокумента) Тогда
РеквизитыВидДокумента = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Объект.ВидДокумента, "Организация,Подразделение");
Если ЗначениеЗаполнено(РеквизитыВидДокумента.Организация) Тогда
Объект.Организация = РеквизитыВидДокумента.Организация;
КонецЕсли;
Если ЗначениеЗаполнено(РеквизитыВидДокумента.Подразделение) Тогда
Объект.Подразделение = РеквизитыВидДокумента.Подразделение;
КонецЕсли;
КонецЕсли;
ЗначенияДляЗаполнения = Новый Структура("Организация, Ответственный, МесяцРасчета",
"Объект.Организация",
"Объект.Ответственный",
"Объект.Период");
ЗарплатаКадры.ЗаполнитьПервоначальныеЗначенияВФорме(ЭтотОбъект, ЗначенияДляЗаполнения);
ПриПолученииДанныхНаСервере();
ЗаполнитьСписокОбъектов(Ложь);
КонецЕсли;
ЗаполнитьЗаголовокФормы();
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);
КомандыПечати = Документы.ДанныеДляРасчетаЗарплаты.КомандыПечатиФормы(ЭтотОбъект);
Если КомандыПечати.Количество() > 0 Тогда
Документы.ДанныеДляРасчетаЗарплаты.ПриСозданииНаСервере(ЭтотОбъект, КомандыПечати);
КонецЕсли;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "ГруппаДополнительныеРеквизиты");
УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ДополнительныеПараметры);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
МодульПроцессыОбработкиДокументовЗарплата.ПриСозданииНаСервере(ЭтотОбъект, Объект);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
ДатыЗапретаИзменения.ОбъектПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
ПриПолученииДанныхНаСервере(ТекущийОбъект);
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
УправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
УправлениеСвойствами.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
МодульПроцессыОбработкиДокументовЗарплата.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
Если Не Элементы.ПериодСтраницы.Видимость Тогда
Объект.Период = НачалоДня(Объект.Дата);
Объект.ПериодОкончания = КонецДня(Объект.Дата);
ИначеЕсли Не Элементы.ПериодСтраницы.ТекущаяСтраница = Элементы.ПериодСтраница Тогда
Объект.ПериодОкончания = КонецМесяца(Объект.Период);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
МодульПроцессыОбработкиДокументовЗарплата.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи, Отказ);
КонецЕсли;
Если НастройкиВидаДокумента.ВыполненныеРаботыРаспределяютсяПоСотрудникам Тогда
СдельныйЗаработок = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ПоказателиРасчетаЗарплаты.СдельныйЗаработок");
ДатаРегистрации = Объект.Дата;
Если НастройкиВидаДокумента.ВыполненныеРаботыВводятсяСводно Тогда
ДатаРегистрации = Объект.Период;
КонецЕсли;
ТекущийОбъект.Период = ДатаРегистрации;
Для Каждого СтрокаТаблицы Из ТекущийОбъект.ЗначенияПоказателей Цикл
Если Не ЗначениеЗаполнено(СтрокаТаблицы.Период) Тогда
СтрокаТаблицы.Период = ДатаРегистрации;
КонецЕсли;
СтрокаТаблицы.Показатель = СдельныйЗаработок;
КонецЦикла;
Возврат;
КонецЕсли;
Если Элементы.ПериодСтраницы.ТекущаяСтраница = Элементы.ДатаСтраница Тогда
ТекущийОбъект.Период = Объект.Дата;
КонецЕсли;
Если НастройкиВидаДокумента.ЗначенияПоказателейВводятсяНаРазныеДаты
Или (НастройкиВидаДокумента.ВидыРаботЗаполняютсяВДокументе И Не НастройкиВидаДокумента.ВыполненныеРаботыВводятсяСводно) Тогда
РазныеМесяцы = Новый Соответствие;
Для Каждого СтрокаТаблицы Из Объект.ЗначенияПоказателей Цикл
РазныеМесяцы.Вставить(НачалоМесяца(СтрокаТаблицы.Период));
КонецЦикла;
Для Каждого СтрокаТаблицы Из Объект.ВыполненныеРаботы Цикл
РазныеМесяцы.Вставить(НачалоМесяца(СтрокаТаблицы.Период));
КонецЦикла;
Если РазныеМесяцы.Количество() > 1 Тогда
ТекущийОбъект.Период = Неопределено;
КонецЕсли;
КонецЕсли;
ПроверитьДублиСтрок("ДанныеДетально", "Объект", Отказ);
СоставКлючаПроверкиДублей = Новый Массив;
СоставКлючаПроверкиДублей.Добавить("Объект");
Если НастройкиВидаДокумента.ЗначенияПоказателейВводятсяНаРазныеДаты Тогда
СоставКлючаПроверкиДублей.Добавить("Период");
СоставКлючаПроверкиДублей.Добавить("ПериодОкончания");
КонецЕсли;
ПроверитьДублиСтрок("ДанныеСводно", СтрСоединить(СоставКлючаПроверкиДублей, ","), Отказ);
ЗаполнитьТабличнуюЧастьПоказателей(ТекущийОбъект, Отказ);
ЗаполнитьТабличныеЧастиВремени(ТекущийОбъект, Отказ);
ЗаполнитьТабличнуюЧастьВыполненныеРаботы(ТекущийОбъект, Отказ);
КонецПроцедуры
&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
УправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
ПриПолученииДанныхНаСервере(ТекущийОбъект);
ЗаполнитьЗаголовокФормы();
ПерерасчетЗарплаты.РегистрацияПерерасчетовПоПредварительнымДаннымВФоне(ТекущийОбъект.Ссылка);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
МодульПроцессыОбработкиДокументовЗарплата.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначенияКлиент.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплатаКлиент");
МодульПроцессыОбработкиДокументовЗарплата.ПередЗакрытием(ЭтотОбъект, Объект, Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
Оповестить("Запись_ДанныеДляРасчетаЗарплаты", ПараметрыЗаписи, Объект.Ссылка);
КонецПроцедуры
&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
Для Каждого КлючИЗначение Из ПроверяемыеПоля Цикл
ПутьКРеквизиту = КлючИЗначение.Ключ;
ИмяПоляФормы = КлючИЗначение.Значение;
ЧастиПутиКРеквизиту = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПутьКРеквизиту, ".");
Если ЧастиПутиКРеквизиту.Количество() > 1 И ЧастиПутиКРеквизиту[0] = "Объект"
Или ЧастиПутиКРеквизиту.Количество() = 1 Тогда
Если Не ЗначениеЗаполнено(ОбщегоНазначенияКлиентСервер.ПолучитьРеквизитФормыПоПути(ЭтотОбъект, ПутьКРеквизиту)) Тогда
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Поле ""%1"" не заполнено'"), Элементы[ИмяПоляФормы].Заголовок);
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , ПутьКРеквизиту, , Отказ);
КонецЕсли;
Иначе
ИмяТаблицы = ЧастиПутиКРеквизиту[0];
ИмяРеквизита = ЧастиПутиКРеквизиту[1];
Для Каждого СтрокаКоллекции Из ЭтотОбъект[ИмяТаблицы] Цикл
Если Не ЗначениеЗаполнено(СтрокаКоллекции[ИмяРеквизита]) Тогда
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Поле ""%1"" не заполнено'"), Элементы[ИмяПоляФормы].Заголовок);
Поле = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"%1[%2].%3", ИмяТаблицы, ЭтотОбъект[ИмяТаблицы].Индекс(СтрокаКоллекции), ИмяРеквизита);
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , Поле, , Отказ);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Если НастройкиВидаДокумента.ЗначенияПоказателейВводятсяНаРазныеДаты И
ВидыВремени.Количество() > 0 И
Не НастройкиВидаДокумента.ВремяВводитсяСводно Тогда
Период = Неопределено;
Для Каждого СтрокаКоллекции Из ДанныеСводно Цикл
Если Не ЗначениеЗаполнено(Период) Тогда
Период = СтрокаКоллекции.Период;
Продолжить;
КонецЕсли;
Если НачалоМесяца(СтрокаКоллекции.Период) <> НачалоМесяца(Период) Тогда
ОбщегоНазначения.СообщитьПользователю(
НСтр("ru = 'В таблице обнаружены даты, относящиеся к разным месяцам'"), , "ДанныеСводно", , Отказ);
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если Элементы.ПериодСтраницы.ТекущаяСтраница = Элементы.ПериодСтраница Тогда
Если ЗначениеЗаполнено(Объект.ПериодОкончания) И Объект.Период > Объект.ПериодОкончания Тогда
Текст = НСтр("ru = 'Дата начала периода больше даты окончания'");
ОбщегоНазначения.СообщитьПользователю(Текст, , "Период", "Объект", Отказ);
КонецЕсли;
КонецЕсли;
Если Элементы.ДанныеТаблицей.Видимость
И Элементы.ДанныеТаблицей.ТекущаяСтраница = Элементы.ДанныеСводноСтраница
И Элементы.ДанныеСводноГруппаПериод.Видимость Тогда
Для Каждого СтрокаКоллекции Из ДанныеСводно Цикл
Если ЗначениеЗаполнено(СтрокаКоллекции.ПериодОкончания) И СтрокаКоллекции.ПериодОкончания < СтрокаКоллекции.Период Тогда
Текст = НСтр("ru = 'Дата начала периода больше даты окончания'");
Поле = ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("ДанныеСводно", ДанныеСводно.Индекс(СтрокаКоллекции), "ПериодОкончания");
ОбщегоНазначения.СообщитьПользователю(Текст, , Поле, , Отказ);
КонецЕсли;
КонецЦикла;
КонецЕсли;
УправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты);
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "ИзмененыПоказателиДокумента"
И Источник.ВладелецФормы = ЭтотОбъект
И Параметр.Показатели.Количество() > 0 Тогда
ОбработатьИзменениеПоказателейНаСервере(Параметр.Показатели);
КонецЕсли;
Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтотОбъект, ИмяСобытия, Параметр) Тогда
ОбновитьЭлементыДополнительныхРеквизитов();
УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ОрганизацияПриИзменении(Элемент)
ОбработатьИзменениеОрганизацииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ПодразделениеПриИзменении(Элемент)
ЗаполнитьСписокОбъектов(Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ДатаПриИзменении(Элемент)
Если НастройкиВидаДокумента.ВыполненныеРаботыРаспределяютсяПоСотрудникам Тогда
ДатаНачалаПриИзмененииНаСервере();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДатаНачалаПриИзменении(Элемент)
ДатаНачалаПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ДатаОкончанияПриИзменении(Элемент)
ДатаОкончанияПриИзмененииНаСервере();
КонецПроцедуры
&НаСервере
Процедура ДатаОкончанияПриИзмененииНаСервере()
ЗаполнитьТарифныеСтавкиИОтработанноеВремя();
РаспределитьСтоимостьРаботПоСотрудникам();
КонецПроцедуры
&НаСервере
Процедура ДатаНачалаПриИзмененииНаСервере()
Для Каждого СтрокаТаблицы Из Объект.ВыполненныеРаботы Цикл
ЗаполнитьСтрокуВыполненныхРабот(СтрокаТаблицы, Истина, Ложь);
КонецЦикла;
ЗаполнитьТарифныеСтавкиИОтработанноеВремя();
РаспределитьСтоимостьРаботПоСотрудникам();
Объект.ИспользоватьПриРасчетеПервойПоловиныМесяца =
Объект.Период < НачалоМесяца(Объект.Период) + 15 * 86400;
КонецПроцедуры
&НаКлиенте
Процедура КомментарийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария(
Элемент.ТекстРедактирования,
ЭтотОбъект,
"Объект.Комментарий");
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийПоляВыбораМесяцаМесяцРегистрацииВремени
&НаКлиенте
Процедура ПериодРегистрацииСтрокойПриИзменении(Элемент)
ЗарплатаКадрыКлиент.ВводМесяцаПриИзменении(ЭтотОбъект, "Объект.Период", "ПериодРегистрацииСтрокой", Модифицированность);
ПриИзмененииПериода();
КонецПроцедуры
&НаКлиенте
Процедура ПериодРегистрацииСтрокойНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Оповещение = Новый ОписаниеОповещения("ПериодРегистрацииСтрокойНачалоВыбораЗавершение", ЭтотОбъект);
ЗарплатаКадрыКлиент.ВводМесяцаНачалоВыбора(ЭтотОбъект, ЭтотОбъект, "Объект.Период", "ПериодРегистрацииСтрокой", , Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ПериодРегистрацииСтрокойНачалоВыбораЗавершение(ЗначениеВыбрано, ДополнительныеПараметры) Экспорт
ПриИзмененииПериода();
КонецПроцедуры
&НаКлиенте
Процедура ПериодРегистрацииСтрокойОчистка(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ПериодРегистрацииСтрокойРегулирование(Элемент, Направление, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаРегулирование(ЭтотОбъект, "Объект.Период", "ПериодРегистрацииСтрокой", Направление, Модифицированность);
ПриИзмененииПериода();
КонецПроцедуры
&НаКлиенте
Процедура ПериодРегистрацииСтрокойАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаАвтоПодборТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ПериодРегистрацииСтрокойОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаОкончаниеВводаТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыДанныеДетально
&НаКлиенте
Процедура ДанныеДетальноЗначениеНаДеньПриИзменении(Элемент)
ЧастиИмениПоля = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Элемент.Имя, "_");
Если ЧастиИмениПоля.Количество() < 2 Тогда
Возврат;
КонецЕсли;
ИмяРеквизита = ЧастиИмениПоля[1];
ЗаполнитьИтогоПоСтрокеДанныеДетально(Элементы.ДанныеДетально.ТекущиеДанные, ИмяРеквизита, Объект.Период);
ЗаполнитьИтогоПоКолонке(ЭтотОбъект, ДанныеДетально, ИмяРеквизита + "_ЗначениеНаДень_" + ЧастиИмениПоля[3]);
ЗаполнитьИтогоПоКолонке(ЭтотОбъект, ДанныеДетально, ИмяРеквизита + "_КоличествоЗначений");
ЗаполнитьИтогоПоКолонке(ЭтотОбъект, ДанныеДетально, ИмяРеквизита + "_СуммаЗначений");
КонецПроцедуры
&НаКлиенте
Процедура ДанныеДетальноПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
Если Не НоваяСтрока Или Копирование Тогда
Возврат;
КонецЕсли;
ТекущиеДанные = Элементы.ДанныеДетально.ТекущиеДанные;
Для Каждого СведенияОПоказателе Из ПоказателиРасчетаЗарплаты Цикл
Если СведенияОПоказателе.ВводитсяДетально Тогда
ТекущиеДанные[СведенияОПоказателе.ИмяРеквизита + "_Показатель"] = СведенияОПоказателе.Показатель;
КонецЕсли;
КонецЦикла;
Для Каждого СведенияОВидеВремени Из ВидыВремени Цикл
Если СведенияОВидеВремени.ВводитсяДетально Тогда
ТекущиеДанные[СведенияОВидеВремени.ИмяРеквизита + "_ВидВремени"] = СведенияОВидеВремени.ВидВремени;
КонецЕсли;
КонецЦикла;
Для Каждого СведенияВидаРабот Из ВидыРабот Цикл
Если СведенияВидаРабот.ВводитсяДетально Тогда
ТекущиеДанные[СведенияВидаРабот.ИмяРеквизита + "_ВидРабот"] = СведенияВидаРабот.ВидРабот;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ДанныеДетальноПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
Если Не НоваяСтрока Или ОтменаРедактирования Тогда
Возврат;
КонецЕсли;
ОбновитьИтогиДанныеДетально();
КонецПроцедуры
&НаКлиенте
Процедура ДанныеДетальноПослеУдаления(Элемент)
ОбновитьИтогиДанныеДетально();
КонецПроцедуры
&НаКлиенте
Процедура ДанныеДетальноОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
ОбработкаПодбораСотрудниковНаСервере(ВыбранноеЗначение, ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве("ДанныеДетально"));
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыДанныеСводно
&НаКлиенте
Процедура Подключаемый_ДанныеСводноКолонкаПриИзменении(Элемент)
ЧастиИмениПоля = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Элемент.Имя, "_");
Если ЧастиИмениПоля.Количество() < 2 Тогда
Возврат;
КонецЕсли;
ИмяТаблицы = ЧастиИмениПоля[0];
ИмяРеквизита = ЧастиИмениПоля[1];
ЗаполнитьИтогоПоКолонке(ЭтотОбъект, ЭтотОбъект[ИмяТаблицы], ИмяРеквизита);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ДанныеСводноСтрокаПриИзменении(Элемент)
СтрокаКоллекции = Элементы.ДанныеСводно.ТекущиеДанные;
Если СтрокаКоллекции = Неопределено Тогда
Возврат;
КонецЕсли;
ЗаполнитьИтогоПоСтрокеДанныеСводно(ВидыВремени, СтрокаКоллекции);
КонецПроцедуры
&НаКлиенте
Процедура ДанныеСводноПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
Если Не НоваяСтрока Тогда
Возврат;
КонецЕсли;
Для Каждого СведенияОПоказателе Из ПоказателиРасчетаЗарплаты Цикл
Если Не СведенияОПоказателе.ВводитсяДетально И СведенияОПоказателе.ВводитсяВТаблице Тогда
ЗаполнитьИтогоПоКолонке(ЭтотОбъект, ДанныеСводно, СведенияОПоказателе.ИмяРеквизита);
КонецЕсли;
КонецЦикла;
Для Каждого СведенияОВидеВремени Из ВидыВремени Цикл
Если Не СведенияОВидеВремени.ВводитсяДетально И Не ПустаяСтрока(СведенияОВидеВремени.ИмяТаблицы) Тогда
ЗаполнитьИтогоПоСтрокеДанныеСводно(ВидыВремени, Элементы.ДанныеСводно.ТекущиеДанные);
КонецЕсли;
КонецЦикла;
Для Каждого СведенияВидаРабот Из ВидыРабот Цикл
Если Не СведенияВидаРабот.ВводитсяДетально И СведенияВидаРабот.ВводитсяВТаблице Тогда
ЗаполнитьИтогоПоКолонке(ЭтотОбъект, ДанныеСводно, СведенияВидаРабот.ИмяРеквизита);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ДанныеСводноПослеУдаления(Элемент)
Для Каждого СведенияОПоказателе Из ПоказателиРасчетаЗарплаты Цикл
Если Не СведенияОПоказателе.ВводитсяДетально И СведенияОПоказателе.ВводитсяВТаблице Тогда
ЗаполнитьИтогоПоКолонке(ЭтотОбъект, ДанныеСводно, СведенияОПоказателе.ИмяРеквизита);
КонецЕсли;
КонецЦикла;
Для Каждого СведенияВидаРабот Из ВидыРабот Цикл
Если Не СведенияВидаРабот.ВводитсяДетально И СведенияВидаРабот.ВводитсяВТаблице Тогда
ЗаполнитьИтогоПоКолонке(ЭтотОбъект, ДанныеСводно, СведенияВидаРабот.ИмяРеквизита);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ДанныеСводноОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
ОбработкаПодбораСотрудниковНаСервере(ВыбранноеЗначение, ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве("ДанныеСводно"));
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыВыполненныеРаботы
&НаКлиенте
Процедура ВыполненныеРаботыВидРаботПриИзменении(Элемент)
ВыполненныеРаботыВидРаботПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ВыполненныеРаботыПриИзменении(Элемент)
РаспределитьСтоимостьРаботПоСотрудникам();
КонецПроцедуры
&НаКлиенте
Процедура ВыполненныеРаботыРасценкаПриИзменении(Элемент)
РассчитатьСуммуРаботПоРасценке(Элементы.ВыполненныеРаботы.ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура ВыполненныеРаботыСуммаПриИзменении(Элемент)
РассчитатьОбъемВыполненныхРабот(ЭтотОбъект);
РаспределитьСтоимостьРаботПоСотрудникам();
КонецПроцедуры
&НаКлиенте
Процедура ВыполненныеРаботыОбъемВыполненныхРаботПриИзменении(Элемент)
РассчитатьСуммуРаботПоРасценке(Элементы.ВыполненныеРаботы.ТекущиеДанные);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыВыполненныеРаботыПоСотрудникам
&НаКлиенте
Процедура ВыполненныеРаботыПоСотрудникамВидРаботПриИзменении(Элемент)
ВыполненныеРаботыПоСотрудникамВидРаботПриИзмененииНаСервере();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыИсполнителиРабот
&НаКлиенте
Процедура ИсполнителиРаботПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
Если НоваяСтрока И Не Копирование Тогда
Элементы.ИсполнителиРабот.ТекущиеДанные.Коэффициент = 1;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ИсполнителиРаботПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
Если ОтменаРедактирования Тогда
Возврат;
КонецЕсли;
РаспределитьСтоимостьРаботПоСотрудникам();
КонецПроцедуры
&НаКлиенте
Процедура ИсполнителиРаботПослеУдаления(Элемент)
РаспределитьСтоимостьРаботПоСотрудникам();
КонецПроцедуры
&НаКлиенте
Процедура ИсполнителиРаботОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
ПутьКТаблицеСотрудников = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве("Объект");
ПутьКТаблицеСотрудников.ДОбавить("ЗначенияПоказателей");
ОбработкаПодбораСотрудниковНаСервере(ВыбранноеЗначение, ПутьКТаблицеСотрудников, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ИсполнителиРаботСотрудникПриИзменении(Элемент)
ВыделенныеСтроки = Элементы.ИсполнителиРабот.ВыделенныеСтроки;
ЗаполнитьТарифныеСтавкиИОтработанноеВремя(ВыделенныеСтроки);
КонецПроцедуры
&НаКлиенте
Процедура ИсполнителиРаботТарифнаяСтавкаПриИзменении(Элемент)
СтрокаТаблицы = Элементы.ИсполнителиРабот.ТекущиеДанные;
СтрокаТаблицы.ФиксТарифнаяСтавка = Истина;
ОбновитьСуммуПоТарифуВыполненныхРабот(СтрокаТаблицы);
КонецПроцедуры
&НаКлиенте
Процедура ИсполнителиРаботОтработаноДнейПриИзменении(Элемент)
СтрокаТаблицы = Элементы.ИсполнителиРабот.ТекущиеДанные;
СтрокаТаблицы.ФиксОтработанноеВремя = Истина;
ОбновитьСуммуПоТарифуВыполненныхРабот(СтрокаТаблицы);
КонецПроцедуры
&НаКлиенте
Процедура ИсполнителиРаботОтработаноЧасовПриИзменении(Элемент)
СтрокаТаблицы = Элементы.ИсполнителиРабот.ТекущиеДанные;
СтрокаТаблицы.ФиксОтработанноеВремя = Истина;
ОбновитьСуммуПоТарифуВыполненныхРабот(СтрокаТаблицы);
КонецПроцедуры
&НаКлиенте
Процедура ИсполнителиРаботСуммаПриИзменении(Элемент)
Элементы.ИсполнителиРабот.ТекущиеДанные.ФиксЗначение = Истина;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
#Область ОбработчикиСобытийПроцессыОбработкиДокументов
&НаКлиенте
Процедура Подключаемый_ВыполнитьЗадачуПоОбработкеДокумента(Команда)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначенияКлиент.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплатаКлиент");
МодульПроцессыОбработкиДокументовЗарплата.ВыполнитьЗадачу(ЭтотОбъект, Команда, Объект)
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьЗадачуПоОбработкеДокументаОповещение(Контекст, ДополнительныеПараметры) Экспорт
ВыполнитьЗадачуПоОбработкеДокументаНаСервере(Контекст);
ВыполнитьОбработкуОповещения(ДополнительныеПараметры, Контекст);
КонецПроцедуры
&НаСервере
Процедура ВыполнитьЗадачуПоОбработкеДокументаНаСервере(Контекст)
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
МодульПроцессыОбработкиДокументовЗарплата.ВыполнитьЗадачу(ЭтотОбъект, Контекст, Объект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_КомментарийНаправившегоОткрытие(Элемент, СтандартнаяОбработка)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначенияКлиент.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплатаКлиент");
МодульПроцессыОбработкиДокументовЗарплата.КомментарийНаправившегоОткрытие(ЭтотОбъект, Элемент, СтандартнаяОбработка);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_КомментарийСледующемуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначенияКлиент.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплатаКлиент");
МодульПроцессыОбработкиДокументовЗарплата.КомментарийСледующемуНачалоВыбора(ЭтотОбъект, Элемент, ДанныеВыбора, СтандартнаяОбработка);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
&НаКлиенте
Процедура Подключаемый_СвойстваВыполнитьКоманду(ЭлементИлиКоманда, НавигационнаяСсылка = Неопределено, СтандартнаяОбработка = Неопределено)
УправлениеСвойствамиКлиент.ВыполнитьКоманду(ЭтотОбъект, ЭлементИлиКоманда, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьПоказатели(Команда)
МассивПоказателей = Новый Массив;
Для Каждого СтрокаПоказателя Из ПоказателиРасчетаЗарплаты Цикл
МассивПоказателей.Добавить(СтрокаПоказателя.Показатель);
КонецЦикла;
ПараметрыФормы = Новый Структура("МассивПоказателей", МассивПоказателей);
ОткрытьФорму("ОбщаяФорма.ГрупповоеЗаполнениеПоказателейДокументов", ПараметрыФормы, ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Заполнить(Команда)
Если ДанныеДетально.Количество() > 0 Или ДанныеСводно.Количество() > 0 Тогда
ТекстВопроса = НСтр("ru = 'Таблица документа будет очищена.
|Продолжить?'");
Оповещение = Новый ОписаниеОповещения("ЗаполнитьЗавершение", ЭтотОбъект);
ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
Иначе
ЗаполнитьЗавершение(КодВозвратаДиалога.Да, Неопределено);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ИсполнителиРаботПодбор(Команда)
ПараметрыОткрытия = Неопределено;
КадровыйУчетКлиент.ВыбратьСотрудниковРаботающихВПериодеПоПараметрамОткрытияФормыСписка(
Элементы.ИсполнителиРабот,
Объект.Организация,
Объект.Подразделение,
НачалоМесяца(Объект.Период),
КонецМесяца(Объект.ПериодОкончания),
,
АдресСпискаПодобранныхСотрудников(Объект.ЗначенияПоказателей),
ПараметрыОткрытия);
КонецПроцедуры
&НаКлиенте
Процедура ДанныеДетальноПодбор(Команда)
ПараметрыОткрытия = Неопределено;
КадровыйУчетКлиент.ВыбратьСотрудниковРаботающихВПериодеПоПараметрамОткрытияФормыСписка(
Элементы.ДанныеДетально,
Объект.Организация,
Объект.Подразделение,
НачалоМесяца(Объект.Период),
КонецМесяца(Объект.ПериодОкончания),
,
АдресСпискаПодобранныхСотрудников(ДанныеДетально),
ПараметрыОткрытия);
КонецПроцедуры
&НаКлиенте
Процедура ДанныеСводноПодбор(Команда)
Если НастройкиВидаДокумента.НесколькоОрганизаций Тогда
ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить("РежимВыбора", Истина);
ПараметрыФормы.Вставить("МножественныйВыбор", Истина);
ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Ложь);
ОткрытьФорму("Справочник.Организации.ФормаСписка", ПараметрыФормы, Элементы.ДанныеСводно);
Возврат;
КонецЕсли;
Если НастройкиВидаДокумента.НесколькоПодразделений Тогда
Отбор = Новый Структура;
Отбор.Вставить("Владелец", Объект.Организация);
ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить("Владелец", Объект.Организация);
ПараметрыФормы.Вставить("ПоказыватьНовыеПодразделения", Истина);
ПараметрыФормы.Вставить("Отбор", Отбор);
ПараметрыФормы.Вставить("РежимВыбора", Истина);
ПараметрыФормы.Вставить("МножественныйВыбор", Истина);
ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Ложь);
ПараметрыФормы.Вставить("АдресСпискаПодобранных", АдресСпискаПодобранныхПодразделений(ДанныеСводно));
ОткрытьФорму("Справочник.ПодразделенияОрганизаций.ФормаСписка", ПараметрыФормы, Элементы.ДанныеСводно);
Возврат;
КонецЕсли;
Если НастройкиВидаДокумента.НесколькоСотрудников Тогда
ПараметрыОткрытия = Неопределено;
КадровыйУчетКлиент.ВыбратьСотрудниковРаботающихВПериодеПоПараметрамОткрытияФормыСписка(
Элементы.ДанныеСводно,
Объект.Организация,
Объект.Подразделение,
НачалоМесяца(Объект.Период),
КонецМесяца(Объект.ПериодОкончания),
,
АдресСпискаПодобранныхСотрудников(ДанныеСводно),
ПараметрыОткрытия);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьИсполнителейРабот(Команда)
ЗаполнитьИсполнителейРаботНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ОтменитьВсеИсправления(Команда)
ОтменитьВсеИсправленияНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ОтменитьИсправленияСотрудника(Команда)
ОтменитьИсправленияСотрудникаНаСервере();
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура ОбновитьЭлементыДополнительныхРеквизитов()
УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьЗависимостиДополнительныхРеквизитов()
УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент)
УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
КонецПроцедуры
&НаСервере
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт
ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьЗавершение(Ответ, ДополнительныеПараметры) Экспорт
Если Ответ <> КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;
ЗаполнитьСписокОбъектов(Истина);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьИтогиДанныеДетально()
Для Каждого СведенияОПоказателе Из ПоказателиРасчетаЗарплаты Цикл
Если Не СведенияОПоказателе.ВводитсяДетально Тогда
ЗаполнитьИтогоПоКолонке(ЭтотОбъект, ДанныеДетально, СведенияОПоказателе.ИмяРеквизита);
Продолжить;
КонецЕсли;
ЗаполнитьИтогоПоКолонке(ЭтотОбъект, ДанныеДетально, СведенияОПоказателе.ИмяРеквизита + "_КоличествоЗначений");
ЗаполнитьИтогоПоКолонке(ЭтотОбъект, ДанныеДетально, СведенияОПоказателе.ИмяРеквизита + "_СуммаЗначений");
Для НомерДня = 1 По 31 Цикл
ЗаполнитьИтогоПоКолонке(ЭтотОбъект, ДанныеДетально, СведенияОПоказателе.ИмяРеквизита + "_ЗначениеНаДень_" + НомерДня);
КонецЦикла;
КонецЦикла;
Для Каждого СведенияОВидеВремени Из ВидыВремени Цикл
Если Не СведенияОВидеВремени.ВводитсяДетально Тогда
Продолжить;
КонецЕсли;
ЗаполнитьИтогоПоКолонке(ЭтотОбъект, ДанныеДетально, СведенияОВидеВремени.ИмяРеквизита + "_КоличествоЗначений");
ЗаполнитьИтогоПоКолонке(ЭтотОбъект, ДанныеДетально, СведенияОВидеВремени.ИмяРеквизита + "_СуммаЗначений");
Для НомерДня = 1 По 31 Цикл
ЗаполнитьИтогоПоКолонке(ЭтотОбъект, ДанныеДетально, СведенияОВидеВремени.ИмяРеквизита + "_ЗначениеНаДень_" + НомерДня);
КонецЦикла;
КонецЦикла;
Для Каждого СведенияВидаРабот Из ВидыРабот Цикл
Если Не СведенияВидаРабот.ВводитсяДетально Тогда
Продолжить;
КонецЕсли;
ЗаполнитьИтогоПоКолонке(ЭтотОбъект, ДанныеДетально, СведенияВидаРабот.ИмяРеквизита + "_КоличествоЗначений");
ЗаполнитьИтогоПоКолонке(ЭтотОбъект, ДанныеДетально, СведенияВидаРабот.ИмяРеквизита + "_СуммаЗначений");
Для НомерДня = 1 По 31 Цикл
ЗаполнитьИтогоПоКолонке(ЭтотОбъект, ДанныеДетально, СведенияВидаРабот.ИмяРеквизита + "_ЗначениеНаДень_" + НомерДня);
КонецЦикла;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ПриПолученииДанныхНаСервере(ТекущийОбъект = Неопределено)
НастроитьЭлементыВвода();
ЗарплатаКадрыКлиентСервер.ЗаполнитьМесяцПоДате(ЭтотОбъект, "Объект.Период", "ПериодРегистрацииСтрокой");
Если НастройкиВидаДокумента.ВыполненныеРаботыРаспределяютсяПоСотрудникам Тогда
Для Каждого СтрокаТаблицы Из Объект.ЗначенияПоказателей Цикл
ОбновитьСуммуПоТарифуВыполненныхРабот(СтрокаТаблицы);
КонецЦикла;
Возврат;
КонецЕсли;
ПрочитатьЗначенияПоказателей(ТекущийОбъект);
ПрочитатьДанныеОВремени(ТекущийОбъект);
ПрочитатьДанныеОВыполненныхРаботах(ТекущийОбъект);
ЗаполнитьПредставленияВСтроках();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПредставленияВСтроках()
Если Не ИспользуетсяТаблицаДетально Тогда
Возврат;
КонецЕсли;
ПоказателиДетально = ПоказателиРасчетаЗарплаты.НайтиСтроки(Новый Структура("ВводитсяДетально", Истина));
ВидыВремениДетально = ВидыВремени.НайтиСтроки(Новый Структура("ВводитсяДетально", Истина));
Для Каждого СтрокаКоллекции Из ДанныеДетально Цикл
Для Каждого СведенияОПоказателе Из ПоказателиДетально Цикл
СтрокаКоллекции[СведенияОПоказателе.ИмяРеквизита + "_Показатель"] = СведенияОПоказателе.Показатель;
КонецЦикла;
Для Каждого СведенияОВидеВремени Из ВидыВремениДетально Цикл
СтрокаКоллекции[СведенияОВидеВремени.ИмяРеквизита + "_ВидВремени"] = СведенияОВидеВремени.ВидВремени;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура НастроитьЭлементыВвода()
Если НастройкиВидаДокумента <> Неопределено Тогда
Возврат;
КонецЕсли;
НастройкиВидаДокумента = Новый ФиксированнаяСтруктура(Справочники.ВидыДокументовВводДанныхДляРасчетаЗарплаты.НастройкиВидаДокумента(Объект.ВидДокумента));
МассивПроверяемыхПолей = Новый Соответствие;
Если ЗначениеЗаполнено(НастройкиВидаДокумента.Подсказка) Тогда
Элементы.ПодсказкаЗаполняемаяВШаблонеДокумента.Видимость = Истина;
Элементы.ПодсказкаЗаполняемаяВШаблонеДокумента.Заголовок = НастройкиВидаДокумента.Подсказка;
Иначе
Элементы.ПодсказкаЗаполняемаяВШаблонеДокумента.Видимость = Ложь;
КонецЕсли;
ЗаполнитьСведенияОПоказателях(НастройкиВидаДокумента);
ЗаполнитьСведенияОВидахВремени();
ЗаполнитьСведенияОВидахРабот();
ЭтоВводПостоянныхПоказателей = НастройкиВидаДокумента.ЭтоВводПостоянныхПоказателей;
ЕстьРазовыеПоказатели = Ложь;
ЕстьОперативныеПоказатели = Ложь;
ЕстьПоказателиСотрудников = Ложь;
ЕстьПоказателиПодразделений = Ложь;
ЕстьОперативныеПоказателиСотрудников = Ложь;
ЕстьРазовыеПоказателиСотрудников = Ложь;
Для Каждого СведенияОПоказателе Из ПоказателиРасчетаЗарплаты Цикл
ЕстьПоказателиСотрудников = ЕстьПоказателиСотрудников Или СведенияОПоказателе.Назначение = Перечисления.НазначенияПоказателейРасчетаЗарплаты.ДляСотрудника;
ЕстьПоказателиПодразделений = ЕстьПоказателиПодразделений Или СведенияОПоказателе.Назначение = Перечисления.НазначенияПоказателейРасчетаЗарплаты.ДляПодразделения;
Если ЭтоВводПостоянныхПоказателей Тогда
Продолжить;
КонецЕсли;
ЕстьРазовыеПоказатели = ЕстьРазовыеПоказатели
Или СведенияОПоказателе.СпособВвода = Перечисления.СпособыВводаЗначенийПоказателейРасчетаЗарплаты.ВводитсяЕдиновременно;
ЕстьОперативныеПоказатели = ЕстьОперативныеПоказатели
Или СведенияОПоказателе.СпособВвода = Перечисления.СпособыВводаЗначенийПоказателейРасчетаЗарплаты.НакапливаетсяПоОтдельнымЗначениям;
ЕстьРазовыеПоказателиСотрудников = ЕстьРазовыеПоказателиСотрудников
Или СведенияОПоказателе.СпособВвода = Перечисления.СпособыВводаЗначенийПоказателейРасчетаЗарплаты.ВводитсяЕдиновременно
И СведенияОПоказателе.Назначение = Перечисления.НазначенияПоказателейРасчетаЗарплаты.ДляСотрудника;
ЕстьОперативныеПоказателиСотрудников = ЕстьОперативныеПоказателиСотрудников
Или СведенияОПоказателе.СпособВвода = Перечисления.СпособыВводаЗначенийПоказателейРасчетаЗарплаты.НакапливаетсяПоОтдельнымЗначениям
И СведенияОПоказателе.Назначение = Перечисления.НазначенияПоказателейРасчетаЗарплаты.ДляСотрудника;
КонецЦикла;
Элементы.Организация.Видимость = Не НастройкиВидаДокумента.НесколькоОрганизаций;
Элементы.Подразделение.Видимость = НастройкиВидаДокумента.ПоказыватьПодразделение;
Элементы.Сотрудник.Видимость = Не НастройкиВидаДокумента.НесколькоСотрудников
И (ЕстьПоказателиСотрудников Или ВидыВремени.Количество() > 0 Или ВидыРабот.Количество() > 0);
ЖирныйШрифт = Новый Шрифт(, , Истина);
Если ЗначениеЗаполнено(НастройкиВидаДокумента.Организация)
И ЗначениеЗаполнено(Объект.Организация) Тогда
Элементы.Организация.Вид = ВидПоляФормы.ПолеНадписи;
Элементы.Организация.Шрифт = ЖирныйШрифт;
КонецЕсли;
Если ЗначениеЗаполнено(НастройкиВидаДокумента.Подразделение)
И ЗначениеЗаполнено(Объект.Подразделение) Тогда
Элементы.Подразделение.Вид = ВидПоляФормы.ПолеНадписи;
Элементы.Подразделение.Шрифт = ЖирныйШрифт;
КонецЕсли;
Если Элементы.Организация.Видимость
И Не ЗначениеЗаполнено(НастройкиВидаДокумента.Организация) Тогда
МассивПроверяемыхПолей.Вставить("Объект.Организация", "Организация");
КонецЕсли;
Если Элементы.Подразделение.Видимость
И НастройкиВидаДокумента.ПроверятьЗаполнениеПодразделения
И Не ЗначениеЗаполнено(НастройкиВидаДокумента.Подразделение) Тогда
МассивПроверяемыхПолей.Вставить("Объект.Подразделение", "Подразделение");
КонецЕсли;
Если Элементы.Сотрудник.Видимость Тогда
МассивПроверяемыхПолей.Вставить("Объект.Сотрудник", "Сотрудник");
КонецЕсли;
ИспользуетсяТаблицаДетально = Ложь;
Если НастройкиВидаДокумента.ВидыРаботЗаполняютсяВДокументе Тогда
Страница = Элементы.ВидыРаботЗаполняютсяВДокументеСтраница;
Иначе
ИспользуетсяТаблицаДетально = Не НастройкиВидаДокумента.ЭтоВводПостоянныхПоказателей
И НастройкиВидаДокумента.НесколькоСотрудников
И (
(ЕстьРазовыеПоказателиСотрудников
И (ЕстьОперативныеПоказателиСотрудников
Или ВидыРабот.Количество() > 0
Или (ВидыВремени.Количество() > 0
И Не НастройкиВидаДокумента.ВремяВводитсяСводно
И НастройкиВидаДокумента.ЗначенияПоказателейВводятсяНаРазныеДаты)))
Или (ВидыВремени.Количество() > 0
И Не НастройкиВидаДокумента.ВремяВводитсяСводно
И НастройкиВидаДокумента.ВремяВводитсяЗаМесяц)
);
Страница = ?(ИспользуетсяТаблицаДетально, Элементы.ДанныеДетальноСтраница, Элементы.ДанныеСводноСтраница);
КонецЕсли;
Элементы.ДанныеТаблицей.ТекущаяСтраница = Страница;
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Если НастройкиВидаДокумента.НесколькоОрганизаций Тогда
Если ИспользуетсяТаблицаДетально Тогда
ЭлементОрганизация = Элементы.ДанныеДетальноОбъект;
Иначе
ЭлементОрганизация = Элементы.ДанныеСводноОбъект;
КонецЕсли;
Иначе
ЭлементОрганизация = Элементы.Организация;
КонецЕсли;
Модуль = ОбщегоНазначения.ОбщийМодуль("УправленческаяЗарплатаФормы");
Модуль.ДокументДанныеДляРасчетаЗарплатыПриНастройкеЭлементовФормы(ЭтотОбъект, ЭлементОрганизация);
КонецЕсли;
Элементы.ПериодСтраницы.Видимость = Истина;
Если ЭтоВводПостоянныхПоказателей Тогда
Элементы.ПериодСтраницы.ТекущаяСтраница = Элементы.ПериодСтраница;
МассивПроверяемыхПолей.Вставить("Объект.Период", "ДатаНачала");
Иначе
Если (ЕстьОперативныеПоказатели
Или ВидыРабот.Количество() > 0
Или (Не НастройкиВидаДокумента.ВремяВводитсяСводно И Не ИспользуетсяТаблицаДетально))
И Не ЕстьРазовыеПоказатели Тогда
Если НастройкиВидаДокумента.ВыполненныеРаботыВводятсяСводно Тогда
Элементы.ПериодСтраницы.Видимость = Истина;
Элементы.ПериодСтраницы.ТекущаяСтраница = Элементы.ПериодСтраница;
Элементы.ДатаНачала.Заголовок = НСтр("ru = 'За период с'");
МассивПроверяемыхПолей.Вставить("Объект.Период", "ДатаНачала");
МассивПроверяемыхПолей.Вставить("Объект.ПериодОкончания", "ДатаОкончания");
Иначе
Элементы.ПериодСтраницы.Видимость = Ложь;
Элементы.ПериодСтраницы.ТекущаяСтраница = Элементы.ДатаСтраница;
КонецЕсли;
Иначе
Элементы.ПериодСтраницы.ТекущаяСтраница = Элементы.МесяцСтрокойСтраница;
МассивПроверяемыхПолей.Вставить("ПериодРегистрацииСтрокой", "ПериодРегистрацииСтрокой");
КонецЕсли;
КонецЕсли;
ВидимостьЗаполнить = Не НастройкиВидаДокумента.ЗначенияПоказателейВводятсяНаРазныеДаты;
Элементы.ДанныеДетальноЗаполнить.Видимость = ВидимостьЗаполнить;
Элементы.ДанныеСводноЗаполнить.Видимость = ВидимостьЗаполнить;
Элементы.ДанныеДетальноПодбор.Видимость = ВидимостьЗаполнить;
Элементы.ДанныеСводноПодбор.Видимость = ВидимостьЗаполнить;
Элементы.ПериодСтраницы.Видимость = Не НастройкиВидаДокумента.ВидыРаботЗаполняютсяВДокументе
И (Не НастройкиВидаДокумента.ЗначенияПоказателейВводятсяНаРазныеДаты Или ИспользуетсяТаблицаДетально)
Или НастройкиВидаДокумента.ВыполненныеРаботыВводятсяСводно;
Элементы.ДанныеСводноГруппаПериод.Видимость = НастройкиВидаДокумента.ЗначенияПоказателейВводятсяНаРазныеДаты И ЭтоВводПостоянныхПоказателей;
Элементы.ДанныеСводноДата.Видимость = НастройкиВидаДокумента.ЗначенияПоказателейВводятсяНаРазныеДаты И Не ЭтоВводПостоянныхПоказателей;
Элементы.ДатаОкончания.Видимость = НастройкиВидаДокумента.ИспользоватьПериодОкончания Или НастройкиВидаДокумента.ВыполненныеРаботыВводятсяСводно;
Элементы.ДанныеСводноПериодОкончания.Видимость = НастройкиВидаДокумента.ИспользоватьПериодОкончания;
Если Не Элементы.ПериодСтраницы.Видимость Тогда
МассивПроверяемыхПолей.Удалить("Объект.Период");
МассивПроверяемыхПолей.Удалить("ПериодРегистрацииСтрокой");
КонецЕсли;
Элементы.СтатьяФинансирования.Видимость =
(НастройкиВидаДокумента.РежимВводаСтатьиФинансирования = Перечисления.РежимыВводаБухучетаВДанныхДляРасчетаЗарплаты.ВводитьВШапке);
Элементы.СпособОтраженияЗарплатыВБухучете.Видимость =
(НастройкиВидаДокумента.РежимВводаСпособаОтраженияЗарплатыВБухучете = Перечисления.РежимыВводаБухучетаВДанныхДляРасчетаЗарплаты.ВводитьВШапке);
Элементы.ОтношениеКЕНВД.Видимость =
(НастройкиВидаДокумента.РежимВводаОтношенияКЕНВД = Перечисления.РежимыВводаБухучетаВДанныхДляРасчетаЗарплаты.ВводитьВШапке);
Элементы.ПодразделениеДляУчетаЗатрат.Видимость =
(НастройкиВидаДокумента.РежимВводаПодразделенияУчетаЗатрат = Перечисления.РежимыВводаБухучетаВДанныхДляРасчетаЗарплаты.ВводитьВШапке);
Если НастройкиВидаДокумента.ВидыРаботЗаполняютсяВДокументе Тогда
ПроверяемыеПоля = Новый ФиксированноеСоответствие(МассивПроверяемыхПолей);
УстановитьСвойстваПроверяемыхПолей();
УстановитьСвязиПараметровВыбора();
Если НастройкиВидаДокумента.ВыполненныеРаботыРаспределяютсяПоСотрудникам Тогда
Элементы.ВыполненныеРаботыСтраницы.ТекущаяСтраница = Элементы.ВыполненныеРаботыРаспределяютсяПоСотрудникамСтраница;
НастроитьЭлементыРаспределенияВыполненныхРабот(НастройкиВидаДокумента);
Иначе
Элементы.ВыполненныеРаботыСтраницы.ТекущаяСтраница = Элементы.ВыполненныеРаботыВводятсяПоСотрудникамСтраница;
НастроитьЭлементыВводаВыполненныхРаботПоСотрудникам(НастройкиВидаДокумента);
КонецЕсли;
Возврат;
КонецЕсли;
Если НастройкиВидаДокумента.ЗначенияПоказателейВводятсяНаРазныеДаты Тогда
Если ЭтоВводПостоянныхПоказателей Тогда
МассивПроверяемыхПолей.Вставить("ДанныеСводно.Период", "ДанныеСводноПериод");
Иначе
МассивПроверяемыхПолей.Вставить("ДанныеСводно.Период", "ДанныеСводноДата");
КонецЕсли;
КонецЕсли;
Элементы.ДанныеСводно.ИзменятьПорядокСтрок = Не НастройкиВидаДокумента.ЗаполнятьСписокОбъектов;
Элементы.ДанныеСводно.ИзменятьСоставСтрок = Не НастройкиВидаДокумента.ЗаполнятьСписокОбъектов;
Элементы.ДанныеСводно.ПоложениеКоманднойПанели = ?(НастройкиВидаДокумента.ЗаполнятьСписокОбъектов,
ПоложениеКоманднойПанелиЭлементаФормы.Нет,
ПоложениеКоманднойПанелиЭлементаФормы.Авто);
Элементы.ДанныеСводноОбъект.ТолькоПросмотр = НастройкиВидаДокумента.ЗаполнятьСписокОбъектов;
Если НастройкиВидаДокумента.ЗаполнятьСписокОбъектов Тогда
Элементы.ДанныеСводноГруппа.Заголовок = Неопределено;
КонецЕсли;
Элементы.ДанныеДетально.ИзменятьСоставСтрок = Не НастройкиВидаДокумента.ЗаполнятьСписокОбъектов;
Элементы.ДанныеДетально.ПоложениеКоманднойПанели = ?(НастройкиВидаДокумента.ЗаполнятьСписокОбъектов,
ПоложениеКоманднойПанелиЭлементаФормы.Нет,
ПоложениеКоманднойПанелиЭлементаФормы.Авто);
Элементы.ДанныеДетальноОбъект.ТолькоПросмотр = НастройкиВидаДокумента.ЗаполнятьСписокОбъектов;
Элементы.ДанныеТаблицей.Видимость = ИспользуетсяТаблицаДетально
Или НастройкиВидаДокумента.НесколькоОрганизаций
Или НастройкиВидаДокумента.НесколькоПодразделений
Или НастройкиВидаДокумента.НесколькоСотрудников
Или (НастройкиВидаДокумента.ЗначенияПоказателейВводятсяНаРазныеДаты И ЭтоВводПостоянныхПоказателей);
ОбъектыВСтроках = НастройкиВидаДокумента.НесколькоОрганизаций
Или НастройкиВидаДокумента.НесколькоПодразделений
Или НастройкиВидаДокумента.НесколькоСотрудников;
ИмяИспользуемойТаблицы = ?(ИспользуетсяТаблицаДетально, "ДанныеДетально", "ДанныеСводно");
Элементы[ИмяИспользуемойТаблицы + "Объект"].Видимость = ОбъектыВСтроках;
Элементы[ИмяИспользуемойТаблицы + "Группа"].ОтображатьЗаголовок = ОбъектыВСтроках;
Если НастройкиВидаДокумента.НесколькоСотрудников Тогда
Элементы[ИмяИспользуемойТаблицы + "Объект"].ОграничениеТипа = Новый ОписаниеТипов("СправочникСсылка.Сотрудники");
Элементы[ИмяИспользуемойТаблицы + "Объект"].Заголовок = Метаданные.Справочники.Сотрудники.ПредставлениеОбъекта;
Элементы[ИмяИспользуемойТаблицы].Заголовок = Метаданные.Справочники.Сотрудники.Синоним;
Элементы[ИмяИспользуемойТаблицы + "Группа"].Заголовок = Метаданные.Справочники.Сотрудники.Синоним;
МассивПроверяемыхПолей.Вставить("ДанныеСводно.Объект", "ДанныеСводноОбъект");
Иначе
Если НастройкиВидаДокумента.НесколькоПодразделений Тогда
Элементы[ИмяИспользуемойТаблицы + "Объект"].ОграничениеТипа = Новый ОписаниеТипов("СправочникСсылка.ПодразделенияОрганизаций");
Элементы[ИмяИспользуемойТаблицы + "Объект"].Заголовок = Метаданные.Справочники.ПодразделенияОрганизаций.ПредставлениеОбъекта;
Элементы[ИмяИспользуемойТаблицы].Заголовок = Метаданные.Справочники.ПодразделенияОрганизаций.Синоним;
Элементы[ИмяИспользуемойТаблицы + "Группа"].Заголовок = Метаданные.Справочники.ПодразделенияОрганизаций.Синоним;
МассивПроверяемыхПолей.Вставить("ДанныеСводно.Объект", "ДанныеСводноОбъект");
Элементы["ДанныеСводноЗаполнить"].Заголовок = "Заполнить подразделения";
Иначе
Если НастройкиВидаДокумента.НесколькоОрганизаций Тогда
Элементы[ИмяИспользуемойТаблицы + "Объект"].ОграничениеТипа = Новый ОписаниеТипов("СправочникСсылка.Организации");
Элементы[ИмяИспользуемойТаблицы + "Объект"].Заголовок = Метаданные.Справочники.Организации.ПредставлениеОбъекта;
Элементы[ИмяИспользуемойТаблицы].Заголовок = Метаданные.Справочники.Организации.Синоним;
Элементы[ИмяИспользуемойТаблицы + "Группа"].Заголовок = Метаданные.Справочники.Организации.Синоним;
МассивПроверяемыхПолей.Вставить("ДанныеСводно.Объект", "ДанныеСводноОбъект");
Элементы["ДанныеСводноЗаполнить"].Заголовок = "Заполнить организации";
КонецЕсли;
КонецЕсли;
КонецЕсли;
НастроитьЭлементыВводаЗначенийПоказателей(ИмяИспользуемойТаблицы);
НастроитьЭлементыСводногоВводаДанныхОВремени(ИмяИспользуемойТаблицы);
НастроитьЭлементыВводаДанныхОВыполненныхРаботах(ИмяИспользуемойТаблицы);
ПараметрыОтбора = Новый Структура("ВводитсяДетально", Истина);
Элементы.ДанныеДетальноЗаголовкиПолейГруппа.Видимость =
ПоказателиРасчетаЗарплаты.НайтиСтроки(ПараметрыОтбора).Количество()
+ ВидыВремени.НайтиСтроки(ПараметрыОтбора).Количество()
+ ВидыРабот.НайтиСтроки(ПараметрыОтбора).Количество() > 1;
Если ВидыВремени.НайтиСтроки(ПараметрыОтбора).Количество() = 0 Тогда
Элементы.ДанныеДетальноКоличествоЗначенийГруппа.Видимость = Ложь;
Элементы.ДанныеДетальноСуммаЗначенийГруппа.ОтображатьВШапке = Ложь;
КонецЕсли;
Если ИспользуетсяТаблицаДетально Тогда
ОформитьПоляТаблицыДнейМесяца();
КонецЕсли;
ПроверяемыеПоля = Новый ФиксированноеСоответствие(МассивПроверяемыхПолей);
УстановитьСвойстваПроверяемыхПолей();
УстановитьСвязиПараметровВыбора();
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"ДанныеСводноЗаполнитьПоказатели", "Видимость", ПоказателиРасчетаЗарплаты.Количество() > 0);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"ДанныеДетальноЗаполнитьПоказатели", "Видимость", ПоказателиРасчетаЗарплаты.Количество() > 0);
КонецПроцедуры
&НаСервере
Процедура НастроитьЭлементыВводаВыполненныхРаботПоСотрудникам(НастройкиВидаДокумента)
Элементы.ВыполненныеРаботыПоСотрудникамПериод.Видимость = Не НастройкиВидаДокумента.ВыполненныеРаботыВводятсяСводно;
Элементы.ВыполненныеРаботыПоСотрудникамСтатьяФинансирования.Видимость =
(НастройкиВидаДокумента.РежимВводаСтатьиФинансирования = Перечисления.РежимыВводаБухучетаВДанныхДляРасчетаЗарплаты.ВводитьВТабличнойЧасти);
Элементы.ВыполненныеРаботыПоСотрудникамСпособОтраженияЗарплатыВБухучете.Видимость =
(НастройкиВидаДокумента.РежимВводаСпособаОтраженияЗарплатыВБухучете = Перечисления.РежимыВводаБухучетаВДанныхДляРасчетаЗарплаты.ВводитьВТабличнойЧасти);
Элементы.ВыполненныеРаботыПоСотрудникамОтношениеКЕНВД.Видимость =
(НастройкиВидаДокумента.РежимВводаОтношенияКЕНВД = Перечисления.РежимыВводаБухучетаВДанныхДляРасчетаЗарплаты.ВводитьВТабличнойЧасти);
Элементы.ВыполненныеРаботыПоСотрудникамПодразделениеУчетаЗатрат.Видимость =
(НастройкиВидаДокумента.РежимВводаПодразделенияУчетаЗатрат = Перечисления.РежимыВводаБухучетаВДанныхДляРасчетаЗарплаты.ВводитьВТабличнойЧасти);
КонецПроцедуры
&НаСервере
Процедура НастроитьЭлементыРаспределенияВыполненныхРабот(НастройкиВидаДокумента)
Элементы.ВыполненныеРаботыСтатьяФинансирования.Видимость =
(НастройкиВидаДокумента.РежимВводаСтатьиФинансирования = Перечисления.РежимыВводаБухучетаВДанныхДляРасчетаЗарплаты.ВводитьВТабличнойЧасти);
Элементы.ВыполненныеРаботыСпособОтраженияЗарплатыВБухучете.Видимость =
(НастройкиВидаДокумента.РежимВводаСпособаОтраженияЗарплатыВБухучете = Перечисления.РежимыВводаБухучетаВДанныхДляРасчетаЗарплаты.ВводитьВТабличнойЧасти);
Элементы.ВыполненныеРаботыОтношениеКЕНВД.Видимость =
(НастройкиВидаДокумента.РежимВводаОтношенияКЕНВД = Перечисления.РежимыВводаБухучетаВДанныхДляРасчетаЗарплаты.ВводитьВТабличнойЧасти);
Элементы.ВыполненныеРаботыПодразделениеУчетаЗатрат.Видимость =
(НастройкиВидаДокумента.РежимВводаПодразделенияУчетаЗатрат = Перечисления.РежимыВводаБухучетаВДанныхДляРасчетаЗарплаты.ВводитьВТабличнойЧасти);
Элементы.ИсполнителиРаботСуммаПоТарифу.Видимость = НастройкиВидаДокумента.ВыполненныеРаботыРаспределяютсяСверхТарифа;
Элементы.ИсполнителиРаботСотрудник.ОграничениеТипа = Новый ОписаниеТипов("СправочникСсылка.Сотрудники");
Элементы.ИсполнителиРаботКоэффициент.Видимость = НастройкиВидаДокумента.ВыполненныеРаботыРаспределяютсяСУчетомКоэффициентов;
ЖирныйШрифт = Новый Шрифт(Элементы.ИсполнителиРабот.Шрифт, , , Истина);
Элементы.ИсполнителиРаботТарифнаяСтавка.Видимость = НастройкиВидаДокумента.ПоказыватьТарифнуюСтавку;
Если НастройкиВидаДокумента.ПоказыватьТарифнуюСтавку Тогда
ЭлементОформления = УсловноеОформление.Элементы.Добавить();
ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ИсполнителиРаботТарифнаяСтавка");
ОформляемоеПоле.Использование = Истина;
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(ЭлементОформления.Отбор, "Объект.ЗначенияПоказателей.ФиксТарифнаяСтавка", Истина);
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Шрифт", ЖирныйШрифт);
КонецЕсли;
Элементы.ИсполнителиРаботОтработанноеВремяГруппа.Видимость = НастройкиВидаДокумента.ПоказыватьОтработанноеВремя;
Если НастройкиВидаДокумента.ПоказыватьОтработанноеВремя Тогда
ЭлементОформления = УсловноеОформление.Элементы.Добавить();
ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ИсполнителиРаботОтработаноДней");
ОформляемоеПоле.Использование = Истина;
ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ИсполнителиРаботОтработаноЧасов");
ОформляемоеПоле.Использование = Истина;
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(ЭлементОформления.Отбор, "Объект.ЗначенияПоказателей.ФиксОтработанноеВремя", Истина);
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Шрифт", ЖирныйШрифт);
КонецЕсли;
ЭлементОформления = УсловноеОформление.Элементы.Добавить();
ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ИсполнителиРаботСумма");
ОформляемоеПоле.Использование = Истина;
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(ЭлементОформления.Отбор, "Объект.ЗначенияПоказателей.ФиксЗначение", Истина);
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Шрифт", ЖирныйШрифт);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьСуммуПоТарифуВыполненныхРабот(СтрокаТаблицы)
СтрокаТаблицы.СуммаПоТарифу = ?(СтрокаТаблицы.ФиксЗначение, 0,
СтрокаТаблицы.ТарифнаяСтавка * ?(СтрокаТаблицы.ВремяВЧасах, СтрокаТаблицы.ОтработаноЧасов, СтрокаТаблицы.ОтработаноДней));
КонецПроцедуры
&НаСервере
Процедура УстановитьСвойстваПроверяемыхПолей()
Для Каждого КлючИЗначение Из ПроверяемыеПоля Цикл
ПутьКРеквизиту = КлючИЗначение.Ключ;
ИмяПоляФормы = КлючИЗначение.Значение;
Элементы[ИмяПоляФормы].АвтоОтметкаНезаполненного = Истина;
ЧастиПутиКРеквизиту = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПутьКРеквизиту, ".");
Если ЧастиПутиКРеквизиту.Количество() > 1 И ЧастиПутиКРеквизиту[0] = "Объект"
Или ЧастиПутиКРеквизиту.Количество() = 1 Тогда
Элементы[ИмяПоляФормы].ОтметкаНезаполненного = ЗначениеЗаполнено(ОбщегоНазначенияКлиентСервер.ПолучитьРеквизитФормыПоПути(ЭтотОбъект, ПутьКРеквизиту));
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура УстановитьСвязиПараметровВыбора()
МассивСвязейВыбораСотрудника = Новый Массив;
МассивСвязейВыбораСотрудника.Добавить(Новый СвязьПараметраВыбора("Отбор.ТекущаяОрганизация", "Объект.Организация"));
Если НастройкиВидаДокумента.ПоказыватьПодразделение Тогда
МассивСвязейВыбораСотрудника.Добавить(Новый СвязьПараметраВыбора("Отбор.ТекущееПодразделение", "Объект.Подразделение"));
КонецЕсли;
МассивПараметрыВыбораСотрудника = Новый Массив;
МассивПараметрыВыбораСотрудника.Добавить(Новый ПараметрВыбора("Отбор.ПоказыватьДоговорниковГПХ", Истина));
Если ПолучитьФункциональнуюОпцию("ИспользоватьПодработки") Тогда
МассивПараметрыВыбораСотрудника.Добавить(Новый ПараметрВыбора("Отбор.ПоказыватьПодработки", Истина));
КонецЕсли;
НовыйПараметрыВыбораСотрудника = Новый ФиксированныйМассив(МассивПараметрыВыбораСотрудника);
МассивСвязейВыбораПодразделения = Новый Массив;
МассивСвязейВыбораПодразделения.Добавить(Новый СвязьПараметраВыбора("Отбор.Владелец", "Объект.Организация"));
НовыеСвязиПараметровВыбораПодразделения = Новый ФиксированныйМассив(МассивСвязейВыбораПодразделения);
Если НастройкиВидаДокумента.ВидыРаботЗаполняютсяВДокументе Тогда
МассивСвязейВыбораСотрудника.Добавить(Новый СвязьПараметраВыбора("Отбор.ДатаПримененияОтбора", "Элементы.ВыполненныеРаботыПоСотрудникам.ТекущиеДанные.Период", РежимИзмененияСвязанногоЗначения.НеИзменять));
Элементы.ВыполненныеРаботыПоСотрудникамСотрудник.СвязиПараметровВыбора = Новый ФиксированныйМассив(МассивСвязейВыбораСотрудника);
Если НовыйПараметрыВыбораСотрудника <> Неопределено Тогда
Элементы.ВыполненныеРаботыПоСотрудникамСотрудник.ПараметрыВыбора = НовыйПараметрыВыбораСотрудника;
КонецЕсли;
Возврат;
Иначе
МассивСвязейВыбораСотрудника.Добавить(Новый СвязьПараметраВыбора("Отбор.МесяцПримененияОтбора", "Объект.Период", РежимИзмененияСвязанногоЗначения.НеИзменять));
НовыеСвязиПараметровВыбораСотрудника = Новый ФиксированныйМассив(МассивСвязейВыбораСотрудника);
КонецЕсли;
Если НастройкиВидаДокумента.НесколькоСотрудников Тогда
Элементы.ДанныеДетальноОбъект.СвязиПараметровВыбора = НовыеСвязиПараметровВыбораСотрудника;
Элементы.ДанныеСводноОбъект.СвязиПараметровВыбора = НовыеСвязиПараметровВыбораСотрудника;
Если НовыйПараметрыВыбораСотрудника <> Неопределено Тогда
Элементы.ДанныеДетальноОбъект.ПараметрыВыбора = НовыйПараметрыВыбораСотрудника;
Элементы.ДанныеСводноОбъект.ПараметрыВыбора = НовыйПараметрыВыбораСотрудника;
КонецЕсли;
Иначе
Если НастройкиВидаДокумента.НесколькоПодразделений Тогда
Элементы.ДанныеСводноОбъект.СвязиПараметровВыбора = НовыеСвязиПараметровВыбораПодразделения;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбработатьИзменениеОрганизацииНаСервере()
ЗаполнитьДанныеФормыПоОрганизации();
ЗаполнитьСписокОбъектов(Ложь);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьДанныеФормыПоОрганизации()
Если НЕ ЗначениеЗаполнено(Объект.Организация) Тогда
Возврат;
КонецЕсли;
ЗапрашиваемыеЗначения = Новый Структура("Организация, МесяцРасчета", "Объект.Организация", "Объект.Период");
ЗарплатаКадры.ЗаполнитьЗначенияВФорме(ЭтаФорма, ЗапрашиваемыеЗначения, ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве("Организация"));
ЗарплатаКадрыКлиентСервер.ЗаполнитьМесяцПоДате(ЭтотОбъект, "Объект.Период", "ПериодРегистрацииСтрокой");
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСписокОбъектов(Заполнять)
Если Не НастройкиВидаДокумента.ЗаполнятьСписокОбъектов И Не Заполнять Тогда
Возврат;
КонецЕсли;
Если НастройкиВидаДокумента.НесколькоОрганизаций Тогда
ЗаполнитьСписокОрганизаций();
Возврат;
КонецЕсли;
Если НастройкиВидаДокумента.НесколькоПодразделений Тогда
ЗаполнитьСписокПодразделений();
Возврат;
КонецЕсли;
Если НастройкиВидаДокумента.НесколькоСотрудников Тогда
ЗаполнитьСписокСотрудников();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСписокОрганизаций()
ДанныеСводно.Очистить();
ТекстЗапроса =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Организации.Ссылка КАК Объект
|ИЗ
| Справочник.Организации КАК Организации
|ГДЕ
| НЕ Организации.ПометкаУдаления";
Запрос = Новый Запрос(ТекстЗапроса);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ЗаполнитьЗначенияСвойств(ДанныеСводно.Добавить(), Выборка);
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСписокПодразделений()
ДанныеСводно.Очистить();
Если Не ЗначениеЗаполнено(Объект.Организация) Тогда
Возврат;
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Подразделения.Ссылка КАК Объект,
| Подразделения.РеквизитДопУпорядочиванияИерархического
|ИЗ
| Справочник.ПодразделенияОрганизаций КАК Подразделения
|ГДЕ
| Подразделения.Владелец = &Организация
| И Подразделения.Сформировано
| И НЕ Подразделения.Расформировано
| И НЕ Подразделения.ПометкаУдаления
|
|УПОРЯДОЧИТЬ ПО
| Подразделения.РеквизитДопУпорядочиванияИерархического";
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("Организация", Объект.Организация);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ЗаполнитьЗначенияСвойств(ДанныеСводно.Добавить(), Выборка);
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСписокСотрудников()
Если НастройкиВидаДокумента.ВыполненныеРаботыРаспределяютсяПоСотрудникам Тогда
ИмяТаблицы = "Объект.ЗначенияПоказателей";
Иначе
Если ИспользуетсяТаблицаДетально Тогда
ИмяТаблицы = "ДанныеДетально";
Иначе
ИмяТаблицы = "ДанныеСводно";
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(Объект.Организация) Тогда
Возврат;
КонецЕсли;
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
ПараметрыВТСотрудники = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц();
ПараметрыВТСотрудники.Организация = Объект.Организация;
ПараметрыВТСотрудники.Подразделение = Объект.Подразделение;
ПараметрыВТСотрудники.НачалоПериода = НачалоМесяца(Объект.Период);
ПараметрыВТСотрудники.ОкончаниеПериода = КонецМесяца(Объект.Период);
ПараметрыВТСотрудники.ПодработкиРаботниковПоТрудовымДоговорам = ПолучитьФункциональнуюОпцию("ИспользоватьПодработки");
КадровыйУчет.СоздатьВТСотрудникиОрганизации(МенеджерВременныхТаблиц, Истина, ПараметрыВТСотрудники);
Описатель = КадровыйУчет.ОписательВременныхТаблицДляСоздатьВТКадровыеДанныеСотрудников(МенеджерВременныхТаблиц, "ВТСотрудникиОрганизации");
КадровыйУчет.СоздатьВТКадровыеДанныеСотрудников(Описатель, Истина, "Подразделение,Должность");
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Сотрудники.Ссылка КАК Сотрудник
|ИЗ
| ВТКадровыеДанныеСотрудников КАК КадровыеДанныеСотрудников
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники
| ПО (Сотрудники.Ссылка = КадровыеДанныеСотрудников.Сотрудник)";
ПсевдонимыТаблиц = Новый Соответствие;
ПсевдонимыТаблиц.Вставить("Справочник.ПодразделенияОрганизаций", "КадровыеДанныеСотрудников");
ПсевдонимыТаблиц.Вставить("Справочник.Должности", "КадровыеДанныеСотрудников");
ПсевдонимыТаблиц.Вставить("Справочник.Сотрудники", "Сотрудники");
ЗарплатаКадры.ДополнитьТекстЗапросаУпорядочиваниемСотрудников(Запрос, ПсевдонимыТаблиц);
Выборка = Запрос.Выполнить().Выбрать();
Таблица = ОбщегоНазначенияКлиентСервер.ПолучитьРеквизитФормыПоПути(ЭтотОбъект, ИмяТаблицы);
Таблица.Очистить();
Пока Выборка.Следующий() Цикл
НоваяСтрока = Таблица.Добавить();
НоваяСтрока.Объект = Выборка.Сотрудник;
КонецЦикла;
ЗаполнитьПредставленияВСтроках();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьЗаголовокФормы()
АвтоЗаголовок = Не ЗначениеЗаполнено(Объект.ВидДокумента);
Если Не АвтоЗаголовок Тогда
ПредставлениеДокумента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.ВидДокумента, "ПредставлениеДокумента");
Если Параметры.Ключ.Пустая() Тогда
Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 (создание)'"), ПредставлениеДокумента);
Иначе
Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 %2 от %3'"), ПредставлениеДокумента, Объект.Номер, Объект.Дата);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриИзмененииПериода()
Если ИспользуетсяТаблицаДетально
Или НастройкиВидаДокумента.НесколькоСотрудников И НастройкиВидаДокумента.ЗаполнятьСписокОбъектов Тогда
ПриИзмененииПериодаНаСервере();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриИзмененииПериодаНаСервере()
Если ИспользуетсяТаблицаДетально Тогда
ОформитьПоляТаблицыДнейМесяца();
КонецЕсли;
Если НастройкиВидаДокумента.НесколькоСотрудников
И НастройкиВидаДокумента.ЗаполнятьСписокОбъектов Тогда
УточнитьСписокСотрудников();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УточнитьСписокСотрудников()
Если Не ЗначениеЗаполнено(Объект.Организация)
Или НастройкиВидаДокумента.ПоказыватьПодразделение И Не ЗначениеЗаполнено(Объект.Подразделение) Тогда
Возврат;
КонецЕсли;
ПараметрыПолученияСотрудниковОрганизаций = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц();
ПараметрыПолученияСотрудниковОрганизаций.Организация = Объект.Организация;
ПараметрыПолученияСотрудниковОрганизаций.Подразделение = Объект.Подразделение;
ПараметрыПолученияСотрудниковОрганизаций.НачалоПериода = НачалоМесяца(Объект.Период);
ПараметрыПолученияСотрудниковОрганизаций.ОкончаниеПериода = КонецМесяца(Объект.Период);
ПараметрыПолученияСотрудниковОрганизаций.ПодработкиРаботниковПоТрудовымДоговорам = ПолучитьФункциональнуюОпцию("ИспользоватьПодработки");
ТаблицаСотрудников = КадровыйУчет.СотрудникиОрганизации(Истина, ПараметрыПолученияСотрудниковОрганизаций);
ИмяТаблицы = ?(ИспользуетсяТаблицаДетально, "ДанныеДетально", "ДанныеСводно");
Для Каждого СтрокаСотрудников Из ТаблицаСотрудников Цикл
Если ЭтотОбъект[ИмяТаблицы].НайтиСтроки(Новый Структура("Объект", СтрокаСотрудников.Сотрудник)).Количество() > 0 Тогда
Продолжить;
КонецЕсли;
НоваяСтрока = ЭтотОбъект[ИмяТаблицы].Добавить();
НоваяСтрока.Объект = СтрокаСотрудников.Сотрудник;
КонецЦикла;
УдаляемыеСтроки = Новый Массив;
Для Каждого СтрокаКоллекции Из ЭтотОбъект[ИмяТаблицы] Цикл
Если ТаблицаСотрудников.НайтиСтроки(Новый Структура("Сотрудник", СтрокаКоллекции.Объект)).Количество() = 0 Тогда
УдаляемыеСтроки.Добавить(СтрокаКоллекции);
КонецЕсли;
КонецЦикла;
Для Каждого УдаляемаяСтрока Из УдаляемыеСтроки Цикл
ЭтотОбъект[ИмяТаблицы].Удалить(УдаляемаяСтрока);
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ОформитьПоляТаблицыДнейМесяца()
УчетРабочегоВремениРасширенныйФормы.ОформитьПоляТаблицыДнейМесяца(Элементы, Объект.Период, "ДанныеДетальноДень%1Группа");
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ЗаполнитьИтогоПоСтрокеДанныеДетально(СтрокаКоллекции, ИмяРеквизита, Месяц)
СуммаЗначений = 0;
КоличествоЗначений = 0;
Для НомерДня = 1 По ЗарплатаКадрыКлиентСервер.КоличествоДнейМесяца(Месяц) Цикл
Если ЗначениеЗаполнено(СтрокаКоллекции[ИмяРеквизита + "_ЗначениеНаДень_" + НомерДня]) Тогда
СуммаЗначений = СуммаЗначений + СтрокаКоллекции[ИмяРеквизита + "_ЗначениеНаДень_" + НомерДня];
КоличествоЗначений = КоличествоЗначений + 1;
КонецЕсли;
КонецЦикла;
СтрокаКоллекции[ИмяРеквизита + "_СуммаЗначений"] = СуммаЗначений;
СтрокаКоллекции[ИмяРеквизита + "_КоличествоЗначений"] = КоличествоЗначений;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ЗаполнитьИтогоПоСтрокеДанныеСводно(ВидыВремени, СтрокаКоллекции)
ВсегоДней = 0;
ВсегоЧасов = 0;
Для Каждого СтрокаВидаВремени Из ВидыВремени Цикл
Если СтрокаВидаВремени.ВводитсяДетально Тогда
Продолжить;
КонецЕсли;
ВсегоДней = ВсегоДней + СтрокаКоллекции[СтрокаВидаВремени.ИмяРеквизитаСводноДней];
ВсегоЧасов = ВсегоЧасов + СтрокаКоллекции[СтрокаВидаВремени.ИмяРеквизитаСводноЧасов];
КонецЦикла;
СтрокаКоллекции["ДанныеСводно_СводноеВремяДни_Итог"] = ВсегоДней;
СтрокаКоллекции["ДанныеСводно_СводноеВремяЧасы_Итог"] = ВсегоЧасов;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ЗаполнитьИтогоПоКолонке(Форма, КоллекцияСтрок, ИмяКолонки)
Форма[ИмяКолонки + "_Итог"] = КоллекцияСтрок.Итог(ИмяКолонки);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ДатаДняМесяца(НомерДня, ЛюбаяДатаМесяца)
Возврат Дата(Год(ЛюбаяДатаМесяца), Месяц(ЛюбаяДатаМесяца), НомерДня);
КонецФункции
&НаСервере
Процедура ПроверитьДублиСтрок(ИмяТаблицы, СоставКлюча, Отказ)
ОтборСтрок = Новый Структура(СоставКлюча);
РанееОбнаруженныеДубли = Новый ТаблицаЗначений;
ПоляКлюча = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СоставКлюча);
Для Каждого ПолеКлюча Из ПоляКлюча Цикл
РанееОбнаруженныеДубли.Колонки.Добавить(ПолеКлюча);
КонецЦикла;
Для Каждого СтрокаКоллекции Из ЭтотОбъект[ИмяТаблицы] Цикл
ЗаполнитьЗначенияСвойств(ОтборСтрок, СтрокаКоллекции);
НайденныеСтроки = ЭтотОбъект[ИмяТаблицы].НайтиСтроки(ОтборСтрок);
Если НайденныеСтроки.Количество() = 1 Тогда
Продолжить;
КонецЕсли;
Если РанееОбнаруженныеДубли.НайтиСтроки(ОтборСтрок).Количество() > 0 Тогда
Продолжить;
КонецЕсли;
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Строка по %1 встречается в таблице более одного раза'"), ОтборСтрок.Объект);
ПолеФормы = ИмяТаблицы + "[" + ЭтотОбъект[ИмяТаблицы].Индекс(НайденныеСтроки[0]) + "].Объект";
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , ПолеФормы, , Отказ);
ЗаполнитьЗначенияСвойств(РанееОбнаруженныеДубли.Добавить(), СтрокаКоллекции);
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция АдресСпискаПодобранныхСотрудников(Знач ТаблицаСотрудников)
Возврат ПоместитьВоВременноеХранилище(ТаблицаСотрудников.Выгрузить(,"Объект").ВыгрузитьКолонку("Объект"), УникальныйИдентификатор);
КонецФункции
&НаСервере
Функция АдресСпискаПодобранныхПодразделений(Знач ТаблицаПодразделений)
Возврат ПоместитьВоВременноеХранилище(ТаблицаПодразделений.Выгрузить(,"Объект").ВыгрузитьКолонку("Объект"), УникальныйИдентификатор);
КонецФункции
&НаСервере
Процедура ОбработкаПодбораСотрудниковНаСервере(ВыбранноеЗначение, ПутьКТаблицеСотрудников, ЗаполнятьТаблицуИсполнителиРабот = Ложь)
ТаблицаСотрудников = ЭтотОбъект;
Для Каждого ЗначениеМассива Из ПутьКТаблицеСотрудников Цикл
ТаблицаСотрудников = ТаблицаСотрудников[ЗначениеМассива];
КонецЦикла;
Если ТипЗнч(ВыбранноеЗначение) <> Тип("Массив") Тогда
ВыбранныеСотрудники = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ВыбранноеЗначение);
Иначе
ВыбранныеСотрудники = ОбщегоНазначенияКлиентСервер.СвернутьМассив(ВыбранноеЗначение)
КонецЕсли;
ИдентификаторыСтрок = Новый Массив;
Для Каждого Сотрудник Из ВыбранныеСотрудники Цикл
СтрокиПоСотруднику = ТаблицаСотрудников.НайтиСтроки(Новый Структура("Объект", Сотрудник));
Если СтрокиПоСотруднику.Количество() = 0 Тогда
НоваяСтрока = ТаблицаСотрудников.Добавить();
НоваяСтрока.Объект = Сотрудник;
ИдентификаторыСтрок.Добавить(НоваяСтрока.ПолучитьИдентификатор());
ЭтотОбъект.Модифицированность = Истина;
КонецЕсли;
КонецЦикла;
Если ЗаполнятьТаблицуИсполнителиРабот Тогда
ЗаполнитьТарифныеСтавкиИОтработанноеВремя(ИдентификаторыСтрок);
РаспределитьСтоимостьРаботПоСотрудникам();
КонецЕсли;
КонецПроцедуры
#Область РаботаСЗначениямиПоказателей
&НаСервере
Процедура ЗаполнитьСведенияОПоказателях(НастройкиВидаДокумента)
ТекстЗапроса =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПоказателиРасчетаЗарплаты.Ссылка КАК Показатель,
| ПоказателиРасчетаЗарплаты.СпособПримененияЗначений КАК СпособПрименения,
| ПоказателиРасчетаЗарплаты.СпособВводаЗначений КАК СпособВвода,
| ПоказателиРасчетаЗарплаты.НазначениеПоказателя КАК Назначение,
| ПоказателиРасчетаЗарплаты.Наименование,
| ПоказателиРасчетаЗарплаты.НазначениеПоказателя.Порядок КАК НазначениеПоказателяПорядок,
| ПоказателиРасчетаЗарплаты.СпособПримененияЗначений.Порядок КАК СпособПримененияЗначенийПорядок,
| ПоказателиРасчетаЗарплаты.СпособВводаЗначений.Порядок КАК СпособВводаЗначенийПорядок,
| ПоказателиРасчетаЗарплаты.Идентификатор КАК Идентификатор,
| ВЫБОР
| КОГДА ПоказателиРасчетаЗарплаты.КраткоеНаименование = """"
| ИЛИ ПоказателиРасчетаЗарплаты.КраткоеНаименование ПОДОБНО ""[ ]""
| ТОГДА ПоказателиРасчетаЗарплаты.Наименование
| ИНАЧЕ ПоказателиРасчетаЗарплаты.КраткоеНаименование
| КОНЕЦ КАК КраткоеНаименование,
| ПоказателиРасчетаЗарплаты.Точность,
| ВЫБОР
| КОГДА &ЗначенияПоказателейВводятсяНаРазныеДаты
| ТОГДА ИСТИНА
| ИНАЧЕ ВЫБОР
| КОГДА ПоказателиРасчетаЗарплаты.НазначениеПоказателя = ЗНАЧЕНИЕ(Перечисление.НазначенияПоказателейРасчетаЗарплаты.ДляОрганизации)
| И &НесколькоОрганизаций
| ИЛИ ПоказателиРасчетаЗарплаты.НазначениеПоказателя = ЗНАЧЕНИЕ(Перечисление.НазначенияПоказателейРасчетаЗарплаты.ДляПодразделения)
| И &НесколькоПодразделений
| ИЛИ ПоказателиРасчетаЗарплаты.НазначениеПоказателя = ЗНАЧЕНИЕ(Перечисление.НазначенияПоказателейРасчетаЗарплаты.ДляСотрудника)
| И &НесколькоСотрудников
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ
| КОНЕЦ КАК ВводитсяВТаблице
|ИЗ
| Справочник.ПоказателиРасчетаЗарплаты КАК ПоказателиРасчетаЗарплаты
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыДокументовВводДанныхДляРасчетаЗарплаты.Показатели КАК ПоказателиВидаДокумента
| ПО (ПоказателиВидаДокумента.Показатель = ПоказателиРасчетаЗарплаты.Ссылка)
| И (ПоказателиВидаДокумента.Ссылка = &ВидДокумента)
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ДанныеДляРасчетаЗарплаты.ЗначенияПоказателей КАК ОбъектыДокумента
| ПО (ОбъектыДокумента.Показатель = ПоказателиРасчетаЗарплаты.Ссылка)
| И (ОбъектыДокумента.Ссылка = &ДокументСсылка)
|ГДЕ
| (ПоказателиВидаДокумента.Ссылка ЕСТЬ НЕ NULL
| ИЛИ ОбъектыДокумента.Показатель ЕСТЬ НЕ NULL )
|
|УПОРЯДОЧИТЬ ПО
| СпособПримененияЗначенийПорядок,
| НазначениеПоказателяПорядок,
| СпособВводаЗначенийПорядок,
| ПоказателиРасчетаЗарплаты.Наименование";
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("ВидДокумента", Объект.ВидДокумента);
Запрос.УстановитьПараметр("ДокументСсылка", Объект.Ссылка);
Запрос.УстановитьПараметр("ЗначенияПоказателейВводятсяНаРазныеДаты", НастройкиВидаДокумента.ЗначенияПоказателейВводятсяНаРазныеДаты);
Запрос.УстановитьПараметр("НесколькоОрганизаций", НастройкиВидаДокумента.НесколькоОрганизаций);
Запрос.УстановитьПараметр("НесколькоПодразделений", НастройкиВидаДокумента.НесколькоПодразделений);
Запрос.УстановитьПараметр("НесколькоСотрудников", НастройкиВидаДокумента.НесколькоСотрудников);
Выборка = Запрос.Выполнить().Выбрать();
ПоказателиРасчетаЗарплаты.Очистить();
Пока Выборка.Следующий() Цикл
НовыйПоказатель = ПоказателиРасчетаЗарплаты.Добавить();
ЗаполнитьЗначенияСвойств(НовыйПоказатель, Выборка);
НовыйПоказатель.ИмяРеквизита = Выборка.Идентификатор + ЗарплатаКадрыРасширенныйКлиентСервер.УникальноеИмяРеквизита();
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ПрочитатьЗначенияПоказателей(ТекущийОбъект = Неопределено)
Если ТекущийОбъект = Неопределено Тогда
ТекущийОбъект = Объект;
КонецЕсли;
Для Каждого СтрокаОбъекты Из ТекущийОбъект.ЗначенияПоказателей Цикл
СведенияОПоказателе = ПоказателиРасчетаЗарплаты.НайтиСтроки(Новый Структура("Показатель", СтрокаОбъекты.Показатель))[0];
Если Не СведенияОПоказателе.ВводитсяВТаблице Тогда
ЭтотОбъект[СведенияОПоказателе.ИмяРеквизита] = СтрокаОбъекты.Значение;
Продолжить;
КонецЕсли;
ПараметрыОтбора = Новый Структура("Объект", СтрокаОбъекты.Объект);
Если Не ИспользуетсяТаблицаДетально
И НастройкиВидаДокумента.ЗначенияПоказателейВводятсяНаРазныеДаты Тогда
ПараметрыОтбора.Вставить("Период", СтрокаОбъекты.Период);
ПараметрыОтбора.Вставить("ПериодОкончания", СтрокаОбъекты.ПериодОкончания);
КонецЕсли;
НайденныеСтроки = ЭтотОбъект[СведенияОПоказателе.ИмяТаблицы].НайтиСтроки(ПараметрыОтбора);
Если НайденныеСтроки.Количество() = 0 Тогда
СтрокаКоллекции = ЭтотОбъект[СведенияОПоказателе.ИмяТаблицы].Добавить();
ЗаполнитьЗначенияСвойств(СтрокаКоллекции, СтрокаОбъекты);
НайденныеСтроки.Добавить(СтрокаКоллекции);
КонецЕсли;
Для Каждого СтрокаКоллекции Из НайденныеСтроки Цикл
Если СведенияОПоказателе.ВводитсяДетально Тогда
СтрокаКоллекции[СведенияОПоказателе.ИмяРеквизита + "_ЗначениеНаДень_" + День(СтрокаОбъекты.Период)] = СтрокаОбъекты.Значение;
Иначе
СтрокаКоллекции[СведенияОПоказателе.ИмяРеквизита] = СтрокаОбъекты.Значение;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Если ИспользуетсяТаблицаДетально Тогда
НайденныеСтроки = ПоказателиРасчетаЗарплаты.НайтиСтроки(Новый Структура("ВводитсяДетально", Истина));
Для Каждого СведенияОПоказателе Из НайденныеСтроки Цикл
Для Каждого СтрокаКоллекции Из ДанныеДетально Цикл
ЗаполнитьИтогоПоСтрокеДанныеДетально(СтрокаКоллекции, СведенияОПоказателе.ИмяРеквизита, ТекущийОбъект.Период);
КонецЦикла;
ЗаполнитьИтогоПоКолонке(ЭтотОбъект, ДанныеДетально, СведенияОПоказателе.ИмяРеквизита + "_КоличествоЗначений");
ЗаполнитьИтогоПоКолонке(ЭтотОбъект, ДанныеДетально, СведенияОПоказателе.ИмяРеквизита + "_СуммаЗначений");
Для НомерДня = 1 По 31 Цикл
ЗаполнитьИтогоПоКолонке(ЭтотОбъект, ДанныеДетально, СведенияОПоказателе.ИмяРеквизита + "_ЗначениеНаДень_" + НомерДня);
КонецЦикла;
КонецЦикла;
КонецЕсли;
НайденныеСтроки = ПоказателиРасчетаЗарплаты.НайтиСтроки(Новый Структура("ВводитсяДетально, ВводитсяВТаблице", Ложь, Истина));
Для Каждого СведенияОПоказателе Из НайденныеСтроки Цикл
ЗаполнитьИтогоПоКолонке(ЭтотОбъект, ?(ИспользуетсяТаблицаДетально, ДанныеДетально, ДанныеСводно), СведенияОПоказателе.ИмяРеквизита);
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ИмяПоляОбъектаВладельцаПоказателя(НазначениеПоказателя)
ИменаПолей = Новый Соответствие;
ИменаПолей.Вставить(Перечисления.НазначенияПоказателейРасчетаЗарплаты.ДляОрганизации, "Организация");
ИменаПолей.Вставить(Перечисления.НазначенияПоказателейРасчетаЗарплаты.ДляПодразделения, "Подразделение");
ИменаПолей.Вставить(Перечисления.НазначенияПоказателейРасчетаЗарплаты.ДляСотрудника, "Сотрудник");
Возврат ИменаПолей[НазначениеПоказателя];
КонецФункции
&НаСервере
Процедура ЗаполнитьТабличнуюЧастьПоказателей(ТекущийОбъект, Отказ)
ТекущийОбъект.ЗначенияПоказателей.Очистить();
Для Каждого СведенияОПоказателе Из ПоказателиРасчетаЗарплаты Цикл
Если Не СведенияОПоказателе.ВводитсяВТаблице Тогда
НоваяСтрока = ТекущийОбъект.ЗначенияПоказателей.Добавить();
НоваяСтрока.Объект = ТекущийОбъект[ИмяПоляОбъектаВладельцаПоказателя(СведенияОПоказателе.Назначение)];
НоваяСтрока.Период = ТекущийОбъект.Период;
НоваяСтрока.ПериодОкончания = ТекущийОбъект.ПериодОкончания;
НоваяСтрока.Показатель = СведенияОПоказателе.Показатель;
НоваяСтрока.Значение = ЭтотОбъект[СведенияОПоказателе.ИмяРеквизита];
Продолжить;
КонецЕсли;
Если СведенияОПоказателе.ВводитсяДетально Тогда
Для Каждого СтрокаКоллекции Из ДанныеДетально Цикл
Для НомерДня = 1 По ЗарплатаКадрыКлиентСервер.КоличествоДнейМесяца(ТекущийОбъект.Период) Цикл
Если СтрокаКоллекции[СведенияОПоказателе.ИмяРеквизита + "_ЗначениеНаДень_" + НомерДня] = 0 Тогда
Продолжить;
КонецЕсли;
НоваяСтрока = ТекущийОбъект.ЗначенияПоказателей.Добавить();
НоваяСтрока.Объект = СтрокаКоллекции.Объект;
НоваяСтрока.Показатель = СведенияОПоказателе.Показатель;
НоваяСтрока.Значение = СтрокаКоллекции[СведенияОПоказателе.ИмяРеквизита + "_ЗначениеНаДень_" + НомерДня];
НоваяСтрока.Период = ДатаДняМесяца(НомерДня, ТекущийОбъект.Период);
КонецЦикла;
КонецЦикла;
Иначе
Для Каждого СтрокаКоллекции Из ЭтотОбъект[СведенияОПоказателе.ИмяТаблицы] Цикл
Если СведенияОПоказателе.СпособВвода = Перечисления.СпособыВводаЗначенийПоказателейРасчетаЗарплаты.НакапливаетсяПоОтдельнымЗначениям
И СтрокаКоллекции[СведенияОПоказателе.ИмяРеквизита] = 0 Тогда
Продолжить;
КонецЕсли;
НоваяСтрока = ТекущийОбъект.ЗначенияПоказателей.Добавить();
Если Не ОбъектВводитсяВТаблице(СведенияОПоказателе.Назначение) Тогда
СтрокаКоллекции.Объект = ТекущийОбъект[ИмяПоляОбъектаВладельцаПоказателя(СведенияОПоказателе.Назначение)];
КонецЕсли;
НоваяСтрока.Объект = СтрокаКоллекции.Объект;
НоваяСтрока.Показатель = СведенияОПоказателе.Показатель;
НоваяСтрока.Значение = СтрокаКоллекции[СведенияОПоказателе.ИмяРеквизита];
Если НастройкиВидаДокумента.ЗначенияПоказателейВводятсяНаРазныеДаты
И Не ИспользуетсяТаблицаДетально Тогда
НоваяСтрока.Период = СтрокаКоллекции.Период;
НоваяСтрока.ПериодОкончания = СтрокаКоллекции.ПериодОкончания;
Иначе
НоваяСтрока.Период = ТекущийОбъект.Период;
НоваяСтрока.ПериодОкончания = ТекущийОбъект.ПериодОкончания;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура НастроитьЭлементыВводаЗначенийПоказателей(ИмяТаблицыДанных)
ДобавляемыеРеквизиты = Новый Массив;
Для Каждого СведенияОПоказателе Из ПоказателиРасчетаЗарплаты Цикл
Путь = ?(СведенияОПоказателе.ВводитсяВТаблице, ИмяТаблицыДанных, "");
СведенияОПоказателе.ИмяТаблицы = Путь;
Если ИспользуетсяТаблицаДетально
И СведенияОПоказателе.СпособВвода = Перечисления.СпособыВводаЗначенийПоказателейРасчетаЗарплаты.НакапливаетсяПоОтдельнымЗначениям Тогда
СведенияОПоказателе.ВводитсяДетально = Истина;
ДобавляемыеРеквизиты.Добавить(
Новый РеквизитФормы(СведенияОПоказателе.ИмяРеквизита + "_Показатель",
Новый ОписаниеТипов("СправочникСсылка.ПоказателиРасчетаЗарплаты"),
Путь, СведенияОПоказателе.КраткоеНаименование, Истина));
ДобавляемыеРеквизиты.Добавить(
Новый РеквизитФормы(СведенияОПоказателе.ИмяРеквизита + "_КоличествоЗначений",
Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15)),
Путь, СведенияОПоказателе.КраткоеНаименование, Истина));
ДобавляемыеРеквизиты.Добавить(
Новый РеквизитФормы(СведенияОПоказателе.ИмяРеквизита + "_КоличествоЗначений_Итог",
Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15)),
"", СведенияОПоказателе.КраткоеНаименование, Истина));
ДобавляемыеРеквизиты.Добавить(
Новый РеквизитФормы(СведенияОПоказателе.ИмяРеквизита + "_СуммаЗначений",
Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, СведенияОПоказателе.Точность)),
Путь, СведенияОПоказателе.КраткоеНаименование, Истина));
ДобавляемыеРеквизиты.Добавить(
Новый РеквизитФормы(СведенияОПоказателе.ИмяРеквизита + "_СуммаЗначений_Итог",
Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15)),
"", СведенияОПоказателе.КраткоеНаименование, Истина));
Для НомерДня = 1 По 31 Цикл
ДобавляемыеРеквизиты.Добавить(
Новый РеквизитФормы(СведенияОПоказателе.ИмяРеквизита + "_ЗначениеНаДень_" + НомерДня,
Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, СведенияОПоказателе.Точность)),
Путь, СведенияОПоказателе.КраткоеНаименование, Истина));
ДобавляемыеРеквизиты.Добавить(
Новый РеквизитФормы(СведенияОПоказателе.ИмяРеквизита + "_ЗначениеНаДень_" + НомерДня + "_Итог",
Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, СведенияОПоказателе.Точность)),
, СведенияОПоказателе.КраткоеНаименование, Истина));
КонецЦикла;
Иначе
ДобавляемыеРеквизиты.Добавить(
Новый РеквизитФормы(СведенияОПоказателе.ИмяРеквизита,
Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, СведенияОПоказателе.Точность)),
Путь, СведенияОПоказателе.КраткоеНаименование, Истина));
Если СведенияОПоказателе.ВводитсяВТаблице Тогда
ДобавляемыеРеквизиты.Добавить(
Новый РеквизитФормы(СведенияОПоказателе.ИмяРеквизита + "_Итог",
Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, СведенияОПоказателе.Точность)),
"", СведенияОПоказателе.КраткоеНаименование, Истина));
КонецЕсли;
КонецЕсли;
КонецЦикла;
ИменаСуществующихРеквизитов = Новый Массив;
ЗарплатаКадры.ЗаполнитьМассивИменРеквизитовФормы(ЭтотОбъект, ИменаСуществующихРеквизитов);
ЗарплатаКадры.ЗаполнитьМассивИменРеквизитовФормы(ЭтотОбъект, ИменаСуществующихРеквизитов, ИмяТаблицыДанных);
ЗарплатаКадры.ИзменитьРеквизитыФормы(ЭтотОбъект, ДобавляемыеРеквизиты, ИменаСуществующихРеквизитов);
ГруппыПолейПоказателей = Новый Соответствие;
ГруппыПолейПоказателей.Вставить("ДанныеДетально", Элементы.ДанныеСводноГруппаКолонок);
ГруппыПолейПоказателей.Вставить("ДанныеСводно", Элементы.ПоказателиСводноГруппаКолонок);
ГруппаПолейПоказателей = ГруппыПолейПоказателей[ИмяТаблицыДанных];
Для Каждого СведенияОПоказателе Из ПоказателиРасчетаЗарплаты Цикл
Если ПустаяСтрока(СведенияОПоказателе.ИмяРеквизита) Тогда
Продолжить;
КонецЕсли;
Если СведенияОПоказателе.ВводитсяДетально Тогда
ИмяПоляВвода = ИмяТаблицыДанных + "_" + СведенияОПоказателе.ИмяРеквизита + "_Показатель";
Если Элементы.Найти(ИмяПоляВвода) <> Неопределено Тогда
Продолжить;
КонецЕсли;
ПолеВвода = Элементы.Добавить(ИмяПоляВвода, Тип("ПолеФормы"), Элементы.ДанныеДетальноЗаголовкиПолейГруппа);
ПолеВвода.ПутьКДанным = ИмяТаблицыДанных + "." + СведенияОПоказателе.ИмяРеквизита + "_Показатель";
ПолеВвода.Вид = ВидПоляФормы.ПолеНадписи;
ПолеВвода.ОтображатьВШапке = Ложь;
ИмяПоляВвода = ИмяТаблицыДанных + "_" + СведенияОПоказателе.ИмяРеквизита + "_КоличествоЗначений";
ПолеВводаКоличество = Элементы.Добавить(ИмяПоляВвода, Тип("ПолеФормы"), Элементы.ДанныеДетальноКоличествоЗначенийГруппа);
ПолеВводаКоличество.ПутьКДанным = ИмяТаблицыДанных + "." + СведенияОПоказателе.ИмяРеквизита + "_КоличествоЗначений";
ПолеВводаКоличество.Вид = ВидПоляФормы.ПолеНадписи;
ПолеВводаКоличество.ОтображатьВШапке = Ложь;
ПолеВводаКоличество.РастягиватьПоГоризонтали = Ложь;
ПолеВводаКоличество.ОтображатьВПодвале = Истина;
ПолеВводаКоличество.ПутьКДаннымПодвала = СведенияОПоказателе.ИмяРеквизита + "_КоличествоЗначений_Итог";
ИмяПоляВвода = ИмяТаблицыДанных + "_" + СведенияОПоказателе.ИмяРеквизита + "_СуммаЗначений";
ПолеВводаСумма= Элементы.Добавить(ИмяПоляВвода, Тип("ПолеФормы"), Элементы.ДанныеДетальноСуммаЗначенийГруппа);
ПолеВводаСумма.ПутьКДанным = ИмяТаблицыДанных + "." + СведенияОПоказателе.ИмяРеквизита + "_СуммаЗначений";
ПолеВводаСумма.Вид = ВидПоляФормы.ПолеНадписи;
ПолеВводаСумма.ОтображатьВШапке = Ложь;
ПолеВводаСумма.РастягиватьПоГоризонтали = Ложь;
ПолеВводаСумма.ОтображатьВПодвале = Истина;
ПолеВводаСумма.ПутьКДаннымПодвала = СведенияОПоказателе.ИмяРеквизита + "_СуммаЗначений_Итог";
Для НомерДня = 1 По 31 Цикл
ИмяПоляВвода = ИмяТаблицыДанных + "_" + СведенияОПоказателе.ИмяРеквизита + "_ЗначениеНаДень_" + НомерДня;
ПолеВвода = Элементы.Добавить(ИмяПоляВвода, Тип("ПолеФормы"), Элементы["ДанныеДетальноДень" + НомерДня + "Группа"]);
ПолеВвода.ПутьКДанным = ИмяТаблицыДанных + "." + СведенияОПоказателе.ИмяРеквизита + "_ЗначениеНаДень_" + НомерДня;
ПолеВвода.Вид = ВидПоляФормы.ПолеВвода;
ПолеВвода.ОтображатьВШапке = Ложь;
ПолеВвода.Подсказка = СведенияОПоказателе.Наименование;
ПолеВвода.Ширина = 4;
ПолеВвода.РастягиватьПоГоризонтали = Ложь;
ПолеВвода.ОтображатьВПодвале = Истина;
ПолеВвода.ПутьКДаннымПодвала = СведенияОПоказателе.ИмяРеквизита + "_ЗначениеНаДень_" + НомерДня + "_Итог";
ПолеВвода.УстановитьДействие("ПриИзменении", "ДанныеДетальноЗначениеНаДеньПриИзменении");
КонецЦикла;
Продолжить;
КонецЕсли;
ИмяПоляВвода = ?(СведенияОПоказателе.ВводитсяВТаблице, ИмяТаблицыДанных + "_", "") + СведенияОПоказателе.ИмяРеквизита;
Если Элементы.Найти(ИмяПоляВвода) <> Неопределено Тогда
Продолжить;
КонецЕсли;
Если СведенияОПоказателе.ВводитсяВТаблице Тогда
ПолеВвода = Элементы.Добавить(ИмяПоляВвода, Тип("ПолеФормы"), ГруппаПолейПоказателей);
ПолеВвода.ПутьКДанным = ИмяТаблицыДанных + "." + СведенияОПоказателе.ИмяРеквизита;
Если Не СведенияОПоказателе.ВводитсяДетально Тогда
ПолеВвода.ПутьКДаннымПодвала = СведенияОПоказателе.ИмяРеквизита + "_Итог";
ПолеВвода.УстановитьДействие("ПриИзменении", "Подключаемый_ДанныеСводноКолонкаПриИзменении");
КонецЕсли;
Иначе
ПолеВвода = Элементы.Добавить(ИмяПоляВвода, Тип("ПолеФормы"), ГруппаФормыПоказателиПолями(СведенияОПоказателе.Назначение));
ПолеВвода.ПутьКДанным = СведенияОПоказателе.ИмяРеквизита;
КонецЕсли;
ПолеВвода.Вид = ВидПоляФормы.ПолеВвода;
ПолеВвода.КнопкаВыбора = Истина;
ПолеВвода.Подсказка = СведенияОПоказателе.Наименование;
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ГруппаФормыПоказателиПолями(Назначение)
ГруппыФормы = Новый Соответствие;
ГруппыФормы.Вставить(Перечисления.НазначенияПоказателейРасчетаЗарплаты.ДляОрганизации, Элементы.ПоказателиПолямиОрганизацииГруппа);
ГруппыФормы.Вставить(Перечисления.НазначенияПоказателейРасчетаЗарплаты.ДляПодразделения, Элементы.ПоказателиПолямиПодразделенияГруппа);
ГруппыФормы.Вставить(Перечисления.НазначенияПоказателейРасчетаЗарплаты.ДляСотрудника, Элементы.ПоказателиПолямиСотрудникаГруппа);
Возврат ГруппыФормы[Назначение];
КонецФункции
&НаСервере
Функция ОбъектВводитсяВТаблице(НазначениеПоказателя)
Возврат НазначениеПоказателя = Перечисления.НазначенияПоказателейРасчетаЗарплаты.ДляОрганизации
И НастройкиВидаДокумента.НесколькоОрганизаций
Или НазначениеПоказателя = Перечисления.НазначенияПоказателейРасчетаЗарплаты.ДляПодразделения
И НастройкиВидаДокумента.НесколькоПодразделений
Или НазначениеПоказателя = Перечисления.НазначенияПоказателейРасчетаЗарплаты.ДляСотрудника
И НастройкиВидаДокумента.НесколькоСотрудников;
КонецФункции
&НаСервере
Процедура ОбработатьИзменениеПоказателейНаСервере(ЗначенияПоказателей)
Если ПоказателиРасчетаЗарплаты.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ДанныеРасчета = ОбщегоНазначенияКлиентСервер.ПолучитьРеквизитФормыПоПути(ЭтотОбъект, ПоказателиРасчетаЗарплаты[0].ИмяТаблицы);
Для Каждого СтрокаДанных Из ДанныеРасчета Цикл
Для Каждого СтрокаПоказателя Из ПоказателиРасчетаЗарплаты Цикл
ЗначениеПоказателя = ЗначенияПоказателей[СтрокаПоказателя.Показатель];
Если ЗначениеПоказателя <> Неопределено Тогда
СтрокаДанных[СтрокаПоказателя.ИмяРеквизита] = ЗначениеПоказателя;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Модифицированность = Истина;
КонецПроцедуры
#КонецОбласти
#Область РаботаСДаннымиОВремени
&НаСервере
Процедура ЗаполнитьСведенияОВидахВремени()
ТекстЗапроса =
"ВЫБРАТЬ
| ВидыВремени.ВидВремени,
| СправочникВидыВремени.Наименование,
| СправочникВидыВремени.БуквенныйКод
|ИЗ
| (ВЫБРАТЬ
| ШаблонДокумента.ВидВремени КАК ВидВремени
| ИЗ
| Справочник.ВидыДокументовВводДанныхДляРасчетаЗарплаты.ВидыВремени КАК ШаблонДокумента
| ГДЕ
| ШаблонДокумента.Ссылка = &ВидДокумента
|
| ОБЪЕДИНИТЬ
|
| ВЫБРАТЬ
| ВидыВремениСводно.ВидВремени
| ИЗ
| Документ.ДанныеДляРасчетаЗарплаты.ДанныеОВремениСводно КАК ВидыВремениСводно
| ГДЕ
| ВидыВремениСводно.Ссылка = &ДокументСсылка
|
| ОБЪЕДИНИТЬ
|
| ВЫБРАТЬ
| ВидыВремениДетально.ВидВремени
| ИЗ
| Документ.ДанныеДляРасчетаЗарплаты.ДанныеОВремениДетально КАК ВидыВремениДетально
| ГДЕ
| ВидыВремениДетально.Ссылка = &ДокументСсылка) КАК ВидыВремени
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВидыИспользованияРабочегоВремени КАК СправочникВидыВремени
| ПО ВидыВремени.ВидВремени = СправочникВидыВремени.Ссылка
|
|УПОРЯДОЧИТЬ ПО
| СправочникВидыВремени.Наименование";
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("ВидДокумента", Объект.ВидДокумента);
Запрос.УстановитьПараметр("ДокументСсылка", Объект.Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
ВидыВремени.Очистить();
Пока Выборка.Следующий() Цикл
НовыйВидВремени = ВидыВремени.Добавить();
ЗаполнитьЗначенияСвойств(НовыйВидВремени, Выборка);
НовыйВидВремени.ИмяРеквизита = ?(ПустаяСтрока(Выборка.БуквенныйКод), "БК", Выборка.БуквенныйКод) + ЗарплатаКадрыРасширенныйКлиентСервер.УникальноеИмяРеквизита();
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ПрочитатьДанныеОВремени(ТекущийОбъект = Неопределено)
Если ТекущийОбъект = Неопределено Тогда
ТекущийОбъект = Объект;
КонецЕсли;
Для Каждого СтрокаОбъекты Из ТекущийОбъект.ДанныеОВремениСводно Цикл
СведенияОВидеВремени = ВидыВремени.НайтиСтроки(Новый Структура("ВидВремени", СтрокаОбъекты.ВидВремени))[0];
Если ПустаяСтрока(СведенияОВидеВремени.ИмяТаблицы) Тогда
ЭтотОбъект[СведенияОВидеВремени.ИмяРеквизита + "_СводноеВремяДни"] = СтрокаОбъекты.Дней;
ЭтотОбъект[СведенияОВидеВремени.ИмяРеквизита + "_СводноеВремяЧасы"] = СтрокаОбъекты.Часов;
Продолжить;
КонецЕсли;
НайденныеСтроки = ЭтотОбъект[СведенияОВидеВремени.ИмяТаблицы].НайтиСтроки(Новый Структура("Объект", СтрокаОбъекты.Сотрудник));
Если НайденныеСтроки.Количество() = 0 Тогда
СтрокаКоллекции = ЭтотОбъект[СведенияОВидеВремени.ИмяТаблицы].Добавить();
СтрокаКоллекции.Объект = СтрокаОбъекты.Сотрудник;
НайденныеСтроки.Добавить(СтрокаКоллекции);
КонецЕсли;
Для Каждого СтрокаКоллекции Из НайденныеСтроки Цикл
СтрокаКоллекции[СведенияОВидеВремени.ИмяРеквизита + "_СводноеВремяДни"] = СтрокаОбъекты.Дней;
СтрокаКоллекции[СведенияОВидеВремени.ИмяРеквизита + "_СводноеВремяЧасы"] = СтрокаОбъекты.Часов;
КонецЦикла;
КонецЦикла;
Для Каждого СтрокаОбъекты Из ТекущийОбъект.ДанныеОВремениДетально Цикл
СведенияОВидеВремени = ВидыВремени.НайтиСтроки(Новый Структура("ВидВремени", СтрокаОбъекты.ВидВремени))[0];
ПараметрыОтбора = Новый Структура("Объект", СтрокаОбъекты.Сотрудник);
Если ИспользуетсяТаблицаДетально Тогда
НайденныеСтроки = ДанныеДетально.НайтиСтроки(ПараметрыОтбора);
Если НайденныеСтроки.Количество() = 0 Тогда
НоваяСтрока = ДанныеДетально.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ПараметрыОтбора);
НайденныеСтроки.Добавить(НоваяСтрока);
КонецЕсли;
Для Каждого СтрокаКоллекции Из НайденныеСтроки Цикл
Для НомерДня = 1 По 31 Цикл
СтрокаКоллекции[СведенияОВидеВремени.ИмяРеквизита + "_ЗначениеНаДень_" + НомерДня] = СтрокаОбъекты["Часов" + НомерДня];
КонецЦикла;
КонецЦикла;
Иначе
Если НастройкиВидаДокумента.ЗначенияПоказателейВводятсяНаРазныеДаты Тогда
Для НомерДня = 1 По ЗарплатаКадрыКлиентСервер.КоличествоДнейМесяца(ТекущийОбъект.Период) Цикл
Если СтрокаОбъекты["Часов" + НомерДня] = 0 Тогда
Продолжить;
КонецЕсли;
ПараметрыОтбора.Вставить("Период", ДатаДняМесяца(НомерДня, ТекущийОбъект.Период));
ДанныеСводноДобавитьСтрокиВремениПоДням(СведенияОВидеВремени, ПараметрыОтбора, СтрокаОбъекты["Часов" + НомерДня]);
КонецЦикла;
Иначе
Если СтрокаОбъекты["Часов" + День(ТекущийОбъект.Период)] = 0 Тогда
Продолжить;
КонецЕсли;
Если ПустаяСтрока(СведенияОВидеВремени.ИмяТаблицы) Тогда
ЭтотОбъект[СведенияОВидеВремени.ИмяРеквизитаСводноЧасов] = СтрокаОбъекты["Часов" + День(ТекущийОбъект.Период)];
Иначе
ДанныеСводноДобавитьСтрокиВремениПоДням(СведенияОВидеВремени, ПараметрыОтбора, СтрокаОбъекты["Часов" + День(ТекущийОбъект.Период)]);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ИспользуетсяТаблицаДетально Тогда
НайденныеСтроки = ВидыВремени.НайтиСтроки(Новый Структура("ВводитсяДетально", Истина));
Для Каждого СведенияОВидеВремени Из НайденныеСтроки Цикл
Для Каждого СтрокаКоллекции Из ДанныеДетально Цикл
ЗаполнитьИтогоПоСтрокеДанныеДетально(СтрокаКоллекции, СведенияОВидеВремени.ИмяРеквизита, ТекущийОбъект.Период);
КонецЦикла;
ЗаполнитьИтогоПоКолонке(ЭтотОбъект, ДанныеДетально, СведенияОВидеВремени.ИмяРеквизита + "_КоличествоЗначений");
ЗаполнитьИтогоПоКолонке(ЭтотОбъект, ДанныеДетально, СведенияОВидеВремени.ИмяРеквизита + "_СуммаЗначений");
Для НомерДня = 1 По 31 Цикл
ЗаполнитьИтогоПоКолонке(ЭтотОбъект, ДанныеДетально, СведенияОВидеВремени.ИмяРеквизита + "_ЗначениеНаДень_" + НомерДня);
КонецЦикла;
КонецЦикла;
Иначе
НайденныеСтроки = ВидыВремени.НайтиСтроки(Новый Структура("ВводитсяДетально", Ложь));
Для Каждого СведенияОВидеВремени Из НайденныеСтроки Цикл
Если ПустаяСтрока(СведенияОВидеВремени.ИмяТаблицы) Тогда
Продолжить;
КонецЕсли;
Для Каждого СтрокаКоллекции Из ДанныеСводно Цикл
ЗаполнитьИтогоПоСтрокеДанныеСводно(ВидыВремени, СтрокаКоллекции);
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ДанныеСводноДобавитьСтрокиВремениПоДням(СведенияОВидеВремени, ПараметрыОтбора, ВремяЧасов)
НайденныеСтроки = ДанныеСводно.НайтиСтроки(ПараметрыОтбора);
Если НайденныеСтроки.Количество() = 0 Тогда
НоваяСтрока = ДанныеСводно.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ПараметрыОтбора);
НайденныеСтроки.Добавить(НоваяСтрока);
КонецЕсли;
Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
НайденнаяСтрока[СведенияОВидеВремени.ИмяРеквизита + "_СводноеВремяЧасы"] = ВремяЧасов;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьТабличныеЧастиВремени(ТекущийОбъект, Отказ)
ТекущийОбъект.ДанныеОВремениСводно.Очистить();
ТекущийОбъект.ДанныеОВремениДетально.Очистить();
Для Каждого СведенияОВидеВремени Из ВидыВремени Цикл
Если ПустаяСтрока(СведенияОВидеВремени.ИмяТаблицы) Тогда
Если НастройкиВидаДокумента.ВремяВводитсяСводно Тогда
НоваяСтрока = ТекущийОбъект.ДанныеОВремениСводно.Добавить();
НоваяСтрока.Сотрудник = ТекущийОбъект.Сотрудник;
НоваяСтрока.ВидВремени = СведенияОВидеВремени.ВидВремени;
НоваяСтрока.Дней = ЭтотОбъект[СведенияОВидеВремени.ИмяРеквизита + "_СводноеВремяДни"];
НоваяСтрока.Часов = ЭтотОбъект[СведенияОВидеВремени.ИмяРеквизита + "_СводноеВремяЧасы"];
Иначе
НоваяСтрока = ТекущийОбъект.ДанныеОВремениДетально.Добавить();
НоваяСтрока.Сотрудник = ТекущийОбъект.Сотрудник;
НоваяСтрока.ВидВремени = СведенияОВидеВремени.ВидВремени;
НоваяСтрока["Часов" + День(Объект.Период)] = ЭтотОбъект[СведенияОВидеВремени.ИмяРеквизита + "_СводноеВремяЧасы"];
КонецЕсли;
Продолжить;
КонецЕсли;
Если ИспользуетсяТаблицаДетально Тогда
Для Каждого СтрокаКоллекции Из ДанныеДетально Цикл
НоваяСтрока = ТекущийОбъект.ДанныеОВремениДетально.Добавить();
НоваяСтрока.Сотрудник = СтрокаКоллекции.Объект;
НоваяСтрока.ВидВремени = СведенияОВидеВремени.ВидВремени;
Для НомерДня = 1 По ЗарплатаКадрыКлиентСервер.КоличествоДнейМесяца(ТекущийОбъект.Период) Цикл
НоваяСтрока["Часов" + НомерДня] = СтрокаКоллекции[СведенияОВидеВремени.ИмяРеквизита + "_ЗначениеНаДень_" + НомерДня];
КонецЦикла;
КонецЦикла;
Продолжить;
КонецЕсли;
Для Каждого СтрокаКоллекции Из ДанныеСводно Цикл
Если НастройкиВидаДокумента.ВремяВводитсяСводно Тогда
НоваяСтрока = ТекущийОбъект.ДанныеОВремениСводно.Добавить();
НоваяСтрока.Сотрудник = СтрокаКоллекции.Объект;
НоваяСтрока.ВидВремени = СведенияОВидеВремени.ВидВремени;
НоваяСтрока.Дней = СтрокаКоллекции[СведенияОВидеВремени.ИмяРеквизита + "_СводноеВремяДни"];
НоваяСтрока.Часов = СтрокаКоллекции[СведенияОВидеВремени.ИмяРеквизита + "_СводноеВремяЧасы"];
Иначе
Если СтрокаКоллекции[СведенияОВидеВремени.ИмяРеквизита + "_СводноеВремяЧасы"] = 0 Тогда
Продолжить;
КонецЕсли;
ПараметрыОтбора = Новый Структура("Сотрудник, ВидВремени", СтрокаКоллекции.Объект, СведенияОВидеВремени.ВидВремени);
НайденныеСтроки = ТекущийОбъект.ДанныеОВремениДетально.НайтиСтроки(ПараметрыОтбора);
Если НайденныеСтроки.Количество() = 0 Тогда
НоваяСтрока = ТекущийОбъект.ДанныеОВремениДетально.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ПараметрыОтбора);
НайденныеСтроки.Добавить(НоваяСтрока);
КонецЕсли;
Если НастройкиВидаДокумента.ЗначенияПоказателейВводятсяНаРазныеДаты Тогда
НомерДня = День(СтрокаКоллекции.Период);
Если НачалоМесяца(ТекущийОбъект.Период) <> НачалоМесяца(СтрокаКоллекции.Период) Тогда
ТекущийОбъект.Период = СтрокаКоллекции.Период;
КонецЕсли;
Иначе
НомерДня = День(ТекущийОбъект.Период);
КонецЕсли;
Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
НайденнаяСтрока["Часов" + НомерДня] = СтрокаКоллекции[СведенияОВидеВремени.ИмяРеквизита + "_СводноеВремяЧасы"];
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура НастроитьЭлементыСводногоВводаДанныхОВремени(ИмяТаблицыДанных = "")
ВводятсяТаблицей = НастройкиВидаДокумента.НесколькоСотрудников
Или НастройкиВидаДокумента.ЗначенияПоказателейВводятсяНаРазныеДаты
Или ВидыВремени.Количество() > 0 И НастройкиВидаДокумента.ВремяВводитсяЗаМесяц И НастройкиВидаДокумента.НесколькоСотрудников;
Если Не ВводятсяТаблицей Тогда
ИмяТаблицыДанных = "";
КонецЕсли;
ДобавляемыеРеквизиты = Новый Массив;
Для Каждого ВидВремени Из ВидыВремени Цикл
ВидВремени.ИмяТаблицы = ИмяТаблицыДанных;
Если ИспользуетсяТаблицаДетально Тогда
ВидВремени.ВводитсяДетально = Истина;
ДобавляемыеРеквизиты.Добавить(
Новый РеквизитФормы(ВидВремени.ИмяРеквизита + "_ВидВремени",
Новый ОписаниеТипов("СправочникСсылка.ВидыИспользованияРабочегоВремени"),
ИмяТаблицыДанных, , Истина));
ДобавляемыеРеквизиты.Добавить(
Новый РеквизитФормы(ВидВремени.ИмяРеквизита + "_КоличествоЗначений",
Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15)),
ИмяТаблицыДанных, , Истина));
ДобавляемыеРеквизиты.Добавить(
Новый РеквизитФормы(ВидВремени.ИмяРеквизита + "_КоличествоЗначений_Итог",
Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15)),
, , Истина));
ДобавляемыеРеквизиты.Добавить(
Новый РеквизитФормы(ВидВремени.ИмяРеквизита + "_СуммаЗначений",
Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2)),
ИмяТаблицыДанных, , Истина));
ДобавляемыеРеквизиты.Добавить(
Новый РеквизитФормы(ВидВремени.ИмяРеквизита + "_СуммаЗначений_Итог",
Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2)),
, , Истина));
Для НомерДня = 1 По 31 Цикл
ДобавляемыеРеквизиты.Добавить(
Новый РеквизитФормы(ВидВремени.ИмяРеквизита + "_ЗначениеНаДень_" + НомерДня,
Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(5, 2, ДопустимыйЗнак.Неотрицательный)),
ИмяТаблицыДанных, , Истина));
ДобавляемыеРеквизиты.Добавить(
Новый РеквизитФормы(ВидВремени.ИмяРеквизита + "_ЗначениеНаДень_" + НомерДня + "_Итог",
Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(5, 2, ДопустимыйЗнак.Неотрицательный)),
, , Истина));
КонецЦикла;
Иначе
ВидВремени.ИмяРеквизитаСводноДней = ВидВремени.ИмяРеквизита + "_СводноеВремяДни";
ВидВремени.ИмяРеквизитаСводноЧасов = ВидВремени.ИмяРеквизита + "_СводноеВремяЧасы";
ДобавляемыеРеквизиты.Добавить(
Новый РеквизитФормы(ВидВремени.ИмяРеквизитаСводноДней,
Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(2, 0, ДопустимыйЗнак.Неотрицательный)),
ИмяТаблицыДанных, НСтр("ru = 'Дней'"), Истина));
ДобавляемыеРеквизиты.Добавить(
Новый РеквизитФормы(ВидВремени.ИмяРеквизитаСводноЧасов,
Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(5, 2, ДопустимыйЗнак.Неотрицательный)),
ИмяТаблицыДанных, НСтр("ru = 'Часов'"), Истина));
КонецЕсли;
КонецЦикла;
Если Не ИспользуетсяТаблицаДетально И ВводятсяТаблицей И ВидыВремени.Количество() > 0 Тогда
ДобавляемыеРеквизиты.Добавить(
Новый РеквизитФормы("ДанныеСводно_СводноеВремяДни_Итог",
Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(2, 0, ДопустимыйЗнак.Неотрицательный)),
ИмяТаблицыДанных, НСтр("ru = 'Всего дней'"), Истина));
ДобавляемыеРеквизиты.Добавить(
Новый РеквизитФормы("ДанныеСводно_СводноеВремяЧасы_Итог",
Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(5, 2, ДопустимыйЗнак.Неотрицательный)),
ИмяТаблицыДанных, НСтр("ru = 'Всего часов'"), Истина));
КонецЕсли;
ИменаСуществующихРеквизитов = Новый Массив;
ЗарплатаКадры.ЗаполнитьМассивИменРеквизитовФормы(ЭтотОбъект, ИменаСуществующихРеквизитов, ИмяТаблицыДанных);
ЗарплатаКадры.ИзменитьРеквизитыФормы(ЭтотОбъект, ДобавляемыеРеквизиты, ИменаСуществующихРеквизитов);
ИмяГруппыСводноВремя = ?(ВводятсяТаблицей, "ВремяСводноГруппаКолонок", "ВремяПолямиГруппа");
ПутьКРеквизитам = ?(ВводятсяТаблицей, ИмяТаблицыДанных + ".", "");
ГруппаСводноВремя = Элементы.Найти(ИмяГруппыСводноВремя);
Для Каждого СтрокаВидаВремени Из ВидыВремени Цикл
Если СтрокаВидаВремени.ВводитсяДетально Тогда
ИмяПоляВвода = СтрокаВидаВремени.ИмяТаблицы + "_" + СтрокаВидаВремени.ИмяРеквизита + "_ВидВремени";
Если Элементы.Найти(ИмяПоляВвода) <> Неопределено Тогда
Продолжить;
КонецЕсли;
ПолеВвода = Элементы.Добавить(ИмяПоляВвода, Тип("ПолеФормы"), Элементы.ДанныеДетальноЗаголовкиПолейГруппа);
ПолеВвода.Вид = ВидПоляФормы.ПолеНадписи;
ПолеВвода.ПутьКДанным = ПутьКРеквизитам + СтрокаВидаВремени.ИмяРеквизита + "_ВидВремени";
ПолеВвода.РастягиватьПоГоризонтали = Ложь;
ПолеВвода.ОтображатьВШапке = Ложь;
ИмяПоляВвода = СтрокаВидаВремени.ИмяТаблицы + "_" + СтрокаВидаВремени.ИмяРеквизита + "_КоличествоЗначений";
ПолеВводаКоличество = Элементы.Добавить(ИмяПоляВвода, Тип("ПолеФормы"), Элементы.ДанныеДетальноКоличествоЗначенийГруппа);
ПолеВводаКоличество.Вид = ВидПоляФормы.ПолеНадписи;
ПолеВводаКоличество.ПутьКДанным = ПутьКРеквизитам + СтрокаВидаВремени.ИмяРеквизита + "_КоличествоЗначений";
ПолеВводаКоличество.РастягиватьПоГоризонтали = Ложь;
ПолеВводаКоличество.ОтображатьВШапке = Ложь;
ПолеВводаКоличество.ОтображатьВПодвале = Истина;
ПолеВводаКоличество.ПутьКДаннымПодвала = СтрокаВидаВремени.ИмяРеквизита + "_КоличествоЗначений_Итог";
ИмяПоляВвода = СтрокаВидаВремени.ИмяТаблицы + "_" + СтрокаВидаВремени.ИмяРеквизита + "_СуммаЗначений";
ПолеВводаСумма = Элементы.Добавить(ИмяПоляВвода, Тип("ПолеФормы"), Элементы.ДанныеДетальноСуммаЗначенийГруппа);
ПолеВводаСумма.Вид = ВидПоляФормы.ПолеНадписи;
ПолеВводаСумма.ПутьКДанным = ПутьКРеквизитам + СтрокаВидаВремени.ИмяРеквизита + "_СуммаЗначений";
ПолеВводаСумма.РастягиватьПоГоризонтали = Ложь;
ПолеВводаСумма.ОтображатьВШапке = Ложь;
ПолеВводаСумма.ОтображатьВПодвале = Истина;
ПолеВводаСумма.ПутьКДаннымПодвала = СтрокаВидаВремени.ИмяРеквизита + "_СуммаЗначений_Итог";
Для НомерДня = 1 По 31 Цикл
ИмяПоляВвода = СтрокаВидаВремени.ИмяТаблицы + "_" + СтрокаВидаВремени.ИмяРеквизита + "_ЗначениеНаДень_" + НомерДня;
ПолеВводаЧасов = Элементы.Добавить(ИмяПоляВвода, Тип("ПолеФормы"), Элементы["ДанныеДетальноДень" + НомерДня + "Группа"]);
ПолеВводаЧасов.Вид = ВидПоляФормы.ПолеВвода;
ПолеВводаЧасов.ПутьКДанным = ПутьКРеквизитам + СтрокаВидаВремени.ИмяРеквизита + "_ЗначениеНаДень_" + НомерДня;
ПолеВводаЧасов.Ширина = 4;
ПолеВводаЧасов.РастягиватьПоГоризонтали = Ложь;
ПолеВводаЧасов.ОтображатьВШапке = Ложь;
ПолеВводаЧасов.ОтображатьВПодвале = Истина;
ПолеВводаЧасов.ПутьКДаннымПодвала = СтрокаВидаВремени.ИмяРеквизита + "_ЗначениеНаДень_" + НомерДня + "_Итог";
ПолеВводаЧасов.УстановитьДействие("ПриИзменении", "ДанныеДетальноЗначениеНаДеньПриИзменении");
КонецЦикла;
Продолжить;
КонецЕсли;
ИмяГруппыВидВремени = СтрокаВидаВремени.ИмяРеквизита + "СводноВидВремени";
Если Элементы.Найти(ИмяГруппыВидВремени) <> Неопределено Тогда
Продолжить;
КонецЕсли;
ЗаголовокВидаВремени = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 (%2)'"), СтрокаВидаВремени.ВидВремени, СтрокаВидаВремени.БуквенныйКод);
ГруппаВидВремени = Элементы.Добавить(ИмяГруппыВидВремени, Тип("ГруппаФормы"), ГруппаСводноВремя);
ГруппаВидВремени.Заголовок = ЗаголовокВидаВремени;
Если ВводятсяТаблицей Тогда
ГруппаВидВремени.Вид = ВидГруппыФормы.ГруппаКолонок;
ГруппаВидВремени.ОтображатьВШапке = Истина;
ГруппаВидВремени.ГоризонтальноеПоложениеВШапке = ГоризонтальноеПоложениеЭлемента.Центр;
ГруппаВидВремени.Группировка = ГруппировкаКолонок.Горизонтальная;
Иначе
ГруппаВидВремени.Вид = ВидГруппыФормы.ОбычнаяГруппа;
ГруппаВидВремени.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная;
ГруппаВидВремени.ОтображатьЗаголовок = Ложь;
ГруппаВидВремени.Отображение = ОтображениеОбычнойГруппы.Нет;
ДекорацияЗаголовокВидаВремени = Элементы.Добавить(ИмяГруппыВидВремени + "Декорация", Тип("ДекорацияФормы"), ГруппаВидВремени);
ДекорацияЗаголовокВидаВремени.Вид = ВидДекорацииФормы.Надпись;
ДекорацияЗаголовокВидаВремени.РастягиватьПоГоризонтали = Ложь;
ДекорацияЗаголовокВидаВремени.Заголовок = ЗаголовокВидаВремени;
КонецЕсли;
ПоказыватьПолеДней = НастройкиВидаДокумента.ВремяВводитсяСводно;
Если ПоказыватьПолеДней Тогда
ПолеВводаДней = Элементы.Добавить(СтрокаВидаВремени.ИмяРеквизитаСводноДней, Тип("ПолеФормы"), ГруппаВидВремени);
ПолеВводаДней.Вид = ВидПоляФормы.ПолеВвода;
ПолеВводаДней.ПутьКДанным = ПутьКРеквизитам + СтрокаВидаВремени.ИмяРеквизитаСводноДней;
ПолеВводаДней.РастягиватьПоГоризонтали = Ложь;
ПолеВводаДней.Подсказка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Количество дней за %1 по виду времени %2'"),
Формат(Объект.Период, "ДФ='ММММ гггг'"),
СтрокаВидаВремени.ВидВремени);
Если ВводятсяТаблицей Тогда
ПолеВводаДней.ОтображатьВШапке = Истина;
ПолеВводаДней.ГоризонтальноеПоложениеВШапке = ГоризонтальноеПоложениеЭлемента.Центр;
ПолеВводаДней.Заголовок = НСтр("ru = 'Дней'");
Если Не СтрокаВидаВремени.ВводитсяДетально Тогда
ПолеВводаДней.УстановитьДействие("ПриИзменении", "Подключаемый_ДанныеСводноСтрокаПриИзменении");
КонецЕсли;
Иначе
ПолеВводаДней.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Право;
ПолеВводаДней.Заголовок = НСтр("ru = 'дней'");
КонецЕсли;
КонецЕсли;
ПолеВводаЧасов = Элементы.Добавить(СтрокаВидаВремени.ИмяРеквизитаСводноЧасов, Тип("ПолеФормы"), ГруппаВидВремени);
ПолеВводаЧасов.Вид = ВидПоляФормы.ПолеВвода;
ПолеВводаЧасов.ПутьКДанным = ПутьКРеквизитам + СтрокаВидаВремени.ИмяРеквизитаСводноЧасов;
ПолеВводаЧасов.РастягиватьПоГоризонтали = Ложь;
ПолеВводаЧасов.Подсказка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Количество часов за %1 по виду времени %2'"),
Формат(Объект.Период, "ДФ='ММММ гггг'"),
СтрокаВидаВремени.ВидВремени);
Если ВводятсяТаблицей Тогда
ПолеВводаЧасов.ОтображатьВШапке = ПоказыватьПолеДней;
ПолеВводаЧасов.ГоризонтальноеПоложениеВШапке = ГоризонтальноеПоложениеЭлемента.Центр;
ПолеВводаЧасов.Заголовок = НСтр("ru = 'Часов'");
Если Не СтрокаВидаВремени.ВводитсяДетально Тогда
ПолеВводаЧасов.УстановитьДействие("ПриИзменении", "Подключаемый_ДанныеСводноСтрокаПриИзменении");
КонецЕсли;
Иначе
ПолеВводаЧасов.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Право;
ПолеВводаЧасов.Заголовок = НСтр("ru = 'часов'");
КонецЕсли;
КонецЦикла;
Если Не ИспользуетсяТаблицаДетально И ВводятсяТаблицей И ВидыВремени.Количество() > 0 Тогда
ИмяГруппыВидВремени = "ДанныеСводно_СводноеВремяДни_Итог_СводноВидВремени";
ГруппаВидВремени = Элементы.Добавить(ИмяГруппыВидВремени, Тип("ГруппаФормы"), ГруппаСводноВремя);
ГруппаВидВремени.Заголовок = ?(НастройкиВидаДокумента.ВремяВводитсяСводно, "Всего", НСтр("ru = 'Всего часов'"));
ГруппаВидВремени.Вид = ВидГруппыФормы.ГруппаКолонок;
ГруппаВидВремени.ОтображатьВШапке = Истина;
ГруппаВидВремени.ГоризонтальноеПоложениеВШапке = ГоризонтальноеПоложениеЭлемента.Центр;
ГруппаВидВремени.Группировка = ГруппировкаКолонок.Горизонтальная;
Если НастройкиВидаДокумента.ВремяВводитсяСводно Тогда
ПолеВводаИтогоДней = Элементы.Добавить("ДанныеСводно_СводноеВремяДни_Итог", Тип("ПолеФормы"), ГруппаВидВремени);
ПолеВводаИтогоДней.Вид = ВидПоляФормы.ПолеВвода;
ПолеВводаИтогоДней.ПутьКДанным = ПутьКРеквизитам + "ДанныеСводно_СводноеВремяДни_Итог";
ПолеВводаИтогоДней.РастягиватьПоГоризонтали = Ложь;
ПолеВводаИтогоДней.ТолькоПросмотр = Истина;
ПолеВводаИтогоДней.Подсказка = НСтр("ru = 'Итоговое количество дней'");
ПолеВводаИтогоДней.ОтображатьВШапке = Истина;
ПолеВводаИтогоДней.ГоризонтальноеПоложениеВШапке = ГоризонтальноеПоложениеЭлемента.Центр;
ПолеВводаИтогоДней.Заголовок = НСтр("ru = 'Дней'");
КонецЕсли;
ПолеВводаИтогоЧасов = Элементы.Добавить("ДанныеСводно_СводноеВремяЧасы_Итог", Тип("ПолеФормы"), ГруппаВидВремени);
ПолеВводаИтогоЧасов.Вид = ВидПоляФормы.ПолеВвода;
ПолеВводаИтогоЧасов.ПутьКДанным = ПутьКРеквизитам + "ДанныеСводно_СводноеВремяЧасы_Итог";
ПолеВводаИтогоЧасов.РастягиватьПоГоризонтали = Ложь;
ПолеВводаИтогоЧасов.ТолькоПросмотр = Истина;
ПолеВводаИтогоЧасов.Подсказка = НСтр("ru = 'Итоговое количество часов'");
ПолеВводаИтогоЧасов.ОтображатьВШапке = НастройкиВидаДокумента.ВремяВводитсяСводно;
ПолеВводаИтогоЧасов.ГоризонтальноеПоложениеВШапке = ГоризонтальноеПоложениеЭлемента.Центр;
ПолеВводаИтогоЧасов.Заголовок = НСтр("ru = 'Часов'");
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область РаботаСДаннымиОВыполненныхРаботах
&НаСервере
Процедура ЗаполнитьСведенияОВидахРабот()
ТекстЗапроса =
"ВЫБРАТЬ
| ВидыРаботСотрудников.ВидРабот,
| ВидыРаботСотрудников.Наименование,
| ВидыРаботСотрудников.Код,
| ВЫБОР
| КОГДА ШаблонДокумента.НесколькоСотрудников
| ИЛИ ШаблонДокумента.ЗначенияПоказателейВводятсяНаРазныеДаты
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ВводитсяВТаблице
|ИЗ
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| ШаблонДокумента.ВидРабот КАК ВидРабот,
| ШаблонДокумента.ВидРабот.Наименование КАК Наименование,
| ШаблонДокумента.ВидРабот.Код КАК Код
| ИЗ
| Справочник.ВидыДокументовВводДанныхДляРасчетаЗарплаты.ВидыРабот КАК ШаблонДокумента
| ГДЕ
| ШаблонДокумента.Ссылка = &ВидДокумента
|
| ОБЪЕДИНИТЬ
|
| ВЫБРАТЬ
| ВыполненныеРаботы.ВидРабот,
| ВыполненныеРаботы.ВидРабот.Наименование,
| ВыполненныеРаботы.ВидРабот.Код
| ИЗ
| Документ.ДанныеДляРасчетаЗарплаты.ВыполненныеРаботы КАК ВыполненныеРаботы
| ГДЕ
| ВыполненныеРаботы.Ссылка = &ДокументСсылка) КАК ВидыРаботСотрудников
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВидыДокументовВводДанныхДляРасчетаЗарплаты КАК ШаблонДокумента
| ПО (ШаблонДокумента.Ссылка = &ВидДокумента)
|
|УПОРЯДОЧИТЬ ПО
| ВидыРаботСотрудников.Наименование";
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("ВидДокумента", Объект.ВидДокумента);
Запрос.УстановитьПараметр("ДокументСсылка", Объект.Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
ВидыРабот.Очистить();
Пока Выборка.Следующий() Цикл
НовыйВидРабот = ВидыРабот.Добавить();
ЗаполнитьЗначенияСвойств(НовыйВидРабот, Выборка);
НовыйВидРабот.ИмяРеквизита = "ВидРабот" + ЗарплатаКадрыРасширенныйКлиентСервер.УникальноеИмяРеквизита();
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ПрочитатьДанныеОВыполненныхРаботах(ТекущийОбъект = Неопределено)
Если НастройкиВидаДокумента.ВидыРаботЗаполняютсяВДокументе Тогда
Возврат;
КонецЕсли;
Если ТекущийОбъект = Неопределено Тогда
ТекущийОбъект = Объект;
КонецЕсли;
Для Каждого СтрокаОбъекты Из ТекущийОбъект.ВыполненныеРаботы Цикл
СведенияВидаРабот = ВидыРабот.НайтиСтроки(Новый Структура("ВидРабот", СтрокаОбъекты.ВидРабот))[0];
Если Не СведенияВидаРабот.ВводитсяВТаблице Тогда
ЭтотОбъект[СведенияВидаРабот.ИмяРеквизита] = СтрокаОбъекты.ОбъемВыполненныхРабот;
Продолжить;
КонецЕсли;
ПараметрыОтбора = Новый Структура("Объект", СтрокаОбъекты.Сотрудник);
Если Не ИспользуетсяТаблицаДетально
И НастройкиВидаДокумента.ЗначенияПоказателейВводятсяНаРазныеДаты Тогда
ПараметрыОтбора.Вставить("Период", СтрокаОбъекты.Период);
КонецЕсли;
НайденныеСтроки = ЭтотОбъект[СведенияВидаРабот.ИмяТаблицы].НайтиСтроки(ПараметрыОтбора);
Если НайденныеСтроки.Количество() = 0 Тогда
СтрокаКоллекции = ЭтотОбъект[СведенияВидаРабот.ИмяТаблицы].Добавить();
СтрокаКоллекции.Период = СтрокаОбъекты.Период;
СтрокаКоллекции.Объект = СтрокаОбъекты.Сотрудник;
НайденныеСтроки.Добавить(СтрокаКоллекции);
КонецЕсли;
Для Каждого СтрокаКоллекции Из НайденныеСтроки Цикл
Если СведенияВидаРабот.ВводитсяДетально Тогда
СтрокаКоллекции[СведенияВидаРабот.ИмяРеквизита + "_ЗначениеНаДень_" + День(СтрокаОбъекты.Период)] = СтрокаОбъекты.ОбъемВыполненныхРабот;
Иначе
СтрокаКоллекции[СведенияВидаРабот.ИмяРеквизита] = СтрокаОбъекты.ОбъемВыполненныхРабот;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Если ИспользуетсяТаблицаДетально Тогда
НайденныеСтроки = ВидыРабот.НайтиСтроки(Новый Структура("ВводитсяДетально", Истина));
Для Каждого СведенияВидаРабот Из НайденныеСтроки Цикл
Для Каждого СтрокаКоллекции Из ДанныеДетально Цикл
СтрокаКоллекции[СведенияВидаРабот.ИмяРеквизита + "_ВидРабот"] = СведенияВидаРабот.ВидРабот;
ЗаполнитьИтогоПоСтрокеДанныеДетально(СтрокаКоллекции, СведенияВидаРабот.ИмяРеквизита, ТекущийОбъект.Период);
КонецЦикла;
ЗаполнитьИтогоПоКолонке(ЭтотОбъект, ДанныеДетально, СведенияВидаРабот.ИмяРеквизита + "_КоличествоЗначений");
ЗаполнитьИтогоПоКолонке(ЭтотОбъект, ДанныеДетально, СведенияВидаРабот.ИмяРеквизита + "_СуммаЗначений");
Для НомерДня = 1 По 31 Цикл
ЗаполнитьИтогоПоКолонке(ЭтотОбъект, ДанныеДетально, СведенияВидаРабот.ИмяРеквизита + "_ЗначениеНаДень_" + НомерДня);
КонецЦикла;
КонецЦикла;
КонецЕсли;
НайденныеСтроки = ВидыРабот.НайтиСтроки(Новый Структура("ВводитсяДетально, ВводитсяВТаблице", Ложь, Истина));
Для Каждого СведенияВидаРабот Из НайденныеСтроки Цикл
ЗаполнитьИтогоПоКолонке(ЭтотОбъект, ДанныеСводно, СведенияВидаРабот.ИмяРеквизита);
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьТабличнуюЧастьВыполненныеРаботы(ТекущийОбъект, Отказ)
Если НастройкиВидаДокумента.ВидыРаботЗаполняютсяВДокументе Тогда
Если НастройкиВидаДокумента.ВыполненныеРаботыВводятсяСводно Тогда
Для Каждого Строка Из ТекущийОбъект.ВыполненныеРаботы Цикл
Строка.Период = ТекущийОбъект.Период;
КонецЦикла;
КонецЕсли;
Возврат;
КонецЕсли;
ТекущийОбъект.ВыполненныеРаботы.Очистить();
Для Каждого СведенияВидаРабот Из ВидыРабот Цикл
Если Не СведенияВидаРабот.ВводитсяВТаблице Тогда
НоваяСтрока = ТекущийОбъект.ВыполненныеРаботы.Добавить();
НоваяСтрока.Сотрудник = ТекущийОбъект.Сотрудник;
НоваяСтрока.Период = ТекущийОбъект.Период;
НоваяСтрока.ВидРабот = СведенияВидаРабот.ВидРабот;
НоваяСтрока.ОбъемВыполненныхРабот = ЭтотОбъект[СведенияВидаРабот.ИмяРеквизита];
Продолжить;
КонецЕсли;
Если СведенияВидаРабот.ВводитсяДетально Тогда
Для Каждого СтрокаКоллекции Из ДанныеДетально Цикл
Для НомерДня = 1 По ЗарплатаКадрыКлиентСервер.КоличествоДнейМесяца(ТекущийОбъект.Период) Цикл
Если СтрокаКоллекции[СведенияВидаРабот.ИмяРеквизита + "_ЗначениеНаДень_" + НомерДня] = 0 Тогда
Продолжить;
КонецЕсли;
НоваяСтрока = ТекущийОбъект.ВыполненныеРаботы.Добавить();
НоваяСтрока.Сотрудник = СтрокаКоллекции.Объект;
НоваяСтрока.ВидРабот = СведенияВидаРабот.ВидРабот;
НоваяСтрока.ОбъемВыполненныхРабот = СтрокаКоллекции[СведенияВидаРабот.ИмяРеквизита + "_ЗначениеНаДень_" + НомерДня];
НоваяСтрока.Период = ДатаДняМесяца(НомерДня, ТекущийОбъект.Период);
КонецЦикла;
КонецЦикла;
Иначе
Для Каждого СтрокаКоллекции Из ЭтотОбъект[СведенияВидаРабот.ИмяТаблицы] Цикл
Если СтрокаКоллекции[СведенияВидаРабот.ИмяРеквизита] = 0 Тогда
Продолжить;
КонецЕсли;
НоваяСтрока = ТекущийОбъект.ВыполненныеРаботы.Добавить();
Если Не НастройкиВидаДокумента.НесколькоСотрудников Тогда
СтрокаКоллекции.Объект = ТекущийОбъект.Сотрудник;
КонецЕсли;
НоваяСтрока.Сотрудник = СтрокаКоллекции.Объект;
НоваяСтрока.ВидРабот = СведенияВидаРабот.ВидРабот;
НоваяСтрока.ОбъемВыполненныхРабот = СтрокаКоллекции[СведенияВидаРабот.ИмяРеквизита];
Если НастройкиВидаДокумента.ЗначенияПоказателейВводятсяНаРазныеДаты
И Не ИспользуетсяТаблицаДетально Тогда
НоваяСтрока.Период = СтрокаКоллекции.Период;
Иначе
НоваяСтрока.Период = ТекущийОбъект.Период;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура НастроитьЭлементыВводаДанныхОВыполненныхРаботах(ИмяТаблицыДанных = "")
ДобавляемыеРеквизиты = Новый Массив;
Для Каждого СведенияВидаРабот Из ВидыРабот Цикл
Путь = ?(СведенияВидаРабот.ВводитсяВТаблице, ИмяТаблицыДанных, "");
СведенияВидаРабот.ИмяТаблицы = Путь;
Если ИспользуетсяТаблицаДетально Тогда
СведенияВидаРабот.ВводитсяДетально = Истина;
ДобавляемыеРеквизиты.Добавить(
Новый РеквизитФормы(СведенияВидаРабот.ИмяРеквизита + "_ВидРабот",
Новый ОписаниеТипов("СправочникСсылка.ВидыРаботСотрудников"),
Путь, СведенияВидаРабот.Наименование, Истина));
ДобавляемыеРеквизиты.Добавить(
Новый РеквизитФормы(СведенияВидаРабот.ИмяРеквизита + "_КоличествоЗначений",
Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15)),
Путь, СведенияВидаРабот.Наименование, Истина));
ДобавляемыеРеквизиты.Добавить(
Новый РеквизитФормы(СведенияВидаРабот.ИмяРеквизита + "_КоличествоЗначений_Итог",
Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15)),
"", СведенияВидаРабот.Наименование, Истина));
ДобавляемыеРеквизиты.Добавить(
Новый РеквизитФормы(СведенияВидаРабот.ИмяРеквизита + "_СуммаЗначений",
Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)),
Путь, СведенияВидаРабот.Наименование, Истина));
ДобавляемыеРеквизиты.Добавить(
Новый РеквизитФормы(СведенияВидаРабот.ИмяРеквизита + "_СуммаЗначений_Итог",
Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15)),
"", СведенияВидаРабот.Наименование, Истина));
Для НомерДня = 1 По 31 Цикл
ДобавляемыеРеквизиты.Добавить(
Новый РеквизитФормы(СведенияВидаРабот.ИмяРеквизита + "_ЗначениеНаДень_" + НомерДня,
Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)),
Путь, СведенияВидаРабот.Наименование, Истина));
ДобавляемыеРеквизиты.Добавить(
Новый РеквизитФормы(СведенияВидаРабот.ИмяРеквизита + "_ЗначениеНаДень_" + НомерДня + "_Итог",
Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)),
, СведенияВидаРабот.Наименование, Истина));
КонецЦикла;
Иначе
ДобавляемыеРеквизиты.Добавить(
Новый РеквизитФормы(СведенияВидаРабот.ИмяРеквизита,
Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)),
Путь, СведенияВидаРабот.Наименование, Истина));
Если СведенияВидаРабот.ВводитсяВТаблице Тогда
ДобавляемыеРеквизиты.Добавить(
Новый РеквизитФормы(СведенияВидаРабот.ИмяРеквизита + "_Итог",
Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)),
"", СведенияВидаРабот.Наименование, Истина));
КонецЕсли;
КонецЕсли;
КонецЦикла;
ИменаСуществующихРеквизитов = Новый Массив;
ЗарплатаКадры.ЗаполнитьМассивИменРеквизитовФормы(ЭтотОбъект, ИменаСуществующихРеквизитов);
ЗарплатаКадры.ЗаполнитьМассивИменРеквизитовФормы(ЭтотОбъект, ИменаСуществующихРеквизитов, ИмяТаблицыДанных);
ЗарплатаКадры.ИзменитьРеквизитыФормы(ЭтотОбъект, ДобавляемыеРеквизиты, ИменаСуществующихРеквизитов);
Для Каждого СведенияВидаРабот Из ВидыРабот Цикл
Если ПустаяСтрока(СведенияВидаРабот.ИмяРеквизита) Тогда
Продолжить;
КонецЕсли;
Если СведенияВидаРабот.ВводитсяДетально Тогда
ИмяПоляВвода = ИмяТаблицыДанных + "_" + СведенияВидаРабот.ИмяРеквизита + "_ВидРабот";
Если Элементы.Найти(ИмяПоляВвода) <> Неопределено Тогда
Продолжить;
КонецЕсли;
ПолеВвода = Элементы.Добавить(ИмяПоляВвода, Тип("ПолеФормы"), Элементы.ДанныеДетальноЗаголовкиПолейГруппа);
ПолеВвода.ПутьКДанным = ИмяТаблицыДанных + "." + СведенияВидаРабот.ИмяРеквизита + "_ВидРабот";
ПолеВвода.Вид = ВидПоляФормы.ПолеНадписи;
ПолеВвода.ОтображатьВШапке = Ложь;
ИмяПоляВвода = ИмяТаблицыДанных + "_" + СведенияВидаРабот.ИмяРеквизита + "_КоличествоЗначений";
ПолеВводаКоличество = Элементы.Добавить(ИмяПоляВвода, Тип("ПолеФормы"), Элементы.ДанныеДетальноКоличествоЗначенийГруппа);
ПолеВводаКоличество.ПутьКДанным = ИмяТаблицыДанных + "." + СведенияВидаРабот.ИмяРеквизита + "_КоличествоЗначений";
ПолеВводаКоличество.Вид = ВидПоляФормы.ПолеНадписи;
ПолеВводаКоличество.ОтображатьВШапке = Ложь;
ПолеВводаКоличество.РастягиватьПоГоризонтали = Ложь;
ПолеВводаКоличество.ОтображатьВПодвале = Истина;
ПолеВводаКоличество.ПутьКДаннымПодвала = СведенияВидаРабот.ИмяРеквизита + "_КоличествоЗначений_Итог";
ИмяПоляВвода = ИмяТаблицыДанных + "_" + СведенияВидаРабот.ИмяРеквизита + "_СуммаЗначений";
ПолеВводаСумма= Элементы.Добавить(ИмяПоляВвода, Тип("ПолеФормы"), Элементы.ДанныеДетальноСуммаЗначенийГруппа);
ПолеВводаСумма.ПутьКДанным = ИмяТаблицыДанных + "." + СведенияВидаРабот.ИмяРеквизита + "_СуммаЗначений";
ПолеВводаСумма.Вид = ВидПоляФормы.ПолеНадписи;
ПолеВводаСумма.ОтображатьВШапке = Ложь;
ПолеВводаСумма.РастягиватьПоГоризонтали = Ложь;
ПолеВводаСумма.ОтображатьВПодвале = Истина;
ПолеВводаСумма.ПутьКДаннымПодвала = СведенияВидаРабот.ИмяРеквизита + "_СуммаЗначений_Итог";
Для НомерДня = 1 По 31 Цикл
ИмяПоляВвода = ИмяТаблицыДанных + "_" + СведенияВидаРабот.ИмяРеквизита + "_ЗначениеНаДень_" + НомерДня;
ПолеВвода = Элементы.Добавить(ИмяПоляВвода, Тип("ПолеФормы"), Элементы["ДанныеДетальноДень" + НомерДня + "Группа"]);
ПолеВвода.ПутьКДанным = ИмяТаблицыДанных + "." + СведенияВидаРабот.ИмяРеквизита + "_ЗначениеНаДень_" + НомерДня;
ПолеВвода.Вид = ВидПоляФормы.ПолеВвода;
ПолеВвода.ОтображатьВШапке = Ложь;
ПолеВвода.Подсказка = СведенияВидаРабот.Наименование;
ПолеВвода.Ширина = 4;
ПолеВвода.РастягиватьПоГоризонтали = Ложь;
ПолеВвода.ОтображатьВПодвале = Истина;
ПолеВвода.ПутьКДаннымПодвала = СведенияВидаРабот.ИмяРеквизита + "_ЗначениеНаДень_" + НомерДня + "_Итог";
ПолеВвода.УстановитьДействие("ПриИзменении", "ДанныеДетальноЗначениеНаДеньПриИзменении");
КонецЦикла;
Продолжить;
КонецЕсли;
ИмяПоляВвода = ?(СведенияВидаРабот.ВводитсяВТаблице, ИмяТаблицыДанных + "_", "") + СведенияВидаРабот.ИмяРеквизита;
Если Элементы.Найти(ИмяПоляВвода) <> Неопределено Тогда
Продолжить;
КонецЕсли;
Если СведенияВидаРабот.ВводитсяВТаблице Тогда
ПолеВвода = Элементы.Добавить(ИмяПоляВвода, Тип("ПолеФормы"), Элементы.ВидыРаботСводноГруппаКолонок);
ПолеВвода.ПутьКДанным = ИмяТаблицыДанных + "." + СведенияВидаРабот.ИмяРеквизита;
Если Не СведенияВидаРабот.ВводитсяДетально Тогда
ПолеВвода.ПутьКДаннымПодвала = СведенияВидаРабот.ИмяРеквизита + "_Итог";
ПолеВвода.УстановитьДействие("ПриИзменении", "Подключаемый_ДанныеСводноКолонкаПриИзменении");
КонецЕсли;
Иначе
ПолеВвода = Элементы.Добавить(ИмяПоляВвода, Тип("ПолеФормы"), Элементы.ВыполненныеРаботыПолямиГруппа);
ПолеВвода.ПутьКДанным = СведенияВидаРабот.ИмяРеквизита;
КонецЕсли;
ПолеВвода.Вид = ВидПоляФормы.ПолеВвода;
ПолеВвода.КнопкаВыбора = Истина;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область РаспределениеСтоимостиВыполненныхРабот
&НаСервере
Процедура РаспределитьСтоимостьРаботПоСотрудникам(ОтменятьИсправления = Ложь)
УчитыватьКоэффициенты = НастройкиВидаДокумента.ВыполненныеРаботыРаспределяютсяСУчетомКоэффициентов;
УчитыватьТарифныеСтавки = НастройкиВидаДокумента.ВыполненныеРаботыРаспределяютсяСУчетомТарифныхСтавок;
УчитыватьОтработанноеВремя = НастройкиВидаДокумента.ВыполненныеРаботыРаспределяютсяСУчетомОтработанногоВремени;
РаспределятьСуммуСверхТарифа = НастройкиВидаДокумента.ВыполненныеРаботыРаспределяютсяСверхТарифа;
РаспределяемаяСумма = Объект.ВыполненныеРаботы.Итог("Сумма");
КоэффициентыРаспределения = Новый Массив;
СтрокиРаспределения = Новый Массив;
Для Каждого СтрокаТаблицы Из Объект.ЗначенияПоказателей Цикл
Если ОтменятьИсправления Тогда
СтрокаТаблицы.ФиксЗначение = Ложь;
ИначеЕсли СтрокаТаблицы.ФиксЗначение Тогда
СтрокаТаблицы.СуммаПоТарифу = 0;
РаспределяемаяСумма = РаспределяемаяСумма - СтрокаТаблицы.Значение;
Продолжить;
КонецЕсли;
СтрокиРаспределения.Добавить(СтрокаТаблицы);
ОтработанноеВремя = ?(СтрокаТаблицы.ВремяВЧасах, СтрокаТаблицы.ОтработаноЧасов, СтрокаТаблицы.ОтработаноДней);
КоэффициентРаспределения = 1;
Если УчитыватьКоэффициенты Тогда
КоэффициентРаспределения = КоэффициентРаспределения * СтрокаТаблицы.Коэффициент;
КонецЕсли;
Если УчитыватьТарифныеСтавки Тогда
КоэффициентРаспределения = КоэффициентРаспределения * СтрокаТаблицы.ТарифнаяСтавка;
КонецЕсли;
Если УчитыватьОтработанноеВремя Тогда
КоэффициентРаспределения = КоэффициентРаспределения * ОтработанноеВремя;
КонецЕсли;
КоэффициентыРаспределения.Добавить(КоэффициентРаспределения);
Если РаспределятьСуммуСверхТарифа Тогда
СтрокаТаблицы.СуммаПоТарифу = СтрокаТаблицы.ТарифнаяСтавка * ОтработанноеВремя;
КонецЕсли;
КонецЦикла;
СуммаПоТарифам = Объект.ЗначенияПоказателей.Итог("СуммаПоТарифу");
РаспределяетсяСуммаСверхТарифа = РаспределятьСуммуСверхТарифа И СуммаПоТарифам > 0 И РаспределяемаяСумма > СуммаПоТарифам;
Если РаспределяетсяСуммаСверхТарифа Тогда
РаспределяемаяСумма = РаспределяемаяСумма - СуммаПоТарифам;
КонецЕсли;
РаспределенныеСуммы = ЗарплатаКадрыКлиентСервер.РаспределитьПропорциональноКоэффициентам(Макс(РаспределяемаяСумма, 0), КоэффициентыРаспределения);
Если РаспределенныеСуммы = Неопределено Тогда
Если РаспределяемаяСумма <= 0 Тогда
Для Каждого СтрокаРаспределения Из СтрокиРаспределения Цикл
СтрокаРаспределения.Значение = 0;
КонецЦикла;
КонецЕсли;
Возврат;
КонецЕсли;
Индекс = 0;
Для Каждого СтрокаТаблицы Из СтрокиРаспределения Цикл
Если РаспределяетсяСуммаСверхТарифа Тогда
СтрокаТаблицы.Значение = РаспределенныеСуммы[Индекс] + СтрокаТаблицы.СуммаПоТарифу;
Иначе
СтрокаТаблицы.Значение = РаспределенныеСуммы[Индекс];
КонецЕсли;
Индекс = Индекс + 1;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ВыполненныеРаботыВидРаботПриИзмененииНаСервере()
СтрокаТаблицы = Объект.ВыполненныеРаботы.НайтиПоИдентификатору(Элементы.ВыполненныеРаботы.ТекущаяСтрока);
ЗаполнитьСтрокуВыполненныхРабот(СтрокаТаблицы, Истина, Истина);
РаспределитьСтоимостьРаботПоСотрудникам();
КонецПроцедуры
&НаСервере
Процедура ВыполненныеРаботыПоСотрудникамВидРаботПриИзмененииНаСервере()
СтрокаТаблицы = Объект.ВыполненныеРаботы.НайтиПоИдентификатору(Элементы.ВыполненныеРаботыПоСотрудникам.ТекущаяСтрока);
ЗаполнитьСтрокуВыполненныхРабот(СтрокаТаблицы, Ложь, Истина);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСтрокуВыполненныхРабот(СтрокаТаблицы, ЗаполнятьРасценкуИСумму, ЗаполнятьБухучет)
Если ЗаполнятьБухучет И ЗначениеЗаполнено(СтрокаТаблицы.ВидРабот) Тогда
НастройкиУчета = Справочники.ВидыРаботСотрудников.БухучетВидаРабот(СтрокаТаблицы.ВидРабот);
Если НастройкиВидаДокумента.РежимВводаСтатьиФинансирования <> Перечисления.РежимыВводаБухучетаВДанныхДляРасчетаЗарплаты.ВводитьВТабличнойЧасти Тогда
НастройкиУчета.СтатьяФинансирования = Неопределено;
КонецЕсли;
Если НастройкиВидаДокумента.РежимВводаСпособаОтраженияЗарплатыВБухучете <> Перечисления.РежимыВводаБухучетаВДанныхДляРасчетаЗарплаты.ВводитьВТабличнойЧасти Тогда
НастройкиУчета.СпособОтраженияЗарплатыВБухучете = Неопределено;
КонецЕсли;
Если НастройкиВидаДокумента.РежимВводаОтношенияКЕНВД <> Перечисления.РежимыВводаБухучетаВДанныхДляРасчетаЗарплаты.ВводитьВТабличнойЧасти Тогда
НастройкиУчета.ОтношениеКЕНВД = Неопределено;
КонецЕсли;
Если НастройкиВидаДокумента.РежимВводаПодразделенияУчетаЗатрат <> Перечисления.РежимыВводаБухучетаВДанныхДляРасчетаЗарплаты.ВводитьВТабличнойЧасти Тогда
НастройкиУчета.ПодразделениеУчетаЗатрат = Неопределено;
КонецЕсли;
ЗаполнитьЗначенияСвойств(СтрокаТаблицы, НастройкиУчета, "СтатьяФинансирования, СпособОтраженияЗарплатыВБухучете, ОтношениеКЕНВД, ПодразделениеУчетаЗатрат");
КонецЕсли;
Если ЗаполнятьРасценкуИСумму Тогда
СтрокаТаблицы.Расценка = Справочники.ВидыРаботСотрудников.ДействующаяРасценкаВидаРабот(СтрокаТаблицы.ВидРабот, Объект.Дата);
РассчитатьСуммуРаботПоРасценке(СтрокаТаблицы);
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура РассчитатьСуммуРаботПоРасценке(СтрокаТаблицы)
СтрокаТаблицы.Сумма = СтрокаТаблицы.Расценка * СтрокаТаблицы.ОбъемВыполненныхРабот;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьТарифныеСтавкиИОтработанноеВремя(ВыделенныеСтроки = Неопределено, ОтменятьИсправления = Ложь)
ПараметрыЗаполнения = ПараметрыЗаполненияСведенийОСотрудниках(ВыделенныеСтроки, ОтменятьИсправления);
Если ПараметрыЗаполнения.СтрокиТаблицы.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ЗаполнитьПериодыРаботы(ПараметрыЗаполнения);
ЗаполнитьОтработанноеВремя(ПараметрыЗаполнения);
ЗаполнитьТарифныеСтавки(ПараметрыЗаполнения);
КонецПроцедуры
&НаСервере
Функция ПараметрыЗаполненияСведенийОСотрудниках(ВыделенныеСтроки, ОтменятьИсправления)
ПараметрыЗаполнения = Новый Структура("СтрокиТаблицы, МассивСотрудников, МенеджерВТ, ДатыДокумента");
ПараметрыЗаполнения.ДатыДокумента = ДатыДокумента();
ПараметрыЗаполнения.СтрокиТаблицы = Новый Массив;
ПараметрыЗаполнения.МассивСотрудников = Новый Массив;
ПараметрыЗаполнения.МенеджерВТ = Новый МенеджерВременныхТаблиц;
Если ВыделенныеСтроки = Неопределено Тогда
Для Каждого СтрокаТаблицы Из Объект.ЗначенияПоказателей Цикл
Если ОтменятьИсправления Тогда
СтрокаТаблицы.ФиксТарифнаяСтавка = Ложь;
СтрокаТаблицы.ФиксОтработанноеВремя = Ложь;
КонецЕсли;
ПараметрыЗаполнения.СтрокиТаблицы.Добавить(СтрокаТаблицы);
ПараметрыЗаполнения.МассивСотрудников.Добавить(СтрокаТаблицы.Объект);
КонецЦикла;
Иначе
Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл
СтрокаТаблицы = Объект.ЗначенияПоказателей.НайтиПоИдентификатору(ВыделеннаяСтрока);
Если ОтменятьИсправления Тогда
СтрокаТаблицы.ФиксТарифнаяСтавка = Ложь;
СтрокаТаблицы.ФиксОтработанноеВремя = Ложь;
КонецЕсли;
ПараметрыЗаполнения.СтрокиТаблицы.Добавить(СтрокаТаблицы);
ПараметрыЗаполнения.МассивСотрудников.Добавить(СтрокаТаблицы.Объект);
КонецЦикла;
КонецЕсли;
Если ПараметрыЗаполнения.СтрокиТаблицы.Количество() = 0 Тогда
Возврат ПараметрыЗаполнения;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = ПараметрыЗаполнения.МенеджерВТ;
Запрос.УстановитьПараметр("МассивСотрудников", ПараметрыЗаполнения.МассивСотрудников);
Запрос.УстановитьПараметр("ДатаНачала", ПараметрыЗаполнения.ДатыДокумента.ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", ПараметрыЗаполнения.ДатыДокумента.ДатаОкончания);
Запрос.Текст =
"ВЫБРАТЬ
| Сотрудники.Ссылка КАК Сотрудник,
| &ДатаНачала КАК ДатаНачала,
| &ДатаОкончания КАК ДатаОкончания
|ПОМЕСТИТЬ ВТСотрудники
|ИЗ
| Справочник.Сотрудники КАК Сотрудники
|ГДЕ
| Сотрудники.Ссылка В(&МассивСотрудников)";
Запрос.Выполнить();
ПараметрыВТ = УчетРабочегоВремениРасширенный.ПараметрыДляЗапросВТДанныеУчетаВремениИСостоянийСотрудников();
ПараметрыВТ.ДатаНачала = ПараметрыЗаполнения.ДатыДокумента.ДатаНачала;
ПараметрыВТ.ДатаОкончания = ПараметрыЗаполнения.ДатыДокумента.ДатаОкончания;
ПараметрыВТ.МесяцДатаНачала = НачалоМесяца(ПараметрыЗаполнения.ДатыДокумента.ДатаНачала);
ПараметрыВТ.МесяцДатаОкончания = КонецМесяца(ПараметрыЗаполнения.ДатыДокумента.ДатаОкончания);
ПараметрыВТ.ДатаАктуальности = ПараметрыЗаполнения.ДатыДокумента.ДатаНачала;
ПараметрыВТ.Организация = Объект.Организация;
ПараметрыВТ.Подразделение = Объект.Подразделение;
УчетРабочегоВремениРасширенный.СоздатьВТДанныеУчетаВремениИСостоянийСотрудников(ПараметрыЗаполнения.МенеджерВТ, Истина, ПараметрыВТ);
Возврат ПараметрыЗаполнения;
КонецФункции
&НаСервере
Процедура ЗаполнитьПериодыРаботы(ПараметрыЗаполнения)
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = ПараметрыЗаполнения.МенеджерВТ;
Запрос.Текст =
"ВЫБРАТЬ
| ДанныеУчетаВремени.Сотрудник КАК Сотрудник,
| МИНИМУМ(ДанныеУчетаВремени.Дата) КАК Период,
| МАКСИМУМ(ДанныеУчетаВремени.Дата) КАК ПериодОкончания
|ИЗ
| ВТДанныеУчетаВремениИСостоянийСотрудников КАК ДанныеУчетаВремени
|
|СГРУППИРОВАТЬ ПО
| ДанныеУчетаВремени.Сотрудник";
Выборка = Запрос.Выполнить().Выбрать();
Для Каждого СтрокаТаблицы Из ПараметрыЗаполнения.СтрокиТаблицы Цикл
Выборка.Сбросить();
Если Выборка.НайтиСледующий(СтрокаТаблицы.Объект, "Сотрудник") Тогда
СтрокаТаблицы.Период = Макс(Выборка.Период, ПараметрыЗаполнения.ДатыДокумента.ДатаНачала);
СтрокаТаблицы.ПериодОкончания = Мин(Выборка.ПериодОкончания, ПараметрыЗаполнения.ДатыДокумента.ДатаОкончания);
Иначе
СтрокаТаблицы.Период = ПараметрыЗаполнения.ДатыДокумента.ДатаНачала;
СтрокаТаблицы.ПериодОкончания = ПараметрыЗаполнения.ДатыДокумента.ДатаОкончания;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьТарифныеСтавки(ПараметрыЗаполнения)
Если Не НастройкиВидаДокумента.ПоказыватьТарифнуюСтавку Тогда
Возврат;
КонецЕсли;
ДатыДокумента = ДатыДокумента();
Фильтр = Новый Структура("ФиксТарифнаяСтавка", Ложь);
ТаблицаСотрудников = Объект.ЗначенияПоказателей.Выгрузить(, "Объект, Период, ПериодОкончания");
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("ТаблицаСотрудников", ТаблицаСотрудников);
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаСотрудников.Объект КАК Сотрудник,
| ТаблицаСотрудников.ПериодОкончания КАК Период
|ПОМЕСТИТЬ ВТСотрудники
|ИЗ
| &ТаблицаСотрудников КАК ТаблицаСотрудников";
Запрос.Выполнить();
ОписательВТ = КадровыйУчет.ОписательВременныхТаблицДляСоздатьВТКадровыеДанныеСотрудников(Запрос.МенеджерВременныхТаблиц, "ВТСотрудники");
КадровыйУчет.СоздатьВТКадровыеДанныеСотрудников(ОписательВТ, Истина, "ТарифнаяСтавка, ОсновноеНачисление");
Запрос.Текст =
"ВЫБРАТЬ
| КадровыеДанные.Сотрудник,
| КадровыеДанные.ТарифнаяСтавка,
| КадровыеДанные.ОсновноеНачисление.УчетВремениВЧасах КАК ВремяВЧасах
|ИЗ
| ВТКадровыеДанныеСотрудников КАК КадровыеДанные";
Выборка = Запрос.Выполнить().Выбрать();
Для Каждого СтрокаТаблицы Из ПараметрыЗаполнения.СтрокиТаблицы Цикл
Если СтрокаТаблицы.ФиксТарифнаяСтавка Тогда
Продолжить;
КонецЕсли;
Выборка.Сбросить();
Если Выборка.НайтиСледующий(СтрокаТаблицы.Объект, "Сотрудник") Тогда
СтрокаТаблицы.ТарифнаяСтавка = Выборка.ТарифнаяСтавка;
СтрокаТаблицы.ВремяВЧасах = Выборка.ВремяВЧасах;
ОбновитьСуммуПоТарифуВыполненныхРабот(СтрокаТаблицы);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьОтработанноеВремя(ПараметрыЗаполнения)
Если Не НастройкиВидаДокумента.ПоказыватьОтработанноеВремя Тогда
Возврат;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = ПараметрыЗаполнения.МенеджерВТ;
Запрос.Текст =
"ВЫБРАТЬ
| ДанныеУчетаВремени.Сотрудник КАК Сотрудник,
| СУММА(ДанныеУчетаВремени.Дни) КАК ОтработаноДней,
| СУММА(ДанныеУчетаВремени.Часы) КАК ОтработаноЧасов
|ИЗ
| (ВЫБРАТЬ
| ДанныеУчетаВремени.Сотрудник КАК Сотрудник,
| ДанныеУчетаВремени.Дата КАК Дата,
| МАКСИМУМ(ДанныеУчетаВремени.Дни) КАК Дни,
| СУММА(ДанныеУчетаВремени.Часы) КАК Часы
| ИЗ
| ВТДанныеУчетаВремениИСостоянийСотрудников КАК ДанныеУчетаВремени
| ГДЕ
| ДанныеУчетаВремени.ВидУчетаВремени.РабочееВремя = ИСТИНА
| ИЛИ (&ВыделятьНерабочиеДниОтдельнымВидомВремени
| И ДанныеУчетаВремени.ВидУчетаВремени = &ОплачиваемыеНерабочиеДни)
|
| СГРУППИРОВАТЬ ПО
| ДанныеУчетаВремени.Сотрудник,
| ДанныеУчетаВремени.Дата) КАК ДанныеУчетаВремени
|
|СГРУППИРОВАТЬ ПО
| ДанныеУчетаВремени.Сотрудник";
Запрос.УстановитьПараметр("ОплачиваемыеНерабочиеДни", ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.ОплачиваемыеНерабочиеДни"));
Запрос.УстановитьПараметр("ВыделятьНерабочиеДниОтдельнымВидомВремени", УчетРабочегоВремениРасширенный.ВыделятьНерабочиеДниОтдельнымВидомВремени());
Выборка = Запрос.Выполнить().Выбрать();
Для Каждого СтрокаТаблицы Из ПараметрыЗаполнения.СтрокиТаблицы Цикл
Если СтрокаТаблицы.ФиксОтработанноеВремя Тогда
Продолжить;
КонецЕсли;
Выборка.Сбросить();
Если Выборка.НайтиСледующий(СтрокаТаблицы.Объект, "Сотрудник") Тогда
СтрокаТаблицы.ОтработаноДней = Выборка.ОтработаноДней;
СтрокаТаблицы.ОтработаноЧасов = Выборка.ОтработаноЧасов;
Иначе
СтрокаТаблицы.ОтработаноДней = 0;
СтрокаТаблицы.ОтработаноЧасов = 0;
КонецЕсли;
ОбновитьСуммуПоТарифуВыполненныхРабот(СтрокаТаблицы);
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьКоэффициентыРаспределенияВыполненныхРабот()
Если Не НастройкиВидаДокумента.ВыполненныеРаботыРаспределяютсяСУчетомКоэффициентов Тогда
Возврат;
КонецЕсли;
Для Каждого СтрокаТаблицы Из Объект.ЗначенияПоказателей Цикл
СтрокаТаблицы.Коэффициент = 1;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьИсполнителейРаботНаСервере()
ЗаполнитьСписокСотрудников();
ЗаполнитьКоэффициентыРаспределенияВыполненныхРабот();
ЗаполнитьТарифныеСтавкиИОтработанноеВремя();
РаспределитьСтоимостьРаботПоСотрудникам();
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура РассчитатьОбъемВыполненныхРабот(Форма)
ТекущиеДанные = Форма.Элементы.ВыполненныеРаботы.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
Если ТекущиеДанные.Расценка = 0 Тогда
ТекущиеДанные.ОбъемВыполненныхРабот = 0;
Возврат;
КонецЕсли;
ТекущиеДанные.ОбъемВыполненныхРабот = ТекущиеДанные.Сумма / ТекущиеДанные.Расценка;
КонецПроцедуры
&НаСервере
Функция ДатыДокумента()
Результат = Новый Структура("ДатаНачала, ДатаОкончания");
Если Элементы.ПериодСтраницы.Видимость Тогда
Если Элементы.ПериодСтраницы.ТекущаяСтраница = Элементы.МесяцСтрокойСтраница Тогда
Результат.ДатаНачала = НачалоМесяца(Объект.Период);
Результат.ДатаОкончания = КонецМесяца(Объект.Период);
ИначеЕсли Элементы.ПериодСтраницы.ТекущаяСтраница = Элементы.ПериодСтраница
И Элементы.ДатаОкончания.Видимость Тогда
Результат.ДатаНачала = НачалоДня(Объект.Период);
Результат.ДатаОкончания = КонецДня(Объект.ПериодОкончания);
Иначе
Результат.ДатаНачала = НачалоДня(Объект.Период);
Результат.ДатаОкончания = КонецДня(Объект.Период);
КонецЕсли;
Иначе
Результат.ДатаНачала = НачалоДня(Объект.Дата);
Результат.ДатаОкончания = КонецДня(Объект.Дата);
КонецЕсли;
Возврат Результат;
КонецФункции
&НаСервере
Процедура ОтменитьВсеИсправленияНаСервере()
ЗаполнитьТарифныеСтавкиИОтработанноеВремя(, Истина);
РаспределитьСтоимостьРаботПоСотрудникам(Истина);
КонецПроцедуры
&НаСервере
Процедура ОтменитьИсправленияСотрудникаНаСервере()
ВыделенныеСтроки = Элементы.ИсполнителиРабот.ВыделенныеСтроки;
ЗаполнитьТарифныеСтавкиИОтработанноеВремя(ВыделенныеСтроки, Истина);
Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл
Объект.ЗначенияПоказателей.НайтиПоИдентификатору(ВыделеннаяСтрока).ФиксЗначение = Ложь;
КонецЦикла;
РаспределитьСтоимостьРаботПоСотрудникам();
КонецПроцедуры
#КонецОбласти
#КонецОбласти