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