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