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

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

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

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

Процедура ПриКопировании(ОбъектКопирования)
	
	Ответственный = Пользователи.ТекущийПользователь();
	Статус = Перечисления.СтатусыЗаявокСотрудников.Подготовлена;
	
КонецПроцедуры

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

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

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
	
	ПроведениеДокументов.ОбработкаПроведенияДокумента(ЭтотОбъект, Отказ);
	
КонецПроцедуры

Процедура ОбработкаУдаленияПроведения(Отказ)
	
	ПроведениеДокументов.ОбработкаУдаленияПроведенияДокумента(ЭтотОбъект, Отказ);
	
КонецПроцедуры

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

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

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

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

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

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

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

#КонецЕсли

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