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