Структура предприятия / Настройка приоритетов производственных подразделений / Модуль формы

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

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	Элементы.ОчередьПодразделений.Отображение = ОтображениеТаблицы.Список;

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

&НаКлиенте
Процедура ОчередьПодразделенийПередНачаломИзменения(Элемент, Отказ)
	
	Отказ = Истина;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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