Заявка на командировку / Форма списка / Модуль формы

файл

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

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

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

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

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

#Область ОбработчикиСобытийЭлементовШапкиФормы

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

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

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

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

#Область ОбработчикиКомандФормы

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

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

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

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

&НаКлиенте
Процедура ИзменитьСтатус(Команда)
	
	УстановитьСтатус(Команда.Имя, Команда.Имя);
	
КонецПроцедуры

&НаКлиенте
Процедура ЗагрузитьДанныеОБронировании(Команда)
	
	//++ Локализация
	ЗагрузитьДанныеОБронированииЛокализация(Команда);
	//-- Локализация
	Возврат;
	
КонецПроцедуры

&НаКлиенте
Процедура ОтправитьВСмартвей(Команда)
	
	//++ Локализация
	ОтправитьВСмартвейЛокализация(Команда);
	//-- Локализация
	Возврат;
	
КонецПроцедуры

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

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

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

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

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

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

//++ Локализация
#Область Локализация

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

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

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

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

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

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

#КонецОбласти
//-- Локализация

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

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