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