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

файл
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ПрограммныйИнтерфейс

#Область ДляВызоваИзДругихПодсистем

// СтандартныеПодсистемы.УправлениеДоступом

// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа.
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
	Ограничение.Текст =
	"РазрешитьЧтениеИзменение
	|ГДЕ
	|	ДляВсехСтрок( ЗначениеРазрешено(Сотрудники.ФизическоеЛицо, NULL КАК ИСТИНА)
	|	) И ЗначениеРазрешено(Организация)";
КонецПроцедуры

// Конец СтандартныеПодсистемы.УправлениеДоступом

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

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

#Область СлужебныйПрограммныйИнтерфейс

#Область ОбработчикиПравилРегистрации

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

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

// Возвращает описание состава документа
//
// Возвращаемое значение:
//  Структура - см. ЗарплатаКадрыСоставДокументов.НовоеОписаниеСоставаОбъекта.
Функция ОписаниеСоставаОбъекта() Экспорт
	
	МетаданныеДокумента = Метаданные.Документы.КомандировкиСотрудников;
	Возврат ЗарплатаКадрыСоставДокументов.ОписаниеСоставаОбъектаПоМетаданнымФизическиеЛицаВТабличныхЧастях(МетаданныеДокумента);
	
КонецФункции

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

// Создает структуру для заполнения строки документа.
//
// Возвращаемое значение:
//  Структура - используется для заполнения строки.
//
Функция ПараметрыЗаполненияКомандировкиСотрудника() Экспорт
	
	ЗаполнениеСтроки = Новый Структура(
		"Сотрудник,
		|Командировка");
	
	Возврат ЗаполнениеСтроки;
	
КонецФункции

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

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

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

// СтандартныеПодсистемы.ВерсионированиеОбъектов

// Определяет настройки объекта для подсистемы ВерсионированиеОбъектов.
//
// Параметры:
//  Настройки - Структура - настройки подсистемы.
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт

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

// Конец СтандартныеПодсистемы.ВерсионированиеОбъектов

Функция ДобавитьКомандыСозданияДокументов(КомандыСозданияДокументов, ДополнительныеПараметры) Экспорт
	
	ЗарплатаКадрыРасширенный.ДобавитьВКоллекциюКомандуСозданияДокументаПоМетаданнымДокумента(
		КомандыСозданияДокументов, Метаданные.Документы.КомандировкиСотрудников);
	
КонецФункции

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

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

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

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

#КонецЕсли

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