Командировка группы / Форма документа / Модуль формы

файл
#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	ДоступенРасчетКомандировок = Пользователи.РолиДоступны("ДобавлениеИзменениеНачисленнойЗарплатыРасширенная");
	ДоступноОформлениеКомандировок = ДоступенРасчетКомандировок Или Пользователи.РолиДоступны("ДобавлениеИзменениеКомандировок");
	
	// ЗарплатаКадрыПодсистемы.ПодписиДокументов
	ПодписиДокументов.ПриСозданииНаСервере(ЭтаФорма);
	// Конец ЗарплатаКадрыПодсистемы.ПодписиДокументов
	
	Если Параметры.Ключ.Пустая() Тогда
		// Заполнение "пустого" документа.
		ЗначенияДляЗаполнения = Новый Структура("Организация, Ответственный",
		"Объект.Организация",
		"Объект.Ответственный");
		ЗарплатаКадры.ЗаполнитьПервоначальныеЗначенияВФорме(ЭтаФорма, ЗначенияДляЗаполнения);
		
		ЗаполнитьДанныеФормыПоОрганизации();
		УстановитьФункциональныеОпцииФормы();
		ДополнитьФорму();
		ЗаполнитьСсылкиНаСуществующиеДокументы();
		ОбновитьКомандировкаРассчитана();
	КонецЕсли;
	
	ЗаполнитьПредупреждение(ЭтаФорма);
	УстановитьСвойстваЭлементовФормы();
	
	// Обработчик подсистемы "ВерсионированиеОбъектов".
	ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтаФорма);
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	
	Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба") Тогда
		Модуль = ОбщегоНазначения.ОбщийМодуль("ГосударственнаяСлужбаФормы");
		Модуль.УстановитьПараметрыВыбораСотрудников(ЭтаФорма, "СотрудникиСотрудник");
	КонецЕсли; 
	
	// СтандартныеПодсистемы.Свойства
	ДополнительныеПараметры = Новый Структура;
	ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "ГруппаДополнительныеРеквизиты");
	УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ДополнительныеПараметры);
	// Конец СтандартныеПодсистемы.Свойства
	
	// ПроцессыОбработкиДокументов
	Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
		МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
		МодульПроцессыОбработкиДокументовЗарплата.ПриСозданииНаСервере(ЭтотОбъект, Объект);
	КонецЕсли;	
	// Конец ПроцессыОбработкиДокументов
	
	// ИнтеграцияС1СДокументооборотом
	Если ОбщегоНазначения.ПодсистемаСуществует("ИнтеграцияС1СДокументооборотом") Тогда
		МодульИнтеграцияС1СДокументооборотБазоваяФункциональность = ОбщегоНазначения.ОбщийМодуль(
			"ИнтеграцияС1СДокументооборотБазоваяФункциональность");
		МодульИнтеграцияС1СДокументооборотБазоваяФункциональность.ПриСозданииНаСервере(ЭтотОбъект);
	КонецЕсли;
	// Конец ИнтеграцияС1СДокументооборотом
	
	// БлокировкаИзмененияОбъектов
	БлокировкаИзмененияОбъектов.ПриСозданииНаСервереФормыОбъекта(ЭтотОбъект, Отказ, СтандартнаяОбработка);
	// Конец БлокировкаИзмененияОбъектов
	
	// ЭДОБЗК
	ЭДОБЗК.ПриСозданииНаСервереФормыОбъекта(ЭтотОбъект, Отказ, СтандартнаяОбработка, Объект);
	// Конец ЭДОБЗК
	
	// СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов
	Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов") Тогда
		МодульУчетОригиналовПервичныхДокументов = ОбщегоНазначения.ОбщийМодуль("УчетОригиналовПервичныхДокументов");
		МодульУчетОригиналовПервичныхДокументов.ПриСозданииНаСервере_ФормаДокумента(ЭтотОбъект, Элементы.Шапка);
	КонецЕсли;
	// Конец СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов
	
	// ИнтеграцияС1САрхивом 
	Если ОбщегоНазначения.ПодсистемаСуществует("ИнтеграцияС1САрхивом") Тогда
		МодульОбменСАрхивом = ОбщегоНазначения.ОбщийМодуль("ОбменСАрхивом");
		МодульОбменСАрхивом.ПриСозданииНаСервере(ЭтотОбъект);
	КонецЕсли;
	// Конец ИнтеграцияС1САрхивом

КонецПроцедуры

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
	
	// СтандартныеПодсистемы.ДатыЗапретаИзменения
	ДатыЗапретаИзменения.ОбъектПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект);
	// Конец СтандартныеПодсистемы.ДатыЗапретаИзменения
	
	УстановитьФункциональныеОпцииФормы();
	ДополнитьФорму();
	ОбновитьКомандировкаРассчитана();
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	
	// СтандартныеПодсистемы.УправлениеДоступом
	УправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
	// Конец СтандартныеПодсистемы.УправлениеДоступом
	
	// СтандартныеПодсистемы.Свойства
	УправлениеСвойствами.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
	// Конец СтандартныеПодсистемы.Свойства
	
	// ПроцессыОбработкиДокументов
	Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
		МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
		МодульПроцессыОбработкиДокументовЗарплата.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
	КонецЕсли;	
	// Конец ПроцессыОбработкиДокументов
	
	// БлокировкаИзмененияОбъектов
	БлокировкаИзмененияОбъектов.ПриЧтенииНаСервереФормыОбъекта(ЭтотОбъект, ТекущийОбъект,
		ПравоДоступа("Изменение", Метаданные.Документы.КомандировкиСотрудников));
	// Конец БлокировкаИзмененияОбъектов
	
	// ЭДОБЗК
	ЭДОБЗК.ПриЧтенииНаСервереФормыОбъекта(ЭтотОбъект, ТекущийОбъект, Объект);
	// Конец ЭДОБЗК
	
КонецПроцедуры

&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
	
	// СтандартныеПодсистемы.УправлениеДоступом
	УправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
	// Конец СтандартныеПодсистемы.УправлениеДоступом
	
	// ЗарплатаКадрыПодсистемы.ПодписиДокументов
	ПодписиДокументов.ПослеЗаписиНаСервере(ЭтаФорма);
	// Конец ЗарплатаКадрыПодсистемы.ПодписиДокументов
	
	УстановитьФункциональныеОпцииФормы();
	ДополнитьФорму();
	ОбновитьКомандировкаРассчитана();
	
	// ПроцессыОбработкиДокументов
	Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
		МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
		МодульПроцессыОбработкиДокументовЗарплата.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
	КонецЕсли;	
	// Конец ПроцессыОбработкиДокументов
	
	// БлокировкаИзмененияОбъектов
	БлокировкаИзмененияОбъектов.ПослеЗаписиНаСервереФормыОбъекта(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
	// Конец БлокировкаИзмененияОбъектов
	
	// ЭДОБЗК
	ЭДОБЗК.ПослеЗаписиНаСервереФормыОбъекта(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи, Объект);
	// Конец ЭДОБЗК
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)

	Если ИмяСобытия = "ИзмененыРеквизитыДокумента" И Источник.ВладелецФормы = ЭтаФорма Тогда
		
		Если Параметр.ЗначенияРеквизитов.Количество() > 0 Тогда 
			ОбработатьИзменениеРеквизитовНаСервере(Параметр.ИмяТЧ, Параметр.ЗначенияРеквизитов);
		КонецЕсли;
				
	КонецЕсли;
	
	Если ИмяСобытия = "ЗаписьДокументаКомандировка" И Источник = ЭтаФорма Тогда
		Строки = Объект.Сотрудники.НайтиСтроки(Новый Структура("Сотрудник, ДатаНачала", Параметр.Сотрудник, Параметр.ДатаНачала));
		Если Строки <> Неопределено Тогда
			Если НЕ Строки[0].Командировка = Параметр.Ссылка Тогда
				Строки[0].Командировка = Параметр.Ссылка;
				Записать(Новый Структура("РежимЗаписи", РежимЗаписиДокумента.Запись));
			КонецЕсли;
			
			Строки[0].КомандировкаРассчитана = Параметр.ДокументРассчитан;
			
		КонецЕсли;
		ЗаполнитьПредупреждение(ЭтаФорма);
	КонецЕсли;
	
	// СтандартныеПодсистемы.Свойства
	Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтотОбъект, ИмяСобытия, Параметр) Тогда
		ОбновитьЭлементыДополнительныхРеквизитов();
		УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
	КонецЕсли;
	// Конец СтандартныеПодсистемы.Свойства
	
	// ЭДОБЗК
	ЭДОБЗККлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия, Параметр, Источник);
	// Конец ЭДОБЗК
	
	// СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов
	Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов") Тогда
		МодульУчетОригиналовПервичныхДокументовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УчетОригиналовПервичныхДокументовКлиент");
		МодульУчетОригиналовПервичныхДокументовКлиент.ОбработчикОповещенияФормаДокумента(ИмяСобытия, ЭтотОбъект, Источник);
	КонецЕсли;
	// Конец СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
	Оповестить("ЗаписьДокументаКомандировкиСотрудников");
	Оповестить("Запись_КомандировкиСотрудников", ПараметрыЗаписи, Объект.Ссылка);
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	
	// СтандартныеПодсистемы.Свойства
	УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
	// Конец СтандартныеПодсистемы.Свойства
	
КонецПроцедуры

&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
	
	// ПроцессыОбработкиДокументов
	Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
		МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначенияКлиент.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплатаКлиент");
		МодульПроцессыОбработкиДокументовЗарплата.ПередЗакрытием(ЭтотОбъект, Объект, Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
	КонецЕсли;	
	// Конец ПроцессыОбработкиДокументов
	
КонецПроцедуры

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
	
	// СтандартныеПодсистемы.Свойства
	УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект);
	// Конец СтандартныеПодсистемы.Свойства
	
	// ПроцессыОбработкиДокументов
	Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
		МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
		МодульПроцессыОбработкиДокументовЗарплата.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи, Отказ);
	КонецЕсли;		
	// Конец ПроцессыОбработкиДокументов
	
	// ИнтеграцияС1СДокументооборотом
	Если ОбщегоНазначения.ПодсистемаСуществует("ИнтеграцияС1СДокументооборотом") Тогда
		МодульИнтеграцияС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САрхивом_Нажатие(Элемент)
	
	Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтеграцияС1САрхивом") Тогда
		МодульОбменСАрхивомКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбменСАрхивомКлиент");
		МодульОбменСАрхивомКлиент.Нажатие(Элемент, ЭтотОбъект);
	КонецЕсли;
	
КонецПроцедуры

// Конец ИнтеграцияС1САрхивом

// СтандартныеПодсистемы.Свойства
&НаКлиенте
Процедура Подключаемый_СвойстваВыполнитьКоманду(ЭлементИлиКоманда, НавигационнаяСсылка = Неопределено, СтандартнаяОбработка = Неопределено)
	УправлениеСвойствамиКлиент.ВыполнитьКоманду(ЭтотОбъект, ЭлементИлиКоманда, СтандартнаяОбработка);
КонецПроцедуры
// Конец СтандартныеПодсистемы.Свойства

#Область ОбработчикиСобытийПроцессыОбработкиДокументов

&НаКлиенте
Процедура Подключаемый_ВыполнитьЗадачуПоОбработкеДокумента(Команда)
	// ПроцессыОбработкиДокументов
	Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
		МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначенияКлиент.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплатаКлиент");
		МодульПроцессыОбработкиДокументовЗарплата.ВыполнитьЗадачу(ЭтотОбъект, Команда, Объект)
	КонецЕсли;		
	// Конец ПроцессыОбработкиДокументов
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ВыполнитьЗадачуПоОбработкеДокументаОповещение(Контекст, ДополнительныеПараметры) Экспорт
	ВыполнитьЗадачуПоОбработкеДокументаНаСервере(Контекст);
	ВыполнитьОбработкуОповещения(ДополнительныеПараметры, Контекст);
КонецПроцедуры

&НаСервере
Процедура ВыполнитьЗадачуПоОбработкеДокументаНаСервере(Контекст)
	// ПроцессыОбработкиДокументов
	Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда	
		МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
		МодульПроцессыОбработкиДокументовЗарплата.ВыполнитьЗадачу(ЭтотОбъект, Контекст, Объект);
	КонецЕсли;		
	// Конец ПроцессыОбработкиДокументов
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_КомментарийНаправившегоОткрытие(Элемент, СтандартнаяОбработка)
	// ПроцессыОбработкиДокументов
	Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда	
		МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначенияКлиент.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплатаКлиент");
		МодульПроцессыОбработкиДокументовЗарплата.КомментарийНаправившегоОткрытие(ЭтотОбъект, Элемент, СтандартнаяОбработка);
	КонецЕсли;		
	// Конец ПроцессыОбработкиДокументов
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_КомментарийСледующемуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	// ПроцессыОбработкиДокументов
	Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда	
		МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначенияКлиент.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплатаКлиент");
		МодульПроцессыОбработкиДокументовЗарплата.КомментарийСледующемуНачалоВыбора(ЭтотОбъект, Элемент, ДанныеВыбора, СтандартнаяОбработка);
	КонецЕсли;		
	// Конец ПроцессыОбработкиДокументов
КонецПроцедуры

#КонецОбласти

// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
	ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
КонецПроцедуры

&НаСервере
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт
	ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
	ОбновитьПодключаемыеКоманды(ЭтотОбъект);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

&НаКлиенте
Процедура ОформитьОтсутствия(Команда)
	
	Если Модифицированность Тогда
		Оповещение = Новый ОписаниеОповещения("ОформитьОтсутствияЗавершение", ЭтотОбъект);
		ПоказатьВопрос(Оповещение, НСтр("ru = 'Отражать в учете можно только записанную командировку. Записать?'"), РежимДиалогаВопрос.ДаНет);
	Иначе 
		ОформитьОтсутствияЗавершение(КодВозвратаДиалога.Да, Неопределено);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ОформитьОтсутствияЗавершение(Ответ, ДополнительныеПараметры) Экспорт 
	
	Если Ответ <> КодВозвратаДиалога.Да Тогда
		Возврат;
	КонецЕсли;
	
	Если Не ПроверитьЗаполнение() Тогда
		Возврат;
	КонецЕсли;
	
	ОформитьОтсутствияНаСервере();
	
КонецПроцедуры

&НаСервере
Функция ПолучитьОписаниеРеквизитов(ИмяТЧ, ИменаРеквизитов)

	МассивОписанийРеквизитов = Новый Массив;
	МассивИменРеквизитовТЧ = СтрРазделить(ИменаРеквизитов,",");
	ЕстьЗначения = Объект[ИмяТЧ].Количество() > 0;
	
	Для Каждого ИмяРеквизитаТЧ ИЗ МассивИменРеквизитовТЧ Цикл
		РеквизитТЧ = Объект.Ссылка.Метаданные().ТабличныеЧасти[ИмяТЧ].Реквизиты[ИмяРеквизитаТЧ];
		ОписаниеРеквизита = Новый Структура("ИмяРеквизита,Наименование,ТипРеквизита,ЗначениеРеквизита");
		ОписаниеРеквизита.ИмяРеквизита = РеквизитТЧ.Имя;
		ОписаниеРеквизита.ТипРеквизита = РеквизитТЧ.Тип;
		ОписаниеРеквизита.Наименование = РеквизитТЧ.Синоним;
		Если ЕстьЗначения Тогда
			ОписаниеРеквизита.ЗначениеРеквизита = Объект[ИмяТЧ][0][РеквизитТЧ.Имя];
		КонецЕсли;
		
		МассивОписанийРеквизитов.Добавить(ОписаниеРеквизита);
	КонецЦикла;
	
	Возврат МассивОписанийРеквизитов;
КонецФункции
	
&НаКлиенте
Процедура ЗаполнитьРеквизиты(Команда)
		
	МассивОписанийРеквизитов = ПолучитьОписаниеРеквизитов("Сотрудники", "ДатаНачала,ДатаОкончания,МестоНазначения,ОрганизацияНазначения,Цель");
	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("ИмяТЧ", "Сотрудники");
	ПараметрыФормы.Вставить("МассивОписанийРеквизитов", МассивОписанийРеквизитов);
	
	ОткрытьФорму("ОбщаяФорма.ГрупповоеЗаполнениеРеквизитовТЧ", ПараметрыФормы, ЭтотОбъект);
	
КонецПроцедуры

&НаКлиенте
Процедура Подбор(Команда)
	
	Если Не ЗначениеЗаполнено(Объект.Организация) Тогда
		ТекстСообщения = НСтр("ru = 'Подбор возможен только при указанной организации'");
		ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения, , "Объект.Организация");
		Возврат;
	КонецЕсли;
	
	ПараметрыОткрытия = Неопределено;
	Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба") Тогда
		Модуль = ОбщегоНазначенияКлиент.ОбщийМодуль("ГосударственнаяСлужбаКлиент");
		Модуль.УточнитьПараметрыОткрытияФормыВыбораСотрудников(ПараметрыОткрытия);
	КонецЕсли;
	
	КадровыйУчетКлиент.ВыбратьСотрудниковРаботающихВПериодеПоПараметрамОткрытияФормыСписка(
		Элементы.Сотрудники,
		Объект.Организация,
		,
		Объект.Дата,
		Объект.Дата,
		,
		АдресСпискаПодобранныхСотрудников(),
		ПараметрыОткрытия);
	
КонецПроцедуры

// ИнтеграцияС1СДокументооборотом
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуИнтеграции(Команда)
	
	Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтеграцияС1СДокументооборотом") Тогда
		МодульИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль(
			"ИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент");
		МодульИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент.ВыполнитьПодключаемуюКомандуИнтеграции(
			Команда,
			ЭтотОбъект,
			Объект);
	КонецЕсли;
	
КонецПроцедуры
// Конец ИнтеграцияС1СДокументооборотом

// БлокировкаИзмененияОбъектов

&НаКлиенте
Процедура Подключаемый_РазблокироватьФормуОбъекта(Команда)
	
	БлокировкаИзмененияОбъектовКлиент.РазблокироватьФормуОбъекта(ЭтотОбъект, Объект.Ссылка);
	
КонецПроцедуры

// Конец БлокировкаИзмененияОбъектов

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

// СтандартныеПодсистемы.Свойства 
&НаСервере
Процедура ОбновитьЭлементыДополнительныхРеквизитов()
	УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьЗависимостиДополнительныхРеквизитов()
	УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент)
	УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
// Конец СтандартныеПодсистемы.Свойства

&НаСервере
Процедура ДополнитьФорму()
	
	ЗарплатаКадры.КлючевыеРеквизитыЗаполненияФормыЗаполнитьПредупреждения(ЭтаФорма);
	ЗарплатаКадрыКлиентСервер.КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(ЭтаФорма);
	
	УстановитьОтображениеНомераПервичногоДокумента(ЭтотОбъект);
	
КонецПроцедуры

&НаСервере
Процедура ОбновитьКомандировкаРассчитана()
	
	МассивСсылок = Новый Массив;
	Для каждого Строка Из Объект.Сотрудники Цикл
		Если ЗначениеЗаполнено(Строка.Командировка) Тогда
			МассивСсылок.Добавить(Строка.Командировка);
		КонецЕсли;
	КонецЦикла;
	
	Если МассивСсылок.ВГраница() < 0 Тогда
		Возврат;
	КонецЕсли;
	
	Запрос = Новый Запрос;
	Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	Командировка.Ссылка,
	|	Командировка.ДокументРассчитан
	|ИЗ
	|	Документ.Командировка КАК Командировка
	|ГДЕ
	|	Командировка.Ссылка В(&МассивСсылок)
	|	И Командировка.Проведен = ИСТИНА";
	Запрос.УстановитьПараметр("МассивСсылок",МассивСсылок);
	
	ТЗРассчитанныеКомандировки = Запрос.Выполнить().Выгрузить();
	
	Для каждого Строка Из Объект.Сотрудники Цикл
		Если ЗначениеЗаполнено(Строка.Командировка) Тогда
			РезультатПоКомандировке = ТЗРассчитанныеКомандировки.Найти(Строка.Командировка, "Ссылка");
			Если РезультатПоКомандировке <> Неопределено Тогда
			  Строка.КомандировкаРассчитана  = РезультатПоКомандировке.ДокументРассчитан;
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура ЗаполнитьПредупреждение(Форма)
	КоличествоПустыхСсылок = Форма.Объект.Сотрудники.НайтиСтроки(Новый Структура("Командировка", ПредопределенноеЗначение("Документ.Командировка.ПустаяСсылка"))).Количество();
	КоличествоСтрок = Форма.Объект.Сотрудники.Количество();
	
	ПодходящаяСтраница 	= Форма.Элементы.ГруппаПредупреждения.ПодчиненныеЭлементы.ГруппаПредупреждение;
	ПодходящаяКартинка 	= БиблиотекаКартинок.Предупреждение;
	ПодходящийТекст 	= НСтр("ru = 'Отсутствия в связи с командировкой не отражены в кадровом учете.'");
	ПодходящийЗаголовокГиперссылки 	= НСтр("ru = 'Оформить отсутствия'");
	
	Если КоличествоСтрок = 0 Тогда 
		ПодходящаяСтраница 	= Форма.Элементы.ГруппаПредупреждения.ПодчиненныеЭлементы.ГруппаПредупреждениеБезКоманды;
		ПодходящийТекст 	= "";
		ПодходящаяКартинка 	= Неопределено;
	ИначеЕсли КоличествоПустыхСсылок = 0 Тогда
		ПодходящаяСтраница 	= Форма.Элементы.ГруппаПредупреждения.ПодчиненныеЭлементы.ГруппаПредупреждениеБезКоманды;
		ПодходящийТекст 	= НСтр("ru = 'Все отсутствия отражены в учете.'");	
		ПодходящаяКартинка 	= БиблиотекаКартинок.Информация;
	ИначеЕсли КоличествоСтрок > КоличествоПустыхСсылок Тогда
		ПодходящийТекст 	= НСтр("ru = 'Не все отсутствия отражены в кадровом учете.'");
		ПодходящийЗаголовокГиперссылки 	= НСтр("ru = 'Оформить недостающие отсутствия'");
	КонецЕсли;
	
	Если Форма.Элементы.ГруппаПредупреждения.ТекущаяСтраница <> ПодходящаяСтраница Тогда
		Форма.Элементы.ГруппаПредупреждения.ТекущаяСтраница = ПодходящаяСтраница;
	КонецЕсли;
	Если Форма.Элементы.ОформитьОтсутствия.Заголовок <> ПодходящийЗаголовокГиперссылки Тогда
		Форма.Элементы.ОформитьОтсутствия.Заголовок = ПодходящийЗаголовокГиперссылки;
	КонецЕсли;
	Если Форма.ТекстПредупреждения <> ПодходящийТекст Тогда
		Форма.ТекстПредупреждения = ПодходящийТекст;
	КонецЕсли;
	Если Форма.КартинкаПредупреждения <> ПодходящаяКартинка Тогда
		Форма.КартинкаПредупреждения = ПодходящаяКартинка;
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура УстановитьФункциональныеОпцииФормы()
	
	УстанавливаемыеПараметры = Новый Структура;
	УстанавливаемыеПараметры.Вставить("Организация", Объект.Организация);
	
	УстановитьПараметрыФункциональныхОпцийФормы(УстанавливаемыеПараметры);
	
КонецПроцедуры

&НаСервере
Процедура ОрганизацияПриИзмененииНаСервере()
	
	УстановитьФункциональныеОпцииФормы();
	ЗаполнитьДанныеФормыПоОрганизации();
	
КонецПроцедуры

&НаСервере
Процедура СотрудникиПередУдалениемНаСервере(Идентификатор, Отказ)
	Строка = Объект.Сотрудники.НайтиПоИдентификатору(Идентификатор);
	Документ = Строка.Командировка;
	ДокументОбъект = Документ.ПолучитьОбъект();
	Если НЕ ДокументОбъект = Неопределено Тогда
		
		Если ДокументОбъект.ДокументРассчитан 
			И ПолучитьФункциональнуюОпцию("ИспользоватьМногофункциональностьДокументовЗарплатаКадры") 
			И НЕ МногофункциональныеДокументыБЗК.ЕстьПравоНаРаздел(
				МногофункциональныеДокументыБЗККлиентСервер.ВидыПравНаРазделыДанных().Редактирование, 
				МногофункциональныеДокументыБЗККлиентСервер.РазделыДанных().НачисленнаяЗарплата) Тогда
			
			ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'По этому отсутствию уже выполнено начисление. Перед удалением этой строки необходимо снять утвержденность расчета связанного документа.'"));
			Отказ = Истина;
			Возврат;
		КонецЕсли;
		
		ДокументОбъект.УстановитьПометкуУдаления(Истина);
		ДокументОбъект.ДокументРассчитан = Ложь;
		ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
	Иначе
		Строка.Командировка = Неопределено;
		Строка.КомандировкаРассчитана = Ложь;
	КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура СоздатьКомандировкиПоМассивуСтрок(МассивИдентификаторов = Неопределено)
	
	УстановитьПривилегированныйРежим(Истина);
	
	Если МассивИдентификаторов = Неопределено Тогда
		МассивИдентификаторов = Новый Массив;
		Для каждого Строка Из Объект.Сотрудники Цикл
			Если Строка.Командировка.Пустая() Тогда
				МассивИдентификаторов.Добавить(Строка.ПолучитьИдентификатор());  		 	
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
	
	Если МассивИдентификаторов.ВГраница() >= 0 Тогда
		УстановитьПривилегированныйРежим(Истина);
		
		Структура = Новый Структура("Месяц");
		ЗарплатаКадры.ПолучитьЗначенияПоУмолчанию(Структура);
		
		ПараметрыЗаполнения = ПараметрыЗаполнения(); 
		ПараметрыЗаполнения.Вставить("ПериодРегистрации", Структура.Месяц);
		ПараметрыЗаполнения.Вставить("Организация", Объект.Организация);
		ПараметрыЗаполнения.Вставить("Основание", Объект.Основание);
		ПараметрыЗаполнения.Вставить("Руководитель", Объект.Руководитель);
		ПараметрыЗаполнения.Вставить("ДолжностьРуководителя", Объект.ДолжностьРуководителя);
		
		ПараметрыЗаполнения.Вставить("ПланируемаяДатаВыплаты",
			РасчетЗарплатыРасширенныйКлиентСервер.ПланируемаяДатаВыплатыЗарплаты(Объект.Организация, Структура.Месяц));
		
		Для каждого Идентификатор Из МассивИдентификаторов Цикл
			Строка = Объект.Сотрудники.НайтиПоИдентификатору(Идентификатор);
			Если Строка  = Неопределено Тогда
				Продолжить;
			КонецЕсли;
			ЗаполнитьЗначенияСвойств(ПараметрыЗаполнения, Строка, "Сотрудник,ФизическоеЛицо,ДатаНачала,ДатаОкончания,ДнейВПути,МестоНазначения,ОрганизацияНазначения,Цель,КомандировкаЗаСчетСредств");
			ПараметрыЗаполнения.Вставить("ДатаНачалаСобытия", Строка.ДатаНачала);
			Строка.Командировка = РасчетныйДокументПоПараметрыЗаполнения(ПараметрыЗаполнения);
			ЭтаФорма.Модифицированность = Истина;
		КонецЦикла;
	КонецЕсли;
	
	Если ЭтаФорма.Модифицированность Тогда
		Записать(Новый Структура("РежимЗаписи", РежимЗаписиДокумента.Запись));
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Функция РасчетныйДокументПоПараметрыЗаполнения(ПараметрыЗаполнения)
	
	СсылкаНаКомандировку = Неопределено;
	УстановитьПривилегированныйРежим(Истина);
	
	ПараметрыЗаполнения.Вставить("ЗаполнитьПоПараметрамЗаполнения", Истина);
	НовыйДокумент = Документы.Командировка.СоздатьДокумент();
	
	НовыйДокумент.Заполнить(ПараметрыЗаполнения);
	
	ЗарплатаКадрыРасширенный.УстановитьВариантРасчетаДокументаПоСреднемуЗаработку(НовыйДокумент);
	ДополнительныеПараметрыВыбора = Документы.Командировка.ДополнительныеПараметрыВыбораНачислений(НовыйДокумент, "ВидРасчета");
	ДополнительныеПараметрыВыбора.Вставить("Отбор.ВидВремени", Перечисления.ВидыРабочегоВремениСотрудников.ЦелодневноеНеотработанное);
	ПланыВидовРасчета.Начисления.УстановитьНачислениеПоУмолчаниюВОбъекте(НовыйДокумент, "ВидРасчета", ДополнительныеПараметрыВыбора);
	
	Если ЗначениеЗаполнено(НовыйДокумент.ДатаНачала) И ЗначениеЗаполнено(НовыйДокумент.ДатаОкончания)
		И НовыйДокумент.ДатаОкончания > КонецМесяца(НовыйДокумент.ДатаНачала)
		И ЗарплатаКадрыРасширенныйПовтИсп.ОплачиватьДлительныеКомандировкиПомесячно() Тогда
		НовыйДокумент.ДлительнаяКомандировка = Истина;
	КонецЕсли;

	ЗапрашиваемыеЗначения = Новый Структура;
	ЗапрашиваемыеЗначения.Вставить("Ответственный", "Ответственный");
	
	ЗарплатаКадры.ЗаполнитьЗначенияВФорме(НовыйДокумент, ЗапрашиваемыеЗначения);
	
	НовыйДокумент.Дата = Объект.Дата;
	
	Если ПолучитьФункциональнуюОпциюФормы("ИспользоватьМногофункциональностьДокументовЗарплатаКадры") Тогда
		НовыйДокумент.ДокументРассчитан = Ложь;
	КонецЕсли;
	
	НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);
	
	СсылкаНаКомандировку = НовыйДокумент.Ссылка;
	
	УстановитьПривилегированныйРежим(Ложь);
	
	Возврат СсылкаНаКомандировку;
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ПараметрыЗаполнения()
	
	ПараметрыЗаполнения = Новый Структура;
	
	ПараметрыЗаполнения.Вставить("Организация");
	ПараметрыЗаполнения.Вставить("Основание");
	ПараметрыЗаполнения.Вставить("Сотрудник");
	ПараметрыЗаполнения.Вставить("ФизическоеЛицо");
	ПараметрыЗаполнения.Вставить("ДатаНачалаСобытия");
	ПараметрыЗаполнения.Вставить("ДатаНачала");
	ПараметрыЗаполнения.Вставить("ДатаОкончания");
	ПараметрыЗаполнения.Вставить("ДнейВПути");
	ПараметрыЗаполнения.Вставить("ОрганизацияНазначения");
	ПараметрыЗаполнения.Вставить("Цель");
	ПараметрыЗаполнения.Вставить("МестоНазначения");
	ПараметрыЗаполнения.Вставить("КомандировкаЗаСчетСредств");
	
	Возврат ПараметрыЗаполнения;
	
КонецФункции

&НаСервере
Процедура ЗаполнитьСсылкиНаСуществующиеДокументы()
	
	ТаблицаОтсутствий = ТаблицаОтсутствий();
	
	Для каждого Строка Из Объект.Сотрудники Цикл
		Если ЗначениеЗаполнено(Строка.Командировка) Тогда
			Продолжить;
		КонецЕсли;
		НоваяКомандировка = ТаблицаОтсутствий.Добавить();
		НоваяКомандировка.Сотрудник = Строка.Сотрудник;
		НоваяКомандировка.ДатаНачала = Строка.ДатаНачала;
		НоваяКомандировка.Идентификатор = Строка.ПолучитьИдентификатор();
	КонецЦикла;
	
	ЗаполнитьСсылкиКомандировок(ТаблицаОтсутствий, "");
	
КонецПроцедуры

&НаСервере
Процедура ПодобратьДанныеВСтроку(Идентификатор, ДополнительныеДанные = "ДатаОкончания,МестоНазначения,ОрганизацияНазначения,Цель,ДнейВПути,КомандировкаЗаСчетСредств")
	
	Строка = Объект.Сотрудники.НайтиПоИдентификатору(Идентификатор);

	ТаблицаОтсутствий = ТаблицаОтсутствий();
	
	НоваяКомандировка = ТаблицаОтсутствий.Добавить();
	НоваяКомандировка.Сотрудник = Строка.Сотрудник;
	НоваяКомандировка.ДатаНачала = Строка.ДатаНачала;
	НоваяКомандировка.Идентификатор = Строка.ПолучитьИдентификатор();
	
	ЗаполнитьСсылкиКомандировок(ТаблицаОтсутствий, ДополнительныеДанные);
	
КонецПроцедуры

&НаСервере
Функция ТаблицаОтсутствий()
	ТаблицаОтсутствий = Новый ТаблицаЗначений;
	ТаблицаОтсутствий.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники"));
	ТаблицаОтсутствий.Колонки.Добавить("ДатаНачала", Новый ОписаниеТипов("Дата"));
	ТаблицаОтсутствий.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Число"));
	Возврат ТаблицаОтсутствий;
КонецФункции

&НаСервере
Процедура ОформитьОтсутствияНаСервере()
	   	
	ЗаполнитьСсылкиНаСуществующиеДокументы();
	СоздатьКомандировкиПоМассивуСтрок();
	ЗаполнитьПредупреждение(ЭтаФорма);	
	ОбновитьКомандировкаРассчитана();

КонецПроцедуры

&НаСервере
Функция ЗаполнитьСсылкиКомандировок(ТаблицаОтсутствий, ДополнительныеДанные)
	
	Запрос = Новый Запрос;
	Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	Командировки.Сотрудник,
	|	Командировки.ДатаНачала,
	|	Командировки.Идентификатор
	|ПОМЕСТИТЬ ВТКомандировки
	|ИЗ
	|	&Командировки КАК Командировки
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ПодходящиеКомандировки.Ссылка,
	|	ВТКомандировки.Сотрудник,
	|	ВТКомандировки.ДатаНачала,
	|	ВТКомандировки.Идентификатор, &ДополнительныеДанные
	|ИЗ
	|	ВТКомандировки КАК ВТКомандировки
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.Командировка КАК ПодходящиеКомандировки
	|			ЛЕВОЕ СОЕДИНЕНИЕ Документ.КомандировкиСотрудников.Сотрудники КАК КомандировкиСотрудниковСотрудники
	|			ПО ПодходящиеКомандировки.Ссылка = КомандировкиСотрудниковСотрудники.Командировка
	|		ПО ВТКомандировки.Сотрудник = ПодходящиеКомандировки.Сотрудник
	|			И ВТКомандировки.ДатаНачала = ПодходящиеКомандировки.ДатаНачала
	|ГДЕ
	|	КомандировкиСотрудниковСотрудники.Ссылка ЕСТЬ NULL ИЛИ КомандировкиСотрудниковСотрудники.Ссылка = &Ссылка";
	Запрос.УстановитьПараметр("Командировки", 	ТаблицаОтсутствий);
	Запрос.УстановитьПараметр("Ссылка", 		Объект.Ссылка);
	
	Если НЕ ДополнительныеДанные = "" Тогда
		СтрокаЗамены = "";
		МассивДополнительныхПолей = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ДополнительныеДанные);
		Для каждого Поле Из МассивДополнительныхПолей Цикл
			СтрокаЗамены = СтрокаЗамены+ ", ПодходящиеКомандировки." + Поле;
		КонецЦикла;
		Запрос.Текст = СтрЗаменить(Запрос.Текст, ", &ДополнительныеДанные", СтрокаЗамены);
	Иначе
		Запрос.Текст = СтрЗаменить(Запрос.Текст, ", &ДополнительныеДанные", "");
	КонецЕсли;
	
	Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		Строка = Объект.Сотрудники.НайтиПоИдентификатору(Выборка.Идентификатор);
		Если НЕ Строка = Неопределено Тогда
			Строка.Командировка = Выборка.Ссылка;
			
			Если ЗначениеЗаполнено(ДополнительныеДанные) Тогда
				ЗаполнитьЗначенияСвойств(Строка, Выборка, ДополнительныеДанные); 
			КонецЕсли;
			
			ЭтаФорма.Модифицированность = Истина;
		КонецЕсли;
	КонецЦикла;	

КонецФункции

&НаСервере
Процедура ОснованиеПриИзмененииНаСервере()
	Для каждого Строка Из Объект.Сотрудники Цикл
		Если НЕ ЗначениеЗаполнено(Строка.Командировка) Тогда
			Продолжить;
		КонецЕсли;
		Попытка
			ДокументОбъект = Строка.Командировка.ПолучитьОбъект();
			ДокументОбъект.Основание = Объект.Основание;
			ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
		Исключение
			ОбщегоНазначения.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось обновить %1.'"), Строка.Командировка));
		КонецПопытки;
	КонецЦикла;
КонецПроцедуры

&НаСервере
Процедура ОбработкаПодбораНаСервере(Сотрудники)
	
	Для Каждого Сотрудник Из Сотрудники Цикл
		
		СтрокиПоСотруднику = Объект.Сотрудники.НайтиСтроки(Новый Структура("Сотрудник", Сотрудник));
		
		Если СтрокиПоСотруднику.Количество() = 0 Тогда
			НоваяСтрока = Объект.Сотрудники.Добавить();
			НоваяСтрока.Сотрудник = Сотрудник;
			
			ЭтаФорма.Модифицированность = Истина;
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

&НаСервере
Функция АдресСпискаПодобранныхСотрудников()
	
	Возврат ПоместитьВоВременноеХранилище(Объект.Сотрудники.Выгрузить(,"Сотрудник").ВыгрузитьКолонку("Сотрудник"), УникальныйИдентификатор);
	
КонецФункции

&НаСервере
Процедура ОбработатьИзменениеРеквизитовНаСервере(ИмяТЧ, ЗначенияРеквизитов)
	Изменено= Ложь;
	Для Каждого СтрокаТЧ Из Объект[ИмяТЧ] Цикл
		Для Каждого ЗначениеРеквизита Из ЗначенияРеквизитов Цикл
			Если (ЗначениеРеквизита.Ключ = "ДатаНачала"
				ИЛИ ЗначениеРеквизита.Ключ = "ДатаОкончания")
				И СтрокаТЧ.КомандировкаРассчитана Тогда
				Продолжить;
			КонецЕсли;
			СтрокаТЧ[ЗначениеРеквизита.Ключ] = ЗначениеРеквизита.Значение;
			Изменено = Истина;
		КонецЦикла;
		Если ЗначениеЗаполнено(СтрокаТЧ.Сотрудник) 
			И ЗначениеЗаполнено(СтрокаТЧ.ДатаНачала) 
			И НЕ ЗначениеЗаполнено(СтрокаТЧ.Командировка) Тогда
			ПодобратьДанныеВСтроку(СтрокаТЧ.ПолучитьИдентификатор());
		КонецЕсли;
	КонецЦикла;
	
	Если Изменено Тогда
		Модифицированность = Истина;
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура УстановитьСвойстваЭлементовФормы()
	
	ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ОформитьОтсутствия", "Видимость", ДоступноОформлениеКомандировок);
	
КонецПроцедуры

#Область КлючевыеРеквизитыЗаполненияФормы

// Функция возвращает описание таблиц формы подключенных к механизму ключевых реквизитов формы.
&НаСервере
Функция КлючевыеРеквизитыЗаполненияФормыТаблицыОчищаемыеПриИзменении() Экспорт
	Массив = Новый Массив;
	Массив.Добавить("Объект.Сотрудники");
	Возврат Массив
КонецФункции 

// Функция возвращает массив реквизитов формы подключенных к механизму ключевых реквизитов формы.
&НаСервере
Функция КлючевыеРеквизитыЗаполненияФормыОписаниеКлючевыхРеквизитов() Экспорт
	Массив = Новый Массив;
	Массив.Добавить(Новый Структура("ЭлементФормы, Представление", "Организация",		НСтр("ru = 'организации'")));
	Возврат Массив
КонецФункции

#КонецОбласти

&НаСервере
Процедура ЗаполнитьДанныеФормыПоОрганизации()
	
	Если НЕ ЗначениеЗаполнено(Объект.Организация) Тогда
		Возврат;
	КонецЕсли; 
	
	// ЗарплатаКадрыПодсистемы.ПодписиДокументов
	ПодписиДокументов.ЗаполнитьПодписиПоОрганизации(ЭтаФорма);
	// Конец ЗарплатаКадрыПодсистемы.ПодписиДокументов
	
КонецПроцедуры

// ЭДОБЗК

&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьПодключаемыеКоманды(УправляемаяФорма)
	ЭДОБЗККлиентСервер.ОбновитьКоманды(УправляемаяФорма, УправляемаяФорма.Объект, Истина);
КонецПроцедуры

// Конец ЭДОБЗК

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьОтображениеНомераПервичногоДокумента(УправляемаяФорма)
	
	ЗарплатаКадрыКлиентСервер.УстановитьОтображениеНомеровДокумента(УправляемаяФорма);
	
КонецПроцедуры

#КонецОбласти

Связанные материалы