Выработка сотрудников / Подбор по распоряжениям / Модуль формы

файл

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

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

&НаКлиенте
Процедура ТаблицаКоличествоПриИзменении(Элемент)
	ТекущиеДанные = Элементы.Таблица.ТекущиеДанные;
	ТекущиеДанные.Выбран = ТекущиеДанные.КоличествоКОплате > 0;
	Если ТекущиеДанные.КоличествоКОплате > ТекущиеДанные.КоличествоКОформлению Тогда
		ТекущиеДанные.КоличествоКОплате = ТекущиеДанные.КоличествоКОформлению;
	КонецЕсли;
	ТекущиеДанные.Сумма = ТекущиеДанные.КоличествоКОплате * ТекущиеДанные.Расценка;
КонецПроцедуры

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

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

&НаКлиенте
Процедура ПеренестиВДокументВыполнить()
	
	ПоместитьТаблицуВХранилище(ЭтаФорма.ВладелецФормы.УникальныйИдентификатор);
	ВыбранноеЗначение = Новый Структура("АдресВХранилище", АдресВХранилище);
	
	ОповеститьОВыборе(ВыбранноеЗначение);
	
КонецПроцедуры

&НаКлиенте
Процедура ВыбратьСтрокиВыполнить()
	
	ОтметитьСтроки(Истина);
	
КонецПроцедуры

&НаКлиенте
Процедура ИсключитьСтрокиВыполнить()
	
	ОтметитьСтроки(Ложь);
	
КонецПроцедуры

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

&НаКлиенте
Процедура ИсключитьВыделенныеСтроки(Команда)
	
	МассивСтрок = Элементы.Таблица.ВыделенныеСтроки;
	ОтметитьСтроки(Ложь, МассивСтрок);
	
КонецПроцедуры

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

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

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

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

&НаСервере
Процедура ПоместитьТаблицуВХранилище(Идентификатор)
	
	МассивУдаляемыхСтрок = Новый Массив;
	Для Каждого СтрокаТаблицы Из Таблица Цикл
		
		Если Не СтрокаТаблицы.Выбран Тогда
			МассивУдаляемыхСтрок.Добавить(СтрокаТаблицы);
		КонецЕсли;
		
	КонецЦикла;
	
	Для Каждого СтрокаТаблицы Из МассивУдаляемыхСтрок Цикл
		Таблица.Удалить(СтрокаТаблицы);
	КонецЦикла;
	
	АдресВХранилище = ПоместитьВоВременноеХранилище(Таблица.Выгрузить(), Идентификатор);
	
КонецПроцедуры

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

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

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

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