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