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