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