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