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

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

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

	СобытияФорм.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка);

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

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

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

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

&НаКлиенте
Процедура ТолькоОстаткиПриИзменении(Элемент)
	
	ТолькоОстаткиПриИзмененииНаСервере();
	
КонецПроцедуры

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

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

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

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

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

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

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

&НаСервере
Процедура ТолькоОстаткиПриИзмененииНаСервере()

	ОграничитьСписокЗаявок();

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

&НаСервере
Процедура ОграничитьСписокЗаявок()

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

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

&НаСервере
Процедура ЗаполнитьПараметрыОтбора()

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

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

&НаСервере
Функция НовыйПараметрыОтбораЗаявок()

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

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

&НаСервере
Функция ТекстЗапросаСписка()

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

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

&НаСервере
Функция ТекстВыборкиЗаявок()

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

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

&НаСервере
Функция ТекстВыборкиНеоплаченныхЗаявок()

	Возврат 
		"ВЫБРАТЬ РАЗРЕШЕННЫЕ
		|	ДенежныеСредства.ЗаявкаНаРасходованиеДенежныхСредств КАК Ссылка
		|ПОМЕСТИТЬ НеоплаченныеЗаявки
		|ИЗ
		|	РегистрНакопления.ДенежныеСредстваКВыплате.Остатки(
		|			,
		|			ЗаявкаНаРасходованиеДенежныхСредств В
		|				(ВЫБРАТЬ
		|					Заявки.Ссылка
		|				ИЗ
		|					Заявки КАК Заявки)) КАК ДенежныеСредства
		|";

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

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

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