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