Подразделения организаций / Форма списка / Модуль формы

файл

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

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

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

&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)
	
	Если ЗавершениеРаботы Тогда
		Возврат;
	КонецЕсли;
	
	Если ВыбранныеПодразделения.Количество() > 0 Тогда
		ОповеститьОВыборе(ВыбранныеПодразделения.ВыгрузитьЗначения());
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура СписокПриЗагрузкеПользовательскихНастроекНаСервере(Элемент, Настройки, ИспользуютсяСтандартныеНастройки)
	ОтключитьОтборПоОрганизацииЕслиОнПротиворечитОтборуПоГоловнойОрганизации();
КонецПроцедуры

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

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

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

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

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

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

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

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

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

#Область ОбслуживаниеСпискаПодобранных

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

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

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

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

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

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