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