Заявка на командировку / Модуль менеджера

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

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

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

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

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


	//-- Локализация
	
	БизнесПроцессы.Задание.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
	
КонецПроцедуры

// Определяет список команд отчетов.
//
// Параметры:
//   КомандыОтчетов - См. ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов.КомандыОтчетов
//   Параметры - См. ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов.Параметры
//
Процедура ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт
	
	Отчеты.ЛимитыРасходаДенежныхСредств.ДобавитьКомандуОтчета(КомандыОтчетов);
	Отчеты.ОплатаЗаявокНаРасходованиеДенежныхСредств.ДобавитьКомандуОтчета(КомандыОтчетов);
	Отчеты.КонтрольВыданныхПодотчетномуЛицуАвансовПоЗаявке.ДобавитьКомандуОтчета(КомандыОтчетов);
	
КонецПроцедуры

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

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

// Параметры:
//   Ограничение - см. УправлениеДоступомПереопределяемый.ПриЗаполненииОграниченияДоступа.Ограничение.
//
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт

	Ограничение.Текст = "РазрешитьЧтениеИзменение
	|ГДЕ
	|	ЗначениеРазрешено(Организация)
	|	И ЗначениеРазрешено(Подразделение)
	|	И ЗначениеРазрешено(Ответственный)
	|";

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

#Область Проведение

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

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

	Возврат ПроведениеДокументов.ИнициализироватьДанныеДокументаДляПроведения(Запрос, ТекстыЗапроса, ДопПараметры);
	
КонецФункции

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

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

//++ Локализация

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

// Заполняет список команд печати.
//
// Параметры:
//   КомандыПечати - см. УправлениеПечатью.СоздатьКоллекциюКомандПечати
//
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
	
	Возврат;
	
КонецПроцедуры

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

#КонецЕсли

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

Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	Поля.Добавить("Ссылка");
	Поля.Добавить("Номер");
	Поля.Добавить("Дата");
	Поля.Добавить("ДатаНачала");
	Поля.Добавить("ДатаОкончания");
	Поля.Добавить("МестоНазначения");
	
КонецПроцедуры

Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
	
	Если ЗначениеЗаполнено(Данные.ДатаНачала) И ЗначениеЗаполнено(Данные.ДатаОкончания) Тогда
		СтандартнаяОбработка = Ложь;
		Представление = СтрШаблон(НСтр("ru = 'Заявка на командировку %1 от %2 (%3 - %4 %5)'"),
			Данные.Номер, Данные.Дата, Формат(Данные.ДатаНачала, "ДЛФ=Д"), Формат(Данные.ДатаОкончания, "ДЛФ=Д"), Данные.МестоНазначения);
	КонецЕсли;
	
КонецПроцедуры

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

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

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

#Область Проведение

Функция ДополнительныеИсточникиДанныхДляДвижений(ИмяРегистра) Экспорт
	
	ИсточникиДанных = Новый Соответствие;
	
	Возврат ИсточникиДанных;
	
КонецФункции

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

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

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

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

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

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

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

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

Процедура УстановитьПараметрыЗапросаКоэффициентыВалют(Запрос)
	
	Если Запрос.Параметры.Свойство("КоэффициентПересчетаВВалютуУпр") Тогда
		Возврат;
	КонецЕсли;
	
	КоэффициентПересчетаВВалютуУпр = РаботаСКурсамиВалютУТ.ПолучитьКоэффициентПересчетаИзВалютыВВалюту(
		Запрос.Параметры.Валюта, Константы.ВалютаУправленческогоУчета.Получить(), Запрос.Параметры.Период);
	
	Запрос.УстановитьПараметр("КоэффициентПересчетаВВалютуУпр", КоэффициентПересчетаВВалютуУпр);
	
КонецПроцедуры

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

#Область Заполнение

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

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

#Область Прочее

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

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

Функция СтатьяДвиженияДенежныхСредствДокумента(ДанныеДокумента)
	
	Если ЗначениеЗаполнено(ДанныеДокумента.СтатьяДвиженияДенежныхСредств) Тогда
		СтатьяДвиженияДенежныхСредств = ДанныеДокумента.СтатьяДвиженияДенежныхСредств;
	Иначе
		СтатьяДвиженияДенежныхСредств = Справочники.СтатьиДвиженияДенежныхСредств.ПредопределеннаяСтатьяДДС(
			Перечисления.ХозяйственныеОперации.ВыдачаДенежныхСредствПодотчетнику, ДанныеДокумента.Валюта);
	КонецЕсли;
	
	Возврат СтатьяДвиженияДенежныхСредств;
	
КонецФункции

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


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

#КонецЕсли

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