#Область ОписаниеПеременных
&НаКлиенте
Перем КэшированныеЗначения;
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьУсловноеОформление();
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект);
Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда
Объект.НачалоДействия = ТекущаяДатаСеанса();
ПриЧтенииСозданииНаСервере();
КонецЕсли;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("Объект", Объект);
ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "ГруппаДополнительныеРеквизиты");
ДополнительныеПараметры.Вставить("ОтложеннаяИнициализация", Истина);
УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ДополнительныеПараметры);
ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
ИнтеграцияС1СДокументооборотБазоваяФункциональность.ПриСозданииНаСервере(ЭтотОбъект);
СобытияФорм.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка);
ПараметрыГиперссылки = РаботаСФайлами.ГиперссылкаФайлов();
ПараметрыГиперссылки.Размещение = "КоманднаяПанель";
РаботаСФайлами.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыГиперссылки);
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
НачатьОжиданиеЗаполненияПроизводственногоПроцесса();
УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
РаботаСФайламиКлиент.ПриОткрытии(ЭтотОбъект, Отказ);
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
ЗаписатьПроизводственныйПроцесс(Отказ);
Если Отказ Тогда
Возврат;
КонецЕсли;
УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект);
МодификацияКонфигурацииПереопределяемый.ПередЗаписьюНаСервере(ЭтотОбъект, Отказ, ТекущийОбъект, ПараметрыЗаписи);
ИнтеграцияС1СДокументооборотБазоваяФункциональность.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
КонецПроцедуры
&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
Возврат;
КонецПроцедуры
&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
СтатусЗаписанногоОбъекта = ТекущийОбъект.Статус;
Если ЭтоТехнологическийНабор(ЭтотОбъект) Тогда
ПроизводственныйПроцессОчистить();
КонецЕсли;
ЗаполнитьСлужебныеРеквизиты();
НастроитьЭлементыФормы();
МодификацияКонфигурацииПереопределяемый.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
Оповестить("Запись_РесурсныеСпецификации");
МодификацияКонфигурацииКлиентПереопределяемый.ПослеЗаписи(ЭтотОбъект, ПараметрыЗаписи);
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
МодульПодключаемыеКомандыКлиент.ПослеЗаписи(ЭтотОбъект, Объект, ПараметрыЗаписи);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
СтатусЗаписанногоОбъекта = ТекущийОбъект.Статус;
ПриЧтенииСозданииНаСервере();
УправлениеСвойствами.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
МодификацияКонфигурацииПереопределяемый.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
Если ИсточникВыбора <> Неопределено
И ИсточникВыбора.ИмяФормы = "ОбщаяФорма.ВводДолиСтоимости" Тогда
ТекущиеДанные = ТекущийЭлемент.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
Модифицированность = Истина;
ОбработкаВводаДолиСтоимости(ТекущийЭлемент, ТекущиеДанные, ВыбранноеЗначение);
ИначеЕсли ИсточникВыбора <> Неопределено
И (ИсточникВыбора.ИмяФормы = "Справочник.РесурсныеСпецификации.Форма.ФормаВыбораЭлементаПроизводственногоПроцесса") Тогда
Модифицированность = Истина;
ОбработкаВыбораЭлементаПроизводственногоПроцесса(ИсточникВыбора.ИмяТЧ, ВыбранноеЗначение);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтотОбъект, ИмяСобытия, Параметр) Тогда
ОбновитьЭлементыДополнительныхРеквизитов();
УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
КонецЕсли;
Если ИмяСобытия = "Запись_РесурсныеСпецификации" Тогда
НачатьОбновлениеИнформационнойПанелиКлиент();
ИначеЕсли ИмяСобытия = "КопированиеСтрокВБуферОбмена" Тогда
УстановитьДоступностьКомандБуфераОбмена(ЭтотОбъект, ДоступностьРеквизитов);
ИначеЕсли ИмяСобытия = "Запись_СтруктураПредприятия" Тогда
ОбновитьПараметрыПроизводственногоПодразделения(Источник);
КонецЕсли;
РаботаСФайламиКлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия);
КонецПроцедуры
&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
ПроверитьЗаполнениеПроизводственногоПроцесса(Отказ);
ТекущийОбъект = РеквизитФормыВЗначение("Объект");
Если РежимПроверкиЗаполненияВСтатусеДействует Тогда
ТекущийОбъект.Статус = Перечисления.СтатусыСпецификаций.Действует;
КонецЕсли;
УправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты, ТекущийОбъект);
ДополнительныеСвойства = ТекущийОбъект.ДополнительныеСвойства;
ДополнительныеСвойства.Вставить("ИнтерактивнаяПроверкаПройдена");
ДополнительныеСвойства.Вставить("ОписаниеПроизводственногоПроцесса", ОписаниеПроизводственногоПроцесса());
ДополнительныеСвойства.Вставить("ЭтоТехнологическийНабор", ЭтоТехнологическийНабор(ЭтотОбъект));
Если НЕ ТекущийОбъект.ПроверитьЗаполнение() Тогда
Отказ = Истина;
КонецЕсли;
ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("Объект"));
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
#Область ОсновноеИзделиеСпецификации
&НаКлиенте
Процедура ВариантНазначенияПриИзменении(Элемент)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ОсновноеИзделиеВидНоменклатурыПриИзменении(Элемент)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ОсновноеИзделиеНоменклатураПриИзменении(Элемент)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ОсновноеИзделиеХарактеристикаПриИзменении(Элемент)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ОсновноеИзделиеКоличествоУпаковокПриИзменении(Элемент)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ОсновноеИзделиеУпаковкаПриИзменении(Элемент)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ОсновноеИзделиеУпаковкаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ОсновноеИзделиеУпаковкаАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ОсновноеИзделиеПроцентБракаПриИзменении(Элемент)
ОбработатьИзменениеДанныхОсновногоИзделия(ЭтотОбъект);
КонецПроцедуры
#КонецОбласти
#Область СтруктураПроизводственногоПроцесса
&НаКлиенте
Процедура ОписаниеПартииВыпускаПриИзменении(Элемент)
Если Объект.ВыпускПроизвольнымиПорциями <> ВыпускПроизвольнымиПорциямиДоИзменения Тогда
СписокРеквизитов = Новый Массив;
Если ТребуетсяОчиститьРеквизитыПриИзмененииОписанияПартииВыпуска(СписокРеквизитов) Тогда
ТекстШаблона = НСтр("ru = 'При изменении кратности выпуска будут очищены реквизиты: %1
|Продолжить?'");
ТекстВопроса = СтрШаблон(ТекстШаблона, СтрСоединить(СписокРеквизитов, ", "));
ОписаниеОповещения = Новый ОписаниеОповещения("ОчиститьРеквизитыПриИзмененииОписанияПартииВыпуска", ЭтотОбъект);
ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
Возврат;
КонецЕсли;
ЗаполнитьОписаниеПартииВыпуска();
НастроитьЗависимыеЭлементыФормы(ЭтотОбъект, "ВыпускПроизвольнымиПорциями,МинимальнаяПартияВыпуска,ОптимальнаяПартияВыпуска");
НастроитьЗависимыеЭлементыФормыЭтапа(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура МинимальнаяПартияВыпускаПриИзменении(Элемент)
НастроитьЗависимыеЭлементыФормы(ЭтотОбъект, "МинимальнаяПартияВыпуска");
КонецПроцедуры
&НаКлиенте
Процедура ОптимальнаяПартияВыпускаПриИзменении(Элемент)
НастроитьЗависимыеЭлементыФормы(ЭтотОбъект, "ОптимальнаяПартияВыпуска");
КонецПроцедуры
&НаКлиенте
Процедура ОграниченСрокПролеживанияВыходныхИзделийПриИзменении(Элемент)
НастроитьЗависимыеЭлементыФормы(ЭтотОбъект, "НастройкаМаксимальныйСрокПролеживания");
КонецПроцедуры
&НаКлиенте
Процедура ЕстьПромежуточныйВыпускПриИзменении(Элемент)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ВариантПромежуточногоВыпускаТоварДругогоКачестваПриИзменении(Элемент)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ВариантПромежуточногоВыпускаНастраиваетсяВручнуюПриИзменении(Элемент)
Возврат;
КонецПроцедуры
#КонецОбласти
#Область Этапы
&НаКлиенте
Процедура ЭтапНаименованиеПриИзменении(Элемент)
ТекущиеДанные = Элементы.ПроизводственныйПроцесс.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
ОбновитьЗначенияРеквизитовОбъектаВДереве(ЭтотОбъект, ТекущиеДанные, "Наименование");
ПроизводственныйПроцессОбновитьПредставления("Этап", ТекущиеДанные.Ссылка, ТекущиеДанные.Наименование, ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ЭтапПодразделениеПриИзменении(Элемент)
ЭтапПодразделениеПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ЭтапНомерЭтапаПриИзменении(Элемент)
ТекущиеДанные = Элементы.ПроизводственныйПроцесс.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
ОбновитьЗначенияРеквизитовОбъектаВДереве(ЭтотОбъект, ТекущиеДанные, "Номер");
ПроизводственныйПроцессСкорректироватьПозициюСтроки(ЭтотОбъект, ТекущиеДанные);
ОбработатьИзменениеПроизводственногоПроцесса(ТекущиеДанные.ПолучитьИдентификатор());
КонецПроцедуры
&НаКлиенте
Процедура ЭтапНомерСледующегоЭтапаПриИзменении(Элемент)
ТекущиеДанные = Элементы.ПроизводственныйПроцесс.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
ОбновитьЗначенияРеквизитовОбъектаВДереве(ЭтотОбъект, ТекущиеДанные, "НомерСледующего");
ОбработатьИзменениеПроизводственногоПроцесса(ТекущиеДанные.ПолучитьИдентификатор());
КонецПроцедуры
&НаКлиенте
Процедура ЭтапСпособПроизводстваПриИзменении(Элемент)
ЭтапСпособПроизводстваПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ЭтапПланироватьРаботуВидовРабочихЦентровПриИзменении(Элемент)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ЭтапПорядокРаботыВидовРабочихЦентровПриИзменении(Элемент)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ЭтапЕдиницаИзмеренияДлительностиЭтапаПриИзменении(Элемент)
Если ПроизводственныйПроцессЭтап.ЕдиницаИзмеренияДлительностиЭтапа.Пустая() Тогда
ПроизводственныйПроцессЭтап.ЕдиницаИзмеренияДлительностиЭтапа = ЭтапОсновнаяЕдиницаВремениДлительностиЭтапаУББВ;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЭтапПредварительныйБуферПриИзменении(Элемент)
УстановитьОтметкуНезаполненногоДляБуферов(ЭтотОбъект);
РассчитатьДлительностьЭтапа();
КонецПроцедуры
&НаКлиенте
Процедура ЭтапЕдиницаИзмеренияПредварительногоБуфераПриИзменении(Элемент)
Если ПроизводственныйПроцессЭтап.ЕдиницаИзмеренияПредварительногоБуфера.Пустая() Тогда
ПроизводственныйПроцессЭтап.ЕдиницаИзмеренияПредварительногоБуфера = ЭтапОсновнаяЕдиницаВремениБуфера;
КонецЕсли;
РассчитатьДлительностьЭтапа();
КонецПроцедуры
&НаКлиенте
Процедура ЭтапЗавершающийБуферПриИзменении(Элемент)
УстановитьОтметкуНезаполненногоДляБуферов(ЭтотОбъект);
РассчитатьДлительностьЭтапа();
КонецПроцедуры
&НаКлиенте
Процедура ЭтапЕдиницаИзмеренияЗавершающегоБуфераПриИзменении(Элемент)
Если ПроизводственныйПроцессЭтап.ЕдиницаИзмеренияЗавершающегоБуфера.Пустая() Тогда
ПроизводственныйПроцессЭтап.ЕдиницаИзмеренияЗавершающегоБуфера = ЭтапОсновнаяЕдиницаВремениБуфера;
КонецЕсли;
РассчитатьДлительностьЭтапа();
КонецПроцедуры
&НаКлиенте
Процедура ЭтапМаршрутнаяКартаПриИзменении(Элемент)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ЭтапРазбиватьМаршрутныеЛистыПриИзменении(Элемент)
РедакторПроизводственногоПроцессаКлиент.УстановитьМаксимальноеКоличествоЕдиницПартийИзделия(
ЭтапРазбиватьМаршрутныеЛисты, ЭтапМаксимальноеКоличествоЕдиницПартийИзделия);
НастроитьЗависимыеЭлементыФормыЭтапа(ЭтотОбъект, "РазбиватьМаршрутныеЛисты");
КонецПроцедуры
&НаКлиенте
Процедура ЭтапДополнительныеРеквизитыОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПроизводственныйПроцессРедактироватьДопРеквизиты();
КонецПроцедуры
#КонецОбласти
#Область Операции
&НаКлиенте
Процедура ОперацияНаименованиеПриИзменении(Элемент)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ОперацияНомерОперацииПриИзменении(Элемент)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ОперацияНаименованиеАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ОперацияНаименованиеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ОперацияНаименованиеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ОперацияНомерСледующейОперацииПриИзменении(Элемент)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ОперацияРабочийЦентрПриИзменении(Элемент)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ОперацияУчастокПриИзменении(Элемент)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ОперацияВариантНаладкиПриИзменении(Элемент)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ОперацияВариантНаладкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ОперацияКТОПриИзменении(Элемент)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ОперацияВидОперацииПриИзменении(Элемент)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ОперацияКоличествоПриИзменении(Элемент)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ОперацияЕдиницаИзмеренияПриИзменении(Элемент)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ОперацияПередаточнаяПартияПриИзменении(Элемент)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ОперацияДополнительныеРеквизитыОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
КонецПроцедуры
#КонецОбласти
#Область Прочее
&НаКлиенте
Процедура СтраницыПриСменеСтраницы(Элемент, ТекущаяСтраница)
Если ТекущаяСтраница.Имя = "ГруппаДополнительно"
И Не ЭтотОбъект.ПараметрыСвойств.ВыполненаОтложеннаяИнициализация Тогда
СвойстваВыполнитьОтложеннуюИнициализацию();
УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СпособРаспределенияЗатратНаВыходныеИзделияПриИзменении(Элемент)
ПриИзмененииСпособаРаспределенияЗатратНаВыходныеИзделия();
КонецПроцедуры
&НаКлиенте
Процедура ИнформационнаяСтрокаОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура СкрытьИнформационнуюПанельНажатие(Элемент)
Элементы.ИнформационнаяПанельСтраницы.ТекущаяСтраница = Элементы.ИнформационнаяПанельСтраницаСкрыть;
КонецПроцедуры
&НаКлиенте
Процедура ГиперссылкаНадписьОсновноеИзделиеНажатие(Элемент)
СвернутаГруппаОсновноеИзделие = НЕ СвернутаГруппаОсновноеИзделие;
УстановитьСвойстваСворачиваемойГруппы(
Элементы.ГруппаОсновноеИзделие,
Элементы.ГиперссылкаНадписьОсновноеИзделие,
СвернутаГруппаОсновноеИзделие);
КонецПроцедуры
&НаКлиенте
Процедура ГиперссылкаНадписьПараметрыПроизводственногоПроцессаНажатие(Элемент)
СвернутаГруппаПараметрыПроизводственногоПроцесса = НЕ СвернутаГруппаПараметрыПроизводственногоПроцесса;
УстановитьСвойстваСворачиваемойГруппы(
Элементы.ГруппаПараметрыПроизводственногоПроцесса,
Элементы.ГиперссылкаНадписьПараметрыПроизводственногоПроцесса,
СвернутаГруппаПараметрыПроизводственногоПроцесса);
КонецПроцедуры
&НаКлиенте
Процедура ГиперссылкаНадписьПараметрыНазначенияНажатие(Элемент)
СвернутаГруппаПараметрыНазначения = НЕ СвернутаГруппаПараметрыНазначения;
УстановитьСвойстваСворачиваемойГруппы(
Элементы.ГруппаПараметрыНазначения,
Элементы.ГиперссылкаНадписьПараметрыНазначения,
СвернутаГруппаПараметрыНазначения);
КонецПроцедуры
&НаКлиенте
Процедура ИсключитьАвтоматическийВыборВДокументахПриИзменении(Элемент)
Объект.ВариантПодбораВДокументы = ?(ИсключитьАвтоматическийВыборВДокументах,
ПредопределенноеЗначение("Перечисление.ВариантыПодбораСпецификацииВДокументы.Вручную"),
ПредопределенноеЗначение("Перечисление.ВариантыПодбораСпецификацииВДокументы.Автоматически"));
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыПродукция
&НаКлиенте
Процедура ПродукцияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ОбработатьВыборПоляВТаблице("Продукция", Поле, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ПродукцияПриАктивизацииСтроки(Элемент)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ПродукцияПередУдалением(Элемент, Отказ)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ПродукцияПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
ИмяТЧ = Элемент.Имя;
РаботаСТабличнымиЧастямиКлиент.КэшироватьТекущуюСтроку(Элементы[ИмяТЧ], ЭтотОбъект);
Если НоваяСтрока Тогда
ПриВводеНовойСтрокиСпецификации(ЭтотОбъект, ИмяТЧ, Элементы[ИмяТЧ].ТекущиеДанные, Копирование);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПродукцияПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
Если НоваяСтрока Тогда
РассчитатьПроцентРаспределенияЗатратНаВыходныеИзделия();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПродукцияПослеУдаления(Элемент)
РассчитатьПроцентРаспределенияЗатратНаВыходныеИзделия();
ОбновитьДанныеОсновногоИзделияСпецификацииПриСборке(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ПродукцияПриИзменении(Элемент)
ОбновитьДанныеОсновногоИзделияСпецификацииПриСборке(ЭтотОбъект);
Если ПроизводствоКлиент.НеобходимоРассчитатьПроцентРаспределенияЗатратНаВыходныеИзделия(
Элемент, ПараметрыРаспределенияЗатрат, РаботаСТабличнымиЧастямиКлиентСервер.КэшСтроки(Элементы.Продукция, ЭтотОбъект)) Тогда
РассчитатьПроцентРаспределенияЗатратНаВыходныеИзделия();
КонецЕсли;
НастроитьЗависимыеЭлементыФормы(ЭтотОбъект, "ОсновноеИзделие,ВариантПромежуточногоВыпуска");
КонецПроцедуры
&НаКлиенте
Процедура ПродукцияНоменклатураПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Продукция.ТекущаяСтрока;
ПродукцияНоменклатураПриИзмененииНаСервере(ТекущаяСтрока, КэшированныеЗначения);
КонецПроцедуры
&НаКлиенте
Процедура ПродукцияХарактеристикаПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Продукция.ТекущаяСтрока;
ПродукцияХарактеристикаПриИзмененииНаСервере(ТекущаяСтрока, КэшированныеЗначения);
КонецПроцедуры
&НаКлиенте
Процедура ПродукцияКоличествоУпаковокПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Продукция.ТекущаяСтрока;
ПродукцияУпаковкаКоличествоУпаковокПриИзмененииНаСервере(ТекущаяСтрока, КэшированныеЗначения);
КонецПроцедуры
&НаКлиенте
Процедура ПродукцияУпаковкаПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Продукция.ТекущаяСтрока;
ПродукцияУпаковкаКоличествоУпаковокПриИзмененииНаСервере(ТекущаяСтрока, КэшированныеЗначения);
КонецПроцедуры
&НаКлиенте
Процедура ПродукцияТребуетсяУказыватьСерииПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Продукция.ТекущаяСтрока;
ПродукцияТребуетсяУказыватьСерииПриИзмененииНаСервере(ТекущаяСтрока);
КонецПроцедуры
&НаКлиенте
Процедура ПродукцияЭлементПроизводственногоПроцессаАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
Если НЕ ПустаяСтрока(Текст) Тогда
СтандартнаяОбработка = Ложь;
ДанныеВыбора = ДанныеВыбораЭлементаПроизводственногоПроцесса("Продукция", Текст);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПродукцияЭлементПроизводственногоПроцессаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОбработкаВыбораЭлементаПроизводственногоПроцесса("Продукция", ВыбранноеЗначение);
КонецПроцедуры
&НаКлиенте
Процедура ПродукцияЭлементПроизводственногоПроцессаОчистка(Элемент, СтандартнаяОбработка)
ПроизводственныйПроцессОчиститьВыбранныйЭлемент(ЭтотОбъект, Элементы.Продукция.ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура ПродукцияЭлементПроизводственногоПроцессаОткрытие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПроизводственныйПроцессОткрытьФормуЭлемента(Элементы.Продукция.ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура ПродукцияЭлементПроизводственногоПроцессаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ИмяТЧ = "Продукция";
ПроизводственныйПроцессОткрытьФормуВыбораЭлемента(ИмяТЧ, Элементы[ИмяТЧ].ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура ПродукцияЭлементПроизводственногоПроцессаОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
ИмяТЧ = "Продукция";
ОбработкаВыбораЭлементаПроизводственногоПроцессаПоПредставлению(ИмяТЧ, Элементы[ИмяТЧ].ТекущиеДанные, Текст, СтандартнаяОбработка);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыВыходныеИзделия
&НаКлиенте
Процедура ВыходныеИзделияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ОбработатьВыборПоляВТаблице("ВыходныеИзделия", Поле, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ВыходныеИзделияПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
ИмяТЧ = Элемент.Имя;
РаботаСТабличнымиЧастямиКлиент.КэшироватьТекущуюСтроку(Элементы[ИмяТЧ], ЭтотОбъект);
Если НоваяСтрока Тогда
ПриВводеНовойСтрокиСпецификации(ЭтотОбъект, ИмяТЧ, Элементы[ИмяТЧ].ТекущиеДанные, Копирование);
РассчитатьКоличествоВыходныеПобочныеИзделия(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыходныеИзделияНоменклатураПриИзменении(Элемент)
ТекущиеДанные = Элементы.ВыходныеИзделия.ТекущиеДанные;
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПроверитьХарактеристикуПоВладельцу", ТекущиеДанные.Характеристика);
СтруктураДействий.Вставить("ПроверитьЗаполнитьУпаковкуПоВладельцу", ТекущиеДанные.Упаковка);
СтруктураДействий.Вставить("ПроверитьЗаполнитьДолюСтоимости", ПараметрыРаспределенияЗатрат);
СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц", Новый Структура("НужноОкруглять", Ложь));
СтруктураДействий.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
СтруктураДействий.Вставить("ЗаполнитьПризнакСерииИспользуются", Новый Структура("Номенклатура", "СерииИспользуются"));
СтруктураДействий.Вставить("ЗаполнитьПризнакВидНоменклатуры", Новый Структура("Номенклатура", "ВидНоменклатуры"));
СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры"));
СтруктураДействий.Вставить("НоменклатураПриИзмененииПереопределяемый", Новый Структура("ИмяФормы, ИмяТабличнойЧасти",
ИмяФормы, "ВыходныеИзделия"));
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущиеДанные, СтруктураДействий, КэшированныеЗначения);
ПриИзмененииНоменклатурыВСтрокеВыходныхИзделий(ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура ВыходныеИзделияПередУдалением(Элемент, Отказ)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ВыходныеИзделияХарактеристикаПриИзменении(Элемент)
ТекущиеДанные = Элементы.ВыходныеИзделия.ТекущиеДанные;
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПроверитьЗаполнитьДолюСтоимости", ПараметрыРаспределенияЗатрат);
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущиеДанные, СтруктураДействий, КэшированныеЗначения);
УправлениеДаннымиОбИзделияхКлиентСервер.ПриИзмененииХарактеристикиВСтрокеСАвтовыбором(ТекущиеДанные, Объект);
КонецПроцедуры
&НаКлиенте
Процедура ВыходныеИзделияКоличествоУпаковокПриИзменении(Элемент)
ТекущаяСтрока = Элементы.ВыходныеИзделия.ТекущиеДанные;
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц", Новый Структура("НужноОкруглять", Ложь));
СтруктураДействий.Вставить("ПересчитатьДолюСтоимости", ПараметрыРаспределенияЗатрат);
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
КонецПроцедуры
&НаКлиенте
Процедура ВыходныеИзделияУпаковкаПриИзменении(Элемент)
ТекущаяСтрока = Элементы.ВыходныеИзделия.ТекущиеДанные;
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц", Новый Структура("НужноОкруглять", Ложь));
СтруктураДействий.Вставить("ПересчитатьДолюСтоимости", ПараметрыРаспределенияЗатрат);
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
КонецПроцедуры
&НаКлиенте
Процедура ВыходныеИзделияПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
Если ПроизводствоКлиент.НеобходимоРассчитатьПроцентРаспределенияЗатратНаВыходныеИзделия(
Элемент, ПараметрыРаспределенияЗатрат, РаботаСТабличнымиЧастямиКлиентСервер.КэшСтроки(Элементы.ВыходныеИзделия, ЭтотОбъект), НоваяСтрока) Тогда
РассчитатьПроцентРаспределенияЗатратНаВыходныеИзделия();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыходныеИзделияПослеУдаления(Элемент)
РассчитатьКоличествоВыходныеПобочныеИзделия(ЭтотОбъект);
РассчитатьПроцентРаспределенияЗатратНаВыходныеИзделия();
КонецПроцедуры
&НаКлиенте
Процедура ВыходныеИзделияЭлементПроизводственногоПроцессаАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
Если НЕ ПустаяСтрока(Текст) Тогда
СтандартнаяОбработка = Ложь;
ДанныеВыбора = ДанныеВыбораЭлементаПроизводственногоПроцесса("ВыходныеИзделия", Текст);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыходныеИзделияЭлементПроизводственногоПроцессаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОбработкаВыбораЭлементаПроизводственногоПроцесса("ВыходныеИзделия", ВыбранноеЗначение);
КонецПроцедуры
&НаКлиенте
Процедура ВыходныеИзделияЭлементПроизводственногоПроцессаОчистка(Элемент, СтандартнаяОбработка)
ПроизводственныйПроцессОчиститьВыбранныйЭлемент(ЭтотОбъект, Элементы.ВыходныеИзделия.ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура ВыходныеИзделияЭлементПроизводственногоПроцессаОткрытие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПроизводственныйПроцессОткрытьФормуЭлемента(Элементы.ВыходныеИзделия.ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура ВыходныеИзделияЭлементПроизводственногоПроцессаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ИмяТЧ = "ВыходныеИзделия";
ПроизводственныйПроцессОткрытьФормуВыбораЭлемента(ИмяТЧ, Элементы[ИмяТЧ].ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура ВыходныеИзделияЭлементПроизводственногоПроцессаОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
ИмяТЧ = "ВыходныеИзделия";
ОбработкаВыбораЭлементаПроизводственногоПроцессаПоПредставлению(ИмяТЧ, Элементы[ИмяТЧ].ТекущиеДанные, Текст, СтандартнаяОбработка);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыВозвратныеОтходы
&НаКлиенте
Процедура ВозвратныеОтходыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ОбработатьВыборПоляВТаблице("ВозвратныеОтходы", Поле, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходыНоменклатураПриИзменении(Элемент)
ТекущиеДанные = Элементы.ВозвратныеОтходы.ТекущиеДанные;
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПроверитьХарактеристикуПоВладельцу", ТекущиеДанные.Характеристика);
СтруктураДействий.Вставить("ПроверитьЗаполнитьУпаковкуПоВладельцу", ТекущиеДанные.Упаковка);
СтруктураДействий.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
СтруктураДействий.Вставить("ЗаполнитьПризнакСерииИспользуются", Новый Структура("Номенклатура", "СерииИспользуются"));
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущиеДанные, СтруктураДействий, КэшированныеЗначения);
ПриИзмененииНоменклатурыВСтрокеВыходныхИзделий(ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходыХарактеристикаПриИзменении(Элемент)
ТекущаяСтрока = Элементы.ВозвратныеОтходы.ТекущиеДанные;
УправлениеДаннымиОбИзделияхКлиентСервер.ПриИзмененииХарактеристикиВСтрокеСАвтовыбором(ТекущаяСтрока, Объект);
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходыПередУдалением(Элемент, Отказ)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходыПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
Если НоваяСтрока Тогда
ПриВводеНовойСтрокиСпецификации(ЭтотОбъект, Элемент.Имя, Элементы[Элемент.Имя].ТекущиеДанные, Копирование);
РассчитатьКоличествоВыходныеПобочныеИзделия(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходыПослеУдаления(Элемент)
РассчитатьКоличествоВыходныеПобочныеИзделия(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходыЭлементПроизводственногоПроцессаАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
Если НЕ ПустаяСтрока(Текст) Тогда
СтандартнаяОбработка = Ложь;
ДанныеВыбора = ДанныеВыбораЭлементаПроизводственногоПроцесса("ВозвратныеОтходы", Текст);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходыЭлементПроизводственногоПроцессаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОбработкаВыбораЭлементаПроизводственногоПроцесса("ВозвратныеОтходы", ВыбранноеЗначение);
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходыЭлементПроизводственногоПроцессаОчистка(Элемент, СтандартнаяОбработка)
ПроизводственныйПроцессОчиститьВыбранныйЭлемент(ЭтотОбъект, Элементы.ВозвратныеОтходы.ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходыЭлементПроизводственногоПроцессаОткрытие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ИмяТЧ = "ВозвратныеОтходы";
ПроизводственныйПроцессОткрытьФормуЭлемента(Элементы[ИмяТЧ].ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходыЭлементПроизводственногоПроцессаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ИмяТЧ = "ВозвратныеОтходы";
ПроизводственныйПроцессОткрытьФормуВыбораЭлемента(ИмяТЧ, Элементы[ИмяТЧ].ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходыЭлементПроизводственногоПроцессаОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
ИмяТЧ = "ВозвратныеОтходы";
ОбработкаВыбораЭлементаПроизводственногоПроцессаПоПредставлению(ИмяТЧ, Элементы[ИмяТЧ].ТекущиеДанные, Текст, СтандартнаяОбработка);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыМатериалыИУслуги
&НаКлиенте
Процедура МатериалыИУслугиВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если Поле.Имя = "МатериалыИУслугиСпособПолученияМатериалаРедактирование" Тогда
ДанныеСтроки = Объект.МатериалыИУслуги.НайтиПоИдентификатору(ВыбраннаяСтрока);
Если (ДанныеСтроки.СпособПолученияМатериала = ПредопределенноеЗначение("Перечисление.СпособыПолученияМатериаловВСпецификации.ПроизвестиПоСпецификации")
И ЗначениеЗаполнено(ДанныеСтроки.ИсточникПолученияПолуфабриката)
ИЛИ ДанныеСтроки.СпособПолученияМатериала = ПредопределенноеЗначение("Перечисление.СпособыПолученияМатериаловВСпецификации.ПроизводитсяНаЭтапе")
И ЗначениеЗаполнено(ДанныеСтроки.СпецификацияРемонта)
)Тогда
Поле.КнопкаОткрытия = Истина;
Иначе
Поле.КнопкаОткрытия = Ложь;
КонецЕсли;
КонецЕсли;
ОбработатьВыборПоляВТаблице("МатериалыИУслуги", Поле, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура МатериалыИУслугиПередУдалением(Элемент, Отказ)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура МатериалыИУслугиПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
Если НоваяСтрока Тогда
ПриВводеНовойСтрокиСпецификации(ЭтотОбъект, Элемент.Имя, Элементы[Элемент.Имя].ТекущиеДанные, Копирование);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура МатериалыИУслугиОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
ОбработкаВыбораПодборНаСервере(ВыбранноеЗначение);
КонецПроцедуры
&НаКлиенте
Процедура МатериалыИУслугиНоменклатураПриИзменении(Элемент)
ТекущиеДанные = Элементы.МатериалыИУслуги.ТекущиеДанные;
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПроверитьХарактеристикуПоВладельцу", ТекущиеДанные.Характеристика);
СтруктураДействий.Вставить("ПроверитьЗаполнитьУпаковкуПоВладельцу", ТекущиеДанные.Упаковка);
СтруктураДействий.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
СтруктураДействий.Вставить("ЗаполнитьПризнакСерииИспользуются", Новый Структура("Номенклатура", "СерииИспользуются"));
СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры"));
СтруктураДействий.Вставить("НоменклатураПриИзмененииПереопределяемый", Новый Структура("ИмяФормы, ИмяТабличнойЧасти",
ИмяФормы, "МатериалыИУслуги"));
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущиеДанные, СтруктураДействий, КэшированныеЗначения);
ПриИзмененииНоменклатурыВСтрокеМатериалов(ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура МатериалыИУслугиХарактеристикаПриИзменении(Элемент)
ТекущаяСтрока = Элементы.МатериалыИУслуги.ТекущиеДанные;
УправлениеДаннымиОбИзделияхКлиентСервер.ПриИзмененииХарактеристикиВСтрокеСАвтовыбором(ТекущаяСтрока, Объект);
КонецПроцедуры
&НаКлиенте
Процедура МатериалыИУслугиСпособПолученияМатериалаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ТекущиеДанные = Элементы.МатериалыИУслуги.ТекущиеДанные;
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура МатериалыИУслугиТребуетсяУказыватьСерииПриИзменении(Элемент)
МатериалыИУслугиТребуетсяУказыватьСерииПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура МатериалыИУслугиСпособПолученияМатериалаРедактированиеОчистка(Элемент, СтандартнаяОбработка)
ТекущиеДанные = Элементы.МатериалыИУслуги.ТекущиеДанные;
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура МатериалыИУслугиСпособПолученияМатериалаРедактированиеОткрытие(Элемент, СтандартнаяОбработка)
ТекущиеДанные = Элементы.МатериалыИУслуги.ТекущиеДанные;
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура МатериалыИУслугиПрименениеМатериалаРедактированиеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ТекущиеДанные = Элементы.МатериалыИУслуги.ТекущиеДанные;
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура МатериалыИУслугиПрименениеМатериалаРедактированиеОчистка(Элемент, СтандартнаяОбработка)
ТекущиеДанные = Элементы.МатериалыИУслуги.ТекущиеДанные;
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура МатериалыИУслугиЭлементПроизводственногоПроцессаПриИзменении(Элемент)
Идентификаторы = Новый Массив;
Идентификаторы.Добавить(Элементы.МатериалыИУслуги.ТекущаяСтрока);
ОбработатьИзменениеЭтапаМатериалыИУслуги(Идентификаторы);
КонецПроцедуры
&НаКлиенте
Процедура МатериалыИУслугиЭлементПроизводственногоПроцессаАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
Если НЕ ПустаяСтрока(Текст) Тогда
СтандартнаяОбработка = Ложь;
ДанныеВыбора = ДанныеВыбораЭлементаПроизводственногоПроцесса("МатериалыИУслуги", Текст);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура МатериалыИУслугиЭлементПроизводственногоПроцессаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОбработкаВыбораЭлементаПроизводственногоПроцесса("МатериалыИУслуги", ВыбранноеЗначение);
КонецПроцедуры
&НаКлиенте
Процедура МатериалыИУслугиЭлементПроизводственногоПроцессаОчистка(Элемент, СтандартнаяОбработка)
ПроизводственныйПроцессОчиститьВыбранныйЭлемент(ЭтотОбъект, Элементы.МатериалыИУслуги.ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура МатериалыИУслугиЭлементПроизводственногоПроцессаОткрытие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПроизводственныйПроцессОткрытьФормуЭлемента(Элементы.МатериалыИУслуги.ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура МатериалыИУслугиЭлементПроизводственногоПроцессаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ИмяТЧ = "МатериалыИУслуги";
ПроизводственныйПроцессОткрытьФормуВыбораЭлемента(ИмяТЧ, Элементы[ИмяТЧ].ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура МатериалыИУслугиЭлементПроизводственногоПроцессаОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
ИмяТЧ = "МатериалыИУслуги";
ОбработкаВыбораЭлементаПроизводственногоПроцессаПоПредставлению(ИмяТЧ, Элементы[ИмяТЧ].ТекущиеДанные, Текст, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура МатериалыИУслугиПроизвестиПриИзменении(Элемент)
Возврат;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыТрудозатраты
&НаКлиенте
Процедура ТрудозатратыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ОбработатьВыборПоляВТаблице("Трудозатраты", Поле, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ТрудозатратыПередУдалением(Элемент, Отказ)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ТрудозатратыПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
Если НоваяСтрока Тогда
ПриВводеНовойСтрокиСпецификации(ЭтотОбъект, Элемент.Имя, Элементы[Элемент.Имя].ТекущиеДанные, Копирование);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ТрудозатратыЭлементПроизводственногоПроцессаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ИмяТЧ = "Трудозатраты";
ПроизводственныйПроцессОткрытьФормуВыбораЭлемента(ИмяТЧ, Элементы[ИмяТЧ].ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура ТрудозатратыЭлементПроизводственногоПроцессаОчистка(Элемент, СтандартнаяОбработка)
ПроизводственныйПроцессОчиститьВыбранныйЭлемент(ЭтотОбъект, Элементы.Трудозатраты.ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура ТрудозатратыЭлементПроизводственногоПроцессаОткрытие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПроизводственныйПроцессОткрытьФормуЭлемента(Элементы.Трудозатраты.ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура ТрудозатратыЭлементПроизводственногоПроцессаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОбработкаВыбораЭлементаПроизводственногоПроцесса("Трудозатраты", ВыбранноеЗначение);
КонецПроцедуры
&НаКлиенте
Процедура ТрудозатратыЭлементПроизводственногоПроцессаАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
Если НЕ ПустаяСтрока(Текст) Тогда
СтандартнаяОбработка = Ложь;
ДанныеВыбора = ДанныеВыбораЭлементаПроизводственногоПроцесса("Трудозатраты", Текст);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ТрудозатратыЭлементПроизводственногоПроцессаОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
ИмяТЧ = "Трудозатраты";
ОбработкаВыбораЭлементаПроизводственногоПроцессаПоПредставлению(ИмяТЧ, Элементы[ИмяТЧ].ТекущиеДанные, Текст, СтандартнаяОбработка);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыПроизводственныйПроцесс
&НаКлиенте
Процедура ПроизводственныйПроцессПриАктивизацииСтроки(Элемент)
Если Элементы.ПроизводственныйПроцесс.ТекущиеДанные = Неопределено Тогда
Элементы.ПроизводственныйПроцессСвойстваСтраницы.ТекущаяСтраница = Элементы.ПроизводственныйПроцессПустая;
Возврат;
КонецЕсли;
Если ПроизводственныйПроцессАктивизацияЭлемента
ИЛИ Элементы.ПроизводственныйПроцесс.ТекущиеДанные.Ссылка = ПроизводственныйПроцессТекущаяСсылка Тогда
Возврат;
КонецЕсли;
ПодключитьОбработчикОжидания("Подключаемый_ПроизводственныйПроцессПриАктивизацииЭлемента", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ПроизводственныйПроцессПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, ЭтоГруппа, Параметр)
Отказ = Истина;
Если СтатусЗаписанногоОбъекта = СтатусДействующейСпецификации Тогда
Возврат;
КонецЕсли;
ТекущиеДанные = Элементы.ПроизводственныйПроцесс.ТекущиеДанные;
Если Копирование Тогда
ПроизводственныйПроцессНачатьКопированиеЭлемента(ТекущиеДанные);
ИначеЕсли ТекущиеДанные = Неопределено ИЛИ ТекущиеДанные.ВидЭлемента = "Этап" Тогда
ПроизводственныйПроцессНачатьДобавлениеЭтапа();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроизводственныйПроцессПередУдалением(Элемент, Отказ)
Отказ = Истина;
Если СтатусЗаписанногоОбъекта = СтатусДействующейСпецификации Тогда
Возврат;
КонецЕсли;
ВыделенныеСтроки = Элементы.ПроизводственныйПроцесс.ВыделенныеСтроки;
Если ПроверитьВозможностьУдаленияЭлементовПроизводственногоПроцесса(ВыделенныеСтроки) Тогда
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ИдентификаторыСтрок", ВыделенныеСтроки);
Если ВыделенныеСтроки.Количество() = 1 Тогда
ТекстВопроса = СтрШаблон(НСтр("ru = 'Удалить ""%1""?'"), Элементы.ПроизводственныйПроцесс.ТекущиеДанные.Наименование);
Иначе
ТекстВопроса = НСтр("ru = 'Удалить выделенные элементы?'");
КонецЕсли;
ОписаниеОповещения = Новый ОписаниеОповещения("ВопросПроизводственныйПроцессПередУдалениемЗавершение", ЭтотОбъект, ДополнительныеПараметры);
ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыПромежуточныйВыпуск
&НаКлиенте
Процедура ПромежуточныйВыпускПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ПромежуточныйВыпускПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ПромежуточныйВыпускПередУдалением(Элемент, Отказ)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ПромежуточныйВыпускВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ПромежуточныйВыпускЭлементПроизводственногоПроцессаАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ПромежуточныйВыпускЭлементПроизводственногоПроцессаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ПромежуточныйВыпускЭлементПроизводственногоПроцессаОчистка(Элемент, СтандартнаяОбработка)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ПромежуточныйВыпускЭлементПроизводственногоПроцессаОткрытие(Элемент, СтандартнаяОбработка)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ПромежуточныйВыпускЭлементПроизводственногоПроцессаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ПромежуточныйВыпускЭлементПроизводственногоПроцессаОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ПромежуточныйВыпускНоменклатураПриИзменении(Элемент)
Возврат;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыЭтапВидыРабочихЦентров
&НаКлиенте
Процедура ЭтапВидыРабочихЦентровПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, ЭтоГруппа, Параметр)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ЭтапВидыРабочихЦентровПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ЭтапВидыРабочихЦентровПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ЭтапВидыРабочихЦентровПередУдалением(Элемент, Отказ)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ЭтапВидыРабочихЦентровПослеУдаления(Элемент)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ЭтапВидыРабочихЦентровВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ЭтапВидыРабочихЦентровИспользоватьПриИзменении(Элемент)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ЭтапВидыРабочихЦентровВидРабочегоЦентраПриИзменении(Элемент)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ЭтапВидыРабочихЦентровВариантНаладкиПриИзменении(Элемент)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ЭтапВидыРабочихЦентровВремяРаботыПриИзменении(Элемент)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ЭтапВидыРабочихЦентровЕдиницаИзмеренияПриИзменении(Элемент)
Возврат;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыЭтапУслугиПереработчика
&НаКлиенте
Процедура ЭтапУслугиПереработчикаНоменклатураПриИзменении(Элемент)
ТекущиеДанные = Элементы.ЭтапУслугиПереработчика.ТекущиеДанные;
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПроверитьХарактеристикуПоВладельцу", ТекущиеДанные.Характеристика);
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущиеДанные, СтруктураДействий, КэшированныеЗначения);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыОперацияДопРеквизиты
&НаКлиенте
Процедура ОперацияДопРеквизитыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ОперацияДопРеквизитыПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ОперацияДопРеквизитыЗначениеМинПриИзменении(Элемент)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ОперацияДопРеквизитыЗначениеМаксПриИзменении(Элемент)
Возврат;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура Подключаемый_КомандаПанелиПрисоединенныхФайлов(Команда)
РаботаСФайламиКлиент.КомандаУправленияПрисоединеннымиФайлами(ЭтотОбъект, Команда);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
РаботаСФайламиКлиент.ПолеПредпросмотраПроверкаПеретаскивания(ЭтотОбъект, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
РаботаСФайламиКлиент.ПолеПредпросмотраПеретаскивание(ЭтотОбъект, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраНажатие(Элемент, СтандартнаяОбработка)
РаботаСФайламиКлиент.ПолеПредпросмотраНажатие(ЭтотОбъект, Элемент, СтандартнаяОбработка);
КонецПроцедуры
#Область Основное
&НаКлиенте
Процедура ФормаЗаписать(Команда)
ЗаписатьСпецификацию();
КонецПроцедуры
&НаКлиенте
Процедура ФормаЗаписатьИЗакрыть(Команда)
Если ЗаписатьСпецификацию() Тогда
Закрыть();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ФормаСкопировать(Команда)
МассивСтрок = Новый Массив;
МассивСтрок.Добавить(НСтр("ru = 'Будет создана и записана копия ресурсной спецификации.'"));
Если НЕ ЗначениеЗаполнено(Объект.Ссылка) ИЛИ Модифицированность Тогда
МассивСтрок.Добавить(НСтр("ru = 'Перед выполнением операции, текущая спецификация будет записана.'"));
КонецЕсли;
МассивСтрок.Добавить(НСтр("ru = 'Скопировать?'"));
ПоказатьВопрос(
Новый ОписаниеОповещения("ФормаСкопироватьЗавершение", ЭтотОбъект),
СтрСоединить(МассивСтрок, " "),
РежимДиалогаВопрос.ДаНет);
КонецПроцедуры
&НаКлиенте
Процедура КомандаОткрытьСпецификацииИзделия(Команда)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура КомандаЗаполнитьПоМаршрутнымКартамЭтапов(Команда)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура КомандаУстановитьСтатусВРазработке(Команда)
Если НЕ ДоступностьРеквизитов Тогда
ОписаниеОповещения = Новый ОписаниеОповещения("ОбработчикУстановитьСтатусВРазработке", ЭтотОбъект);
ОткрытьФорму("Справочник.РесурсныеСпецификации.Форма.РазблокированиеРеквизитов",
Новый Структура("Объект", Объект.Ссылка),,,,,
ОписаниеОповещения,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура КомандаУстановитьСтатусДействует(Команда)
УстановитьНовыйСтатусИЗаписать(ПредопределенноеЗначение("Перечисление.СтатусыСпецификаций.Действует"));
КонецПроцедуры
&НаКлиенте
Процедура КомандаУстановитьСтатусЗакрыта(Команда)
УстановитьНовыйСтатусИЗаписать(ПредопределенноеЗначение("Перечисление.СтатусыСпецификаций.Закрыта"));
КонецПроцедуры
&НаКлиенте
Процедура КомандаПроверитьЗаполнение(Команда)
ОчиститьСообщения();
ТекстЗаголовка = НСтр("ru = 'Проверка спецификации'");
Если Объект.ПометкаУдаления Тогда
ТекстПредупреждения = НСтр("ru = 'Помеченная на удаление спецификация не может быть действующей.'");
ПоказатьПредупреждение(,ТекстПредупреждения,, ТекстЗаголовка);
Возврат;
КонецЕсли;
Если КомандаПроверитьЗаполнениеВСтатусеДействует() Тогда
ТекстПредупреждения = НСтр("ru = 'Спецификацию можно сделать действующей.'");
Иначе
ТекстПредупреждения = НСтр("ru = 'Спецификация не может быть действующей.
|Необходимо заполнить указанные реквизиты.'");
КонецЕсли;
ПоказатьПредупреждение(,ТекстПредупреждения,, ТекстЗаголовка);
КонецПроцедуры
&НаКлиенте
Процедура КомандаУстановитьПериодДействия(Команда)
Диалог = Новый ДиалогРедактированияСтандартногоПериода();
Диалог.Период.ДатаНачала = Объект.НачалоДействия;
Диалог.Период.ДатаОкончания = Объект.КонецДействия;
Оповещение = Новый ОписаниеОповещения(
"УстановитьПериодДействияЗавершение",
ЭтотОбъект,
Новый Структура());
Диалог.Показать(Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура Продукция_НастроитьПодборНоменклатуры(Команда)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура Продукция_НастройкаОтбораПоСвойствамИРасчетаПоФормулам(Команда)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура УточнениеПримененияНоменклатура(Команда)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура УточнениеПримененияХарактеристика(Команда)
Возврат;
КонецПроцедуры
#КонецОбласти
#Область Этапы
&НаКлиенте
Процедура ЭтапРассчитатьКоэффициентМаршрутнойКарты(Команда)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ЭтапДобавитьАльтернативныйВидРЦ(Команда)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ЭтапНастройкаОтбораПоСвойствамИРасчетаПоФормулам(Команда)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ЭтапЗаполнитьВидыРабочихЦентров(Команда)
Возврат;
КонецПроцедуры
#КонецОбласти
#Область Операции
&НаКлиенте
Процедура ОперацияРассчитатьКоэффициентТехнологическогоПроцесса(Команда)
Возврат;
КонецПроцедуры
#КонецОбласти
#Область Продукция
&НаКлиенте
Процедура Продукция_ВставитьСтроки(Команда)
ПолучитьСтрокиИзБуфераОбмена("Продукция", "ВыходныеИзделия");
КонецПроцедуры
&НаКлиенте
Процедура Продукция_СкопироватьСтроки(Команда)
СкопироватьСтрокиТЧ("Продукция", "ВыходныеИзделия");
КонецПроцедуры
#КонецОбласти
#Область ВыходныеИзделия
&НаКлиенте
Процедура ВыходныеИзделия_НастроитьПодборНоменклатуры(Команда)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ВыходныеИзделия_НастройкаОтбораПоСвойствамИРасчетаПоФормулам(Команда)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ВыходныеИзделия_ЗаполнитьЭтап(Команда)
ЗаполнитьЭтапВСтроках("ВыходныеИзделия");
КонецПроцедуры
&НаКлиенте
Процедура ВыходныеИзделия_ВставитьСтроки(Команда)
ПолучитьСтрокиИзБуфераОбмена("ВыходныеИзделия");
КонецПроцедуры
&НаКлиенте
Процедура ВыходныеИзделия_СкопироватьСтроки(Команда)
СкопироватьСтрокиТЧ("ВыходныеИзделия");
КонецПроцедуры
#КонецОбласти
#Область ВозвратныеОтходы
&НаКлиенте
Процедура ВозвратныеОтходы_НастроитьПодборНоменклатуры(Команда)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходы_НастройкаОтбораПоСвойствамИРасчетаПоФормулам(Команда)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходы_ЗаполнитьЭтап(Команда)
ЗаполнитьЭтапВСтроках("ВозвратныеОтходы");
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходы_ЗаполнитьСтатьюКалькуляции(Команда)
ЗаполнитьСтатьюКалькуляцииВСтроках("ВозвратныеОтходы");
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходы_ВставитьСтроки(Команда)
ПолучитьСтрокиИзБуфераОбмена("ВозвратныеОтходы");
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходы_СкопироватьСтроки(Команда)
СкопироватьСтрокиТЧ("ВозвратныеОтходы");
КонецПроцедуры
#КонецОбласти
#Область МатериалыИУслуги
&НаКлиенте
Процедура РазбитьСтроку(Команда)
ТаблицаФормы = Элементы.МатериалыИУслуги;
ДанныеТаблицы = Объект.МатериалыИУслуги;
Оповещение = Новый ОписаниеОповещения("РазбитьСтрокуЗавершение", ЭтотОбъект);
РаботаСТабличнымиЧастямиКлиент.РазбитьСтроку(ДанныеТаблицы, ТаблицаФормы, Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ВвестиРазрешениеНаЗамену(Команда)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура МатериалыИУслуги_НастроитьПодборНоменклатуры(Команда)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура МатериалыИУслуги_НастройкаОтбораПоСвойствамИРасчетаПоФормулам(Команда)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура КомандаОткрытьПодборМатериалов(Команда)
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РежимПодбораБезСуммовыхПараметров", Истина);
ПараметрыФормы.Вставить("СкрыватьКолонкуВидЦены", Истина);
ПараметрыФормы.Вставить("СкрыватьКомандуЦеныНоменклатуры", Истина);
ПараметрыФормы.Вставить("ОстаткиПоВсемСкладам", Истина);
ПараметрыФормы.Вставить("Документ", Объект.Ссылка);
ПараметрыФормы.Вставить("ОтборПоТипуНоменклатуры", УправлениеДаннымиОбИзделияхКлиентСервер.МассивДоступныхТиповНоменклатуры(ЭтотОбъект, "МатериалыИУслуги"));
ПараметрыФормы.Вставить("СкрыватьРучныеСкидки", Истина);
ОткрытьФорму("Обработка.ПодборТоваровВДокументЗакупки.Форма",
ПараметрыФормы,
Элементы.МатериалыИУслуги,
УникальныйИдентификатор,,,,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура МатериалыИУслуги_ВставитьСтроки(Команда)
ПолучитьСтрокиИзБуфераОбмена("МатериалыИУслуги");
КонецПроцедуры
&НаКлиенте
Процедура МатериалыИУслуги_СкопироватьСтроки(Команда)
СкопироватьСтрокиТЧ("МатериалыИУслуги");
КонецПроцедуры
&НаКлиенте
Процедура МатериалыИУслуги_ЗаполнитьЭтап(Команда)
ЗаполнитьЭтапВСтроках("МатериалыИУслуги");
КонецПроцедуры
&НаКлиенте
Процедура МатериалыИУслуги_ЗаполнитьСтатьюКалькуляции(Команда)
ЗаполнитьСтатьюКалькуляцииВСтроках("МатериалыИУслуги");
КонецПроцедуры
#КонецОбласти
#Область Трудозатраты
&НаКлиенте
Процедура Трудозатраты_НастройкаОтбораПоСвойствамИРасчетаПоФормулам(Команда)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура Трудозатраты_ЗаполнитьЭтап(Команда)
ЗаполнитьЭтапВСтроках("Трудозатраты");
КонецПроцедуры
&НаКлиенте
Процедура Трудозатраты_ЗаполнитьСтатьюКалькуляции(Команда)
ЗаполнитьСтатьюКалькуляцииВСтроках("Трудозатраты");
КонецПроцедуры
&НаКлиенте
Процедура Трудозатраты_ВставитьСтроки(Команда)
ПолучитьСтрокиИзБуфераОбмена("Трудозатраты");
КонецПроцедуры
&НаКлиенте
Процедура Трудозатраты_СкопироватьСтроки(Команда)
СкопироватьСтрокиТЧ("Трудозатраты");
КонецПроцедуры
#КонецОбласти
#Область ПроизводственныйПроцесс
&НаКлиенте
Процедура ПроизводственныйПроцессСвернуть(Команда)
ПроизводственныйПроцессСвертка(Истина);
КонецПроцедуры
&НаКлиенте
Процедура ПроизводственныйПроцессРазвернуть(Команда)
ПроизводственныйПроцессСвертка(Ложь)
КонецПроцедуры
&НаКлиенте
Процедура ПроизводственныйПроцессПереместитьВверх(Команда)
ПроизводственныйПроцессПереместитьЭлемент(Элементы.ПроизводственныйПроцесс.ТекущиеДанные, -1);
КонецПроцедуры
&НаКлиенте
Процедура ПроизводственныйПроцессПереместитьВниз(Команда)
ПроизводственныйПроцессПереместитьЭлемент(Элементы.ПроизводственныйПроцесс.ТекущиеДанные, 1);
КонецПроцедуры
&НаКлиенте
Процедура ПроизводственныйПроцессДобавитьЭтап(Команда)
ПроизводственныйПроцессНачатьДобавлениеЭтапа();
КонецПроцедуры
&НаКлиенте
Процедура ПроизводственныйПроцессДобавитьОперацию(Команда)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ПроизводственныйПроцессДобавитьГруппуОпераций(Команда)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ПроизводственныйПроцессДобавитьТиповой(Команда)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ПроизводственныйПроцессСвойстваСвернуть(Команда)
ПроизводственныйПроцессСвойстваСвертка(Истина);
КонецПроцедуры
&НаКлиенте
Процедура ПроизводственныйПроцессСвойстваРазвернуть(Команда)
ПроизводственныйПроцессСвойстваСвертка(Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ПроизводственныйПроцессДополнительныеСведения(Команда)
ПроизводственныйПроцессРедактироватьДопСведения();
КонецПроцедуры
&НаКлиенте
Процедура ПроизводственныйПроцессВыделитьВТехнологическийПроцесс(Команда)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ПроизводственныйПроцессЗаполнитьПодразделение(Команда)
Если СтатусЗаписанногоОбъекта = СтатусДействующейСпецификации Тогда
Возврат;
КонецЕсли;
ВыделенныеСтроки = Элементы.ПроизводственныйПроцесс.ВыделенныеСтроки;
Если ПроверитьВозможностьЗаполненияПодразделенияЭтапов(ВыделенныеСтроки) Тогда
Отбор = Новый Структура;
Отбор.Вставить("ПроизводственноеПодразделение", Истина);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Отбор", Отбор);
ПараметрыФормы.Вставить("МножественныйВыбор", Ложь);
ОписаниеОповещения = Новый ОписаниеОповещения(
"ЗаполнитьПодразделениеЭтаповЗавершение", ЭтотОбъект, ВыделенныеСтроки);
ОткрытьФорму(
"Справочник.СтруктураПредприятия.Форма.ФормаВыбора",
ПараметрыФормы,
ЭтотОбъект,,,,
ОписаниеОповещения,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроизводственныйПроцессПодобратьПоКТО(Команда)
Если СтатусЗаписанногоОбъекта = СтатусДействующейСпецификации Тогда
Возврат;
КонецЕсли;
Возврат;
КонецПроцедуры
#КонецОбласти
#Область УниверсальныеМеханизмы
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуИнтеграции(Команда)
ИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент.ВыполнитьПодключаемуюКомандуИнтеграции(Команда, ЭтотОбъект, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтотОбъект, Команда);
КонецПроцедуры
#КонецОбласти
#Область ЗагрузкаДанныхИзФайла
&НаКлиенте
Процедура МатериалыИУслугиЗагрузитьИзФайла(Команда)
ЗагрузитьИзФайла("МатериалыИУслуги", НСтр("ru = 'Материалы и услуги'"));
КонецПроцедуры
&НаКлиенте
Процедура ТрудозатратыЗагрузитьИзФайла(Команда)
ЗагрузитьИзФайла("Трудозатраты", НСтр("ru = 'Трудозатраты'"));
КонецПроцедуры
&НаКлиенте
Процедура ВозвратныеОтходыЗагрузитьИзФайла(Команда)
ЗагрузитьИзФайла("ВозвратныеОтходы", ПредставлениеТабличнойЧастиВозвратныеОтходы(ЭтотОбъект));
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область УниверсальныеМеханизмы
&НаСервере
Процедура СвойстваВыполнитьОтложеннуюИнициализацию()
УправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыВФорме(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьЗависимостиДополнительныхРеквизитов()
УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент)
УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
#КонецОбласти
#Область РаботаСБуферомОбмена
&НаКлиенте
Процедура СкопироватьСтрокиТЧ(Знач ИмяТЧ, Знач ПутьКДанным = "")
Если РаботаСТабличнымиЧастямиКлиент.ВыбранаСтрокаДляВыполненияКоманды(Элементы[ИмяТЧ]) Тогда
СкопироватьСтрокиНаСервере(ИмяТЧ, ПутьКДанным);
РаботаСТабличнымиЧастямиКлиент.ОповеститьПользователяОКопированииСтрок(Элементы[ИмяТЧ].ВыделенныеСтроки.Количество());
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура СкопироватьСтрокиНаСервере(Знач ИмяТЧ, Знач ПутьКДанным = "")
Если ПустаяСтрока(ПутьКДанным) Тогда
РаботаСТабличнымиЧастями.СкопироватьСтрокиВБуферОбмена(Объект[ИмяТЧ], Элементы[ИмяТЧ].ВыделенныеСтроки);
Иначе
РаботаСТабличнымиЧастями.СкопироватьСтрокиВБуферОбмена(Объект[ПутьКДанным], Элементы[ИмяТЧ].ВыделенныеСтроки);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьСтрокиИзБуфераОбмена(Знач ИмяТЧ, Знач ПутьКДанным = "")
Если ПустаяСтрока(ПутьКДанным) Тогда
Приемник = Объект[ИмяТЧ];
Иначе
Приемник = Объект[ПутьКДанным]
КонецЕсли;
КоличествоСтрокДоВставки = Приемник.Количество();
ПолучитьСтрокиИзБуфераОбменаНаСервере(ИмяТЧ, ПутьКДанным);
КоличествоВставленных = Приемник.Количество() - КоличествоСтрокДоВставки;
РаботаСТабличнымиЧастямиКлиент.ОповеститьПользователяОВставкеСтрок(КоличествоВставленных);
КонецПроцедуры
&НаСервере
Процедура ПолучитьСтрокиИзБуфераОбменаНаСервере(ИмяТЧ, ПутьКДанным = "")
СоставСтрок = Неопределено;
ПараметрыОтбора = Неопределено;
Если ПустаяСтрока(ПутьКДанным) Тогда
Приемник = Объект[ИмяТЧ];
Иначе
Приемник = Объект[ПутьКДанным];
КонецЕсли;
Если ИмяТЧ = "Продукция" ИЛИ ИмяТЧ = "ВыходныеИзделия" Тогда
СоставСтрок = "Номенклатура,Характеристика,Упаковка,КоличествоУпаковок";
ИначеЕсли ИмяТЧ = "МатериалыИУслуги" ИЛИ ИмяТЧ = "ВозвратныеОтходы" Тогда
СоставСтрок = "Номенклатура,Характеристика,Упаковка,КоличествоУпаковок,СтатьяКалькуляции";
ИначеЕсли ИмяТЧ = "Трудозатраты" Тогда
СоставСтрок = "ВидРабот,Количество,СтатьяКалькуляции";
КонецЕсли;
ПодборТоваров = ИмяТЧ <> "Трудозатраты";
СтруктураДействий = Новый Структура;
КэшированныеЗначения = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения();
Если ПодборТоваров Тогда
МассивТиповНоменклатуры = УправлениеДаннымиОбИзделияхКлиентСервер.МассивДоступныхТиповНоменклатуры(ЭтотОбъект, ИмяТЧ);
ПараметрыОтбора = Новый Соответствие;
ПараметрыОтбора.Вставить("Номенклатура.ТипНоменклатуры", МассивТиповНоменклатуры);
Если ИмяТЧ = "Продукция" ИЛИ ИмяТЧ = "ВыходныеИзделия" Тогда
СтруктураДействий.Вставить("ПроверитьЗаполнитьДолюСтоимости", ПараметрыРаспределенияЗатрат);
СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц", Новый Структура("НужноОкруглять", Ложь));
СтруктураДействий.Вставить("ЗаполнитьПризнакВидНоменклатуры", Новый Структура("Номенклатура", "ВидНоменклатуры"));
КонецЕсли;
Если ИмяТЧ = "Продукция" ИЛИ ИмяТЧ = "ВыходныеИзделия" ИЛИ ИмяТЧ = "МатериалыИУслуги" Тогда
СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры"));
КонецЕсли;
СтруктураДействий.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
КонецЕсли;
СтрокиИзБуфера = РаботаСТабличнымиЧастями.СтрокиИзБуфераОбмена(ПараметрыОтбора, СоставСтрок);
Если Не ЗначениеЗаполнено(СтрокиИзБуфера) Тогда
Возврат;
КонецЕсли;
ОбрабатываемыеСтроки = Новый Массив();
Для каждого СтрокаИзБуфера Из СтрокиИзБуфера Цикл
НоваяСтрока = Приемник.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаИзБуфера);
ПриВводеНовойСтрокиСпецификации(ЭтотОбъект, ИмяТЧ, НоваяСтрока);
Если ПодборТоваров Тогда
ОбрабатываемыеСтроки.Добавить(НоваяСтрока);
КонецЕсли;
КонецЦикла;
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
ОбрабатываемыеСтроки,
СтруктураДействий,
Приемник);
Если ИмяТЧ = "Продукция" Тогда
ОбновитьДанныеОсновногоИзделияСпецификацииПриСборке(ЭтотОбъект);
КонецЕсли;
ЗаполнитьСлужебныеРеквизиты();
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьДоступностьКомандБуфераОбмена(Форма, РеквизитыДоступны)
Форма.Элементы.Продукция_ВставитьСтроки.Доступность = РеквизитыДоступны;
Форма.Элементы.КонтекстноеМенюПродукция_ВставитьСтроки.Доступность = РеквизитыДоступны;
Форма.Элементы.ВыходныеИзделия_ВставитьСтроки.Доступность = РеквизитыДоступны;
Форма.Элементы.КонтекстноеМенюВыходныеИзделия_ВставитьСтроки.Доступность = РеквизитыДоступны;
Форма.Элементы.ВозвратныеОтходы_ВставитьСтроки.Доступность = РеквизитыДоступны;
Форма.Элементы.КонтекстноеМенюВозвратныеОтходы_ВставитьСтроки.Доступность = РеквизитыДоступны;
Форма.Элементы.МатериалыИУслуги_ВставитьСтроки.Доступность = РеквизитыДоступны;
Форма.Элементы.КонтекстноеМенюМатериалыИУслуги_ВставитьСтроки.Доступность = РеквизитыДоступны;
Форма.Элементы.Трудозатраты_ВставитьСтроки.Доступность = РеквизитыДоступны;
Форма.Элементы.КонтекстноеМенюТрудозатраты_ВставитьСтроки.Доступность = РеквизитыДоступны;
КонецПроцедуры
#КонецОбласти
#Область ПроизводственныйПроцесс
&НаСервере
Процедура ПриИзмененииСтруктурыПроизводственногоПроцесса()
Если Не Объект.МногоэтапныйПроизводственныйПроцесс Тогда
Для каждого Строка Из Объект.МатериалыИУслуги Цикл
Если Строка.ПроизводитсяВПроцессе Тогда
Если Строка.СпособПолученияМатериала = ПредопределенноеЗначение("Перечисление.СпособыПолученияМатериаловВСпецификации.ПроизводитсяНаЭтапе")
ИЛИ ЗначениеЗаполнено(Строка.ПланироватьНеРанее) Тогда
УправлениеДаннымиОбИзделияхКлиентСервер.ЗаполнитьСпособПолученияМатериалаПоУмолчанию(Строка);
ЗаполнитьПризнакОбособленноВСтрокеМатериалов(Строка);
ЗаполнитьСтатьюКалькуляцииПоУмолчанию(Строка);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
ЗаполнитьСлужебныеРеквизиты();
НастроитьЗависимыеЭлементыФормы(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Функция ТребуетсяОчиститьРеквизитыПриИзмененииОписанияПартииВыпуска(СписокРеквизитов)
Если НЕ Объект.ВыпускПроизвольнымиПорциями Тогда
Если Объект.МинимальнаяПартияВыпуска <> 0 Тогда
СписокРеквизитов.Добавить(НСтр("ru = '""Минимальный выпуск""'"));
КонецЕсли;
Если Объект.ОптимальнаяПартияВыпуска <> 0 Тогда
СписокРеквизитов.Добавить(НСтр("ru = '""Оптимальный выпуск""'"));
КонецЕсли;
Если Объект.ДопустимоеПревышениеОптимальнойПартииВыпуска <> 0 Тогда
СписокРеквизитов.Добавить(НСтр("ru = '""Допустимое превышение оптимальной партии выпуска""'"));
КонецЕсли;
КонецЕсли;
Возврат СписокРеквизитов.Количество() > 0;
КонецФункции
&НаКлиенте
Процедура ОчиститьРеквизитыПриИзмененииОписанияПартииВыпуска(РезультатВопроса, ДополнительныеПараметры) Экспорт
Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда
Объект.ВыпускПроизвольнымиПорциями = ВыпускПроизвольнымиПорциямиДоИзменения;
Возврат;
КонецЕсли;
ОчиститьРеквизитыПриИзмененииОписанияПартииВыпускаНаСервере();
КонецПроцедуры
&НаСервере
Процедура ОчиститьРеквизитыПриИзмененииОписанияПартииВыпускаНаСервере()
Если Объект.МинимальнаяПартияВыпуска <> 0 Тогда
Объект.МинимальнаяПартияВыпуска = 0;
КонецЕсли;
Если Объект.ОптимальнаяПартияВыпуска <> 0 Тогда
Объект.ОптимальнаяПартияВыпуска = 0;
КонецЕсли;
Если Объект.ДопустимоеПревышениеОптимальнойПартииВыпуска <> 0 Тогда
Объект.ДопустимоеПревышениеОптимальнойПартииВыпуска = 0;
КонецЕсли;
ЗаполнитьОписаниеПартииВыпуска();
НастроитьЗависимыеЭлементыФормы(ЭтотОбъект, "ВыпускПроизвольнымиПорциями,МинимальнаяПартияВыпуска,ОптимальнаяПартияВыпуска");
КонецПроцедуры
&НаСервере
Процедура УстановитьУсловноеОформлениеПроизводственногоПроцесса()
Элемент = УсловноеОформление.Элементы.Добавить();
Элемент.Поля.Элементы.Добавить().Поле = Новый ПолеКомпоновкиДанных(Элементы.ПроизводственныйПроцесс.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПроизводственныйПроцесс.ТолькоПросмотр");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Серый);
НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(ЭтотОбъект,
"ЭтапУслугиПереработчикаХарактеристика",
"ПроизводственныйПроцессЭтап.УслугиПереработчика.ХарактеристикиИспользуются");
КонецПроцедуры
&НаСервере
Процедура НастроитьЭлементыПроизводственногоПроцесса()
ДоступныОперации = (УправлениеПредприятием И ХранитьОперацииВРесурсныхСпецификациях);
Элементы.ПроизводственныйПроцессДобавить.Видимость = НЕ ДоступныОперации;
Элементы.ПроизводственныйПроцессКонтекстноеМенюДобавить.Видимость = НЕ ДоступныОперации;
Элементы.ПроизводственныйПроцессГруппаДобавить.Видимость = ДоступныОперации;
Элементы.ПроизводственныйПроцессКонтекстноеМенюГруппаДобавить.Видимость = ДоступныОперации;
ОписаниеСвойствЭлементов = ПроизводственныйПроцессКэш.ОписаниеСвойствЭлементов;
Для каждого ВидЭлемента Из РедакторПроизводственногоПроцессаКлиентСервер.ВидыЭлементов() Цикл
СвойстваЭлементов = ОписаниеСвойствЭлементов.Получить(ВидЭлемента);
Для каждого ДопРеквизитыЭлемент Из СвойстваЭлементов["ДополнительныеРеквизитыЭлементы"] Цикл
Элементы[ДопРеквизитыЭлемент].Видимость = ПроизводственныйПроцессКэш[СвойстваЭлементов["ИспользоватьДопРеквизиты"]];
КонецЦикла;
КонецЦикла;
Элементы.ПроизводственныйПроцессДополнительныеСведения.Видимость = ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныеРеквизитыИСведения");
ИспользоватьТехнологическиеПроцессы = Ложь;
МассивЭлементов = Новый Массив;
МассивЭлементов.Добавить("ПроизводственныйПроцессДобавитьГруппуОпераций");
МассивЭлементов.Добавить("ПроизводственныйПроцессКонтекстноеМенюДобавитьГруппуОпераций");
МассивЭлементов.Добавить("ПроизводственныйПроцессДобавитьТиповой");
МассивЭлементов.Добавить("ПроизводственныйПроцессКонтекстноеМенюДобавитьТиповой");
МассивЭлементов.Добавить("ПроизводственныйПроцессВыделитьВТехнологическийПроцесс");
ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементовФормы(
Элементы, МассивЭлементов, "Видимость", ИспользоватьТехнологическиеПроцессы);
УстановитьДоступностьЭлементовПроизводственногоПроцесса();
КонецПроцедуры
&НаСервере
Процедура УстановитьДоступностьЭлементовПроизводственногоПроцесса()
ДоступностьРеквизитовПП = ДоступностьРеквизитов И ПроизводственныйПроцессПрочитан;
Элементы.ПроизводственныйПроцесс.ИзменятьСоставСтрок = ДоступностьРеквизитовПП;
МассивЭлементов = Новый Массив;
МассивЭлементов.Добавить("ПроизводственныйПроцессДобавитьЭтап");
МассивЭлементов.Добавить("ПроизводственныйПроцессКонтекстноеМенюДобавитьЭтап");
МассивЭлементов.Добавить("ПроизводственныйПроцессДобавитьОперацию");
МассивЭлементов.Добавить("ПроизводственныйПроцессКонтекстноеМенюДобавитьОперацию");
МассивЭлементов.Добавить("ПроизводственныйПроцессДобавитьГруппуОпераций");
МассивЭлементов.Добавить("ПроизводственныйПроцессКонтекстноеМенюДобавитьГруппуОпераций");
МассивЭлементов.Добавить("ПроизводственныйПроцессДобавитьТиповой");
МассивЭлементов.Добавить("ПроизводственныйПроцессКонтекстноеМенюДобавитьТиповой");
МассивЭлементов.Добавить("ПроизводственныйПроцессПереместитьВверх");
МассивЭлементов.Добавить("ПроизводственныйПроцессПереместитьВниз");
МассивЭлементов.Добавить("ПроизводственныйПроцессЗаполнитьПодразделение");
МассивЭлементов.Добавить("ПроизводственныйПроцессПодобратьПоКТО");
МассивЭлементов.Добавить("ВыходныеИзделия_ЗаполнитьЭтап");
МассивЭлементов.Добавить("ВозвратныеОтходы_ЗаполнитьЭтап");
МассивЭлементов.Добавить("МатериалыИУслуги_ЗаполнитьЭтап");
МассивЭлементов.Добавить("Трудозатраты_ЗаполнитьЭтап");
ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементовФормы(
Элементы, МассивЭлементов, "Доступность", ДоступностьРеквизитовПП);
МассивЭлементов = Новый Массив;
МассивЭлементов.Добавить("ПроизводственныйПроцессВыделитьВТехнологическийПроцесс");
ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементовФормы(
Элементы, МассивЭлементов, "Доступность", ПроизводственныйПроцессПрочитан);
КонецПроцедуры
&НаСервере
Процедура НачатьЗаполнениеПроизводственногоПроцесса()
ПроизводственныйПроцессИнициализироватьКэш();
Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда
ПроизводственныйПроцессПрочитан = Истина;
Возврат;
КонецЕсли;
ПроизводственныйПроцессДерево = РеквизитФормыВЗначение("ПроизводственныйПроцесс");
ПроизводственныйПроцессДерево.Строки.Очистить();
ЭтоФайловаяБаза = ОбщегоНазначения.ИнформационнаяБазаФайловая();
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ПараметрыВыполнения.ЗапуститьНеВФоне = ПроизводственныйПроцессПрочитан ИЛИ ЭтоФайловаяБаза;
ПараметрыВыполнения.ЗапуститьВФоне = НЕ ПроизводственныйПроцессПрочитан И НЕ ЭтоФайловаяБаза;
ПараметрыВыполнения.ОжидатьЗавершение = 0;
ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Заполнение дерева производственного процесса.'");
ПараметрыПроцедуры = Новый Структура;
ПараметрыПроцедуры.Вставить("Спецификация", Объект.Ссылка);
ПараметрыПроцедуры.Вставить("ПроизводственныйПроцессДерево", ПроизводственныйПроцессДерево);
ПроизводственныйПроцессДлительнаяОперация = ДлительныеОперации.ВыполнитьВФоне(
"РедакторПроизводственногоПроцесса.СтруктураПроизводственногоПроцессаВФоне",
ПараметрыПроцедуры,
ПараметрыВыполнения);
Если ПроизводственныйПроцессДлительнаяОперация.Статус <> "Выполняется" Тогда
ОбработатьРезультатЗаполненияПроизводственногоПроцесса(ПроизводственныйПроцессДлительнаяОперация);
ПроизводственныйПроцессДлительнаяОперация = Неопределено;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НачатьОжиданиеЗаполненияПроизводственногоПроцесса()
Если ПроизводственныйПроцессДлительнаяОперация <> Неопределено Тогда
ОписаниеОповещения = Новый ОписаниеОповещения(
"НачатьОжиданиеЗаполненияПроизводственногоПроцессаЗавершение",
ЭтотОбъект);
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
ПараметрыОжидания.ВыводитьОкноОжидания = Ложь;
ДлительныеОперацииКлиент.ОжидатьЗавершение(
ПроизводственныйПроцессДлительнаяОперация,
ОписаниеОповещения,
ПараметрыОжидания);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НачатьОжиданиеЗаполненияПроизводственногоПроцессаЗавершение(Результат, ДополнительныеПараметры) Экспорт
ОценкаПроизводительностиКлиент.ЗамерВремени(
"Справочник.РесурсныеСпецификации.Форма.ФормаЭлемента.НачатьОжиданиеЗаполненияПроизводственногоПроцессаЗавершение");
ПроизводственныйПроцессДлительнаяОперация = Неопределено;
Если Результат <> Неопределено Тогда
ОбработатьРезультатЗаполненияПроизводственногоПроцесса(Результат);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбработатьРезультатЗаполненияПроизводственногоПроцесса(Результат)
Если НЕ Результат.Статус = "Выполнено" Тогда
Возврат;
КонецЕсли;
ДанныеРезультата = ПолучитьИзВременногоХранилища(Результат.АдресРезультата);
Если ЗначениеЗаполнено(ДанныеРезультата) Тогда
ЗначениеВРеквизитФормы(ДанныеРезультата.ПроизводственныйПроцессДерево, "ПроизводственныйПроцесс");
МассивПодразделений = ДанныеРезультата.МассивПодразделений;
Если ЗначениеЗаполнено(МассивПодразделений) Тогда
ПроизводственныйПроцессКэш.ПараметрыПодразделений =
ПроизводствоСервер.ПараметрыПроизводственныхПодразделений(МассивПодразделений);
КонецЕсли;
ЗаполнитьЗначенияСвойств(ПроизводственныйПроцессКэш, ДанныеРезультата);
ПроизводственныйПроцессПрочитан = Истина;
ЗаполнитьЗначенияСвойств(ЭтотОбъект, ОписаниеПроизводственногоПроцесса());
УстановитьДоступностьЭлементовПроизводственногоПроцесса();
ПроизводственныйПроцессОбновитьИнформационныеПанели();
НастроитьЗависимыеЭлементыФормы(ЭтотОбъект, "ПроизводственныйПроцесс");
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПроверитьЗаполнениеПроизводственногоПроцесса(Отказ = Ложь)
Если НЕ ПроизводственныйПроцессПрочитан
ИЛИ ЭтоТехнологическийНабор(ЭтотОбъект) Тогда
Возврат;
КонецЕсли;
СтрокиЭтапы = Производственныйпроцесс.ПолучитьЭлементы();
Сообщения = Новый Массив;
МассивЭтапов = Новый Массив;
МассивЭтаповНаСтороне = Новый Массив;
ТаблицаПроверкиЭтапов = Неопределено;
ТаблицаПроверкиОпераций = Неопределено;
СтатусСпецификации = ?(РежимПроверкиЗаполненияВСтатусеДействует, Перечисления.СтатусыСпецификаций.Действует, Объект.Статус);
Если СтатусСпецификации = Перечисления.СтатусыСпецификаций.Действует Тогда
Если СтрокиЭтапы.Количество() = 0 Тогда
ТекстСообщения = НСтр("ru='Необходимо создать этап производства.'");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения,,,,Отказ);
Возврат;
ИначеЕсли СтрокиЭтапы.Количество() > 1
И НЕ УправлениеДаннымиОбИзделияхКлиентСервер.МногоэтапныйПроизводственныйПроцессДоступен()
И НЕ СтатусСпецификации = СтатусЗаписанногоОбъекта Тогда
ТекстСообщения = УправлениеДаннымиОбИзделияхКлиентСервер.МногоэтапныйПроизводственныйПроцессТекстОшибки();
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения,,,,Отказ);
Возврат;
КонецЕсли;
ТаблицаПроверкиЭтапов = РедакторПроизводственногоПроцесса.ТаблицаПроверкиПорядкаЭлементовПроизводственногоПроцессаКонструктор();
ТаблицаПроверкиОпераций = РедакторПроизводственногоПроцесса.ТаблицаПроверкиПорядкаЭлементовПроизводственногоПроцессаКонструктор();
КонецЕсли;
КэшЭлементов = ПроизводственныйПроцессПолучитьКэшЭлементов();
ПроизводственныйПроцессЗакэшироватьТекущийЭлемент(КэшЭлементов);
Для ИндексЭтап = 0 По СтрокиЭтапы.Количество() - 1 Цикл
СтрокаЭтап = СтрокиЭтапы[ИндексЭтап];
ЭтапОбъект = ПроизводственныйПроцессПолучитьКэшЭлемента(КэшЭлементов, СтрокаЭтап, Истина).Объект;
ЭтапОбъект.ДополнительныеСвойства.Вставить("СтатусСпецификации", СтатусСпецификации);
РедакторПроизводственногоПроцесса.ПроверитьЗаполнениеРеквизитовЭтапа(
ЭтапОбъект, Отказ, Сообщения);
Если СтатусСпецификации <> Перечисления.СтатусыСпецификаций.Действует Тогда
Продолжить;
КонецЕсли;
МассивЭтапов.Добавить(ЭтапОбъект);
Если ЭтапОбъект.ПроизводствоНаСтороне Тогда
МассивЭтаповНаСтороне.Добавить(ЭтапОбъект);
КонецЕсли;
НоваяСтрока = ТаблицаПроверкиЭтапов.Добавить();
НоваяСтрока.Объект = ЭтапОбъект;
НоваяСтрока.Операция = СтрокаЭтап.Ссылка;
НоваяСтрока.Представление = СтрокаЭтап.Наименование;
НоваяСтрока.НомерОперации = СтрокаЭтап.Номер;
НоваяСтрока.НомерСледующейОперации = СтрокаЭтап.НомерСледующего;
КонецЦикла;
Если СтатусСпецификации = Перечисления.СтатусыСпецификаций.Действует Тогда
СпецификацияОбъект = РеквизитФормыВЗначение("Объект");
РедакторПроизводственногоПроцесса.ПроверитьПорядокЭлементовПроизводственногоПроцесса(
ТаблицаПроверкиЭтапов,
РедакторПроизводственногоПроцесса.СтруктураПроверокПоследовательностиЭтапов(СпецификацияОбъект.ТипПроизводственногоПроцесса),
Отказ,
Сообщения);
Если МассивЭтаповНаСтороне.Количество() Тогда
РедакторПроизводственногоПроцесса.ПроверитьЭтапыПроизводстваНаСтороне(
МассивЭтаповНаСтороне, СпецификацияОбъект, Отказ, Сообщения);
КонецЕсли;
КонецЕсли;
ПроизводственныйПроцессОбработатьСообщенияПользователю(Сообщения);
ПроизводственныйПроцессСохранитьКэшЭлементов(КэшЭлементов);
КонецПроцедуры
&НаСервере
Процедура ПроизводственныйПроцессОбработатьСообщенияПользователю(СообщенияПользователю)
СообщенияКлючи = Новый Соответствие;
Для каждого Сообщение Из СообщенияПользователю Цикл
КлючДанных = Неопределено;
ТипКлючаДанных = ТипЗнч(Сообщение.КлючДанных);
Если ЗначениеЗаполнено(Сообщение.КлючДанных)
И (ТипКлючаДанных= Тип("СправочникСсылка.ЭтапыПроизводства")
) Тогда
КлючДанных = Сообщение.КлючДанных;
ИначеЕсли ЗначениеЗаполнено(Сообщение.КлючДанных)
И (ТипКлючаДанных= Тип("СправочникОбъект.ЭтапыПроизводства")
) Тогда
Если Сообщение.КлючДанных.ЭтоНовый() Тогда
КлючДанных = Сообщение.КлючДанных.ПолучитьСсылкуНового();
Иначе
КлючДанных = Сообщение.КлючДанных.Ссылка;
КонецЕсли;
Иначе
Сообщение.КлючДанных = Неопределено;
Сообщение.Поле = "";
Сообщение.ПутьКданным = "ПроизводственныйПроцесс";
Сообщение.ИдентификаторНазначения = УникальныйИдентификатор;
Сообщение.Сообщить();
Продолжить;
КонецЕсли;
МассивСообщений = СообщенияКлючи.Получить(КлючДанных);
Если МассивСообщений = Неопределено Тогда
МассивСообщений = Новый Массив;
СообщенияКлючи.Вставить(КлючДанных, МассивСообщений);
КонецЕсли;
МассивСообщений.Добавить(Сообщение);
КонецЦикла;
ШаблонЭтап = НСтр("ru = '%1 (этап: %2)'");
СтрокиЭтапы = Производственныйпроцесс.ПолучитьЭлементы();
Для каждого СтрокаЭтап Из СтрокиЭтапы Цикл
Сообщения = СообщенияКлючи.Получить(СтрокаЭтап.Ссылка);
Если Сообщения <> Неопределено Тогда
Для каждого Сообщение Из Сообщения Цикл
ТекстСообщения = ?(СтрНайти(Сообщение.Текст, СтрокаЭтап.Наименование) > 0,
Сообщение.Текст,
СтрШаблон(ШаблонЭтап, Сообщение.Текст, СтрокаЭтап.Наименование));
Сообщение.Текст = ТекстСообщения;
Сообщение.КлючДанных = Неопределено;
Сообщение.Поле = "";
Сообщение.ПутьКданным = "ПроизводственныйПроцесс";
Сообщение.ИдентификаторНазначения = УникальныйИдентификатор;
Сообщение.Сообщить();
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ЗаписатьПроизводственныйПроцесс(Отказ = Ложь)
Если НЕ ПроизводственныйПроцессПрочитан
ИЛИ ЭтоТехнологическийНабор(ЭтотОбъект) Тогда
Возврат;
КонецЕсли;
КэшЭлементов = ПроизводственныйПроцессПолучитьКэшЭлементов();
ОбъектыЗаписать = Новый Структура;
ОбъектыУдалить = Новый Массив;
Для каждого КлючИЗначение Из КэшЭлементов Цикл
КэшЭлемента = КлючИЗначение.Значение;
ВидЭлемента = РедакторПроизводственногоПроцессаКлиентСервер.ВидЭлементаПоСсылке(КлючИЗначение.Ключ);
Если КэшЭлемента.Записывать
И НЕ КэшЭлемента.Удален Тогда
МассивОбъектов = Неопределено;
Если НЕ ОбъектыЗаписать.Свойство(ВидЭлемента, МассивОбъектов) Тогда
МассивОбъектов = Новый Массив;
ОбъектыЗаписать.Вставить(ВидЭлемента, МассивОбъектов);
КонецЕсли;
МассивОбъектов.Добавить(КэшЭлемента.Объект);
ИначеЕсли КэшЭлемента.Удален
И НЕ (КэшЭлемента.Объект <> Неопределено И КэшЭлемента.Объект.ЭтоНовый()) Тогда
ЭлементОбъект = КлючИЗначение.Ключ.ПолучитьОбъект();
ЭлементОбъект.ДополнительныеСвойства.Вставить("РазрешитьЗапись");
ОбъектыУдалить.Добавить(ЭлементОбъект);
КонецЕсли;
КонецЦикла;
НачатьТранзакцию();
Попытка
ВидыЭлементов = РедакторПроизводственногоПроцессаКлиентСервер.ВидыЭлементов();
Для Индекс = 0 По ВидыЭлементов.ВГраница() Цикл
МассивОбъектов = Неопределено;
Если ОбъектыЗаписать.Свойство(ВидыЭлементов[Индекс], МассивОбъектов) Тогда
Для каждого ТекущийОбъект из МассивОбъектов Цикл
ТекущийОбъект.Записать();
КонецЦикла;
КонецЕсли;
КонецЦикла;
Для каждого ТекущийОбъект Из ОбъектыУдалить Цикл
ТекущийОбъект.УстановитьПометкуУдаления(Истина);
КонецЦикла;
ПроизводственныйПроцессОчиститьКэшЭлементов();
ПроизводственныйПроцессТекущаяСсылка = Неопределено;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
Отказ = Истина;
ЗаписьЖурналаРегистрации(
НСтр("ru = 'Не удалось записать производственный процесс.'"),
УровеньЖурналаРегистрации.Ошибка,,,
ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПроизводственныйПроцессПриАктивизацииЭлемента()
ПроизводственныйПроцессАктивизацияЭлемента = Истина;
ТекущаяСтрока = Элементы.ПроизводственныйПроцесс.ТекущаяСтрока;
ПроизводственныйПроцессПриАктивизацииЭлементаНаСервере();
Если Элементы.ПроизводственныйПроцесс.ТекущаяСтрока <> ТекущаяСтрока Тогда
Элементы.ПроизводственныйПроцесс.ТекущаяСтрока = ТекущаяСтрока;
КонецЕсли;
ПроизводственныйПроцессАктивизацияЭлемента = Ложь;
КонецПроцедуры
&НаСервере
Процедура ПроизводственныйПроцессПриАктивизацииЭлементаНаСервере()
КэшЭлементов = ПроизводственныйПроцессПолучитьКэшЭлементов();
ПроизводственныйПроцессЗакэшироватьТекущийЭлемент(КэшЭлементов);
ПроизводственныйПроцессИнициализироватьНовыйЭлемент(КэшЭлементов);
ПроизводственныйПроцессСохранитьКэшЭлементов(КэшЭлементов);
КонецПроцедуры
&НаСервере
Процедура ПроизводственныйПроцессЗакэшироватьТекущийЭлемент(КэшЭлементов)
Если НЕ ЗначениеЗаполнено(ПроизводственныйПроцессТекущаяСсылка) Тогда
Возврат;
КонецЕсли;
ОписаниеСвойствЭлементов = ПроизводственныйПроцессКэш.ОписаниеСвойствЭлементов;
ВидЭлемента = РедакторПроизводственногоПроцессаКлиентСервер.ВидЭлементаПоСсылке(ПроизводственныйПроцессТекущаяСсылка);
СвойстваЭлемента = ОписаниеСвойствЭлементов.Получить(ВидЭлемента);
ИмяРеквизитаОбъекта = СвойстваЭлемента.ИмяРеквизитаОбъекта;
КэшЭлемента = КэшЭлементов.Получить(ПроизводственныйПроцессТекущаяСсылка);
Если КэшЭлемента <> Неопределено Тогда
Попытка
ТекущийОбъект = РеквизитФормыВЗначение(ИмяРеквизитаОбъекта);
Исключение
ДанныеОбъекта = ЭтотОбъект[ИмяРеквизитаОбъекта];
Шаблон = НСтр("ru = 'Объект ""%1"" возможно был изменен другим пользователем. Данные объекта будут прочитаны повторно.'");
ОбщегоНазначения.СообщитьПользователю(СтрШаблон(Шаблон, ДанныеОбъекта.Наименование));
КэшЭлементов.Удалить(ПроизводственныйПроцессТекущаяСсылка);
Возврат;
КонецПопытки;
Если ТекущийОбъект.ЭтоНовый() Тогда
ТекущийОбъект.УстановитьСсылкуНового(ПроизводственныйПроцессТекущаяСсылка);
КонецЕсли;
Если ВидЭлемента = "Этап" Тогда
ТекущийОбъект.МаксимальноеКоличествоЕдиницПартийИзделия = ЭтапМаксимальноеКоличествоЕдиницПартийИзделия;
КонецЕсли;
КэшЭлемента.Объект = ТекущийОбъект;
ПроизводственныйПроцессЗакэшироватьРеквизитыФормы(КэшЭлемента);
КэшЭлементов.Вставить(ПроизводственныйПроцессТекущаяСсылка, КэшЭлемента);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПроизводственныйПроцессИнициализироватьНовыйЭлемент(КэшЭлементов)
ТекущаяСтрока = Элементы.ПроизводственныйПроцесс.ТекущаяСтрока;
Если ТекущаяСтрока = Неопределено Тогда
Возврат;
КонецЕсли;
ТекущиеДанные = ПроизводственныйПроцесс.НайтиПоИдентификатору(ТекущаяСтрока);
ОписаниеСвойствЭлементов = ПроизводственныйПроцессКэш.ОписаниеСвойствЭлементов;
СвойстваЭлемента = ОписаниеСвойствЭлементов.Получить(ТекущиеДанные.ВидЭлемента);
ИмяРеквизитаОбъекта = СвойстваЭлемента.ИмяРеквизитаОбъекта;
КэшЭлемента = ПроизводственныйПроцессПолучитьКэшЭлемента(КэшЭлементов, ТекущиеДанные, Истина);
ПроизводственныйПроцессТекущаяСсылка = ТекущиеДанные.Ссылка;
ЗначениеВРеквизитФормы(КэшЭлемента.Объект, ИмяРеквизитаОбъекта);
ОбновитьЗначенияРеквизитовОбъектаВДереве(ЭтотОбъект, ТекущиеДанные);
Если ТекущиеДанные.ВидЭлемента = "Этап" Тогда
ПроизводственныйПроцессИнициализироватьЭтап(ТекущиеДанные, КэшЭлемента);
КонецЕсли;
Элементы[ИмяРеквизитаОбъекта].ТолькоПросмотр = ТекущиеДанные.ТолькоПросмотр;
Элементы.ПроизводственныйПроцессСвойстваСтраницы.ТекущаяСтраница = Элементы[ИмяРеквизитаОбъекта];
КонецПроцедуры
&НаСервере
Процедура ПроизводственныйПроцессОчиститьТекущийЭлемент(ТолькоТекущаяСсылка = Ложь)
Если НЕ ЗначениеЗаполнено(ПроизводственныйПроцессТекущаяСсылка) Тогда
Возврат;
КонецЕсли;
ОписаниеСвойствЭлементов = ПроизводственныйПроцессКэш.ОписаниеСвойствЭлементов;
Если НЕ ТолькоТекущаяСсылка Тогда
ВидЭлемента = РедакторПроизводственногоПроцессаКлиентСервер.ВидЭлементаПоСсылке(ПроизводственныйПроцессТекущаяСсылка);
СвойстваЭлемента = ОписаниеСвойствЭлементов.Получить(ВидЭлемента);
ТипЭлементаОбъект = Новый ОписаниеТипов("СправочникОбъект."+СвойстваЭлемента.ИмяТипаЭлемента);
ЗначениеВРеквизитФормы(ТипЭлементаОбъект.ПривестиЗначение(Неопределено), СвойстваЭлемента.ИмяРеквизитаОбъекта);
КонецЕсли;
ПроизводственныйПроцессТекущаяСсылка = Неопределено;
КонецПроцедуры
&НаСервере
Процедура ПроизводственныйПроцессИнициализироватьЭтап(ДанныеСтроки, КэшЭлемента)
ВидЭлемента = ДанныеСтроки.ВидЭлемента;
Если КэшЭлемента.Заполнен Тогда
ПроизводственныйПроцессВосстановитьРеквизитыФормыИзКэша(КэшЭлемента);
Иначе
КонецЕсли;
ЭтапСпособПроизводства = Число(ПроизводственныйПроцессЭтап.ПроизводствоНаСтороне);
ЗаполнитьВыборЕдиницыИзмеренияБуферов(Истина);
УстановитьОтметкуНезаполненногоДляБуферов(ЭтотОбъект);
ЗаполнитьСлужебныеРеквизитыУслугиПереработчика();
РедакторПроизводственногоПроцессаКлиентСервер.ЗаполнитьПояснениеОсновныхНастроек(ПроизводственныйПроцессЭтап, ЭтотОбъект, ВидЭлемента);
РедакторПроизводственногоПроцесса.УстановитьДоступностьЭлементовЭтапаПоСтатусу(ЭтотОбъект, ДоступностьРеквизитов, СпецификацияЗакрыта, ВидЭлемента);
НастроитьЭлементыФормыЭтапа(ПроизводственныйПроцессЭтап, ДанныеСтроки);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ПроизводственныйПроцессОписаниеСвойствЭлемента(ВидЭлемента)
Результат = Новый Структура("ВидЭлемента", ВидЭлемента);
Если ВидЭлемента = "Этап" Тогда
Результат.Вставить("ИмяТипаЭлемента", "ЭтапыПроизводства");
Результат.Вставить("ВидЭлементаПредставление", НСтр("ru = 'Этап'"));
Результат.Вставить("ИмяРеквизитаОбъекта", "ПроизводственныйПроцессЭтап");
Результат.Вставить("Номер", "НомерЭтапа");
Результат.Вставить("НомерСледующего", "НомерСледующегоЭтапа");
Результат.Вставить("Редактирование", "ЭтапРедактирование");
Результат.Вставить("РедактированиеПредставление", "ЭтапРедактированиеПредставление");
Результат.Вставить("Счетчик", "ЭтапКоличество");
Результат.Вставить("ЕдиницаИзмеренияЗавершающегоБуфера", "ЭтапЕдиницаИзмеренияЗавершающегоБуфера");
Результат.Вставить("ЕдиницаИзмеренияПредварительногоБуфера", "ЭтапЕдиницаИзмеренияПредварительногоБуфера");
Результат.Вставить("МаксимальноеКоличествоЕдиницПартийИзделия", "ЭтапМаксимальноеКоличествоЕдиницПартийИзделия");
Результат.Вставить("РазбиватьМаршрутныеЛисты", "ЭтапРазбиватьМаршрутныеЛисты");
Результат.Вставить("РассчитыватьКоэффициент", "ЭтапРассчитыватьКоэффициент");
Результат.Вставить("РазбиватьМаршрутныеЛистыПоМаршрутнойКарте", "ЭтапРазбиватьМаршрутныеЛистыПоМаршрутнойКарте");
Результат.Вставить("РеквизитыДерева", "Наименование,Номер,НомерСледующего,Подразделение");
ДопРеквизитыЭлементы = Новый Массив;
ДопРеквизитыЭлементы.Добавить("ЭтапДополнительныеРеквизиты");
Результат.Вставить("ДополнительныеРеквизитыЭлементы", ДопРеквизитыЭлементы);
Результат.Вставить("ДополнительныеРеквизиты", "ЭтапДополнительныеРеквизиты");
Результат.Вставить("ИспользоватьДопРеквизиты", "ЭтапИспользоватьДопРеквизиты");
КонецЕсли;
Возврат Результат;
КонецФункции
&НаКлиенте
Процедура ПроизводственныйПроцессСвертка(Свернуть = Истина, КоллекцияСтрок = Неопределено)
Если КоллекцияСтрок = Неопределено Тогда
КоллекцияСтрок = ПроизводственныйПроцесс;
КонецЕсли;
Для каждого СтрокаДерева Из КоллекцияСтрок.ПолучитьЭлементы() Цикл
Если Свернуть Тогда
ПроизводственныйПроцессСвертка(Свернуть, СтрокаДерева);
Элементы.ПроизводственныйПроцесс.Свернуть(СтрокаДерева.ПолучитьИдентификатор());
Иначе
Элементы.ПроизводственныйПроцесс.Развернуть(СтрокаДерева.ПолучитьИдентификатор(), Истина);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ПроизводственныйПроцессСвойстваСвертка(Свернуть = Истина)
ТекущиеДанные = Элементы.ПроизводственныйПроцесс.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
ОписаниеСвойствЭлементов = ПроизводственныйПроцессКэш.ОписаниеСвойствЭлементов;
ИмяРаздела = ОписаниеСвойствЭлементов.Получить(ТекущиеДанные.ВидЭлемента).ИмяРеквизитаОбъекта;
ПроизводственныйПроцессСвернутьВложенныеГруппы(Элементы[ИмяРаздела], Свернуть);
КонецПроцедуры
&НаКлиенте
Процедура ПроизводственныйПроцессСвернутьВложенныеГруппы(Элемент, Свернуть)
Для каждого ЭлементФормы из Элемент.ПодчиненныеЭлементы Цикл
Если НЕ ТипЗнч(ЭлементФормы) = Тип("ГруппаФормы") Тогда
Продолжить;
КонецЕсли;
Если ЭлементФормы.Вид = ВидГруппыФормы.Страницы Тогда
ПроизводственныйПроцессСвернутьВложенныеГруппы(ЭлементФормы.ТекущаяСтраница, Свернуть);
Иначе
Если Свернуть Тогда
ЭлементФормы.Скрыть();
Иначе
ЭлементФормы.Показать();
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ПроизводственныйПроцессПолучитьНовыйНомер(КоллекцияЭлементов)
НовыйНомер = 1;
Если КоллекцияЭлементов.Количество() > 0 Тогда
НовыйНомер = КоллекцияЭлементов[КоллекцияЭлементов.Количество()-1].Номер + 1;
КонецЕсли;
Возврат НовыйНомер;
КонецФункции
&НаСервере
Процедура ПроизводственныйПроцессОбновитьИнформационныеПанели()
ИнформационнаяСтрокаМатериалы = "";
ИнформационнаяСтрокаТрудозатраты = "";
Элементы.ИнформационнаяПанельМатериалы.Видимость = ЗначениеЗаполнено(ИнформационнаяСтрокаМатериалы);
Элементы.ИнформационнаяПанельТрудозатраты.Видимость = ЗначениеЗаполнено(ИнформационнаяСтрокаТрудозатраты);
КонецПроцедуры
&НаСервере
Процедура ОбновитьРеквизитМногоэтапныйПроизводственныйПроцесс()
МногоэтапныйПроизводственныйПроцесс = ?(ПроизводственныйПроцессКэш.ЭтапКоличество > 1, Истина, Ложь);
Если МногоэтапныйПроизводственныйПроцесс <> Объект.МногоэтапныйПроизводственныйПроцесс Тогда
Объект.МногоэтапныйПроизводственныйПроцесс = МногоэтапныйПроизводственныйПроцесс;
ПриИзмененииСтруктурыПроизводственногоПроцесса();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроизводственныйПроцессОткрытьФормуЭлемента(ДанныеСтроки)
ТекущаяСсылка = ДанныеСтроки.ЭтапРедактирование;
Если НЕ ЗначениеЗаполнено(ТекущаяСсылка) Тогда
Возврат;
КонецЕсли;
Если ПроизводственныйПроцессЭлементЗаписан(ТекущаяСсылка) Тогда
ПараметрыФормы = Новый Структура("Ключ,ТолькоПросмотр", ТекущаяСсылка, Истина);
ИмяФормыЭлемента = СтрШаблон("Справочник.%1.ФормаОбъекта", РедакторПроизводственногоПроцессаКлиентСервер.ИмяТипаЭлементаПоСсылке(ТекущаяСсылка));
ОткрытьФорму(ИмяФормыЭлемента, ПараметрыФормы);
Иначе
ПоказатьПредупреждение(, НСтр("ru = 'Открыть элемент можно только после его записи.'"));
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПроизводственныйПроцессЭлементЗаписан(Ссылка)
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.Текст = "
|ВЫБРАТЬ
| Таблица.Ссылка
|ИЗ
| &Таблица КАК Таблица
|ГДЕ
| Таблица.Ссылка = &Ссылка";
ИмяТипа = РедакторПроизводственногоПроцессаКлиентСервер.ИмяТипаЭлементаПоСсылке(Ссылка);
Если ИмяТипа <> Неопределено Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Таблица", "Справочник."+ИмяТипа);
Возврат (Запрос.Выполнить().Пустой() = Ложь);
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции
&НаСервереБезКонтекста
Функция ТаблицаЭлементовПроизводственногоПроцессаКонструктор()
СписокТипов = СтрСоединить(РедакторПроизводственногоПроцессаКлиентСервер.ИменаТиповЭлементов("СправочникСсылка."),",");
Результат = Новый ТаблицаЗначений;
Результат.Колонки.Добавить("Ссылка", Новый ОписаниеТипов(СписокТипов));
Результат.Колонки.Добавить("Номер", Новый ОписаниеТипов("Число"));
Результат.Колонки.Добавить("НомерСледующего", Новый ОписаниеТипов("Число"));
Результат.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(150)));
Результат.Колонки.Добавить("Подразделение", Новый ОписаниеТипов("СправочникСсылка.СтруктураПредприятия"));
Результат.Колонки.Добавить("ПроизводствоНаСтороне", Новый ОписаниеТипов("Булево"));
Результат.Колонки.Добавить("Владелец", Новый ОписаниеТипов(СписокТипов));
Возврат Результат;
КонецФункции
&НаСервере
Функция ТаблицаЭлементовПроизводственногоПроцесса(Отбор)
Результат = ТаблицаЭлементовПроизводственногоПроцессаКонструктор();
ДобавитьСтрокиВТаблицуЭлементовПроизводственногоПроцесса(
Результат,
ДеревоЭлементовПроизводственногоПроцессаДляВыбора(Отбор).Строки);
Возврат Результат;
КонецФункции
&НаСервере
Процедура ДобавитьСтрокиВТаблицуЭлементовПроизводственногоПроцесса(ТаблицаЭлементов, СтрокиДерева)
Если СтрокиДерева.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Для каждого СтрокаДерева Из СтрокиДерева Цикл
НоваяСтрока = ТаблицаЭлементов.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаДерева);
Если СтрокаДерева.Родитель <> Неопределено Тогда
НоваяСтрока.Владелец = СтрокаДерева.Родитель.Ссылка;
КонецЕсли;
ДобавитьСтрокиВТаблицуЭлементовПроизводственногоПроцесса(ТаблицаЭлементов, СтрокаДерева.Строки);
КонецЦикла;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ПроизводственныйПроцессОбновитьПредставления(ВидЭлемента, Ссылка, Представление, Форма)
ОписаниеСвойствЭлементов = Форма.ПроизводственныйПроцессКэш.ОписаниеСвойствЭлементов;
СвойстваЭлементов = ОписаниеСвойствЭлементов.Получить(ВидЭлемента);
ИменаТЧ = ИменаТабличныхЧастей();
Объект = Форма.Объект;
ИмяРеквизита = СвойстваЭлементов["Редактирование"];
СтруктураПоиска = Новый Структура(ИмяРеквизита, Ссылка);
Для каждого ИмяТЧ Из ИменаТЧ Цикл
НайденныеСтроки = Объект[ИмяТЧ].НайтиСтроки(СтруктураПоиска);
Для каждого Строка Из НайденныеСтроки Цикл
Строка[СвойстваЭлементов["РедактированиеПредставление"]] = Представление;
Строка.ЭлементПроизводственногоПроцессаПредставление = ПредставлениеЭлементаПроизводтвенногоПроцесса(Форма, Строка);
КонецЦикла;
Если ИмяТЧ = "МатериалыИУслуги" И ВидЭлемента = "Этап" Тогда
НайденныеСтроки = Объект[ИмяТЧ].НайтиСтроки(Новый Структура("ИсточникПолученияПолуфабриката", Ссылка));
Для каждого Строка Из НайденныеСтроки Цикл
Строка.ИсточникПолученияПолуфабрикатаПредставление = Представление;
ЗаполнитьПредставлениеСпособаПолученияМатериала(Строка, Форма);
КонецЦикла;
НайденныеСтроки = Объект[ИмяТЧ].НайтиСтроки(Новый Структура("ПланироватьНеРанее", Ссылка));
Для каждого Строка Из НайденныеСтроки Цикл
Строка.ПланироватьНеРанееПредставление = Представление;
ЗаполнитьПредставлениеСпособаПолученияМатериала(Строка, Форма);
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ПроизводственныйПроцессСледующийЭлемент(Форма, Курсор = Неопределено, ВложенныеУровни = Истина)
СписокЭлементов = Форма.ПроизводственныйПроцесс.ПолучитьЭлементы();
Если Курсор = Неопределено Тогда
Если СписокЭлементов.Количество() > 0 Тогда
Курсор = СписокЭлементов[0];
КонецЕсли;
Возврат Курсор <> Неопределено;
КонецЕсли;
СписокЭлементовВложенный = Курсор.ПолучитьЭлементы();
Если СписокЭлементовВложенный.Количество() > 0 И ВложенныеУровни Тогда
Курсор = СписокЭлементовВложенный[0];
Иначе
Родитель = Курсор.ПолучитьРодителя();
Если Родитель <> Неопределено Тогда
СписокЭлементов = Родитель.ПолучитьЭлементы();
КонецЕсли;
ТекущийИндекс = СписокЭлементов.Индекс(Курсор);
Если ТекущийИндекс < СписокЭлементов.Количество()-1 Тогда
Курсор = СписокЭлементов[ТекущийИндекс+1];
ИначеЕсли Родитель <> Неопределено Тогда
Курсор = Родитель;
Возврат ПроизводственныйПроцессСледующийЭлемент(Форма, Курсор, Ложь);
Иначе
Курсор = Неопределено;
КонецЕсли;
КонецЕсли;
Возврат Курсор <> Неопределено;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ПроизводственныйПроцессСтрокаВыделена(Форма, ДанныеСтроки, ВыделенныеСтроки)
ИдентификаторСтроки = ДанныеСтроки.ПолучитьИдентификатор();
Если ВыделенныеСтроки.Найти(ИдентификаторСтроки) <> Неопределено Тогда
Возврат Истина;
КонецЕсли;
ДанныеСтрокиРодителя = ДанныеСтроки.ПолучитьРодителя();
Если ДанныеСтрокиРодителя <> Неопределено Тогда
Возврат ПроизводственныйПроцессСтрокаВыделена(Форма, ДанныеСтрокиРодителя, ВыделенныеСтроки);
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции
#Область ОбработкаВыбораЭлементов
&НаКлиентеНаСервереБезКонтекста
Функция НазванияЭлементовРедактирования()
Результат = Новый Соответствие();
Результат.Вставить("Продукция", "ПродукцияЭлементПроизводственногоПроцесса");
Результат.Вставить("ВыходныеИзделия", "ВыходныеИзделияЭлементПроизводственногоПроцесса");
Результат.Вставить("ВозвратныеОтходы", "ВозвратныеОтходыЭлементПроизводственногоПроцесса");
Результат.Вставить("МатериалыИУслуги", "МатериалыИУслугиЭлементПроизводственногоПроцесса");
Результат.Вставить("Трудозатраты", "ТрудозатратыЭлементПроизводственногоПроцесса");
Возврат Результат;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция НазванияКомандВыбораЭлементаПроизводственногоПроцесса()
Результат = Новый Соответствие();
Результат.Вставить("ВыходныеИзделия", "ВыходныеИзделия_ЗаполнитьЭтап");
Результат.Вставить("ВозвратныеОтходы", "ВозвратныеОтходы_ЗаполнитьЭтап");
Результат.Вставить("МатериалыИУслуги", "МатериалыИУслуги_ЗаполнитьЭтап");
Результат.Вставить("Трудозатраты", "Трудозатраты_ЗаполнитьЭтап");
Возврат Результат;
КонецФункции
&НаСервере
Функция ДеревоЭлементовПроизводственногоПроцессаДляВыбора(Отбор = Неопределено)
ДеревоЭлементов = РеквизитФормыВЗначение("ПроизводственныйПроцесс");
Если ЗначениеЗаполнено(Отбор) Тогда
Результат = ДеревоЭлементов.Скопировать();
Результат.Строки.Очистить();
Для каждого СтрокаЭтап Из ДеревоЭлементов.Строки Цикл
Если Отбор.Свойство("ИмяТЧ") Тогда
Если Отбор.ИмяТЧ = "ВыходныеИзделия" И СтрокаЭтап.НомерСледующего <> 0 Тогда
Продолжить;
КонецЕсли;
Если Отбор.ИмяТЧ = "Продукция" И СтрокаЭтап.НомерСледующего <> 0 Тогда
Продолжить;
КонецЕсли;
Если Отбор.ИмяТЧ = "Трудозатраты" И СтрокаЭтап.ПроизводствоНаСтороне <> Ложь Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
Если Отбор.Свойство("МинимальныйНомерЭтапа")
И СтрокаЭтап.Номер < Отбор.МинимальныйНомерЭтапа Тогда
Продолжить;
КонецЕсли;
Если НЕ Отбор.Свойство("ВидЭлемента") ИЛИ Отбор.ВидЭлемента = "Этап" Тогда
НоваяСтрокаЭтап = Результат.Строки.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрокаЭтап, СтрокаЭтап);
Иначе
НоваяСтрокаЭтап = Результат;
КонецЕсли;
КонецЦикла;
Иначе
Результат = ДеревоЭлементов;
КонецЕсли;
Возврат Результат;
КонецФункции
&НаСервере
Функция ТаблицаЭлементовПроизводственногоПроцессаВХранилище(Отбор = Неопределено)
Возврат ПоместитьВоВременноеХранилище(
ТаблицаЭлементовПроизводственногоПроцесса(Отбор),
УникальныйИдентификатор);
КонецФункции
&НаСервере
Функция ДеревоЭлементовПроизводственногоПроцессаДляВыбораВХранилище(Отбор = Неопределено)
Возврат ПоместитьВоВременноеХранилище(
ДеревоЭлементовПроизводственногоПроцессаДляВыбора(Отбор),
УникальныйИдентификатор);
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ПредставлениеЭлементаПроизводтвенногоПроцесса(Форма, ДанныеСтроки, АвтоПодбор = Ложь)
Результат = "";
Шаблон = ?(АвтоПодбор, "%2 (%1)", "%1 / %2");
Если ТипЗнч(ДанныеСтроки) = Тип("ДанныеФормыЭлементКоллекции") Тогда
Если ЗначениеЗаполнено(ДанныеСтроки.ЭтапРедактирование) Тогда
Результат = ДанныеСтроки.ЭтапРедактированиеПредставление;
КонецЕсли;
Иначе
Если ДанныеСтроки.ВидЭлемента = "Этап" Тогда
Результат = ДанныеСтроки.Наименование;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьЗначениеЭлементаПроизводственногоПроцессаВСтроке(Форма, ДанныеСтроки, ВыбранноеЗначение)
ДанныеСтроки.ЭтапРедактирование = ВыбранноеЗначение.Этап;
ДанныеСтроки.ЭтапРедактированиеПредставление = ВыбранноеЗначение.ЭтапПредставление;
ДанныеСтроки.ЭлементПроизводственногоПроцессаПредставление = ПредставлениеЭлементаПроизводтвенногоПроцесса(Форма, ДанныеСтроки);
КонецПроцедуры
&НаСервере
Функция ДанныеВыбораЭлементаПроизводственногоПроцесса(ИмяТЧ, СтрокаПоиска, Сопоставление = Ложь)
Отбор = Новый Структура;
Отбор.Вставить("ИмяТЧ", ИмяТЧ);
Результат = Новый СписокЗначений();
Для каждого СтрокаЭтап Из ДеревоЭлементовПроизводственногоПроцессаДляВыбора(Отбор).Строки Цикл
Если Результат.Количество() > ?(Сопоставление, 0, 49) Тогда
Прервать;
КонецЕсли;
СтрокаПредставление = ПредставлениеЭлементаПроизводтвенногоПроцесса(ЭтотОбъект, СтрокаЭтап, Истина);
СтруктураЗначения = РедакторПроизводственногоПроцессаКлиентСервер.СтруктураЗначенияЭлементаПроизводственногоПроцессаКонструктор();
СтруктураЗначения.Этап = СтрокаЭтап.Ссылка;
СтруктураЗначения.ЭтапПредставление = СтрокаЭтап.Наименование;
Если Сопоставление Тогда
Если НРег(СтрокаПредставление) = НРег(СтрокаПоиска) Тогда
Результат.Добавить(СтруктураЗначения, СтрокаПредставление);
Продолжить;
КонецЕсли;
Иначе
Если НРег(Лев(СтрокаЭтап.Наименование, СтрДлина(СтрокаПоиска))) = НРег(СтрокаПоиска) Тогда
Результат.Добавить(СтруктураЗначения, СтрокаПредставление,, СтрокаЭтап.Картинка);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
&НаКлиенте
Процедура ОбработкаВыбораЭлементаПроизводственногоПроцесса(ИмяТЧ, ВыбранноеЗначение)
ВыделенныеСтроки = Элементы[ИмяТЧ].ВыделенныеСтроки;
ТабличнаяЧасть = Объект[СоответствиеТаблицФормыИменамТЧ()[ИмяТЧ]];
Для каждого ИдентификаторСтроки Из ВыделенныеСтроки Цикл
ДанныеСтроки = ТабличнаяЧасть.НайтиПоИдентификатору(ИдентификаторСтроки);
Если ВыбранноеЗначение <> Неопределено Тогда
ДанныеСтроки = ТабличнаяЧасть.НайтиПоИдентификатору(ИдентификаторСтроки);
УстановитьЗначениеЭлементаПроизводственногоПроцессаВСтроке(ЭтотОбъект, ДанныеСтроки, ВыбранноеЗначение);
Иначе
ПроизводственныйПроцессОчиститьВыбранныйЭлемент(ЭтотОбъект, ДанныеСтроки);
КонецЕсли;
КонецЦикла;
Если ИмяТЧ = "МатериалыИУслуги" Тогда
ОбработатьИзменениеЭтапаМатериалыИУслуги(ВыделенныеСтроки);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаВыбораЭлементаПроизводственногоПроцессаПоПредставлению(ИмяТЧ, ДанныеСтроки, ВыбранноеЗначение, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если ТипЗнч(ВыбранноеЗначение) = Тип("Строка") И НЕ ПустаяСтрока(ВыбранноеЗначение) Тогда
ДанныеВыбора = ДанныеВыбораЭлементаПроизводственногоПроцесса(ИмяТЧ, ВыбранноеЗначение, Истина);
Если ЗначениеЗаполнено(ДанныеВыбора) Тогда
ВыбранноеЗначение = ДанныеВыбора[0].Значение;
УстановитьЗначениеЭлементаПроизводственногоПроцессаВСтроке(ЭтотОбъект, ДанныеСтроки, ВыбранноеЗначение);
КонецЕсли;
ИначеЕсли ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда
ОбработкаВыбораЭлементаПроизводственногоПроцесса(ИмяТЧ, ВыбранноеЗначение);
Иначе
ПроизводственныйПроцессОчиститьВыбранныйЭлемент(ЭтотОбъект, ДанныеСтроки);
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ПроизводственныйПроцессОчиститьВыбранныйЭлемент(Форма, ДанныеСтроки)
УстановитьЗначениеЭлементаПроизводственногоПроцессаВСтроке(
Форма,
ДанныеСтроки,
РедакторПроизводственногоПроцессаКлиентСервер.СтруктураЗначенияЭлементаПроизводственногоПроцессаКонструктор());
КонецПроцедуры
&НаКлиенте
Процедура ПроизводственныйПроцессОткрытьФормуВыбораЭлемента(ИмяТЧ, ДанныеСтроки)
СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("ИмяТЧ", ИмяТЧ);
СтруктураПараметров.Вставить("ТекущаяСсылка", ДанныеСтроки.ЭтапРедактирование);
СтруктураПараметров.Вставить("АдресВХранилище", ДеревоЭлементовПроизводственногоПроцессаДляВыбораВХранилище(СтруктураПараметров));
ОткрытьФорму(
"Справочник.РесурсныеСпецификации.Форма.ФормаВыбораЭлементаПроизводственногоПроцесса",
СтруктураПараметров,
ЭтотОбъект,,,,,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
#КонецОбласти
#Область Кэш
&НаСервере
Процедура ПроизводственныйПроцессИнициализироватьКэш()
ПроизводственныйПроцессКэш = Новый Структура;
ПроизводственныйПроцессКэш.Вставить("АдресДополнительныхДанных", Неопределено);
ПроизводственныйПроцессКэш.Вставить("ПараметрыПодразделений", Новый Соответствие());
ПроизводственныйПроцессКэш.Вставить("ЭтапКоличество", 0);
ПроизводственныйПроцессКэш.Вставить("ОперацияКоличество", 0);
ПроизводственныйПроцессКэш.Вставить("ЕстьМногооперационныйЭтап", Ложь);
СвойстваДоступны = ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныеРеквизитыИСведения")
И УправлениеСвойствами.СвойстваДоступны();
ОписаниеСвойствЭлементов = Новый Соответствие();
Для каждого ВидЭлемента Из РедакторПроизводственногоПроцессаКлиентСервер.ВидыЭлементов() Цикл
ОписаниеСвойств = ПроизводственныйПроцессОписаниеСвойствЭлемента(ВидЭлемента);
ОписаниеСвойствЭлементов.Вставить(ВидЭлемента, ОписаниеСвойств);
Если СвойстваДоступны Тогда
ЗначениеРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(
УправлениеСвойствами.НаборСвойствПоИмени("Справочник_"+ОписаниеСвойств.ИмяТипаЭлемента), "ДополнительныеРеквизиты");
ИспользоватьДопРеквизиты = ЗначениеЗаполнено(ЗначениеРеквизитов.ДополнительныеРеквизиты)
И НЕ ЗначениеРеквизитов.ДополнительныеРеквизиты.Пустой();
Иначе
ИспользоватьДопРеквизиты = Ложь;
КонецЕсли;
ПроизводственныйПроцессКэш.Вставить(ОписаниеСвойств["ИспользоватьДопРеквизиты"], ИспользоватьДопРеквизиты);
КонецЦикла;
ПроизводственныйПроцессКэш.Вставить("ОписаниеСвойствЭлементов", Новый ФиксированноеСоответствие(ОписаниеСвойствЭлементов));
КонецПроцедуры
&НаСервере
Функция ПроизводственныйПроцессПолучитьКэшЭлементов()
Если ЭтоАдресВременногоХранилища(ПроизводственныйПроцессКэш.АдресДополнительныхДанных) Тогда
КэшЭлементов = ПолучитьИзВременногоХранилища(ПроизводственныйПроцессКэш.АдресДополнительныхДанных);
Для каждого КлючИЗначение Из КэшЭлементов Цикл
КэшЭлемента = КлючИЗначение.Значение;
Если ЗначениеЗаполнено(КэшЭлемента.ОбъектСериализованный) Тогда
КэшЭлемента.Объект = ПроизводственныйПроцессДесериализовать(КэшЭлемента.ОбъектСериализованный);
КонецЕсли;
КонецЦикла;
Иначе
КэшЭлементов = Новый Соответствие;
КонецЕсли;
Возврат КэшЭлементов;
КонецФункции
&НаСервере
Процедура ПроизводственныйПроцессСохранитьКэшЭлементов(КэшЭлементов)
Для каждого КлючИЗначение Из КэшЭлементов Цикл
КэшЭлемента = КлючИЗначение.Значение;
Если КэшЭлемента.Объект <> Неопределено Тогда
ОбъектСериализованный = КэшЭлемента.ОбъектСериализованный;
КэшЭлемента.ОбъектСериализованный = ПроизводственныйПроцессСериализовать(КэшЭлемента.Объект);
КэшЭлемента.Объект = Неопределено;
КэшЭлемента.Записывать = КэшЭлемента.Записывать
ИЛИ (НЕ КэшЭлемента.ТолькоПросмотр
И ЗначениеЗаполнено(ОбъектСериализованный)
И ОбъектСериализованный <> КэшЭлемента.ОбъектСериализованный);
КонецЕсли;
КонецЦикла;
ПроизводственныйПроцессКэш.АдресДополнительныхДанных = ПоместитьВоВременноеХранилище(КэшЭлементов, УникальныйИдентификатор);
КэшЭлементов = Неопределено;
КонецПроцедуры
&НаСервере
Процедура ПроизводственныйПроцессОчиститьКэшЭлементов()
ПроизводственныйПроцессКэш.АдресДополнительныхДанных = ПоместитьВоВременноеХранилище(Новый Соответствие, УникальныйИдентификатор);
КонецПроцедуры
&НаСервере
Функция ПроизводственныйПроцессКэшЭлементаКонструктор(ВидЭлемента)
Результат = Новый Структура;
Результат.Вставить("Объект", Неопределено);
Результат.Вставить("ОбъектСериализованный", Неопределено);
Результат.Вставить("ТолькоПросмотр", Ложь);
Результат.Вставить("Заполнен", Ложь);
Результат.Вставить("Удален", Ложь);
Результат.Вставить("Записывать", Ложь);
РеквизитыФормы = Новый Структура;
Если ВидЭлемента = "Этап" Тогда
РеквизитыФормы.Вставить("ЭтапИнтервалПланирования");
РеквизитыФормы.Вставить("ЭтапРассчитыватьКоэффициент");
РеквизитыФормы.Вставить("ЭтапРазбиватьМаршрутныеЛисты");
РеквизитыФормы.Вставить("ЭтапРазбиватьМаршрутныеЛистыПоМаршрутнойКарте");
РеквизитыФормы.Вставить("ЭтапМаксимальноеКоличествоЕдиницПартийИзделия");
КонецЕсли;
Результат.Вставить("РеквизитыФормы", РеквизитыФормы);
Возврат Результат;
КонецФункции
&НаСервере
Функция ПроизводственныйПроцессПолучитьКэшЭлемента(КэшЭлементов, ДанныеСтроки, ПолучитьОбъект = Ложь)
КэшЭлемента = КэшЭлементов.Получить(ДанныеСтроки.Ссылка);
Если КэшЭлемента = Неопределено Тогда
КэшЭлемента = ПроизводственныйПроцессКэшЭлементаКонструктор(ДанныеСтроки.ВидЭлемента);
Если ПолучитьОбъект Тогда
КэшЭлемента.Объект = ДанныеСтроки.Ссылка.ПолучитьОбъект();
КэшЭлемента.ОбъектСериализованный = ПроизводственныйПроцессСериализовать(КэшЭлемента.Объект);
КонецЕсли;
КэшЭлемента.ТолькоПросмотр = ДанныеСтроки.ТолькоПросмотр;
КэшЭлементов.Вставить(ДанныеСтроки.Ссылка, КэшЭлемента);
КонецЕсли;
Возврат КэшЭлемента;
КонецФункции
&НаСервере
Процедура ПроизводственныйПроцессЗакэшироватьРеквизитыФормы(КэшЭлемента)
РеквизитыФормы = КэшЭлемента.РеквизитыФормы;
Для каждого КлючИЗначение Из РеквизитыФормы Цикл
ИмяРеквизита = КлючИЗначение.Ключ;
Если ТипЗнч(ЭтотОбъект[ИмяРеквизита]) = Тип("ДанныеФормыКоллекция") Тогда
РеквизитыФормы[ИмяРеквизита] = ЭтотОбъект[ИмяРеквизита].Выгрузить();
Иначе
РеквизитыФормы[ИмяРеквизита] = ЭтотОбъект[ИмяРеквизита];
КонецЕсли;
КонецЦикла;
КэшЭлемента.Заполнен = Истина;
КонецПроцедуры
&НаСервере
Процедура ПроизводственныйПроцессВосстановитьРеквизитыФормыИзКэша(КэшЭлемента)
Для каждого КлючИЗначение Из КэшЭлемента.РеквизитыФормы Цикл
ИмяРеквизита = КлючИЗначение.Ключ;
ЗначениеРеквизита = КлючИЗначение.Значение;
Если ТипЗнч(ЗначениеРеквизита) = Тип("ТаблицаЗначений") Тогда
ЭтотОбъект[ИмяРеквизита].Загрузить(ЗначениеРеквизита);
Иначе
ЭтотОбъект[ИмяРеквизита] = ЗначениеРеквизита;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ПроизводственныйПроцессПолучитьПараметрыПодразделения(Форма, Подразделение)
ПараметрыПодразделений = Форма.ПроизводственныйПроцессКэш.ПараметрыПодразделений;
ПараметрыПодразделения = ПараметрыПодразделений.Получить(Подразделение);
Если ПараметрыПодразделения = Неопределено Тогда
ПараметрыПодразделения = ПроизводственныйПроцессПолучитьПараметрыПодразделенияНаСервере(Подразделение);
ПараметрыПодразделений.Вставить(Подразделение, ПараметрыПодразделения);
Форма.ПроизводственныйПроцессКэш.ПараметрыПодразделений = ПараметрыПодразделений;
КонецЕсли;
Возврат ПараметрыПодразделения;
КонецФункции
&НаСервереБезКонтекста
Функция ПроизводственныйПроцессПолучитьПараметрыПодразделенияНаСервере(Подразделение)
Возврат ПроизводствоСервер.ПараметрыПроизводственногоПодразделения(Подразделение);
КонецФункции
&НаКлиенте
Процедура ОбновитьПараметрыПроизводственногоПодразделения(Подразделение)
ПараметрыПодразделения = ПроизводственныйПроцессКэш.ПараметрыПодразделений.Получить(Подразделение);
Если ПараметрыПодразделения <> Неопределено Тогда
ПроизводственныйПроцессКэш.ПараметрыПодразделений.Удалить(Подразделение);
ПроизводственныйПроцессПолучитьПараметрыПодразделения(ЭтотОбъект, Подразделение);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПроизводственныйПроцессСериализовать(Объект)
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
ЗаписатьXML(ЗаписьXML, Объект);
Возврат ЗаписьXML.Закрыть();
КонецФункции
&НаСервере
Функция ПроизводственныйПроцессДесериализовать(ОбъектСериализованный)
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(ОбъектСериализованный);
Возврат ПрочитатьXML(ЧтениеXML);
КонецФункции
#КонецОбласти
#Область ДополнительныеРеквизитыИСведения
&НаКлиенте
Процедура ПроизводственныйПроцессРедактироватьДопРеквизиты()
ОписаниеСвойствЭлементов = ПроизводственныйПроцессКэш.ОписаниеСвойствЭлементов;
ТекущиеДанные = Элементы.ПроизводственныйПроцесс.ТекущиеДанные;
СвойстваЭлемента = ОписаниеСвойствЭлементов.Получить(ТекущиеДанные.ВидЭлемента);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ВидЭлемента", ТекущиеДанные.ВидЭлемента);
ПараметрыФормы.Вставить("ТолькоПросмотр", ТекущиеДанные.ТолькоПросмотр ИЛИ ТолькоПросмотр);
ПараметрыФормы.Вставить("Заголовок", ТекущиеДанные.Наименование);
ПараметрыФормы.Вставить("ИмяТипаЭлемента", СвойстваЭлемента.ИмяТипаЭлемента);
ПараметрыФормы.Вставить("АдресТаблицыСвойств", ПроизводственныйПроцессПоместитьДопРеквизиты());
ПараметрыФормы.Вставить("ИдентификаторВладельца", УникальныйИдентификатор);
ОписаниеОповещения = Новый ОписаниеОповещения(
"ПроизводственныйПроцессПослеРедактированияДопРеквизитов",
ЭтотОбъект);
ОткрытьФорму("Справочник.РесурсныеСпецификации.Форма.ФормаРедактированияДополнительныхРеквизитов",
ПараметрыФормы, ЭтотОбъект, ТекущиеДанные.Ссылка,,, ОписаниеОповещения);
КонецПроцедуры
&НаСервере
Функция ПроизводственныйПроцессПоместитьДопРеквизиты()
ОписаниеСвойствЭлементов = ПроизводственныйПроцессКэш.ОписаниеСвойствЭлементов;
ТекущаяСтрока = Элементы.ПроизводственныйПроцесс.ТекущаяСтрока;
ТекущиеДанные = ПроизводственныйПроцесс.НайтиПоИдентификатору(ТекущаяСтрока);
СвойстваЭлемента = ОписаниеСвойствЭлементов.Получить(ТекущиеДанные.ВидЭлемента);
ТекущийОбъект = ЭтотОбъект[СвойстваЭлемента.ИмяРеквизитаОбъекта];
ДополнительныеРеквизиты = ТекущийОбъект.ДополнительныеРеквизиты.Выгрузить();
Возврат ПоместитьВоВременноеХранилище(ДополнительныеРеквизиты, УникальныйИдентификатор);
КонецФункции
&НаКлиенте
Процедура ПроизводственныйПроцессПослеРедактированияДопРеквизитов(Результат, ДополнительныеПараметры) Экспорт
Если Результат <> Неопределено И ЭтоАдресВременногоХранилища(Результат) Тогда
ПроизводственныйПроцессПослеРедактированияДопРеквизитовНаСервере(Результат);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПроизводственныйПроцессПослеРедактированияДопРеквизитовНаСервере(АдресРезультата)
ОписаниеСвойствЭлементов = ПроизводственныйПроцессКэш.ОписаниеСвойствЭлементов;
ТекущаяСтрока = Элементы.ПроизводственныйПроцесс.ТекущаяСтрока;
ТекущиеДанные = ПроизводственныйПроцесс.НайтиПоИдентификатору(ТекущаяСтрока);
СвойстваЭлемента = ОписаниеСвойствЭлементов.Получить(ТекущиеДанные.ВидЭлемента);
Результат = ПолучитьИзВременногоХранилища(АдресРезультата);
ТекущийОбъект = ЭтотОбъект[СвойстваЭлемента.ИмяРеквизитаОбъекта];
ТекущийОбъект.ДополнительныеРеквизиты.Загрузить(Результат);
КэшЭлементов = ПроизводственныйПроцессПолучитьКэшЭлементов();
КэшЭлемента = ПроизводственныйПроцессПолучитьКэшЭлемента(КэшЭлементов, ТекущиеДанные);
КэшЭлемента.Записывать = Истина;
ПроизводственныйПроцессСохранитьКэшЭлементов(КэшЭлементов);
НастроитьЭлементыДополнительныхРеквизитовИСведений(ТекущийОбъект, ТекущиеДанные.ВидЭлемента);
Модифицированность = Истина;
КонецПроцедуры
&НаСервере
Процедура НастроитьЭлементыДополнительныхРеквизитовИСведений(ТекущийОбъект, ВидЭлемента)
ОписаниеСвойствЭлементов = ПроизводственныйПроцессКэш.ОписаниеСвойствЭлементов;
СвойстваЭлементов = ОписаниеСвойствЭлементов.Получить(ВидЭлемента);
Если ПроизводственныйПроцессКэш[СвойстваЭлементов["ИспользоватьДопРеквизиты"]] Тогда
ТекстСсылки = НСтр("ru = 'Дополнительные реквизиты'")
+ ?(ТекущийОбъект.ДополнительныеРеквизиты.Количество() > 0,
СтрШаблон(" (%1)", ТекущийОбъект.ДополнительныеРеквизиты.Количество()),
"");
ЭтотОбъект[СвойстваЭлементов["ДополнительныеРеквизиты"]] = Новый ФорматированнаяСтрока(
ТекстСсылки,,,,"#ДополнительныеРеквизиты");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроизводственныйПроцессРедактироватьДопСведения()
ТекущиеДанные = Элементы.ПроизводственныйПроцесс.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
Если ПроизводственныйПроцессЭлементЗаписан(ТекущиеДанные.Ссылка) Тогда
ПроизводственныйПроцессРедактироватьДопСведенияЭлемента(ТекущиеДанные.Ссылка);
Возврат;
КонецЕсли;
ТекстВопроса = СтрШаблон(НСтр("ru = 'Элемент ""%1"" не записан.
|Редактирование дополнительных сведений возможно только после записи производственного процесса.
|Записать и продолжить?'"), ТекущиеДанные.Наименование);
ОписаниеОповещения = Новый ОписаниеОповещения("ПроизводственныйПроцессРедактироватьДопСведенияЗавершение",
ЭтотОбъект, ТекущиеДанные.Ссылка);
ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
КонецПроцедуры
&НаКлиенте
Процедура ПроизводственныйПроцессРедактироватьДопСведенияЗавершение(РезультатВопроса, Параметры) Экспорт
Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
Если Записать() Тогда
ПроизводственныйПроцессРедактироватьДопСведенияЭлемента(Параметры);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроизводственныйПроцессРедактироватьДопСведенияЭлемента(Ссылка)
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Ссылка", Ссылка);
ОткрытьФорму("ОбщаяФорма.РедактированиеДополнительныхСведений",
ПараметрыФормы, ЭтотОбъект, Ссылка);
КонецПроцедуры
#КонецОбласти
#Область РедактированиеДереваЭлементов
&НаСервере
Процедура ПроизводственныйПроцессДобавитьЭтапНаСервере()
КоллекцияЭлементов = ПроизводственныйПроцесс.ПолучитьЭлементы();
НомерЭтапа = ПроизводственныйПроцессПолучитьНовыйНомер(КоллекцияЭлементов);
КэшЭлементов = ПроизводственныйПроцессПолучитьКэшЭлементов();
ЭтапОбъект = Справочники.ЭтапыПроизводства.СоздатьЭлемент();
ЭтапОбъект.Заполнить(Неопределено);
ЭтапОбъект.Владелец = Объект.Ссылка;
ЭтапОбъект.НомерЭтапа = НомерЭтапа;
ЭтапОбъект.НомерСледующегоЭтапа = 0;
ЭтапОбъект.Партнер = Справочники.Организации.ПустаяСсылка();
ЭтапОбъект.Наименование = СтрШаблон(НСтр("ru = 'Новый этап %1'"), НомерЭтапа);
ЭтапОбъект.УстановитьСсылкуНового(Справочники.ЭтапыПроизводства.ПолучитьСсылку());
ПараметрыДобавления = Новый Структура;
ПараметрыДобавления.Вставить("СкорректироватьНумерацию");
НоваяСтрока = ПроизводственныйПроцессДобавитьНовыйЭтап(
ЭтапОбъект, КэшЭлементов, КоллекцияЭлементов, ПараметрыДобавления);
Элементы.ПроизводственныйПроцесс.ТекущаяСтрока = НоваяСтрока;
ПроизводственныйПроцессСохранитьКэшЭлементов(КэшЭлементов);
ОбработатьИзменениеПроизводственногоПроцесса(НоваяСтрока);
НастроитьЗависимыеЭлементыФормы(ЭтотОбъект, "ПроизводственныйПроцесс");
Модифицированность = Истина;
КонецПроцедуры
&НаСервере
Функция ПроизводственныйПроцессДобавитьНовыйЭтап(ЭтапОбъект, КэшЭлементов, Коллекция, Параметры)
НоваяСтрока = Коллекция.Добавить();
НоваяСтрока.Наименование = ЭтапОбъект.Наименование;
НоваяСтрока.Номер = ЭтапОбъект.НомерЭтапа;
НоваяСтрока.НомерСледующего = ЭтапОбъект.НомерСледующегоЭтапа;
НоваяСтрока.Ссылка = ЭтапОбъект.ПолучитьСсылкуНового();
НоваяСтрока.ВидЭлемента = РедакторПроизводственногоПроцессаКлиентСервер.ВидЭлементаПоСсылке(НоваяСтрока.Ссылка);
РедакторПроизводственногоПроцессаКлиентСервер.УстановитьКартинкуЭлемента(НоваяСтрока);
КэшЭлемента = ПроизводственныйПроцессКэшЭлементаКонструктор(НоваяСтрока.ВидЭлемента);
КэшЭлемента.Объект = ЭтапОбъект;
КэшЭлемента.Записывать = Истина;
КэшЭлементов.Вставить(НоваяСтрока.Ссылка, КэшЭлемента);
Если Параметры.Свойство("СкорректироватьНумерацию") Тогда
ПроизводственныйПроцессСкорректироватьНумерациюПослеДобавленияЭлемента(КэшЭлементов, Коллекция, ЭтапОбъект.НомерЭтапа);
КонецЕсли;
ПроизводственныйПроцессСкорректироватьСчетчикЭлементов(НоваяСтрока.ВидЭлемента, 1);
Возврат НоваяСтрока.ПолучитьИдентификатор();
КонецФункции
&НаСервере
Процедура ПроизводственныйПроцессКопироватьЭлементНаСервере(ИдентификаторСтроки)
ДанныеСтроки = Производственныйпроцесс.НайтиПоИдентификатору(ИдентификаторСтроки);
Если ДанныеСтроки = Неопределено ИЛИ ДанныеСтроки.ТолькоПросмотр Тогда
Возврат;
КонецЕсли;
КэшЭлементов = ПроизводственныйПроцессПолучитьКэшЭлементов();
ПроизводственныйПроцессЗакэшироватьТекущийЭлемент(КэшЭлементов);
НоваяСтрока = ПроизводственныйПроцессКопироватьЭлементРекурсивно(
ДанныеСтроки, ДанныеСтроки.ПолучитьРодителя(), КэшЭлементов);
ПроизводственныйПроцессСохранитьКэшЭлементов(КэшЭлементов);
Элементы.ПроизводственныйПроцесс.ТекущаяСтрока = НоваяСтрока;
ОбработатьИзменениеПроизводственногоПроцесса(НоваяСтрока);
Модифицированность = Истина;
КонецПроцедуры
&НаСервере
Функция ПроизводственныйПроцессКопироватьЭлементРекурсивно(ДанныеСтрокиИсточника, ДанныеСтрокиРодителя, КэшЭлементов)
КоллекцияЭлементов = ?(ДанныеСтрокиРодителя = Неопределено, ПроизводственныйПроцесс.ПолучитьЭлементы(), ДанныеСтрокиРодителя.ПолучитьЭлементы());
НоваяСтрока = КоллекцияЭлементов.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ДанныеСтрокиИсточника);
Если НЕ НоваяСтрока.ТолькоПросмотр Тогда
ОписаниеСвойствЭлементов = ПроизводственныйПроцессКэш.ОписаниеСвойствЭлементов;
СвойстваЭлемента = ОписаниеСвойствЭлементов.Получить(ДанныеСтрокиИсточника.ВидЭлемента);
КэшЭлементаИсточника = КэшЭлементов.Получить(ДанныеСтрокиИсточника.Ссылка);
Если КэшЭлементаИсточника = Неопределено Тогда
НовыйОбъект = ДанныеСтрокиИсточника.Ссылка.Скопировать();
Иначе
НовыйОбъект = КэшЭлементаИсточника.Объект.Скопировать();
ЗаполнитьЗначенияСвойств(НовыйОбъект,
КэшЭлементаИсточника.Объект,
СвойстваЭлемента.Номер+","+СвойстваЭлемента.НомерСледующего);
КонецЕсли;
НовыйОбъект.УстановитьСсылкуНового(Справочники[СвойстваЭлемента.ИмяТипаЭлемента].ПолучитьСсылку());
КэшНовогоЭлемента = ПроизводственныйПроцессКэшЭлементаКонструктор(ДанныеСтрокиИсточника.ВидЭлемента);
КэшНовогоЭлемента.Записывать = Истина;
КэшНовогоЭлемента.Объект = НовыйОбъект;
НоваяСтрока.Ссылка = КэшНовогоЭлемента.Объект.ПолучитьСсылкуНового();
КэшЭлементов.Вставить(НоваяСтрока.Ссылка, КэшНовогоЭлемента);
ПроизводственныйПроцессСкорректироватьПозициюСтроки(ЭтотОбъект, НоваяСтрока);
ПодчиненныеСтроки = ДанныеСтрокиИсточника.ПолучитьЭлементы();
Для Индекс = 0 По ПодчиненныеСтроки.Количество() - 1 Цикл
ПроизводственныйПроцессКопироватьЭлементРекурсивно(ПодчиненныеСтроки[Индекс], НоваяСтрока, КэшЭлементов);
КонецЦикла;
КонецЕсли;
Возврат НоваяСтрока.ПолучитьИдентификатор();
КонецФункции
&НаКлиенте
Процедура ВопросПроизводственныйПроцессПередУдалениемЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
ПроизводственныйПроцессУдалитьЭлементы(ДополнительныеПараметры.ИдентификаторыСтрок);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПроизводственныйПроцессУдалитьЭлементы(ИдентификаторыСтрок)
КэшЭлементов = ПроизводственныйПроцессПолучитьКэшЭлементов();
СчетчикУдаленных = Новый Структура;
Пока ИдентификаторыСтрок.Количество() > 0 Цикл
ТекущийИдентификатор = ИдентификаторыСтрок[0];
ДанныеСтроки = ПроизводственныйПроцесс.НайтиПоИдентификатору(ТекущийИдентификатор);
Если ДанныеСтроки <> Неопределено И НЕ ДанныеСтроки.ТолькоПросмотр Тогда
ВидЭлемента = ДанныеСтроки.ВидЭлемента;
ПодчиненныеСтроки = ДанныеСтроки.ПолучитьЭлементы();
Если ПодчиненныеСтроки.Количество() > 0 Тогда
Для каждого ПодчиненнаяСтрока Из ПодчиненныеСтроки Цикл
Если НЕ ПодчиненнаяСтрока.ТолькоПросмотр Тогда
ИдентификаторыСтрок.Вставить(0, ПодчиненнаяСтрока.ПолучитьИдентификатор())
КонецЕсли;
КонецЦикла;
Если ИдентификаторыСтрок[0] <> ТекущийИдентификатор Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
КэшЭлемента = ПроизводственныйПроцессПолучитьКэшЭлемента(КэшЭлементов, ДанныеСтроки);
КэшЭлемента.Удален = Истина;
Если СчетчикУдаленных.Свойство(ВидЭлемента) Тогда
СчетчикУдаленных[ВидЭлемента] = СчетчикУдаленных[ВидЭлемента] + 1;
Иначе
СчетчикУдаленных.Вставить(ВидЭлемента, 1);
КонецЕсли;
ПроизводственныйПроцессПолучитьРодителя(ЭтотОбъект, ДанныеСтроки).ПолучитьЭлементы().Удалить(ДанныеСтроки);
КонецЕсли;
ИдентификаторыСтрок.Удалить(0);
КонецЦикла;
ПроизводственныйПроцессСохранитьКэшЭлементов(КэшЭлементов);
ПроизводственныйПроцессОчиститьТекущийЭлемент(Истина);
Для каждого КлючИЗначение Из СчетчикУдаленных Цикл
ПроизводственныйПроцессСкорректироватьСчетчикЭлементов(КлючИЗначение.Ключ, -КлючИЗначение.Значение);
КонецЦикла;
НастроитьЗависимыеЭлементыФормы(ЭтотОбъект, "ПроизводственныйПроцесс");
Модифицированность = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ПроизводственныйПроцессПереместитьЭлемент(ДанныеСтроки, Смещение)
Если ДанныеСтроки = Неопределено ИЛИ ДанныеСтроки.ТолькоПросмотр Тогда
Возврат;
КонецЕсли;
ПроизводственныйПроцессПереместитьЭлементНаСервере(ДанныеСтроки.ПолучитьИдентификатор(), Смещение);
КонецПроцедуры
&НаСервере
Процедура ПроизводственныйПроцессПереместитьЭлементНаСервере(ИдентификаторСтроки, Смещение)
ОписаниеСвойствЭлементов = ПроизводственныйПроцессКэш.ОписаниеСвойствЭлементов;
ТекущиеДанные = ПроизводственныйПроцесс.НайтиПоИдентификатору(ИдентификаторСтроки);
КоллекцияЭлементов = ПроизводственныйПроцессПолучитьРодителя(ЭтотОбъект, ТекущиеДанные).ПолучитьЭлементы();
ИндексЭлемента = КоллекцияЭлементов.Индекс(ТекущиеДанные);
ИндексЭлементаГраничный = ?(Смещение < 0, 0, КоллекцияЭлементов.Количество()-1);
Если ИндексЭлемента = ИндексЭлементаГраничный
ИЛИ (Смещение < 0 И ТекущиеДанные.Номер = 1) Тогда
Возврат;
КонецЕсли;
СвойстваЭлемента = ОписаниеСвойствЭлементов.Получить(ТекущиеДанные.ВидЭлемента);
КэшЭлементов = ПроизводственныйПроцессПолучитьКэшЭлементов();
НовыйНомер = ТекущиеДанные.Номер + Смещение;
НовыйНомерСледующего = ТекущиеДанные.НомерСледующего;
ШагСмещения = ?(Смещение < 0, -1, 1);
Пока Истина Цикл
ИндексЭлемента = ИндексЭлемента + ШагСмещения;
Если ИндексЭлемента = (ИндексЭлементаГраничный + ШагСмещения)
ИЛИ КоллекцияЭлементов[ИндексЭлемента].Номер <> НовыйНомер Тогда
Прервать;
КонецЕсли;
Строка = КоллекцияЭлементов[ИндексЭлемента];
Если ТекущиеДанные.НомерСледующего = Строка.Номер
ИЛИ ТекущиеДанные.Номер = Строка.НомерСледующего Тогда
НовыйНомерСледующего = Строка.НомерСледующего;
Строка.НомерСледующего = ТекущиеДанные.НомерСледующего;
КонецЕсли;
Строка.Номер = Строка.Номер - ШагСмещения;
КэшЭлемента = ПроизводственныйПроцессПолучитьКэшЭлемента(КэшЭлементов, Строка, Истина);
КэшЭлемента.Объект[СвойстваЭлемента.Номер] = Строка.Номер;
КэшЭлемента.Объект[СвойстваЭлемента.НомерСледующего] = Строка.НомерСледующего;
КэшЭлемента.Записывать = Истина;
КонецЦикла;
ТекущиеДанные.Номер = НовыйНомер;
ТекущиеДанные.НомерСледующего = НовыйНомерСледующего;
ТекущийОбъект = ЭтотОбъект[СвойстваЭлемента.ИмяРеквизитаОбъекта];
ТекущийОбъект[СвойстваЭлемента.Номер] = ТекущиеДанные.Номер;
ТекущийОбъект[СвойстваЭлемента.НомерСледующего] = ТекущиеДанные.НомерСледующего;
ПроизводственныйПроцессСкорректироватьПозициюСтроки(ЭтотОбъект, ТекущиеДанные);
ПроизводственныйПроцессСохранитьКэшЭлементов(КэшЭлементов);
ОбработатьИзменениеПроизводственногоПроцесса(ИдентификаторСтроки);
Модифицированность = Истина;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ПроизводственныйПроцессСкорректироватьПозициюСтроки(Форма, ДанныеСтроки)
РодительЭлемента = ПроизводственныйПроцессПолучитьРодителя(Форма, ДанныеСтроки);
КоллекцияЭлементов = РодительЭлемента.ПолучитьЭлементы();
КоличествоЭлементов = КоллекцияЭлементов.Количество();
ИндексТекущегоЭлемента = КоллекцияЭлементов.Индекс(ДанныеСтроки);
Пока ИндексТекущегоЭлемента > 0
И (КоллекцияЭлементов[ИндексТекущегоЭлемента-1].Номер > ДанныеСтроки.Номер
ИЛИ (КоллекцияЭлементов[ИндексТекущегоЭлемента-1].Номер = ДанныеСтроки.Номер
И ПроизводственныйПроцессСравнитьСсылки(КоллекцияЭлементов[ИндексТекущегоЭлемента-1].Ссылка, ДанныеСтроки.Ссылка) > 0)) Цикл
КоллекцияЭлементов.Сдвинуть(ИндексТекущегоЭлемента,-1);
ИндексТекущегоЭлемента = ИндексТекущегоЭлемента - 1;
КонецЦикла;
Пока ИндексТекущегоЭлемента < (КоличествоЭлементов - 1)
И (КоллекцияЭлементов[ИндексТекущегоЭлемента+1].Номер < ДанныеСтроки.Номер
ИЛИ (КоллекцияЭлементов[ИндексТекущегоЭлемента+1].Номер = ДанныеСтроки.Номер
И ПроизводственныйПроцессСравнитьСсылки(КоллекцияЭлементов[ИндексТекущегоЭлемента+1].Ссылка, ДанныеСтроки.Ссылка) < 0)) Цикл
КоллекцияЭлементов.Сдвинуть(ИндексТекущегоЭлемента,1);
ИндексТекущегоЭлемента = ИндексТекущегоЭлемента + 1;
КонецЦикла;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПроизводственныйПроцессСравнитьСсылки(Ссылка1, Ссылка2)
СравнениеСсылок = Новый СравнениеЗначений();
Возврат СравнениеСсылок.Сравнить(Ссылка1, Ссылка2);
КонецФункции
&НаСервере
Процедура ПроизводственныйПроцессСкорректироватьНумерациюПослеДобавленияЭлемента(КэшЭлементов, Коллекция, НомерСледующего)
Если Коллекция.Количество() < 2 Тогда
Возврат;
КонецЕсли;
ДанныеСтроки = Коллекция[Коллекция.Количество()-2];
Если ДанныеСтроки.НомерСледующего <> 0 Тогда
Возврат;
КонецЕсли;
ОписаниеСвойствЭлементов = ПроизводственныйПроцессКэш.ОписаниеСвойствЭлементов;
СвойстваЭлемента = ОписаниеСвойствЭлементов.Получить(ДанныеСтроки.ВидЭлемента);
Если ПроизводственныйПроцессТекущаяСсылка = ДанныеСтроки.Ссылка Тогда
ДанныеОбъекта = ЭтотОбъект[СвойстваЭлемента.ИмяРеквизитаОбъекта];
ДанныеОбъекта[СвойстваЭлемента.НомерСледующего] = НомерСледующего;
Иначе
КэшЭлемента = ПроизводственныйПроцессПолучитьКэшЭлемента(КэшЭлементов, ДанныеСтроки, Истина);
КэшЭлемента.Объект[СвойстваЭлемента.НомерСледующего] = НомерСледующего;
КэшЭлемента.Записывать = Истина;
КонецЕсли;
ДанныеСтроки.НомерСледующего = НомерСледующего;
КонецПроцедуры
&НаСервере
Процедура ПроизводственныйПроцессСкорректироватьСчетчикЭлементов(ВидЭлемента, Изменение)
ОписаниеСвойствЭлементов = ПроизводственныйПроцессКэш.ОписаниеСвойствЭлементов;
СвойстваЭлементов = ОписаниеСвойствЭлементов.Получить(ВидЭлемента);
ПроизводственныйПроцессКэш[СвойстваЭлементов.Счетчик] =
ПроизводственныйПроцессКэш[СвойстваЭлементов.Счетчик] + Изменение;
Если ВидЭлемента = "Этап" Тогда
ОбновитьРеквизитМногоэтапныйПроизводственныйПроцесс();
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ПроизводственныйПроцессПолучитьРодителя(Форма, ДанныеСтроки)
РодительЭлемента = ДанныеСтроки.ПолучитьРодителя();
Если РодительЭлемента = Неопределено Тогда
РодительЭлемента = Форма.ПроизводственныйПроцесс;
КонецЕсли;
Возврат РодительЭлемента;
КонецФункции
&НаКлиенте
Процедура ПроизводственныйПроцессНачатьДобавлениеЭтапа()
Если НЕ ПроверитьВозможностьДобавленияЭтапа() Тогда
Возврат;
КонецЕсли;
Если Объект.Ссылка.Пустая() Тогда
ТекстВопроса = НСтр("ru = 'Ввод этапов возможен только после записи спецификации.
|Записать и продолжить?'");
ОписаниеОповещения = Новый ОписаниеОповещения("ПроизводственныйПроцессНачатьДобавлениеЭтапаЗавершение",
ЭтотОбъект, Новый Структура);
ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
Возврат;
КонецЕсли;
ПроизводственныйПроцессДобавитьЭтапНаСервере();
КонецПроцедуры
&НаКлиенте
Функция ПроверитьВозможностьДобавленияЭтапа()
ТекстПредупреждения = "";
Если ПроизводственныйПроцессКэш.ЭтапКоличество > 0
И НЕ УправлениеДаннымиОбИзделияхКлиентСервер.МногоэтапныйПроизводственныйПроцессДоступен() Тогда
ТекстПредупреждения = УправлениеДаннымиОбИзделияхКлиентСервер.МногоэтапныйПроизводственныйПроцессТекстОшибки();
КонецЕсли;
Если НЕ ПустаяСтрока(ТекстПредупреждения) Тогда
ПоказатьПредупреждение(, ТекстПредупреждения);
Возврат Ложь;
Иначе
Возврат Истина;
КонецЕсли;
КонецФункции
&НаКлиенте
Процедура ПроизводственныйПроцессНачатьДобавлениеЭтапаЗавершение(РезультатВопроса, Параметры) Экспорт
Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;
Если Записать() Тогда
ПроизводственныйПроцессДобавитьЭтапНаСервере();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция ПроверитьВозможностьЗаполненияПодразделенияЭтапов(ИдентификаторыСтрок)
ТекстПредупреждения = "";
Если НЕ ЗначениеЗаполнено(ИдентификаторыСтрок) Тогда
ТекстПредупреждения = НСтр("ru = 'Необходимо выделить этапы для заполнения подразделения.'");
Иначе
Для каждого ИдентификаторСтроки Из ИдентификаторыСтрок Цикл
Если ПроизводственныйПроцесс.НайтиПоИдентификатору(ИдентификаторСтроки).ВидЭлемента <> "Этап" Тогда
ТекстПредупреждения = НСтр("ru = 'Заполнение подразделения доступно только для этапов.'");
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если НЕ ПустаяСтрока(ТекстПредупреждения) Тогда
ПоказатьПредупреждение(, ТекстПредупреждения);
Возврат Ложь;
Иначе
Возврат Истина;
КонецЕсли;
КонецФункции
&НаКлиенте
Функция ПроверитьВозможностьУдаленияЭлементовПроизводственногоПроцесса(ИдентификаторыСтрок)
ТекстПредупреждения = "";
ИменаТЧ = ИменаТабличныхЧастей();
ИспользуемыеЭлементы = Новый Структура;
Для каждого ВидЭлемента Из РедакторПроизводственногоПроцессаКлиентСервер.ВидыЭлементов() Цикл
ИспользуемыеЭлементы.Вставить(ВидЭлемента, Новый Массив);
КонецЦикла;
Если ИдентификаторыСтрок.Количество() = 0 Тогда
ТекстПредупреждения = НСтр("ru = 'Необходимо выделить элементы для удаления.'");
Иначе
Для каждого ИдентификаторСтроки Из ИдентификаторыСтрок Цикл
ДанныеСтроки = ПроизводственныйПроцесс.НайтиПоИдентификатору(ИдентификаторСтроки);
ВидЭлемента = ДанныеСтроки.ВидЭлемента;
СвойстваЭлементов = ПроизводственныйПроцессКэш.ОписаниеСвойствЭлементов.Получить(ВидЭлемента);
СтруктураОтбора = Новый Структура(СвойстваЭлементов["Редактирование"], ДанныеСтроки.Ссылка);
Для каждого ИмяТЧ Из ИменаТЧ Цикл
Если Объект[ИмяТЧ].НайтиСтроки(СтруктураОтбора).Количество() > 0 Тогда
ИспользуемыеЭлементы[ВидЭлемента].Добавить(ДанныеСтроки.Наименование);
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Для каждого ВидЭлемента Из РедакторПроизводственногоПроцессаКлиентСервер.ВидыЭлементов() Цикл
КоличествоИспользуемых = ИспользуемыеЭлементы[ВидЭлемента].Количество();
Если КоличествоИспользуемых > 0 Тогда
Если КоличествоИспользуемых = 1 Тогда
ТекстПредупреждения = СтрШаблон(НСтр("ru = '""%1"" используется в спецификации. Удаление невозможно.'"),
ИспользуемыеЭлементы[ВидЭлемента][0]);
Иначе
ТекстПредупреждения = СтрШаблон(НСтр("ru = 'Нижеследующие элементы используется в спецификации:
|%1
|
|Удаление невозможно.'"), СтрСоединить(ИспользуемыеЭлементы[ВидЭлемента], Символы.ПС));
КонецЕсли;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если НЕ ПустаяСтрока(ТекстПредупреждения) Тогда
ПоказатьПредупреждение(, ТекстПредупреждения);
Возврат Ложь;
Иначе
Возврат Истина;
КонецЕсли;
КонецФункции
&НаКлиенте
Процедура ПроизводственныйПроцессНачатьКопированиеЭлемента(ДанныеСтроки)
Если ДанныеСтроки = Неопределено Тогда
Возврат;
КонецЕсли;
Если ДанныеСтроки.ВидЭлемента = "Этап"
И НЕ ПроверитьВозможностьДобавленияЭтапа() Тогда
Возврат;
КонецЕсли;
ПроизводственныйПроцессКопироватьЭлементНаСервере(ДанныеСтроки.ПолучитьИдентификатор());
КонецПроцедуры
&НаСервере
Процедура ПроизводственныйПроцессОчистить()
ПроизводственныйПроцесс.ПолучитьЭлементы().Очистить();
ПроизводственныйПроцессОчиститьКэшЭлементов();
ПроизводственныйПроцессКэш.ЭтапКоличество = 0;
ПроизводственныйПроцессКэш.ОперацияКоличество = 0;
ПроизводственныйПроцессКэш.ЕстьМногооперационныйЭтап = Ложь;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьЗначенияРеквизитовОбъектаВДереве(Форма, ДанныеСтроки, СписокРеквизитов = "")
ОписаниеСвойствЭлементов = Форма.ПроизводственныйПроцессКэш.ОписаниеСвойствЭлементов;
СвойстваЭлементов = ОписаниеСвойствЭлементов.Получить(ДанныеСтроки.ВидЭлемента);
Если ПустаяСтрока(СписокРеквизитов) Тогда
СтруктураРеквизитов = СтрРазделить(СвойстваЭлементов.РеквизитыДерева, ",");
Иначе
СтруктураРеквизитов = СтрРазделить(СписокРеквизитов, ",");
КонецЕсли;
ИмяРеквизитаВОбъекте = Неопределено;
Для каждого ИмяРеквизита Из СтруктураРеквизитов Цикл
Если НЕ СвойстваЭлементов.Свойство(ИмяРеквизита, ИмяРеквизитаВОбъекте) Тогда
ИмяРеквизитаВОбъекте = ИмяРеквизита;
КонецЕсли;
ДанныеСтроки[ИмяРеквизита] = Форма[СвойстваЭлементов.ИмяРеквизитаОбъекта][ИмяРеквизитаВОбъекте];
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область РедактированиеСвойствЭтапа
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьОтметкуНезаполненногоДляБуферов(Форма)
ОбязательностьЗаполнения = РедакторПроизводственногоПроцессаКлиентСервер.ОбязательностьЗаполненияЕдиницИзмеренияБуферов(
Форма.ПроизводственныйПроцессЭтап);
ОписаниеСвойствЭлементов = Форма.ПроизводственныйПроцессКэш.ОписаниеСвойствЭлементов;
СвойстваЭлементов = ОписаниеСвойствЭлементов.Получить("Этап");
Для каждого КлючИЗначение Из ОбязательностьЗаполнения Цикл
Форма.Элементы[СвойстваЭлементов[КлючИЗначение.Ключ]].ОтметкаНезаполненного = КлючИЗначение.Значение;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура РассчитатьДлительностьЭтапа()
Возврат;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьВыборЕдиницыИзмеренияБуферов(ЭтоЧтениеОбъекта)
РедакторПроизводственногоПроцесса.ЗаполнитьВыборЕдиницыИзмеренияБуфера(
ЭтапИнтервалПланирования,
Элементы.ЭтапЕдиницаИзмеренияПредварительногоБуфера.СписокВыбора);
РедакторПроизводственногоПроцесса.ЗаполнитьВыборЕдиницыИзмеренияБуфера(
ЭтапИнтервалПланирования,
Элементы.ЭтапЕдиницаИзмеренияЗавершающегоБуфера.СписокВыбора);
РедакторПроизводственногоПроцесса.ПроверитьВыборЕдиницыИзмеренияБуферов(
ПроизводственныйПроцессЭтап, ЭтотОбъект, НЕ ЭтоЧтениеОбъекта, "Этап");
КонецПроцедуры
&НаСервере
Процедура ЭтапСпособПроизводстваПриИзмененииНаСервере()
ПроизводственныйПроцессЭтап.ПроизводствоНаСтороне = Булево(ЭтапСпособПроизводства);
СписокРеквизитов = "СпособПроизводства";
Если ПроизводственныйПроцессЭтап.ПроизводствоНаСтороне Тогда
ПроизводственныйПроцессЭтап.ПланироватьРаботуВидовРабочихЦентров = Ложь;
ПроизводственныйПроцессЭтап.МаршрутнаяКарта = Неопределено;
ПроизводственныйПроцессЭтап.КоэффициентМаршрутнойКарты = 0;
СписокРеквизитов = СписокРеквизитов+",ПланироватьРаботуВидовРабочихЦентров,МаршрутнаяКарта";
ПолеПартнер = Элементы.ЭтапПартнер;
Иначе
ПолеПартнер = Элементы.ЭтапОрганизация;
КонецЕсли;
ПроизводственныйПроцессЭтап.Партнер = ПолеПартнер.ОграничениеТипа.ПривестиЗначение(ПроизводственныйПроцессЭтап.Партнер);
НастроитьЗависимыеЭлементыФормыЭтапа(ЭтотОбъект, СписокРеквизитов);
РедакторПроизводственногоПроцессаКлиентСервер.ЗаполнитьПояснениеОсновныхНастроек(ПроизводственныйПроцессЭтап, ЭтотОбъект, "Этап");
ТекущаяСтрока = Элементы.ПроизводственныйПроцесс.ТекущаяСтрока;
ТекущиеДанные = ПроизводственныйПроцесс.НайтиПоИдентификатору(ТекущаяСтрока);
ТекущиеДанные.ПроизводствоНаСтороне = ПроизводственныйПроцессЭтап.ПроизводствоНаСтороне;
ОбработатьИзменениеПроизводственногоПроцесса(ТекущаяСтрока);
НастроитьЗависимыеЭлементыФормы(ЭтотОбъект, "ПроизводственныйПроцесс");
КонецПроцедуры
&НаСервере
Процедура ЭтапПодразделениеПриИзмененииНаСервере(ПроверитьОчиститьВРЦ = Истина)
ТекущаяСтрока = Элементы.ПроизводственныйПроцесс.ТекущаяСтрока;
Если ТекущаяСтрока = Неопределено Тогда
Возврат;
КонецЕсли;
ТекущиеДанные = ПроизводственныйПроцесс.НайтиПоИдентификатору(ТекущаяСтрока);
ОбновитьЗначенияРеквизитовОбъектаВДереве(ЭтотОбъект, ТекущиеДанные, "Подразделение");
ЗаполнитьВыборЕдиницыИзмеренияБуферов(Ложь);
НастроитьЗависимыеЭлементыФормы(ЭтотОбъект, "ПроизводственныйПроцесс");
КонецПроцедуры
&НаСервере
Процедура НастроитьЭлементыФормыЭтапа(ЭтапОбъект, ДанныеСтроки)
Элементы.ЭтапСпособПроизводства.Видимость =
(ИспользуетсяПроизводствоНаСтороне2_5
ИЛИ ИспользуетсяПроизводствоНаСтороне
ИЛИ Ложь)
И Не Объект.МногоэтапныйПроизводственныйПроцесс;
Элементы.ЭтапНастройкаОтбораПоСвойствамИРасчетаПоФормулам.Видимость = НЕ ИспользуетсяПроизводство21;
Элементы.ЭтапГруппаМаршрутнаяКарта.ТолькоПросмотр = ХранитьОперацииВРесурсныхСпецификациях;
Элементы.ЭтапОрганизация.ОграничениеТипа = Новый ОписаниеТипов("СправочникСсылка.Организации");
Элементы.ЭтапПартнер.ОграничениеТипа = Новый ОписаниеТипов("СправочникСсылка.Партнеры");
УправлениеДаннымиОбИзделияхКлиентСервер.УстановитьПараметрыВводаКоличестваЕдиницПартий(
Объект.ВыпускПроизвольнымиПорциями И ДоступноОписаниеПартииВыпуска,
Элементы.ЭтапОдновременноПроизводимоеКоличествоЕдиницПартийИзделий);
НастроитьЭлементыДополнительныхРеквизитовИСведений(ЭтапОбъект, ДанныеСтроки.ВидЭлемента);
НастроитьЗависимыеЭлементыФормыЭтапа(ЭтотОбъект);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура НастроитьЗависимыеЭлементыФормыЭтапа(Форма, СписокРеквизитов = "")
Если НЕ ЗначениеЗаполнено(Форма.ПроизводственныйПроцессТекущаяСсылка)
ИЛИ ТипЗнч(Форма.ПроизводственныйПроцессТекущаяСсылка) <> Тип("СправочникСсылка.ЭтапыПроизводства") Тогда
Возврат;
КонецЕсли;
Объект = Форма.ПроизводственныйПроцессЭтап;
Элементы = Форма.Элементы;
Инициализация = ПустаяСтрока(СписокРеквизитов);
СтруктураРеквизитов = Новый Структура(СписокРеквизитов);
Если СтруктураРеквизитов.Свойство("СпособПроизводства")
ИЛИ Инициализация Тогда
СобственноеПроизводство = НЕ Объект.ПроизводствоНаСтороне;
Элементы.ЭтапСтраницаПереработка.Видимость = НЕ СобственноеПроизводство;
Элементы.ЭтапПланироватьРаботуВидовРабочихЦентров.Видимость = СобственноеПроизводство;
Элементы.ЭтапГруппаМаршрутнаяКарта.Видимость = Форма.УправлениеПредприятием
И Форма.ИспользоватьМаршрутныеКарты
И СобственноеПроизводство;
Элементы.ЭтапСтраницыРазбиватьМаршрутныеЛисты.Видимость = Форма.УправлениеПредприятием
И Форма.ИспользуетсяПроизводство21
И СобственноеПроизводство;
Элементы.ЭтапОрганизация.Видимость = Ложь;
КонецЕсли;
Если СтруктураРеквизитов.Свойство("ПланироватьРаботуВидовРабочихЦентров")
ИЛИ Инициализация Тогда
РедакторПроизводственногоПроцессаКлиентСервер.НастроитьЭлементыГруппыВидыРабочихЦентров(Объект, Форма, "Этап");
РедакторПроизводственногоПроцессаКлиентСервер.НастроитьЭлементыГруппыДлительностьЭтапа(Объект, Форма, "Этап");
КонецЕсли;
Если СтруктураРеквизитов.Свойство("РазбиватьМаршрутныеЛисты")
ИЛИ Инициализация Тогда
Элементы.ЭтапМаксимальноеКоличествоЕдиницПартийИзделия.ТолькоПросмотр =
НЕ (Форма.ЭтапРазбиватьМаршрутныеЛисты И НЕ Форма.СпецификацияЗакрыта);
КонецЕсли;
Если СтруктураРеквизитов.Свойство("ОдновременноПроизводимоеКоличествоЕдиницПартийИзделий")
ИЛИ Инициализация Тогда
Элементы.ЭтапОдновременноПроизводимоеКоличествоЕдиницПартийИзделий.Подсказка =
УправлениеДаннымиОбИзделияхКлиентСервер.ПредставлениеЕдиницыИзмеренияПартииВыпуска(
Форма.ОписаниеПартииВыпуска,
Объект.ОдновременноПроизводимоеКоличествоЕдиницПартийИзделий);
КонецЕсли;
Если СтруктураРеквизитов.Свойство("ВариантПромежуточногоВыпуска")
ИЛИ Инициализация Тогда
Элементы.ПромежуточныйВыпуск.Видимость = ДоступенПромежуточныйВыпуск(Форма)
И Форма.Объект.ВариантПромежуточногоВыпуска = ПредопределенноеЗначение(
"Перечисление.ВариантыПромежуточногоВыпуска.НастраиваетсяВручную");
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСлужебныеРеквизитыУслугиПереработчика()
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ЗаполнитьПризнакХарактеристикиИспользуются", Новый Структура("Номенклатура", "ХарактеристикиИспользуются"));
НоменклатураСервер.ЗаполнитьСлужебныеРеквизитыПоНоменклатуреВКоллекции(
ПроизводственныйПроцессЭтап.УслугиПереработчика, СтруктураДействий);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьПодразделениеЭтаповЗавершение(Подразделение, ИдентификаторыСтрок) Экспорт
Если ЗначениеЗаполнено(Подразделение) Тогда
ЗаполнитьПодразделениеЭтаповЗавершениеНаСервере(Подразделение, ИдентификаторыСтрок);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПодразделениеЭтаповЗавершениеНаСервере(Подразделение, ИдентификаторыСтрок)
КэшЭлементов = ПроизводственныйПроцессПолучитьКэшЭлементов();
Для каждого ИдентификаторСтроки Из ИдентификаторыСтрок Цикл
Если ИдентификаторСтроки = Элементы.ПроизводственныйПроцесс.ТекущаяСтрока Тогда
ПроизводственныйПроцессЭтап.Подразделение = Подразделение;
ЭтапПодразделениеПриИзмененииНаСервере(Ложь);
Иначе
ДанныеСтроки = ПроизводственныйПроцесс.НайтиПоИдентификатору(ИдентификаторСтроки);
ДанныеСтроки.Подразделение = Подразделение;
КэшЭлемента = ПроизводственныйПроцессПолучитьКэшЭлемента(КэшЭлементов, ДанныеСтроки, Истина);
КэшЭлемента.Объект.Подразделение = Подразделение;
КэшЭлемента.Заполнен = Ложь;
КонецЕсли;
КонецЦикла;
ПроизводственныйПроцессСохранитьКэшЭлементов(КэшЭлементов);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область СпособыРаспределенияЗатрат
&НаСервере
Процедура ПриИзмененииСпособаРаспределенияЗатратНаВыходныеИзделия()
ПараметрыРаспределенияЗатратСтруктура = Справочники.РесурсныеСпецификации.ПараметрыРаспределенияЗатрат(Объект);
ПараметрыРаспределенияЗатрат = Новый ФиксированнаяСтруктура(ПараметрыРаспределенияЗатратСтруктура);
ПроизводствоСервер.РассчитатьДолюСтоимости(Объект, ПараметрыРаспределенияЗатрат);
РассчитатьПроцентРаспределенияЗатратНаВыходныеИзделия();
КонецПроцедуры
#КонецОбласти
#Область Основное
&НаКлиенте
Процедура УстановитьПериодДействияЗавершение(Период, Контекст = Неопределено) Экспорт
Если ТипЗнч(Период) <> Тип("СтандартныйПериод") Тогда
Возврат;
КонецЕсли;
Объект.НачалоДействия = Период.ДатаНачала;
Объект.КонецДействия = Период.ДатаОкончания;
Модифицированность = Истина;
ЗаполнитьПредставлениеСтатусаСпецификации();
КонецПроцедуры
#КонецОбласти
#Область ОсновноеИзделие
&НаКлиентеНаСервереБезКонтекста
Функция ИспользуетсяРежимРедактированияОсновногоИзделия(Форма)
Возврат Ложь;
КонецФункции
&НаСервере
Процедура ПрочитатьДанныеОсновногоИзделияСпецификации()
Если Не ИспользуетсяРежимРедактированияОсновногоИзделия(ЭтотОбъект) Тогда
Возврат;
КонецЕсли;
Если Объект.ТипПроизводственногоПроцесса = Перечисления.ТипыПроизводственныхПроцессов.Сборка
ИЛИ Объект.ТипПроизводственногоПроцесса = Перечисления.ТипыПроизводственныхПроцессов.Ремонт Тогда
СписокРеквизитов = СписокРеквизитовОсновноеВыходноеИзделие();
Если Объект.ВыходныеИзделия.Количество() <> 0 Тогда
Для каждого КлючЗначение Из СписокРеквизитов Цикл
ЭтотОбъект[КлючЗначение.Значение] = Объект.ВыходныеИзделия[0][КлючЗначение.Ключ];
КонецЦикла;
Иначе
Для каждого КлючЗначение Из СписокРеквизитов Цикл
ЭтотОбъект[КлючЗначение.Значение] = Неопределено;
КонецЦикла;
КонецЕсли;
Иначе
СписокРеквизитов = СписокРеквизитовОсновноеИзделиеСпецификации();
Для каждого КлючЗначение Из СписокРеквизитов Цикл
ЭтотОбъект[КлючЗначение.Значение] = Объект[КлючЗначение.Значение];
КонецЦикла;
КонецЕсли;
ОсновноеИзделиеТипНоменклатуры = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОсновноеИзделиеВидНоменклатуры, "ТипНоменклатуры");
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция СписокРеквизитовФормыОсновноеИзделиеСпецификации()
СтруктураВозврата = Новый Соответствие;
СтруктураВозврата.Вставить("ТипНоменклатуры", "ОсновноеИзделиеТипНоменклатуры");
СтруктураВозврата.Вставить("ВидНоменклатуры", "ОсновноеИзделиеВидНоменклатуры");
СтруктураВозврата.Вставить("Номенклатура", "ОсновноеИзделиеНоменклатура");
СтруктураВозврата.Вставить("НоменклатураЕстьСвойства", "ОсновноеИзделиеНоменклатураЕстьСвойства");
СтруктураВозврата.Вставить("ХарактеристикиИспользуются", "ОсновноеИзделиеХарактеристикиИспользуются");
СтруктураВозврата.Вставить("Характеристика", "ОсновноеИзделиеХарактеристика");
СтруктураВозврата.Вставить("ХарактеристикаЕстьСвойства", "ОсновноеИзделиеХарактеристикаЕстьСвойства");
СтруктураВозврата.Вставить("Упаковка", "ОсновноеИзделиеУпаковка");
СтруктураВозврата.Вставить("КоличествоУпаковок", "ОсновноеИзделиеКоличествоУпаковок");
СтруктураВозврата.Вставить("Количество", "ОсновноеИзделиеКоличество");
СтруктураВозврата.Вставить("ПроцентБрака", "ОсновноеИзделиеПроцентБрака");
Возврат СтруктураВозврата;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция СписокРеквизитовОсновноеВыходноеИзделие()
СтруктураВозврата = Новый Структура;
СтруктураВозврата.Вставить("ВидНоменклатуры", "ОсновноеИзделиеВидНоменклатуры");
СтруктураВозврата.Вставить("Номенклатура", "ОсновноеИзделиеНоменклатура");
СтруктураВозврата.Вставить("Характеристика", "ОсновноеИзделиеХарактеристика");
СтруктураВозврата.Вставить("Упаковка", "ОсновноеИзделиеУпаковка");
СтруктураВозврата.Вставить("КоличествоУпаковок", "ОсновноеИзделиеКоличествоУпаковок");
СтруктураВозврата.Вставить("Количество", "ОсновноеИзделиеКоличество");
СтруктураВозврата.Вставить("ПроцентБрака", "ОсновноеИзделиеПроцентБрака");
Возврат СтруктураВозврата;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция СписокРеквизитовОсновноеИзделиеСпецификации()
СтруктураВозврата = Новый Структура;
СтруктураВозврата.Вставить("ВидНоменклатуры", "ОсновноеИзделиеВидНоменклатуры");
СтруктураВозврата.Вставить("Номенклатура", "ОсновноеИзделиеНоменклатура");
СтруктураВозврата.Вставить("Характеристика", "ОсновноеИзделиеХарактеристика");
СтруктураВозврата.Вставить("Упаковка", "ОсновноеИзделиеУпаковка");
СтруктураВозврата.Вставить("КоличествоУпаковок", "ОсновноеИзделиеКоличествоУпаковок");
Возврат СтруктураВозврата;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Процедура ОбработатьИзменениеДанныхОсновногоИзделия(Форма, СтруктураСтроки = Неопределено)
СписокРеквизитов = СписокРеквизитовФормыОсновноеИзделиеСпецификации();
Если СтруктураСтроки <> Неопределено Тогда
Для каждого КлючИЗначение Из СтруктураСтроки Цикл
Форма[СписокРеквизитов.Получить(КлючИЗначение.Ключ)] = КлючИЗначение.Значение;
КонецЦикла;
КонецЕсли;
ЗаполнитьРеквизитыОбъектаПоДаннымОсновногоИзделия(Форма);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ЗаполнитьРеквизитыОбъектаПоДаннымОсновногоИзделия(Форма)
Объект = Форма.Объект;
ЭтоСборка = (Объект.ТипПроизводственногоПроцесса = ПредопределенноеЗначение("Перечисление.ТипыПроизводственныхПроцессов.Сборка"));
ЭтоРемонт = (Объект.ТипПроизводственногоПроцесса = ПредопределенноеЗначение("Перечисление.ТипыПроизводственныхПроцессов.Ремонт"));
ИмяТЧ = "ВыходныеИзделия";
Если (ЭтоСборка ИЛИ ЭтоРемонт) Тогда
СписокРеквизитов = СписокРеквизитовОсновноеВыходноеИзделие();
Если Объект[ИмяТЧ].Количество() <> 0 Тогда
ДанныеСтроки = Объект[ИмяТЧ][0];
Иначе
ДанныеСтроки = Объект[ИмяТЧ].Добавить();
ПриВводеНовойСтрокиСпецификации(Форма, ИмяТЧ, ДанныеСтроки);
КонецЕсли;
Для каждого КлючЗначение Из СписокРеквизитов Цикл
ДанныеСтроки[КлючЗначение.Ключ] = Форма[КлючЗначение.Значение];
КонецЦикла;
КонецЕсли;
СписокРеквизитов = СписокРеквизитовОсновноеИзделиеСпецификации();
Для каждого КлючЗначение Из СписокРеквизитов Цикл
Объект[КлючЗначение.Значение] = Форма[КлючЗначение.Значение];
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ОбновитьИнформациюПоОсновномуИзделиюСпецификации()
Если Не ИспользуетсяРежимРедактированияОсновногоИзделия(ЭтотОбъект) Тогда
Возврат;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПроверитьЗаполнениеОсновногоИзделия()
ЕстьОшибки = Ложь;
Если ИспользуетсяРежимРедактированияОсновногоИзделия(ЭтотОбъект) Тогда
ВариантНазначенияВидНоменклатуры =
(Объект.ВариантНазначения = Перечисления.ВариантыНазначенияСпецификации.ВидНоменклатуры);
Если НЕ ЗначениеЗаполнено(ОсновноеИзделиеНоменклатура)
И НЕ ВариантНазначенияВидНоменклатуры Тогда
ТекстСообщения = ОбщегоНазначенияКлиентСервер.ТекстОшибкиЗаполнения("Поле", "Заполнение", НСтр("ru='Номенклатура'"));
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения,, "ОсновноеИзделиеНоменклатура",, ЕстьОшибки);
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ОсновноеИзделиеВидНоменклатуры)
И ВариантНазначенияВидНоменклатуры Тогда
ТекстСообщения = ОбщегоНазначенияКлиентСервер.ТекстОшибкиЗаполнения("Поле", "Заполнение", НСтр("ru='Вид номенклатуры'"));
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения,, "ОсновноеИзделиеВидНоменклатуры",, ЕстьОшибки);
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ОсновноеИзделиеКоличествоУпаковок) Тогда
ТекстСообщения = ОбщегоНазначенияКлиентСервер.ТекстОшибкиЗаполнения("Поле", "Заполнение", НСтр("ru='Количество'"));
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения,, "ОсновноеИзделиеКоличествоУпаковок",, ЕстьОшибки);
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ОсновноеИзделиеУпаковка)
И ВариантНазначенияВидНоменклатуры Тогда
ТекстСообщения = ОбщегоНазначенияКлиентСервер.ТекстОшибкиЗаполнения("Поле", "Заполнение", НСтр("ru='Единица измерения'"));
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения,, "ОсновноеИзделиеУпаковка",, ЕстьОшибки);
КонецЕсли;
КонецЕсли;
Возврат НЕ ЕстьОшибки;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьДанныеОсновногоИзделияСпецификацииПриСборке(Форма)
Объект = Форма.Объект;
Если Объект.ТипПроизводственногоПроцесса <> ПредопределенноеЗначение("Перечисление.ТипыПроизводственныхПроцессов.Сборка") Тогда
Возврат;
КонецЕсли;
ЕстьОсновноеИзделие = (Объект.ВыходныеИзделия.Количество() > 0);
СписокРеквизитов = СписокРеквизитовОсновноеИзделиеСпецификации();
Для каждого КлючЗначение Из СписокРеквизитов Цикл
Объект[КлючЗначение.Значение] = ?(ЕстьОсновноеИзделие, Объект.ВыходныеИзделия[0][КлючЗначение.Ключ], Неопределено);
КонецЦикла;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ЭтоТехнологическийНабор(Форма)
Результат = Ложь;
Возврат Результат;
КонецФункции
#КонецОбласти
#Область Продукция
&НаСервере
Процедура ПродукцияНоменклатураПриИзмененииНаСервере(ТекущаяСтрока, КэшированныеЗначения)
ТекущиеДанные = Объект.ВыходныеИзделия.НайтиПоИдентификатору(ТекущаяСтрока);
УправлениеДаннымиОбИзделияхКлиентСервер.ПриИзмененииНоменклатурыВСтрокеСАвтовыбором(
ТекущиеДанные,
Объект);
УправлениеДаннымиОбИзделияхКлиентСервер.ПриИзмененииХарактеристикиВСтрокеСАвтовыбором(
ТекущиеДанные,
Объект);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПроверитьХарактеристикуПоВладельцу", ТекущиеДанные.Характеристика);
СтруктураДействий.Вставить("ПроверитьЗаполнитьУпаковкуПоВладельцу", ТекущиеДанные.Упаковка);
СтруктураДействий.Вставить("ПроверитьЗаполнитьДолюСтоимости", ПараметрыРаспределенияЗатрат);
СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц", Новый Структура("НужноОкруглять", Ложь));
СтруктураДействий.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
СтруктураДействий.Вставить("ЗаполнитьПризнакСерииИспользуются", Новый Структура("Номенклатура", "СерииИспользуются"));
СтруктураДействий.Вставить("ЗаполнитьПризнакВидНоменклатуры", Новый Структура("Номенклатура", "ВидНоменклатуры"));
СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры"));
СтруктураДействий.Вставить("НоменклатураПриИзмененииПереопределяемый", Новый Структура("ИмяФормы, ИмяТабличнойЧасти",
ИмяФормы, "ВыходныеИзделия"));
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧ(ТекущиеДанные, СтруктураДействий, КэшированныеЗначения);
ОбновитьФлагТребуетсяУказыватьСерии(
"ВыходныеИзделия",
ТекущиеДанные.Номенклатура,
ТекущиеДанные.ТребуетсяУказыватьСерии,
ЭтотОбъект);
РеквизитОписанияПартииВыпускаПриИзменении();
КонецПроцедуры
&НаСервере
Процедура ПродукцияХарактеристикаПриИзмененииНаСервере(ТекущаяСтрока, КэшированныеЗначения)
ТекущиеДанные = Объект.ВыходныеИзделия.НайтиПоИдентификатору(ТекущаяСтрока);
УправлениеДаннымиОбИзделияхКлиентСервер.ПриИзмененииХарактеристикиВСтрокеСАвтовыбором(ТекущиеДанные, Объект);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПроверитьЗаполнитьДолюСтоимости", ПараметрыРаспределенияЗатрат);
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧ(ТекущиеДанные, СтруктураДействий, КэшированныеЗначения);
РеквизитОписанияПартииВыпускаПриИзменении();
КонецПроцедуры
&НаСервере
Процедура ПродукцияУпаковкаКоличествоУпаковокПриИзмененииНаСервере(ТекущаяСтрока, КэшированныеЗначения)
ТекущиеДанные = Объект.ВыходныеИзделия.НайтиПоИдентификатору(ТекущаяСтрока);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц", Новый Структура("НужноОкруглять", Ложь));
СтруктураДействий.Вставить("ПересчитатьДолюСтоимости", ПараметрыРаспределенияЗатрат);
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧ(ТекущиеДанные, СтруктураДействий, КэшированныеЗначения);
РеквизитОписанияПартииВыпускаПриИзменении();
КонецПроцедуры
&НаСервере
Процедура ПродукцияТребуетсяУказыватьСерииПриИзмененииНаСервере(Идентификатор)
ТекущиеДанные = Объект.ВыходныеИзделия.НайтиПоИдентификатору(Идентификатор);
ОбновитьФлагТребуетсяУказыватьСерии(
"ВыходныеИзделия",
ТекущиеДанные.Номенклатура,
ТекущиеДанные.ТребуетсяУказыватьСерии,
ЭтотОбъект);
КонецПроцедуры
#КонецОбласти
#Область ВыходныеИзделия
&НаКлиенте
Процедура ПриИзмененииНоменклатурыВСтрокеВыходныхИзделий(ТекущиеДанные)
УправлениеДаннымиОбИзделияхКлиентСервер.ПриИзмененииНоменклатурыВСтрокеСАвтовыбором(ТекущиеДанные, Объект);
УправлениеДаннымиОбИзделияхКлиентСервер.ПриИзмененииХарактеристикиВСтрокеСАвтовыбором(ТекущиеДанные, Объект);
ОчиститьНастройкуОбработатьПоСпецификации(ТекущиеДанные);
КонецПроцедуры
#КонецОбласти
#Область МатериалыИУслуги
&НаСервере
Процедура МатериалыИУслугиТребуетсяУказыватьСерииПриИзмененииНаСервере()
ТекущаяСтрока = Элементы.МатериалыИУслуги.ТекущаяСтрока;
ТекущиеДанные = Объект.МатериалыИУслуги.НайтиПоИдентификатору(ТекущаяСтрока);
ОбновитьФлагТребуетсяУказыватьСерии(
"МатериалыИУслуги",
ТекущиеДанные.Номенклатура,
ТекущиеДанные.ТребуетсяУказыватьСерии,
ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура РазбитьСтрокуЗавершение(НоваяСтрока, ДополнительныеПараметры) Экспорт
Если НоваяСтрока <> Неопределено Тогда
ИмяТЧ = "МатериалыИУслуги";
ПриВводеНовойСтрокиСпецификации(ЭтотОбъект, ИмяТЧ, НоваяСтрока, Истина);
КонецЕсли;
КонецПроцедуры
#Область СпособПолученияМатериала
&НаКлиентеНаСервереБезКонтекста
Процедура ЗаполнитьПредставлениеСпособаПолученияМатериала(Строка, Форма)
Если НЕ Форма.Элементы.МатериалыИУслугиСпособПолученияМатериалаРедактирование.Видимость Тогда
Возврат;
КонецЕсли;
Результат = "";
Строка.СпособПолученияМатериалаРедактирование = Результат;
КонецПроцедуры
#КонецОбласти
#Область СтатьяКалькуляции
&НаКлиентеНаСервереБезКонтекста
Процедура ЗаполнитьСтатьюКалькуляцииПоУмолчанию(ДанныеСтроки)
Если УправлениеДаннымиОбИзделияхКлиентСервер.ПолуфабрикатПроизводимыйВПроцессе(ДанныеСтроки) Тогда
ДанныеСтроки.СтатьяКалькуляции = ПредопределенноеЗначение("Справочник.СтатьиКалькуляции.ПолуфабрикатыПроизводимыеВПроцессе");
Иначе
ДанныеСтроки.СтатьяКалькуляции = ПредопределенноеЗначение("Справочник.СтатьиКалькуляции.ПустаяСсылка");
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ПроверитьЗаполнитьСтатьюКалькуляцииПоУмолчанию(ДанныеСтроки)
Если (ДанныеСтроки.СтатьяКалькуляции <> ПредопределенноеЗначение("Справочник.СтатьиКалькуляции.ПолуфабрикатыПроизводимыеВПроцессе")
И УправлениеДаннымиОбИзделияхКлиентСервер.ПолуфабрикатПроизводимыйВПроцессе(ДанныеСтроки)
ИЛИ ДанныеСтроки.СтатьяКалькуляции = ПредопределенноеЗначение("Справочник.СтатьиКалькуляции.ПолуфабрикатыПроизводимыеВПроцессе")
И НЕ УправлениеДаннымиОбИзделияхКлиентСервер.ПолуфабрикатПроизводимыйВПроцессе(ДанныеСтроки))
Тогда
ЗаполнитьСтатьюКалькуляцииПоУмолчанию(ДанныеСтроки);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область Прочее
&НаКлиентеНаСервереБезКонтекста
Процедура ПриВводеНовойСтрокиСпецификации(Форма, ИмяТЧ, СтрокаТабличнойЧасти, Копирование = Ложь)
КлючСвязиИсточника = ?(Копирование, СтрокаТабличнойЧасти.КлючСвязи, Неопределено);
СтрокаТабличнойЧасти.КлючСвязи = Новый УникальныйИдентификатор;
Если ИмяТЧ <> "Трудозатраты" Тогда
УправлениеДаннымиОбИзделияхКлиентСервер.ПриВводеНовойСтрокиСАвтовыбором(
СтрокаТабличнойЧасти,
КлючСвязиИсточника,
Форма.Объект.СоответствиеСвойств);
КонецЕсли;
УправлениеДаннымиОбИзделияхКлиентСервер.ПриВводеНовойСтрокиСОтборомПоСвойствам(
СтрокаТабличнойЧасти,
КлючСвязиИсточника,
Форма.Объект.ОтборПоСвойствам);
Если ИмяТЧ = "МатериалыИУслуги" Тогда
ЗаполнитьЗначенияСвойств(СтрокаТабличнойЧасти, Форма.ДанныеПервогоЭтапа, "ЭтоПервыйЭтап,ПроизводствоНаСтороне");
УправлениеДаннымиОбИзделияхКлиентСервер.ЗаполнитьСпособПолученияМатериалаПоУмолчанию(СтрокаТабличнойЧасти);
ПроверитьЗаполнитьСтатьюКалькуляцииПоУмолчанию(СтрокаТабличнойЧасти);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриИзмененииНоменклатурыВСтрокеМатериалов(ТекущиеДанные)
УправлениеДаннымиОбИзделияхКлиентСервер.ПриИзмененииНоменклатурыВСтрокеСАвтовыбором(
ТекущиеДанные,
Объект);
УправлениеДаннымиОбИзделияхКлиентСервер.ПриИзмененииХарактеристикиВСтрокеСАвтовыбором(
ТекущиеДанные,
Объект);
УправлениеДаннымиОбИзделияхКлиентСервер.ЗаполнитьСпособПолученияМатериалаПоУмолчанию(ТекущиеДанные);
ЗаполнитьПризнакОбособленноВСтрокеМатериалов(ТекущиеДанные);
ЗаполнитьПризнакПроизвестиВСтрокеМатериалов(ЭтотОбъект, ТекущиеДанные);
ПроверитьЗаполнитьСтатьюКалькуляцииПоУмолчанию(ТекущиеДанные);
ОбновитьФлагТребуетсяУказыватьСерии(
"МатериалыИУслуги",
ТекущиеДанные.Номенклатура,
ТекущиеДанные.ТребуетсяУказыватьСерии,
ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ОбработатьИзменениеЭтапаМатериалыИУслуги(Идентификаторы)
ЗаполнитьСлужебныеРеквизитыМатериалыИУслуги(Идентификаторы);
Для каждого Идентификатор Из Идентификаторы Цикл
Строка = Объект.МатериалыИУслуги.НайтиПоИдентификатору(Идентификатор);
Если Не Строка.ПроизводитсяВПроцессе Тогда
Продолжить;
КонецЕсли;
Если Строка.ЭтоПервыйЭтап И Строка.СпособПолученияМатериала = ПредопределенноеЗначение("Перечисление.СпособыПолученияМатериаловВСпецификации.ПроизводитсяНаЭтапе")
ИЛИ Строка.ЭтоПервыйЭтап И ЗначениеЗаполнено(Строка.ПланироватьНеРанее)
ИЛИ Строка.ПроизводствоНаСтороне И Не ИспользуетсяПроизводство22 Тогда
УправлениеДаннымиОбИзделияхКлиентСервер.ЗаполнитьСпособПолученияМатериалаПоУмолчанию(Строка);
ЗаполнитьПризнакОбособленноВСтрокеМатериалов(Строка);
ЗаполнитьСтатьюКалькуляцииПоУмолчанию(Строка);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ЗаполнитьПризнакОбособленноВСтрокеМатериалов(ДанныеСтроки, Сбросить = Истина)
Если ДанныеСтроки.СпособПолученияМатериала = ПредопределенноеЗначение("Перечисление.СпособыПолученияМатериаловВСпецификации.ПроизводитсяНаЭтапе") Тогда
ДанныеСтроки.Обособленно = Истина;
ИначеЕсли ДанныеСтроки.ТипНоменклатуры = ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.МногооборотнаяТара") Тогда
ДанныеСтроки.Обособленно = Ложь;
ИначеЕсли Сбросить Тогда
ДанныеСтроки.Обособленно = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ЗаполнитьПризнакПроизвестиВСтрокеМатериалов(Форма, ДанныеСтроки)
Произвести = Ложь;
Если ДанныеСтроки.СпособПолученияМатериала = ПредопределенноеЗначение("Перечисление.СпособыПолученияМатериаловВСпецификации.ПроизвестиПоСпецификации") Тогда
Произвести = Истина;
КонецЕсли;
Если ДанныеСтроки.ТипНоменклатуры = ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.Набор")
И (Форма.ИсточникСоставаНаборовВПроизводстве = ПредопределенноеЗначение("Перечисление.ИсточникиСоставаНаборовВПроизводстве.Спецификации")
ИЛИ Форма.ИсточникСоставаНаборовВПроизводстве = ПредопределенноеЗначение("Перечисление.ИсточникиСоставаНаборовВПроизводстве.СпецификацииИлиВариантыКомплектации")
ИЛИ ЗначениеЗаполнено(ДанныеСтроки.ИсточникПолученияПолуфабриката)) Тогда
Произвести = Истина;
КонецЕсли;
ДанныеСтроки.Произвести = Произвести;
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область ИнформационнаяПанель
&НаКлиентеНаСервереБезКонтекста
Процедура СброситьИнформационнуюПанель(Форма)
Форма.ИнформационнаяСтрока = Неопределено;
Форма.Элементы.ИнформационнаяПанельСтраницы.ТекущаяСтраница = Форма.Элементы.ИнформационнаяПанельСтраницаСкрыть;
Если Форма.Объект.Статус <> ПредопределенноеЗначение("Перечисление.СтатусыСпецификаций.Действует") Тогда
Возврат;
КонецЕсли;
Если Форма.Объект.ВариантПодбораВДокументы <> ПредопределенноеЗначение("Перечисление.ВариантыПодбораСпецификацииВДокументы.Автоматически") Тогда
Форма.ИнформационнаяСтрока = Новый ФорматированнаяСтрока(
НСтр("ru = 'Спецификация исключена из автоматического выбора в документы.'"),,
WebЦвета.Кирпичный);
Форма.Элементы.ИнформационнаяПанельСтраницы.ТекущаяСтраница = Форма.Элементы.ИнформационнаяПанельСтраницаОтобразить;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НачатьОбновлениеИнформационнойПанелиКлиент()
СброситьИнформационнуюПанель(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура НачатьОбновлениеИнформационнойПанели()
СброситьИнформационнуюПанель(ЭтотОбъект);
КонецПроцедуры
#КонецОбласти
#Область ЗагрузкаДанныхИзФайла
&НаКлиенте
Процедура ПоказатьФормуЗагрузкиИзФайла(ДополнительныеПараметры)
ПолноеИмяТабличнойЧасти = "РесурсныеСпецификации.%1";
ПолноеИмяТабличнойЧасти = СтрШаблон(ПолноеИмяТабличнойЧасти, ДополнительныеПараметры.ИмяТЧ);
ЗаголовокФормыЗагрузки = НСтр("ru = 'Загрузка таблицы ""%1"" из файла'");
ЗаголовокФормыЗагрузки = СтрШаблон(ЗаголовокФормыЗагрузки, ДополнительныеПараметры.СинонимТЧ);
ПараметрыЗагрузки = ЗагрузкаДанныхИзФайлаКлиент.ПараметрыЗагрузкиДанных();
ПараметрыЗагрузки.ПолноеИмяТабличнойЧасти = ПолноеИмяТабличнойЧасти;
ПараметрыЗагрузки.Заголовок = ЗаголовокФормыЗагрузки;
ПараметрыЗагрузки.ДополнительныеПараметры = ДополнительныеПараметры;
Если ДополнительныеПараметры.ИмяТЧ = "Трудозатраты" Тогда
ПараметрыЗагрузки.КолонкиМакета = ОписаниеКолонокМакетаДляЗагрузкиТрудозатрат();
Иначе
ПараметрыЗагрузки.КолонкиМакета = ОписаниеКолонокМакетаДляЗагрузкиНоменклатуры(ДополнительныеПараметры.ИмяТЧ);
КонецЕсли;
Оповещение = Новый ОписаниеОповещения("ПоказатьФормуЗагрузкиИзФайлаЗавершение", ЭтотОбъект, ДополнительныеПараметры);
ЗагрузкаДанныхИзФайлаКлиент.ПоказатьФормуЗагрузки(ПараметрыЗагрузки, Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ПоказатьФормуЗагрузкиИзФайлаЗавершение(АдресЗагруженныхДанных, ДополнительныеПараметры) Экспорт
Если АдресЗагруженныхДанных = Неопределено Тогда
Возврат;
КонецЕсли;
ЗагрузитьИзФайлаНаСервере(АдресЗагруженныхДанных, ДополнительныеПараметры);
КонецПроцедуры
&НаКлиенте
Функция ОписаниеКолонокМакетаДляЗагрузкиНоменклатуры(ИмяТЧ);
КолонкиМакета = Новый Массив;
Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("Штрихкод", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(200)), НСтр("ru = 'Штрихкод'"), 10);
Колонка.Позиция = 1;
Колонка.Родитель = "Номенклатура";
КолонкиМакета.Добавить(Колонка);
Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("Артикул", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(50)), НСтр("ru = 'Артикул'"), 10);
Колонка.Позиция = 2;
Колонка.Родитель = "Номенклатура";
КолонкиМакета.Добавить(Колонка);
Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("КодНоменклатуры", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(11)), НСтр("ru = 'Код номенклатуры'"), 15);
Колонка.Позиция = 3;
Колонка.Родитель = "Номенклатура";
КолонкиМакета.Добавить(Колонка);
Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("Номенклатура", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(150)), НСтр("ru = 'Номенклатура'"), 15);
Колонка.Позиция = 4;
КолонкиМакета.Добавить(Колонка);
Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("Характеристика", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(150)), НСтр("ru = 'Характеристика'"), 15);
Колонка.Позиция = 5;
КолонкиМакета.Добавить(Колонка);
Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("КоличествоУпаковок", Новый ОписаниеТипов("Число",, Новый КвалификаторыЧисла(15, 3)), НСтр("ru = 'Количество'"), 10);
Колонка.Позиция = 6;
КолонкиМакета.Добавить(Колонка);
Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("КодУпаковки", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(4)), НСтр("ru = 'Код упаковки'"), 12);
Колонка.Позиция = 7;
Колонка.Родитель = "Упаковка";
КолонкиМакета.Добавить(Колонка);
Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("Упаковка", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(50)), НСтр("ru = 'Упаковка'"), 10);
Колонка.Позиция = 8;
КолонкиМакета.Добавить(Колонка);
Позиция = 8;
Если Объект.МногоэтапныйПроизводственныйПроцесс Тогда
Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("НомерЭтапа", Новый ОписаниеТипов("Число",, Новый КвалификаторыЧисла(5, 0)), НСтр("ru = 'Номер этапа'"), 10);
Колонка.Позиция = Позиция + 1;
Колонка.Родитель = "Этап";
КолонкиМакета.Добавить(Колонка);
Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("Этап", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(150)), НСтр("ru = 'Этап'"), 15);
Колонка.Позиция = Позиция + 2;
КолонкиМакета.Добавить(Колонка);
Позиция = Позиция + 2;
КонецЕсли;
Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("СтатьяКалькуляции", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(150)), НСтр("ru = 'Статья калькуляции'"), 17);
Колонка.Позиция = Позиция + 1;
КолонкиМакета.Добавить(Колонка);
Позиция = Позиция + 1;
Если ИмяТЧ = "МатериалыИУслуги" Тогда
Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("ПрименениеМатериала", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(0)), НСтр("ru = 'Применение материала'"), 20);
Колонка.Позиция = Позиция + 1;
КолонкиМакета.Добавить(Колонка);
Иначе
Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("ОписаниеИзделия", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(0)), НСтр("ru = 'Описание изделия'"), 20);
Колонка.Позиция = Позиция + 1;
КолонкиМакета.Добавить(Колонка);
КонецЕсли;
Возврат КолонкиМакета;
КонецФункции
&НаКлиенте
Функция ОписаниеКолонокМакетаДляЗагрузкиТрудозатрат();
КолонкиМакета = Новый Массив;
Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("КодВидаРабот", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(11)), НСтр("ru = 'Код вида работ'"), 15);
Колонка.Позиция = 1;
Колонка.Родитель = "ВидРабот";
КолонкиМакета.Добавить(Колонка);
Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("ВидРабот", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(150)), НСтр("ru = 'Вид работ'"), 15);
Колонка.Позиция = 2;
КолонкиМакета.Добавить(Колонка);
Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("Количество", Новый ОписаниеТипов("Число",, Новый КвалификаторыЧисла(15, 3)), НСтр("ru = 'Количество'"), 10);
Колонка.Позиция = 3;
КолонкиМакета.Добавить(Колонка);
Позиция = 3;
Если Объект.МногоэтапныйПроизводственныйПроцесс Тогда
Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("НомерЭтапа", Новый ОписаниеТипов("Число",, Новый КвалификаторыЧисла(5, 0)), НСтр("ru = 'Номер этапа'"), 10);
Колонка.Позиция = Позиция + 1;
Колонка.Родитель = "Этап";
КолонкиМакета.Добавить(Колонка);
Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("Этап", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(150)), НСтр("ru = 'Этап'"), 15);
Колонка.Позиция = Позиция + 2;
КолонкиМакета.Добавить(Колонка);
Позиция = Позиция + 2;
КонецЕсли;
Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("СтатьяКалькуляции", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(150)), НСтр("ru = 'Статья калькуляции'"), 17);
Колонка.Позиция = Позиция + 1;
КолонкиМакета.Добавить(Колонка);
Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("НазначениеРабот", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(0)), НСтр("ru = 'Назначение работ'"), 20);
Колонка.Позиция = Позиция + 2;
КолонкиМакета.Добавить(Колонка);
Возврат КолонкиМакета;
КонецФункции
&НаСервере
Процедура ЗагрузитьИзФайлаНаСервере(АдресЗагруженныхДанных, ДополнительныеПараметры)
ЗагруженныеДанные = ПолучитьИзВременногоХранилища(АдресЗагруженныхДанных);
ИмяТЧ = ДополнительныеПараметры.ИмяТЧ;
ТабличнаяЧасть = Объект[ИмяТЧ];
ТабличнаяЧасть.Очистить();
Для Каждого Строка Из ЗагруженныеДанные Цикл
НоваяСтрока = ТабличнаяЧасть.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
НоваяСтрока.ЭтапРедактированиеПредставление = Строка.Этап;
НоваяСтрока.ЭтапРедактирование = Строка.Этап;
НоваяСтрока.ЭлементПроизводственногоПроцессаПредставление = ПредставлениеЭлементаПроизводтвенногоПроцесса(ЭтотОбъект, НоваяСтрока);
ПриВводеНовойСтрокиСпецификации(ЭтотОбъект, ИмяТЧ, НоваяСтрока);
КонецЦикла;
ЗаполнитьСлужебныеРеквизиты();
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьИзФайла(ИмяТЧ, СинонимТЧ)
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ИмяТЧ", ИмяТЧ);
ДополнительныеПараметры.Вставить("СинонимТЧ", СинонимТЧ);
ДополнительныеПараметры.Вставить("РесурснаяСпецификация", Объект.Ссылка);
ДополнительныеПараметры.Вставить("ИспользуютсяЭтапы", Объект.МногоэтапныйПроизводственныйПроцесс);
ДополнительныеПараметры.Вставить("АдресЭлементовПроизводственногоПроцесса", ТаблицаЭлементовПроизводственногоПроцессаВХранилище());
МассивТиповНоменклатуры = УправлениеДаннымиОбИзделияхКлиентСервер.МассивДоступныхТиповНоменклатуры(ЭтотОбъект, ИмяТЧ);
ДоступныеТипыНоменклатуры = Новый ФиксированныйМассив(МассивТиповНоменклатуры);
ДополнительныеПараметры.Вставить("ДоступныеТипыНоменклатуры", ДоступныеТипыНоменклатуры);
Если Не Объект[ИмяТЧ].Количество() = 0 Тогда
ТекстВопроса = НСтр("ru = 'Таблица %1 будет перезаполнена. Продолжить?'");
ТекстВопроса = СтрШаблон(ТекстВопроса, СинонимТЧ);
Оповещение = Новый ОписаниеОповещения("ЗагрузитьИзФайлаЗавершение", ЭтотОбъект, ДополнительныеПараметры);
ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
Иначе
ПоказатьФормуЗагрузкиИзФайла(ДополнительныеПараметры);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьИзФайлаЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Не Результат = КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;
ПоказатьФормуЗагрузкиИзФайла(ДополнительныеПараметры);
КонецПроцедуры
#КонецОбласти
#Область Прочее
&НаСервере
Процедура ПриЧтенииСозданииНаСервере()
НачатьЗаполнениеПроизводственногоПроцесса();
НачатьОбновлениеИнформационнойПанели();
СтатусДействующейСпецификации = Перечисления.СтатусыСпецификаций.Действует;
СтатусСпецификацииВРазработке = Перечисления.СтатусыСпецификаций.ВРазработке;
ИспользоватьПараметризациюРесурсныхСпецификаций =
ПолучитьФункциональнуюОпцию("ИспользоватьПараметризациюРесурсныхСпецификаций");
ХранитьОперацииВРесурсныхСпецификациях = ПолучитьФункциональнуюОпцию("ХранитьОперацииВРесурсныхСпецификациях");
ИспользоватьМаршрутныеКарты = ПолучитьФункциональнуюОпцию("ИспользоватьМаршрутныеКарты");
ИспользоватьКачествоТоваров = ПолучитьФункциональнуюОпцию("ИспользоватьКачествоТоваров");
ПрочитатьДанныеОсновногоИзделияСпецификации();
ПараметрыВыбораСпецификаций = УправлениеДаннымиОбИзделиях.ПараметрыВыбораСпецификаций(Объект, Справочники.РесурсныеСпецификации);
Массив = Новый Массив;
Массив.Добавить(Элементы.ВыходныеИзделияСпецификация);
Массив.Добавить(Элементы.ВозвратныеОтходыСпецификация);
УправлениеДаннымиОбИзделияхКлиентСервер.УстановитьПараметрыВыбораСпецификаций(Массив, ПараметрыВыбораСпецификаций.Разборка);
УправлениеДаннымиОбИзделияхКлиентСервер.УстановитьПараметрыВыбораСпецификаций(Элементы.МатериалыИУслугиИсточникПолученияПолуфабриката, ПараметрыВыбораСпецификаций.Сборка);
УстановитьПараметрыВыбораОтветственногоПодразделения();
ПараметрыРаспределенияЗатрат = Новый ФиксированнаяСтруктура(Справочники.РесурсныеСпецификации.ПараметрыРаспределенияЗатрат(Объект));
РаботаСТабличнымиЧастями.ИнициализироватьКэшСтрок(Элементы.Продукция);
РаботаСТабличнымиЧастями.ИнициализироватьКэшСтрок(Элементы.ВыходныеИзделия);
ЗаполнитьСлужебныеРеквизиты();
НастроитьЭлементыФормы();
КонецПроцедуры
&НаСервере
Процедура УстановитьУсловноеОформление()
УсловноеОформление.Элементы.Очистить();
#Область СтандартноеОформление
ПараметрыУсловногоОформления = НоменклатураСервер.НовыеПараметрыУсловногоОформленияЕдиницИзмерения();
ПараметрыУсловногоОформления.ИмяПоляЕдиницаИзмерения = "ПродукцияНоменклатураЕдиницаИзмерения";
ПараметрыУсловногоОформления.ПутьКПолюУпаковка = "Объект.ВыходныеИзделия.Упаковка";
НоменклатураСервер.УстановитьУсловноеОформлениеЕдиницИзмерения(ЭтотОбъект, ПараметрыУсловногоОформления);
ПараметрыУсловногоОформления = НоменклатураСервер.НовыеПараметрыУсловногоОформленияЕдиницИзмерения();
ПараметрыУсловногоОформления.ИмяПоляЕдиницаИзмерения = "ВыходныеИзделияНоменклатураЕдиницаИзмерения";
ПараметрыУсловногоОформления.ПутьКПолюУпаковка = "Объект.ВыходныеИзделия.Упаковка";
НоменклатураСервер.УстановитьУсловноеОформлениеЕдиницИзмерения(ЭтотОбъект, ПараметрыУсловногоОформления);
ПараметрыУсловногоОформления = НоменклатураСервер.НовыеПараметрыУсловногоОформленияЕдиницИзмерения();
ПараметрыУсловногоОформления.ИмяПоляЕдиницаИзмерения = "ВозвратныеОтходыНоменклатураЕдиницаИзмерения";
ПараметрыУсловногоОформления.ПутьКПолюУпаковка = "Объект.ВозвратныеОтходы.Упаковка";
НоменклатураСервер.УстановитьУсловноеОформлениеЕдиницИзмерения(ЭтотОбъект, ПараметрыУсловногоОформления);
ПараметрыУсловногоОформления = НоменклатураСервер.НовыеПараметрыУсловногоОформленияЕдиницИзмерения();
ПараметрыУсловногоОформления.ИмяПоляЕдиницаИзмерения = "МатериалыИУслугиНоменклатураЕдиницаИзмерения";
ПараметрыУсловногоОформления.ПутьКПолюУпаковка = "Объект.МатериалыИУслуги.Упаковка";
НоменклатураСервер.УстановитьУсловноеОформлениеЕдиницИзмерения(ЭтотОбъект, ПараметрыУсловногоОформления);
УстановитьУсловноеОформлениеТабличныхЧастейСАвтовыбором();
#КонецОбласти
#Область ЖирнымПерваяСтрока
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Продукция.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ВыходныеИзделия.НомерСтроки");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = 1;
Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", ШрифтыСтиля.ВажнаяНадписьШрифт);
#КонецОбласти
#Область ТолькоПросмотрПриНепрочитанномПроизводственномПроцессе
НазванияЭлементовРедактирования = НазванияЭлементовРедактирования();
Для каждого ИмяТЧ Из СтрРазделить("Продукция,ВыходныеИзделия,ВозвратныеОтходы,МатериалыИУслуги,Трудозатраты",",") Цикл
Элемент = УсловноеОформление.Элементы.Добавить();
Элемент.Поля.Элементы.Добавить().Поле = Новый ПолеКомпоновкиДанных(Элементы[НазванияЭлементовРедактирования[ИмяТЧ]].Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПроизводственныйПроцессПрочитан");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
КонецЦикла;
#КонецОбласти
#Область ОформлениеЭлементовПроизводственногоПроцесса
СтруктураЭлементов = Новый Соответствие();
СтруктураЭлементов.Вставить("ПродукцияЭлементПроизводственногоПроцесса", "ВыходныеИзделия");
СтруктураЭлементов.Вставить("ВыходныеИзделияЭлементПроизводственногоПроцесса", "ВыходныеИзделия");
СтруктураЭлементов.Вставить("ВозвратныеОтходыЭлементПроизводственногоПроцесса", "ВозвратныеОтходы");
Для каждого КлючИЗначение Из СтруктураЭлементов Цикл
Элемент = УсловноеОформление.Элементы.Добавить();
Элемент.Поля.Элементы.Добавить().Поле = Новый ПолеКомпоновкиДанных(Элементы[КлючИЗначение.Ключ].Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(СтрШаблон("Объект.%1.ЭтапРедактирование", КлючИЗначение.Значение));
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
ГруппаИЛИ = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаИЛИ.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
ОтборЭлемента = ГруппаИЛИ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НесколькоПоследнихЭтапов");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
ОтборЭлемента = ГруппаИЛИ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ТипПроизводственногоПроцесса");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
ОтборЭлемента.ПравоеЗначение = Перечисления.ТипыПроизводственныхПроцессов.Разборка;
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<последний этап>'"));
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ПоясняющийТекст);
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
КонецЦикла;
СтруктураЭлементов = Новый Соответствие();
СтруктураЭлементов.Вставить("МатериалыИУслугиЭлементПроизводственногоПроцесса", "МатериалыИУслуги");
СтруктураЭлементов.Вставить("ТрудозатратыЭлементПроизводственногоПроцесса", "Трудозатраты");
Для каждого КлючИЗначение Из СтруктураЭлементов Цикл
Элемент = УсловноеОформление.Элементы.Добавить();
Элемент.Поля.Элементы.Добавить().Поле = Новый ПолеКомпоновкиДанных(Элементы[КлючИЗначение.Ключ].Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(СтрШаблон("Объект.%1.ЭтапРедактирование", КлючИЗначение.Значение));
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
ГруппаИЛИ = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаИЛИ.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
ОтборЭлемента = ГруппаИЛИ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НесколькоПервыхЭтапов");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
ОтборЭлемента = ГруппаИЛИ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ТипПроизводственногоПроцесса");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
ОтборЭлемента.ПравоеЗначение = Перечисления.ТипыПроизводственныхПроцессов.Сборка;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ПоясняющийТекст);
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<первый этап>'"));
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
КонецЦикла;
#КонецОбласти
#Область ТекстЛюбаяХарактеристика
Элемент = УсловноеОформление.Элементы.Добавить();
Элемент.Поля.Элементы.Добавить().Поле = Новый ПолеКомпоновкиДанных(Элементы.ПродукцияХарактеристика.Имя);
Элемент.Поля.Элементы.Добавить().Поле = Новый ПолеКомпоновкиДанных(Элементы.ВыходныеИзделияХарактеристика.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ТипПроизводственногоПроцесса");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
Список = Новый СписокЗначений;
Список.Добавить(Перечисления.ТипыПроизводственныхПроцессов.Сборка);
Список.Добавить(Перечисления.ТипыПроизводственныхПроцессов.Ремонт);
ОтборЭлемента.ПравоеЗначение = Список;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ВыходныеИзделия.ХарактеристикиИспользуются");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ВыходныеИзделия.Характеристика");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ВыходныеИзделия.НомерСтроки");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = 1;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ПоясняющийТекст);
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<любая характеристика>'"));
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
#КонецОбласти
#Область ДолиСтоимости
ПроизводствоСервер.УстановитьУсловноеОформлениеПоляДоляСтоимостиПроцент(ЭтотОбъект, "Объект", "ВыходныеИзделия", "Продукция");
ПроизводствоСервер.УстановитьУсловноеОформлениеПоляДоляСтоимостиПроцент(ЭтотОбъект, "Объект", "ВыходныеИзделия", "ВыходныеИзделия");
УстановитьУсловноеОформлениеПоляДоляСтоимостиВыходныхИзделий("Продукция");
УстановитьУсловноеОформлениеПоляДоляСтоимостиВыходныхИзделий("ВыходныеИзделия");
#КонецОбласти
#Область СерииИспользуются
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ПродукцияТребуетсяУказыватьСерии.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ВыходныеИзделия.СерииИспользуются");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.МатериалыИУслугиТребуетсяУказыватьСерии.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.МатериалыИУслуги.СерииИспользуются");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
#КонецОбласти
#Область СтатьяКалькуляции
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.МатериалыИУслугиСтатьяКалькуляции.Имя);
ГруппаИ = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаИ.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
ОтборЭлемента = ГруппаИ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.МатериалыИУслуги.ТипНоменклатуры");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.Набор");
ОтборЭлемента = ГруппаИ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.МатериалыИУслуги.СтатьяКалькуляции");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
ОтборЭлемента = ГруппаИ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИсточникСоставаНаборовВПроизводстве");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Перечисления.ИсточникиСоставаНаборовВПроизводстве.Спецификации;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ПоясняющийТекст);
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<указывается в составе набора>'"));
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
#КонецОбласти
УстановитьУсловноеОформлениеПоВерсииПодсистемыПроизводство();
УстановитьУсловноеОформлениеПроизводственногоПроцесса();
КонецПроцедуры
&НаСервере
Процедура УстановитьПараметрыВыбораОтветственногоПодразделения()
ПараметрыОтветственногоПодразделения = Новый Массив;
ПараметрВыбора = Новый ПараметрВыбора("Отбор.ПодразделениеДиспетчерИлиПроизводственноеПодразделение", Истина);
ПараметрыОтветственногоПодразделения.Добавить(ПараметрВыбора);
ПараметрыОтветственногоПодразделения = Новый ФиксированныйМассив(ПараметрыОтветственногоПодразделения);
Элементы.ОтветственноеПодразделение.ПараметрыВыбора = ПараметрыОтветственногоПодразделения;
КонецПроцедуры
&НаСервере
Процедура УстановитьУсловноеОформлениеТабличныхЧастейСАвтовыбором()
НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(ЭтотОбъект,
"ПродукцияХарактеристика",
"Объект.ВыходныеИзделия.ХарактеристикиИспользуются");
НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(ЭтотОбъект,
"ВыходныеИзделияХарактеристика",
"Объект.ВыходныеИзделия.ХарактеристикиИспользуются");
НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(ЭтотОбъект,
"ВозвратныеОтходыХарактеристика",
"Объект.ВозвратныеОтходы.ХарактеристикиИспользуются");
НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(ЭтотОбъект,
"МатериалыИУслугиХарактеристика",
"Объект.МатериалыИУслуги.ХарактеристикиИспользуются");
КонецПроцедуры
&НаСервере
Процедура УстановитьУсловноеОформлениеПоВерсииПодсистемыПроизводство()
#Область ВыходныеИзделия
Элемент = УсловноеОформление.Элементы.Добавить();
Элемент.Поля.Элементы.Добавить().Поле = Новый ПолеКомпоновкиДанных(Элементы.ПродукцияЭлементПроизводственногоПроцесса.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИспользуетсяПроизводство22");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДоступноУказаниеЭтаповВВыходныхИзделиях");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
#КонецОбласти
#Область МатериалыИУслуги
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.МатериалыИУслугиСпособПолученияМатериалаРедактирование.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.МатериалыИУслуги.ПроизводствоНаСтороне");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.МатериалыИУслуги.ПроизводитсяВПроцессе");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
ОтборЭлемента.ПравоеЗначение = Истина;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИспользуетсяПроизводство22");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.СерыйЦветТекста1);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.МатериалыИУслугиСпособПолученияМатериалаРедактирование.Имя);
ГруппаИ = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаИ.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
ОтборЭлемента = ГруппаИ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.МатериалыИУслуги.СпособПолученияМатериала");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Перечисления.СпособыПолученияМатериаловВСпецификации.Обеспечивать;
ГруппаИЛИ = ГруппаИ.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаИЛИ.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
ГруппаИ = ГруппаИЛИ.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаИ.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
ОтборЭлемента = ГруппаИ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.МатериалыИУслуги.ТипНоменклатуры");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.Набор");
ОтборЭлемента = ГруппаИ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.МатериалыИУслуги.ИсточникПолученияПолуфабриката");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
СписокВариантов = Новый СписокЗначений;
СписокВариантов.Добавить(Перечисления.ИсточникиСоставаНаборовВПроизводстве.НеИспользовать);
СписокВариантов.Добавить(Перечисления.ИсточникиСоставаНаборовВПроизводстве.ВариантыКомплектации);
ОтборЭлемента = ГруппаИ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИсточникСоставаНаборовВПроизводстве");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
ОтборЭлемента.ПравоеЗначение = СписокВариантов;
ГруппаИ = ГруппаИЛИ.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаИ.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
ОтборЭлемента = ГруппаИ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.МатериалыИУслуги.ТипНоменклатуры");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.МногооборотнаяТара");
ОтборЭлемента = ГруппаИ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИспользуетсяПроизводство22");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
#КонецОбласти
КонецПроцедуры
&НаСервере
Процедура УстановитьУсловноеОформлениеПоляДоляСтоимостиВыходныхИзделий(ИмяТаблицы)
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеТаблицы = ПолеДолейСтоимостиВыходныхИзделий(ЭтотОбъект, ИмяТаблицы, "ДоляСтоимостиНедоступна");
Элемент.Поля.Элементы.Добавить().Поле = Новый ПолеКомпоновкиДанных(ПолеТаблицы.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ВыходныеИзделия.ДоляСтоимостиНедоступна");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<недоступна>'"));
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ПоясняющийТекст);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеТаблицы = ПолеДолейСтоимостиВыходныхИзделий(ЭтотОбъект, ИмяТаблицы, "ДоляСтоимостиНедоступна");
Элемент.Поля.Элементы.Добавить().Поле = Новый ПолеКомпоновкиДанных(ПолеТаблицы.Имя);
ГруппаОтбора = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.СпособРаспределенияЗатратНаВыходныеИзделия");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Перечисления.СпособыРаспределенияЗатратНаВыходныеИзделия.ПоДолямСтоимости;
ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ВыходныеИзделия.ДоляСтоимостиНедоступна");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ВыходныеИзделия.ЕстьОшибкиЗаполненияДолиСтоимости");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ВыходныеИзделия.ДоляСтоимостиПроцент");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеТаблицы = ПолеДолейСтоимостиВыходныхИзделий(ЭтотОбъект, ИмяТаблицы, "ЕстьОшибкиЗаполненияДолиСтоимости");
Элемент.Поля.Элементы.Добавить().Поле = Новый ПолеКомпоновкиДанных(ПолеТаблицы.Имя);
ГруппаОтбора = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ВыходныеИзделия.ЕстьОшибкиЗаполненияДолиСтоимости");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ВыходныеИзделия.ДоляСтоимостиНедоступна");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ПолеДолейСтоимостиВыходныхИзделий(Форма, ИмяТаблицы, ИмяРеквизита)
Результат = Неопределено;
ПоляФормы = Новый Структура;
Если ИмяТаблицы = "Продукция" Тогда
ПоляФормы.Вставить("ДоляСтоимостиНедоступна", Форма.Элементы["ПродукцияДоляСтоимостиНедоступна"]);
ПоляФормы.Вставить("ЕстьОшибкиЗаполненияДолиСтоимости", Форма.Элементы["ПродукцияЕстьОшибкиЗаполненияДолиСтоимости"]);
Результат = ПоляФормы[ИмяРеквизита];
КонецЕсли;
Если ИмяТаблицы = "ВыходныеИзделия" Тогда
ПоляФормы.Вставить("ДоляСтоимостиНедоступна", Форма.Элементы["ВыходныеИзделияДоляСтоимостиНедоступна"]);
ПоляФормы.Вставить("ЕстьОшибкиЗаполненияДолиСтоимости", Форма.Элементы["ВыходныеИзделияЕстьОшибкиЗаполненияДолиСтоимости"]);
Результат = ПоляФормы[ИмяРеквизита];
КонецЕсли;
Возврат Результат;
КонецФункции
&НаСервере
Процедура ЗаполнитьСлужебныеРеквизиты()
НастройкиПодсистемыПроизводство = ПроизводствоСерверПовтИсп.НастройкиПодсистемыПроизводство();
ЗаполнитьЗначенияСвойств(ЭтотОбъект, НастройкиПодсистемыПроизводство);
ИспользоватьПланированиеПроизводства = ПолучитьФункциональнуюОпцию("ИспользоватьПланированиеПроизводства");
ИсточникСоставаНаборовВПроизводстве = УправлениеДаннымиОбИзделияхПовтИсп.ИсточникСоставаНаборовВПроизводстве();
ЗаполнитьСлужебныеРеквизитыВыходныеИзделия();
СтруктураДействий = СтруктураДействийДляЗаполненияСлужебныхРеквизитов();
НоменклатураСервер.ЗаполнитьСлужебныеРеквизитыПоНоменклатуреВКоллекции(
Объект.ВозвратныеОтходы, СтруктураДействий);
СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры"));
НоменклатураСервер.ЗаполнитьСлужебныеРеквизитыПоНоменклатуреВКоллекции(
Объект.МатериалыИУслуги, СтруктураДействий);
ДоступноОписаниеПартииВыпуска = УправлениеДаннымиОбИзделиях.ДоступноОписаниеПартииВыпуска();
ЗаполнитьОписаниеПартииВыпуска();
ЗаполнитьСлужебныеРеквизитыПроизводственногоПроцесса();
ЗаполнитьСлужебныеРеквизитыМатериалыИУслуги();
ЗаполнитьПредставлениеСтатусаСпецификации();
РассчитатьДоступноУказаниеЭтаповВВыходныхИзделиях();
РассчитатьКоличествоВыходныеПобочныеИзделия(ЭтотОбъект);
ИспользоватьПолуфабрикатыПроизводимыеНаЭтапе = УправлениеДаннымиОбИзделиях.ИспользоватьПолуфабрикатыПроизводимыеНаЭтапе(Объект);
ИсключитьАвтоматическийВыборВДокументах = ?(Объект.ВариантПодбораВДокументы = Перечисления.ВариантыПодбораСпецификацииВДокументы.Автоматически, Ложь, Истина);
КонецПроцедуры
&НаСервере
Процедура НастроитьЭлементыФормы()
УправлениеПредприятием = Ложь;
#Область УП_КА_21_22
Элементы.ГруппаОсновноеИзделиеЗаголовок.Видимость = УправлениеПредприятием;
Элементы.ГруппаПараметрыНазначенияЗаголовок.Видимость = УправлениеПредприятием;
НадписьПараметрыПроизводственногоПроцесса = НСтр("ru = 'Параметры производственного процесса'");
Элементы.ВыпускПроизвольнымиПорциями.Видимость = ДоступноОписаниеПартииВыпуска;
Элементы.МинимальнаяПартияВыпуска.Видимость = ДоступноОписаниеПартииВыпуска;
Элементы.ОптимальнаяПартияВыпуска.Видимость = УправлениеПредприятием И ИспользуетсяПроизводство22;
Элементы.ДопустимоеПревышениеОптимальнойПартииВыпуска.Видимость = УправлениеПредприятием И ИспользуетсяПроизводство22;
Элементы.ОграниченСрокПролеживанияВыходныхИзделий.Видимость = УправлениеПредприятием И ИспользуетсяПроизводство22;
Элементы.МаксимальныйСрокПролеживанияВыходныхИзделий.Видимость = УправлениеПредприятием И ИспользуетсяПроизводство22;
Элементы.ОтветственноеПодразделение.Видимость = УправлениеПредприятием И ИспользуетсяПроизводство22;
Элементы.МатериалыИУслугиВвестиРазрешениеНаЗамену.Видимость = УправлениеПредприятием;
Элементы.ПродукцияТребуетсяУказыватьСерии.Видимость = УправлениеПредприятием И ИспользуетсяПроизводство21;
Элементы.МатериалыИУслугиТребуетсяУказыватьСерии.Видимость = УправлениеПредприятием И ИспользуетсяПроизводство21;
Элементы.Продукция_НастроитьПодборНоменклатуры.Видимость = УправлениеПредприятием;
Элементы.Продукция_НастройкаОтбораПоСвойствамИРасчетаПоФормулам.Видимость = УправлениеПредприятием;
Элементы.ВыходныеИзделия_НастроитьПодборНоменклатуры.Видимость = УправлениеПредприятием;
Элементы.ВыходныеИзделия_НастройкаОтбораПоСвойствамИРасчетаПоФормулам.Видимость = УправлениеПредприятием;
Элементы.ВозвратныеОтходы_НастроитьПодборНоменклатуры.Видимость = УправлениеПредприятием;
Элементы.ВозвратныеОтходы_НастройкаОтбораПоСвойствамИРасчетаПоФормулам.Видимость = УправлениеПредприятием;
Элементы.МатериалыИУслуги_НастроитьПодборНоменклатуры.Видимость = УправлениеПредприятием;
Элементы.МатериалыИУслуги_НастройкаОтбораПоСвойствамИРасчетаПоФормулам.Видимость = УправлениеПредприятием;
Элементы.ТрудозатратыНастройкаОтбораПоСвойствамИРасчетаПоФормулам.Видимость = УправлениеПредприятием;
УстановитьДоступностьЭлементовСпособаПолученияМатериала();
ДоступноОписаниеВероятностиПримененияМатериалов = УправлениеДаннымиОбИзделиях.ДоступноОписаниеВероятностиПримененияМатериалов();
Элементы.МатериалыИУслугиПрименениеМатериалаРедактирование.Видимость = ДоступноОписаниеВероятностиПримененияМатериалов;
Элементы.МатериалыИУслугиПрименениеМатериала.Видимость = НЕ ДоступноОписаниеВероятностиПримененияМатериалов;
Элементы.ГруппаПечатьМаршрутнойКарты.Видимость = УправлениеПредприятием И ИспользуетсяПроизводство21;
Элементы.ФормаЗаполнитьПоМаршрутнымКартамЭтапов.Видимость = УправлениеПредприятием И НЕ ХранитьОперацииВРесурсныхСпецификациях;
Элементы.ПроизводственныйПроцессДобавить.Видимость = НЕ УправлениеПредприятием;
Элементы.ПроизводственныйПроцессКонтекстноеМенюДобавить.Видимость = НЕ УправлениеПредприятием;
Элементы.ПроизводственныйПроцессГруппаДобавить.Видимость = УправлениеПредприятием;
Элементы.ПроизводственныйПроцессКонтекстноеМенюГруппаДобавить.Видимость = УправлениеПредприятием;
#КонецОбласти
УстановитьДоступностьЭлементовПоТипуПроизводственногоПроцессаСервер();
УстановитьДоступностьЭлементовРедактированияИзделий();
УстановитьДоступностьЭлементовПоСтатусуСервер();
УстановитьДоступностьКомандИзмененияСтатуса();
НастроитьЭлементыПроизводственногоПроцесса();
ОбновитьИнформациюПоОсновномуИзделиюСпецификации();
УправлениеДаннымиОбИзделияхКлиентСервер.УстановитьПараметрыВыбораМатериалов(
Элементы.МатериалыИУслугиНоменклатура, ЭтотОбъект);
УстановитьКлючСохраненияПоложенияОкна();
Элементы.ГруппаДополнительно.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Объект.Описание);
НастроитьЗависимыеЭлементыФормы(ЭтотОбъект);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура НастроитьЗависимыеЭлементыФормы(Форма, СписокРеквизитов = "")
Объект = Форма.Объект;
Элементы = Форма.Элементы;
Инициализация = ПустаяСтрока(СписокРеквизитов);
СтруктураРеквизитов = Новый Структура(СписокРеквизитов);
ОписаниеПартииВыпуска = Форма.ОписаниеПартииВыпуска;
Если СтруктураРеквизитов.Свойство("ОсновноеИзделие")
ИЛИ Инициализация Тогда
ЭтоТехнологическийНабор = ЭтоТехнологическийНабор(Форма);
Элементы.ГруппаВыходныеПобочныеИзделия.Видимость = НЕ ЭтоТехнологическийНабор;
Элементы.ГруппаТрудозатраты.Видимость = НЕ ЭтоТехнологическийНабор;
ЭЛементы.ГруппаПроизводственныйПроцесс.Видимость = НЕ ЭтоТехнологическийНабор;
Элементы.ГруппаПараметрыПроизводственногоПроцессаЗаголовок.Видимость = НЕ ЭтоТехнологическийНабор;
Элементы.ГруппаПараметрыПроизводственногоПроцесса.Видимость = НЕ ЭтоТехнологическийНабор;
Элементы.СпособРаспределенияЗатратНаВыходныеИзделия.Видимость = НЕ ЭтоТехнологическийНабор
И (Форма.ИспользуетсяПроизводство22 И НЕ Форма.ИспользуетсяПроизводство21);
НастроитьВариантыНазначенияСпецификации(Форма);
КонецЕсли;
Если СтруктураРеквизитов.Свойство("ОсновноеИзделие")
ИЛИ СтруктураРеквизитов.Свойство("ВариантНазначения")
ИЛИ Инициализация Тогда
ВидимостьПромежуточныйВыпуск = ДоступенПромежуточныйВыпуск(Форма);
Элементы.ЕстьПромежуточныйВыпуск.Видимость = ВидимостьПромежуточныйВыпуск;
Элементы.ВариантПромежуточногоВыпускаТоварДругогоКачества.Видимость = ВидимостьПромежуточныйВыпуск;
Элементы.ВариантПромежуточногоВыпускаНастраиваетсяВручную.Видимость = ВидимостьПромежуточныйВыпуск;
КонецЕсли;
Если СтруктураРеквизитов.Свойство("ПроизводственныйПроцесс")
ИЛИ Инициализация Тогда
Элементы.ДлительнаяОперацияИнформацияСтатус.Видимость = НЕ Форма.ПроизводственныйПроцессПрочитан;
Элементы.ОписаниеПроизводственногоПроцесса.ТекущаяСтраница = ?(
Форма.ПроизводственныйПроцессПрочитан,
Элементы.СтраницаРедакторПроизводственногоПроцесса,
Элементы.СтраницаРедакторПроизводственногоПроцессаЗагрузка);
ДоступностьРеквизитов = Форма.ДоступностьРеквизитов;
ЭтоТехнологическийНабор = ЭтоТехнологическийНабор(Форма);
ЕстьЭтапы = (Форма.ПроизводственныйПроцессКэш.ЭтапКоличество > 0);
Элементы.ПроизводственныйПроцессСвойстваПанель.Доступность = ЕстьЭтапы;
Элементы.ПроизводственныйПроцессСвернуть.Доступность = ЕстьЭтапы;
Элементы.ПроизводственныйПроцессРазвернуть.Доступность = ЕстьЭтапы;
Элементы.ПроизводственныйПроцессПереместитьВверх.Доступность = ЕстьЭтапы И ДоступностьРеквизитов;
Элементы.ПроизводственныйПроцессПереместитьВниз.Доступность = ЕстьЭтапы И ДоступностьРеквизитов;
Если НЕ ЕстьЭтапы Тогда
Элементы.ПроизводственныйПроцессСвойстваСтраницы.ТекущаяСтраница = Элементы.ПроизводственныйПроцессПустая;
КонецЕсли;
Элементы.КомандыИзмененияСтатуса.Доступность = Форма.ПроизводственныйПроцессПрочитан;
ДоступенВыборЭлементаПроизводственногоПроцесса = НЕ ЭтоТехнологическийНабор
И УправлениеДаннымиОбИзделияхКлиентСервер.МногоэтапныйПроизводственныйПроцессДоступен();
Для каждого КлючИЗначение Из НазванияЭлементовРедактирования() Цикл
Элементы[КлючИЗначение.Значение].Видимость = ДоступенВыборЭлементаПроизводственногоПроцесса;
КонецЦикла;
Для каждого КлючИЗначение Из НазванияКомандВыбораЭлементаПроизводственногоПроцесса() Цикл
Элементы[КлючИЗначение.Значение].Видимость = ДоступенВыборЭлементаПроизводственногоПроцесса;
КонецЦикла;
Элементы.ОптимальноеКоличествоПередачиМеждуЭтапами.Видимость = Форма.УправлениеПредприятием
И НЕ Форма.ИспользуетсяПроизводство22
И Объект.МногоэтапныйПроизводственныйПроцесс;
Элементы.ГруппаПараметрыПроизводственногоПроцессаЗаголовок.Видимость = (
Форма.ДоступноОписаниеПартииВыпуска
ИЛИ (Форма.УправлениеПредприятием И Форма.ИспользуетсяПроизводство22)
ИЛИ Элементы.ОптимальноеКоличествоПередачиМеждуЭтапами.Видимость)
И НЕ ЭтоТехнологическийНабор;
КонецЕсли;
Если СтруктураРеквизитов.Свойство("ОписаниеПартииВыпуска")
ИЛИ Инициализация Тогда
СписокВыбора = Элементы.ВыпускПроизвольнымиПорциями.СписокВыбора;
СписокВыбора.Очистить();
СписокВыбора.Добавить(Истина).Представление = НСтр("ru = 'в произвольном количестве'");
Если ОписаниеПартииВыпуска <> Неопределено
И ОписаниеПартииВыпуска.КоличествоУпаковок > 0
И Не ОписаниеПартииВыпуска.МножественныйВыпуск
И Не ОписаниеПартииВыпуска.ЕдиницаИзмеренияИзделия.Пустая()
Тогда
КоличествоПредставление = Формат(ОписаниеПартииВыпуска.КоличествоУпаковок, "ЧН=; ЧГ=");
СписокВыбора.Добавить(Ложь).Представление = СтрШаблон(НСтр("ru = 'кратно %1 %2'"), КоличествоПредставление, ОписаниеПартииВыпуска.ЕдиницаИзмеренияИзделия);
Иначе
СписокВыбора.Добавить(Ложь).Представление = НСтр("ru = 'кратными партиями'");
КонецЕсли;
КонецЕсли;
Если СтруктураРеквизитов.Свойство("ВыпускПроизвольнымиПорциями")
ИЛИ Инициализация Тогда
УправлениеДаннымиОбИзделияхКлиентСервер.УстановитьПараметрыВводаКоличестваЕдиницПартий(
Объект.ВыпускПроизвольнымиПорциями,
Элементы.МинимальнаяПартияВыпуска);
УправлениеДаннымиОбИзделияхКлиентСервер.УстановитьПараметрыВводаКоличестваЕдиницПартий(
Объект.ВыпускПроизвольнымиПорциями,
Элементы.ОптимальнаяПартияВыпуска);
УправлениеДаннымиОбИзделияхКлиентСервер.УстановитьПараметрыВводаКоличестваЕдиницПартий(
Объект.ВыпускПроизвольнымиПорциями,
Элементы.ДопустимоеПревышениеОптимальнойПартииВыпуска);
Форма.ВыпускПроизвольнымиПорциямиДоИзменения = Объект.ВыпускПроизвольнымиПорциями;
КонецЕсли;
Если СтруктураРеквизитов.Свойство("МинимальнаяПартияВыпуска")
ИЛИ СтруктураРеквизитов.Свойство("ОписаниеПартииВыпуска")
ИЛИ Инициализация Тогда
ПодсказкаВвода = УправлениеДаннымиОбИзделияхКлиентСервер.ПредставлениеЕдиницыИзмеренияПартииВыпуска(
Форма.ОписаниеПартииВыпуска,
Объект.МинимальнаяПартияВыпуска);
Элементы.МинимальнаяПартияВыпуска.Подсказка = ПодсказкаВвода;
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ДоступенПромежуточныйВыпуск(Форма)
Объект = Форма.Объект;
ЭтоТараИлиРабота = Ложь;
Если Объект.ВариантНазначения <> ПредопределенноеЗначение("Перечисление.ВариантыНазначенияСпецификации.СписокНоменклатуры") Тогда
ЭтоТараИлиРабота = Форма.ОсновноеИзделиеТипНоменклатуры = ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.МногооборотнаяТара")
Или Форма.ОсновноеИзделиеТипНоменклатуры = ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.Работа");
ИначеЕсли Объект.ВыходныеИзделия.Количество() > 0 Тогда
ЭтоТараИлиРабота = Объект.ВыходныеИзделия[0].ТипНоменклатуры = ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.МногооборотнаяТара")
Или Объект.ВыходныеИзделия[0].ТипНоменклатуры = ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.Работа");
КонецЕсли;
ДоступенПромежуточныйВыпуск = Форма.ДинамическаяСтруктураЗаказовНаПроизводство
И Не Форма.ИспользоватьПолуфабрикатыПроизводимыеНаЭтапе
И Не ЭтоТараИлиРабота;
Возврат ДоступенПромежуточныйВыпуск;
КонецФункции
&НаСервере
Процедура РеквизитОписанияПартииВыпускаПриИзменении()
ЗаполнитьОписаниеПартииВыпуска();
НастроитьЗависимыеЭлементыФормы(ЭтотОбъект, "ОписаниеПартииВыпуска,ВыпускПроизвольнымиПорциями");
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьОписаниеПартииВыпуска()
Если Не ДоступноОписаниеПартииВыпуска Тогда
Возврат;
КонецЕсли;
ОписаниеПартииВыпуска = Справочники.РесурсныеСпецификации.ОписаниеПартииВыпуска(Объект);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПредставлениеСтатусаСпецификации()
Если Объект.Статус <> Перечисления.СтатусыСпецификаций.Действует Тогда
СтатусСтрока = Строка(Объект.Статус);
КонецЕсли;
СтатусСтрока = УправлениеДаннымиОбИзделияхКлиентСервер.ПредставлениеСтатусаСпецификации(Объект.Статус);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСлужебныеРеквизитыПроизводственногоПроцесса()
ЭтапОсновнаяЕдиницаВремениБуфера = Справочники.ЭтапыПроизводства.ОсновнаяЕдиницаВремениБуфера();
ЭтапОсновнаяЕдиницаВремениДлительностиЭтапаУББВ = Справочники.ЭтапыПроизводства.ОсновнаяЕдиницаВремениДлительностиЭтапаУББВ();
ЗаполнитьПредставлениеРеквизитовЭтапОперация();
ЗаполнитьДанныеПервогоИПоследнегоЭтапа();
КонецПроцедуры
&НаСервере
Функция ОписаниеПроизводственногоПроцесса()
КоличествоПервыхЭтапов = 0;
КоличествоПоследнихЭтапов = 0;
СтрокиЭтапы = ПроизводственныйПроцесс.ПолучитьЭлементы();
Для каждого СтрокаЭтап Из СтрокиЭтапы Цикл
Если СтрокаЭтап.Номер = 1 Тогда
КоличествоПервыхЭтапов = КоличествоПервыхЭтапов + 1;
КонецЕсли;
Если СтрокаЭтап.НомерСледующего = 0 Тогда
КоличествоПоследнихЭтапов = КоличествоПоследнихЭтапов + 1;
КонецЕсли;
КонецЦикла;
Возврат Новый Структура("НесколькоПервыхЭтапов,НесколькоПоследнихЭтапов", КоличествоПервыхЭтапов > 1, КоличествоПоследнихЭтапов > 1);
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ДанныеЭтапаКонструктор()
Результат = Новый Структура;
Результат.Вставить("ЭтоПервыйЭтап", Ложь);
Результат.Вставить("Ссылка", ПредопределенноеЗначение("Справочник.ЭтапыПроизводства.ПустаяСсылка"));
Результат.Вставить("Наименование", "");
Результат.Вставить("Подразделение", ПредопределенноеЗначение("Справочник.СтруктураПредприятия.ПустаяСсылка"));
Результат.Вставить("ПроизводствоНаСтороне", Ложь);
Возврат Результат;
КонецФункции
&НаСервере
Процедура ЗаполнитьДанныеПервогоИПоследнегоЭтапа()
ДанныеПервогоЭтапа = ДанныеЭтапаКонструктор();
ДанныеПоследнегоЭтапа = ДанныеЭтапаКонструктор();
Если ПроизводственныйПроцессПрочитан Тогда
Этапы = ПроизводственныйПроцесс.ПолучитьЭлементы();
Для Индекс = 0 По Этапы.Количество() - 1 Цикл
Если Этапы[Индекс].Номер = 1 Тогда
ЗаполнитьЗначенияСвойств(ДанныеПервогоЭтапа, Этапы[Индекс]);
Прервать;
КонецЕсли;
КонецЦикла;
Для Индекс = -Этапы.Количество() + 1 По 0 Цикл
Если Этапы[-Индекс].НомерСледующего = 0 Тогда
ЗаполнитьЗначенияСвойств(ДанныеПоследнегоЭтапа, Этапы[-Индекс]);
Прервать;
КонецЕсли;
КонецЦикла;
Иначе
Справочники.РесурсныеСпецификации.ПолучитьПервыйИПоследнийЭтап(
Объект.Ссылка,
ДанныеПервогоЭтапа,
ДанныеПоследнегоЭтапа,
"Наименование,Подразделение,ПроизводствоНаСтороне");
КонецЕсли;
ДанныеПервогоЭтапа.ЭтоПервыйЭтап = Истина;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПредставлениеРеквизитовЭтапОперация()
ИменаТЧ = Новый Соответствие();
ИменаТЧ.Вставить("ВыходныеИзделия", Ложь);
ИменаТЧ.Вставить("ВозвратныеОтходы", Ложь);
ИменаТЧ.Вставить("МатериалыИУслуги", Ложь);
ИменаТЧ.Вставить("Трудозатраты", Ложь);
МассивСсылок = Новый Массив;
Для каждого КлючИЗначение Из ИменаТЧ Цикл
ИмяТЧ = КлючИЗначение.Ключ;
Для каждого Строка Из Объект[ИмяТЧ] Цикл
Если ЗначениеЗаполнено(Строка.ЭтапРедактирование) Тогда
МассивСсылок.Добавить(Строка.ЭтапРедактирование);
ИменаТЧ[ИмяТЧ] = Истина;
Иначе
Строка.ЭтапРедактированиеПредставление = "";
КонецЕсли;
КонецЦикла;
КонецЦикла;
ОбщегоНазначенияУТ.УдалитьПовторяющиесяЭлементыМассива(МассивСсылок);
Если ПроизводственныйПроцессПрочитан Тогда
Представления = Новый Соответствие;
КоличествоСсылок = МассивСсылок.Количество();
Этапы = ПроизводственныйПроцесс.ПолучитьЭлементы();
Для каждого Этап Из Этапы Цикл
Если МассивСсылок.Найти(Этап.Ссылка) <> Неопределено Тогда
Представления.Вставить(Этап.Ссылка, Этап.Наименование);
КонецЕсли;
Если Представления.Количество() = КоличествоСсылок Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Иначе
Представления = ОбщегоНазначения.ЗначениеРеквизитаОбъектов(МассивСсылок, "Наименование");
КонецЕсли;
Для каждого КлючИЗначение Из ИменаТЧ Цикл
Если НЕ КлючИЗначение.Значение Тогда
Продолжить;
КонецЕсли;
ИмяТЧ = КлючИЗначение.Ключ;
Для каждого Строка Из Объект[ИмяТЧ] Цикл
Если ЗначениеЗаполнено(Строка.ЭтапРедактирование) Тогда
Строка.ЭтапРедактированиеПредставление = Представления.Получить(Строка.ЭтапРедактирование);
КонецЕсли;
Строка.ЭлементПроизводственногоПроцессаПредставление = ПредставлениеЭлементаПроизводтвенногоПроцесса(ЭтотОбъект, Строка);
КонецЦикла;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ОбработатьИзменениеПроизводственногоПроцесса(ТекущаяСтрока)
ТекущиеДанные = ПроизводственныйПроцесс.НайтиПоИдентификатору(ТекущаяСтрока);
Если ТекущиеДанные = Неопределено
ИЛИ ТекущиеДанные.ВидЭлемента <> "Этап" Тогда
Возврат;
КонецЕсли;
ПервыйЭтап = ДанныеПервогоЭтапа;
ПоследнийЭтап = ДанныеПоследнегоЭтапа;
ОбновитьПервыйЭтап = ТекущиеДанные.Номер = 1
ИЛИ ТекущиеДанные.Ссылка = ПервыйЭтап.Ссылка
ИЛИ НЕ ЗначениеЗаполнено(ПервыйЭтап.Ссылка);
ОбновитьПоследнийЭтап = ТекущиеДанные.НомерСледующего = 0
ИЛИ ТекущиеДанные.Ссылка = ПоследнийЭтап.Ссылка
ИЛИ НЕ ЗначениеЗаполнено(ПоследнийЭтап.Ссылка);
Если ОбновитьПервыйЭтап ИЛИ ОбновитьПоследнийЭтап Тогда
ЗаполнитьДанныеПервогоИПоследнегоЭтапа();
КонецЕсли;
ОбновитьРеквизитМногоэтапныйПроизводственныйПроцесс();
Идентификаторы = Новый Массив();
СписокОтборов = Новый Массив;
СписокОтборов.Добавить(ТекущиеДанные.Ссылка);
Если ОбновитьПервыйЭтап Тогда
СписокОтборов.Добавить(Справочники.ЭтапыПроизводства.ПустаяСсылка());
КонецЕсли;
Для каждого ЗначениеОтбора Из СписокОтборов Цикл
Отбор = Новый Структура("ЭтапРедактирование", ЗначениеОтбора);
НайденныеСтроки = Объект.МатериалыИУслуги.НайтиСтроки(Отбор);
Для каждого Строка Из НайденныеСтроки Цикл
Идентификаторы.Добавить(Строка.ПолучитьИдентификатор());
КонецЦикла;
КонецЦикла;
Если Идентификаторы.Количество() > 0 Тогда
ОбработатьИзменениеЭтапаМатериалыИУслуги(Идентификаторы);
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция СписокКолонокЗаполнитьСлужебныеРеквизитыМатериалыИУслуги()
СоставПолей = "НомерСтроки,ЭтапРедактирование,СпособПолученияМатериала,ИсточникПолученияПолуфабриката,СпецификацияРемонта,ПланироватьНеРанее";
Возврат СоставПолей;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ИменаТабличныхЧастей()
Результат = Новый Массив;
Результат.Добавить("ВыходныеИзделия");
Результат.Добавить("ВозвратныеОтходы");
Результат.Добавить("МатериалыИУслуги");
Результат.Добавить("Трудозатраты");
Возврат Результат;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция СоответствиеТаблицФормыИменамТЧ()
Результат = Новый Структура;
Результат.Вставить("Продукция", "ВыходныеИзделия");
Результат.Вставить("ВыходныеИзделия", "ВыходныеИзделия");
Результат.Вставить("ВозвратныеОтходы", "ВозвратныеОтходы");
Результат.Вставить("МатериалыИУслуги", "МатериалыИУслуги");
Результат.Вставить("Трудозатраты", "Трудозатраты");
Возврат Результат;
КонецФункции
&НаСервере
Процедура ЗаполнитьСлужебныеРеквизитыМатериалыИУслуги(Идентификаторы = Неопределено)
СписокКолонок = СписокКолонокЗаполнитьСлужебныеРеквизитыМатериалыИУслуги();
Если Идентификаторы <> Неопределено Тогда
СписокСтрок = Новый Массив;
Для каждого Идентификатор Из Идентификаторы Цикл
СписокСтрок.Добавить(Объект.МатериалыИУслуги.НайтиПоИдентификатору(Идентификатор));
КонецЦикла;
ТабличнаяЧасть = Объект.МатериалыИУслуги.Выгрузить(СписокСтрок, СписокКолонок);
Иначе
ТабличнаяЧасть = Объект.МатериалыИУслуги.Выгрузить(, СписокКолонок);
КонецЕсли;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ТабличнаяЧасть", ТабличнаяЧасть);
Запрос.УстановитьПараметр("ПроизводствоНаСтороне", ДанныеПервогоЭтапа.ПроизводствоНаСтороне);
ТекстЗапроса = СтрЗаменить("
|ВЫБРАТЬ
| &СписокКолонок
|ПОМЕСТИТЬ ВТ
|ИЗ
| &ТабличнаяЧасть КАК ТабличнаяЧасть
|;
|
|
|", "&СписокКолонок", СписокКолонок);
Если ПроизводственныйПроцессПрочитан Тогда
ТекстЗапроса = ТекстЗапроса + "
|ВЫБРАТЬ
| ТаблицаЭтапов.Ссылка КАК Ссылка,
| ТаблицаЭтапов.ПроизводствоНаСтороне КАК ПроизводствоНаСтороне,
| ТаблицаЭтапов.Номер КАК НомерЭтапа,
| ТаблицаЭтапов.Наименование КАК Представление
|ПОМЕСТИТЬ ТаблицаЭтапов
|ИЗ
| &ТаблицаЭтапов КАК ТаблицаЭтапов
|
|ИНДЕКСИРОВАТЬ ПО
| Ссылка
|
|;
|
|
|ВЫБРАТЬ
| ТабличнаяЧасть.НомерСтроки КАК НомерСтроки,
|
| ВЫБОР
| КОГДА ТабличнаяЧасть.ЭтапРедактирование = ЗНАЧЕНИЕ(Справочник.ЭтапыПроизводства.ПустаяСсылка)
| ТОГДА ИСТИНА
| ИНАЧЕ ТаблицаЭтапРедактирование.НомерЭтапа = 1
| КОНЕЦ КАК ЭтоПервыйЭтап,
|
| ВЫБОР
| КОГДА ТабличнаяЧасть.ЭтапРедактирование = ЗНАЧЕНИЕ(Справочник.ЭтапыПроизводства.ПустаяСсылка)
| ТОГДА &ПроизводствоНаСтороне
| ИНАЧЕ ТаблицаЭтапРедактирование.ПроизводствоНаСтороне
| КОНЕЦ КАК ПроизводствоНаСтороне,
|
| ВЫБОР
| КОГДА ТабличнаяЧасть.СпособПолученияМатериала = ЗНАЧЕНИЕ(Перечисление.СпособыПолученияМатериаловВСпецификации.ПроизводитсяНаЭтапе)
| ТОГДА ВЫРАЗИТЬ(ТаблицаИсточникПолученияПолуфабриката.Представление КАК СТРОКА(100))
| ИНАЧЕ
| ВЫРАЗИТЬ(ТабличнаяЧасть.ИсточникПолученияПолуфабриката КАК Справочник.РесурсныеСпецификации).Наименование
| КОНЕЦ КАК ИсточникПолученияПолуфабрикатаПредставление,
| ТаблицаПланироватьНеРанее.Представление КАК ПланироватьНеРанееПредставление,
| ПРЕДСТАВЛЕНИЕ(ТабличнаяЧасть.СпецификацияРемонта) КАК СпецификацияРемонтаПредставление
|
|ИЗ
| ВТ КАК ТабличнаяЧасть
|
| ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаЭтапов КАК ТаблицаЭтапРедактирование
| ПО ТабличнаяЧасть.ЭтапРедактирование = ТаблицаЭтапРедактирование.Ссылка
|
| ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаЭтапов КАК ТаблицаИсточникПолученияПолуфабриката
| ПО ТабличнаяЧасть.ИсточникПолученияПолуфабриката = ТаблицаИсточникПолученияПолуфабриката.Ссылка
|
| ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаЭтапов КАК ТаблицаПланироватьНеРанее
| ПО ТабличнаяЧасть.ПланироватьНеРанее = ТаблицаПланироватьНеРанее.Ссылка
|
|";
Запрос.УстановитьПараметр("ТаблицаЭтапов", ТаблицаЭлементовПроизводственногоПроцесса(Новый Структура("ВидЭлемента","Этап")));
Иначе
ТекстЗапроса = ТекстЗапроса + "
|ВЫБРАТЬ
| ТабличнаяЧасть.НомерСтроки КАК НомерСтроки,
|
| ВЫБОР
| КОГДА ТабличнаяЧасть.ЭтапРедактирование = ЗНАЧЕНИЕ(Справочник.ЭтапыПроизводства.ПустаяСсылка)
| ТОГДА ИСТИНА
| ИНАЧЕ ВЫРАЗИТЬ(ТабличнаяЧасть.ЭтапРедактирование КАК Справочник.ЭтапыПроизводства).НомерЭтапа = 1
|
| КОНЕЦ КАК ЭтоПервыйЭтап,
| ВЫБОР
| КОГДА ТабличнаяЧасть.ЭтапРедактирование = ЗНАЧЕНИЕ(Справочник.ЭтапыПроизводства.ПустаяСсылка)
| ТОГДА &ПроизводствоНаСтороне
| ИНАЧЕ ВЫРАЗИТЬ(ТабличнаяЧасть.ЭтапРедактирование КАК Справочник.ЭтапыПроизводства).ПроизводствоНаСтороне
|
| КОНЕЦ КАК ПроизводствоНаСтороне,
|
| ПРЕДСТАВЛЕНИЕ(ТабличнаяЧасть.ИсточникПолученияПолуфабриката) КАК ИсточникПолученияПолуфабрикатаПредставление,
| ПРЕДСТАВЛЕНИЕ(ТабличнаяЧасть.ПланироватьНеРанее) КАК ПланироватьНеРанееПредставление,
| ПРЕДСТАВЛЕНИЕ(ТабличнаяЧасть.СпецификацияРемонта) КАК СпецификацияРемонтаПредставление
|
|ИЗ
| ВТ КАК ТабличнаяЧасть
|";
КонецЕсли;
Запрос.Текст = ТекстЗапроса;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ДанныеСтроки = Объект.МатериалыИУслуги[Выборка.НомерСтроки - 1];
ЗаполнитьЗначенияСвойств(ДанныеСтроки, Выборка,, "НомерСтроки");
ЗаполнитьПредставлениеСпособаПолученияМатериала(ДанныеСтроки, ЭтотОбъект);
УправлениеДаннымиОбИзделияхКлиентСервер.ЗаполнитьИнформациюПоПрименениюМатериала(ДанныеСтроки);
ЗаполнитьПризнакПроизвестиВСтрокеМатериалов(ЭтотОбъект, ДанныеСтроки);
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСлужебныеРеквизитыВыходныеИзделия()
СтруктураДействий = СтруктураДействийДляЗаполненияСлужебныхРеквизитов();
СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц", Новый Структура("НужноОкруглять", Ложь));
СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры"));
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(Объект.ВыходныеИзделия, СтруктураДействий, Неопределено);
ПроизводствоСервер.РассчитатьДолюСтоимости(Объект, ПараметрыРаспределенияЗатрат);
РассчитатьПроцентРаспределенияЗатратНаВыходныеИзделия();
КонецПроцедуры
&НаСервере
Функция СтруктураДействийДляЗаполненияСлужебныхРеквизитов()
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ЗаполнитьПризнакХарактеристикиИспользуются", Новый Структура("Номенклатура", "ХарактеристикиИспользуются"));
СтруктураДействий.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
СтруктураДействий.Вставить("ЗаполнитьПризнакСерииИспользуются", Новый Структура("Номенклатура", "СерииИспользуются"));
Возврат СтруктураДействий;
КонецФункции
&НаСервере
Процедура РассчитатьДоступноУказаниеЭтаповВВыходныхИзделиях()
ДоступноУказаниеЭтаповВВыходныхИзделиях = Ложь;
Для каждого Строка Из Объект.ВыходныеИзделия Цикл
Если ЗначениеЗаполнено(Строка.ЭтапРедактирование) Тогда
ДоступноУказаниеЭтаповВВыходныхИзделиях = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура РассчитатьКоличествоВыходныеПобочныеИзделия(Форма)
Объект = Форма.Объект;
Если Объект.ТипПроизводственногоПроцесса = ПредопределенноеЗначение("Перечисление.ТипыПроизводственныхПроцессов.Разборка") Тогда
ВсегоИзделий = Объект.ВыходныеИзделия.Количество() + Объект.ВозвратныеОтходы.Количество();
Иначе
ВсегоИзделий = Объект.ВозвратныеОтходы.Количество();
КонецЕсли;
Форма.ВсегоВыходныеПобочныеИзделия = ВсегоИзделий;
КонецПроцедуры
&НаСервере
Процедура РассчитатьПроцентРаспределенияЗатратНаВыходныеИзделия()
ПроизводствоСервер.РассчитатьПроцентРаспределенияЗатратНаВыходныеИзделия(Объект, ПараметрыРаспределенияЗатрат);
КонецПроцедуры
&НаСервере
Функция ПараметрыФормыВводаДолиСтоимости(ТекущиеДанныеИдентификатор)
ПараметрыФормы = ПроизводствоСервер.ПараметрыФормыВводаДолейСтоимости(Объект, ПараметрыРаспределенияЗатрат, ТекущиеДанныеИдентификатор);
Возврат ПараметрыФормы;
КонецФункции
&НаСервере
Функция ПолучитьБлокируемыеРеквизитыОбъекта()
Результат = Новый Массив;
Результат.Добавить("Код");
Результат.Добавить("ВыпускПроизвольнымиПорциями");
Результат.Добавить("ВариантНазначения");
Результат.Добавить("СпособРаспределенияЗатратНаВыходныеИзделия");
Результат.Добавить("ОсновноеИзделиеВидНоменклатуры");
Результат.Добавить("ОсновноеИзделиеНоменклатура");
Результат.Добавить("ОсновноеИзделиеХарактеристика");
Результат.Добавить("ОсновноеИзделиеКоличествоУпаковок");
Результат.Добавить("ОсновноеИзделиеУпаковка");
Результат.Добавить("ОсновноеИзделиеПроцентБрака");
Результат.Добавить("Продукция");
Результат.Добавить("ВыходныеИзделия");
Результат.Добавить("ВозвратныеОтходы");
Результат.Добавить("МатериалыИУслуги");
Результат.Добавить("Трудозатраты");
Результат.Добавить("ФормаЗаполнитьПоМаршрутнымКартамЭтапов");
Результат.Добавить("МатериалыИУслугиРазбитьСтроку");
Результат.Добавить("МатериалыИУслугиОткрытьПодборМатериалов");
Результат.Добавить("МатериалыИУслуги_ЗаполнитьСтатьюКалькуляции");
Результат.Добавить("МатериалыИУслугиЗагрузитьИзФайла");
Результат.Добавить("ВозвратныеОтходы_ЗаполнитьСтатьюКалькуляции");
Результат.Добавить("ВозвратныеОтходыЗагрузитьИзФайла");
Результат.Добавить("Трудозатраты_ЗаполнитьСтатьюКалькуляции");
Результат.Добавить("ТрудозатратыЗагрузитьИзФайла");
Возврат Результат;
КонецФункции
&НаСервере
Процедура УстановитьДоступностьЭлементовПоТипуПроизводственногоПроцессаСервер()
ЭтоСборка = Истина;
ЭтоРемонт = Ложь;
ЭтоРазборка = Ложь;
ДоступностьРеквизитов = (Объект.Статус = ПредопределенноеЗначение("Перечисление.СтатусыСпецификаций.ВРазработке"));
УстановитьЗаголовокГруппыВыходныеПобочныеИзделия();
Элементы.ГруппаВыходныеИзделия.Видимость = ЭтоРазборка;
Элементы.ГруппаВыходныеИзделия.ОтображатьЗаголовок = ЭтоРазборка;
Элементы.ГруппаВозвратныеОтходы.Видимость = ЭтоСборка ИЛИ ЭтоРазборка ИЛИ ЭтоРемонт;
Элементы.ГруппаВозвратныеОтходы.ОтображатьЗаголовок = ЭтоРазборка;
УстановитьЗаголовокТабличнойЧастиВозвратныеОтходы();
Элементы.ВыходныеИзделияГруппаСпецификация.Видимость = ЭтоРазборка;
Элементы.ВозвратныеОтходыГруппаСпецификация.Видимость = ЭтоРазборка;
ДоступнаКолонкаПроцентБрака = Ложь;
Элементы.ПродукцияПроцентБрака.Видимость = (ЭтоСборка И ДоступнаКолонкаПроцентБрака);
Элементы.ОсновноеИзделиеПроцентБрака.Видимость = (ЭтоСборка И ДоступнаКолонкаПроцентБрака);
Элементы.ВыходныеИзделияПроцентБрака.Видимость = (ЭтоРазборка И ДоступнаКолонкаПроцентБрака);
Элементы.РазрешитьВыборДляИзделийПобочногоВыхода.Видимость = УправлениеПредприятием И ИспользуетсяПроизводство22 И ЭтоСборка;
Элементы.РазрешитьВыборДляИзделийПобочногоВыхода.Доступность = НЕ Объект.ЕстьПараметризацияРесурсов;
КонецПроцедуры
&НаСервере
Процедура УстановитьДоступностьЭлементовРедактированияИзделий()
РежимРедактированияОсновногоИзделия = ИспользуетсяРежимРедактированияОсновногоИзделия(ЭтотОбъект);
Элементы.ГруппаОдноИзделие.Видимость = РежимРедактированияОсновногоИзделия;
Элементы.ГруппаНесколькоИзделий.Видимость = Не РежимРедактированияОсновногоИзделия;
КонецПроцедуры
&НаСервере
Процедура УстановитьДоступностьЭлементовПоСтатусуСервер()
Если ТолькоПросмотр Тогда
Возврат;
КонецЕсли;
ДоступностьРеквизитов = (Объект.Статус = Перечисления.СтатусыСпецификаций.ВРазработке);
СпецификацияЗакрыта = (Объект.Статус = Перечисления.СтатусыСпецификаций.Закрыта);
МассивЭлементов = ПолучитьБлокируемыеРеквизитыОбъекта();
МассивЭлементов.Добавить("ЕстьПромежуточныйВыпуск");
ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементовФормы(Элементы, МассивЭлементов, "ТолькоПросмотр", НЕ ДоступностьРеквизитов);
МассивЭлементов.Очистить();
МассивЭлементов.Добавить("МатериалыИУслугиВвестиРазрешениеНаЗамену");
ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементовФормы(Элементы, МассивЭлементов, "ТолькоПросмотр", ДоступностьРеквизитов);
МассивЭлементов.Очистить();
МассивЭлементов.Добавить("НачалоДействия");
МассивЭлементов.Добавить("КонецДействия");
МассивЭлементов.Добавить("ПечатьМаршрутнойКартыПоЭтапам");
МассивЭлементов.Добавить("ПечатьМаршрутнойКартыПоМаршрутнымКартам");
МассивЭлементов.Добавить("Ответственный");
ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементовФормы(Элементы, МассивЭлементов, "ТолькоПросмотр", СпецификацияЗакрыта);
УстановитьДоступностьКомандБуфераОбмена(ЭтотОбъект, РаботаСТабличнымиЧастями.ЕстьСтрокиВБуфереОбмена() И ДоступностьРеквизитов);
КонецПроцедуры
&НаСервере
Процедура УстановитьДоступностьЭлементовСпособаПолученияМатериала()
Если ИспользоватьПолуфабрикатыПроизводимыеНаЭтапе Тогда
Элементы.МатериалыИУслугиСпособПолученияМатериалаРедактирование.Видимость = УправлениеПредприятием;
Элементы.МатериалыИУслугиГруппаПроизвести.Видимость = Ложь;
Иначе
Элементы.МатериалыИУслугиСпособПолученияМатериалаРедактирование.Видимость = Ложь;
Элементы.МатериалыИУслугиГруппаПроизвести.Видимость = УправлениеПредприятием;
КонецЕсли;
Элементы.МатериалыИУслугиИсточникПолученияПолуфабриката.ОграничениеТипа = Новый ОписаниеТипов("СправочникСсылка.РесурсныеСпецификации");
КонецПроцедуры
&НаСервере
Процедура УстановитьЗаголовокГруппыВыходныеПобочныеИзделия()
ЭтоСборка = Истина;
ЭтоРемонт = Ложь;
Если ЭтоСборка ИЛИ ЭтоРемонт Тогда
Если ИспользоватьПолуфабрикатыПроизводимыеНаЭтапе Тогда
Результат = НСтр("ru = 'Побочный и промежуточный выход'");
Иначе
Результат = НСтр("ru = 'Побочный выход'");
КонецЕсли;
Иначе
Результат = НСтр("ru = 'Выходные изделия'");
КонецЕсли;
Элементы.ГруппаВыходныеПобочныеИзделия.Заголовок = Результат;
КонецПроцедуры
&НаСервере
Процедура УстановитьЗаголовокТабличнойЧастиВозвратныеОтходы()
Если ИспользоватьПолуфабрикатыПроизводимыеНаЭтапе Тогда
Результат = НСтр("ru = 'Побочный и промежуточный выход по фиксированной стоимости'");
Иначе
Результат = НСтр("ru = 'Побочный выход по фиксированной стоимости'");
КонецЕсли;
Элементы.ГруппаВозвратныеОтходы.Заголовок = Результат;
КонецПроцедуры
&НаСервере
Процедура УстановитьКлючСохраненияПоложенияОкна()
МассивПризнаков = Новый Массив;
МассивПризнаков.Добавить(ИспользуетсяПроизводство21);
МассивПризнаков.Добавить(ИспользуетсяПроизводство22);
МассивПризнаков.Добавить(ИспользоватьПолуфабрикатыПроизводимыеНаЭтапе);
КлючСохраненияПоложенияОкна = СтрШаблон("%1_%2", ИмяФормы, СтрСоединить(МассивПризнаков));
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ПредставлениеТабличнойЧастиВозвратныеОтходы(Форма)
Возврат ?(Форма.Объект.ТипПроизводственногоПроцесса = ПредопределенноеЗначение("Перечисление.ТипыПроизводственныхПроцессов.Разборка"),
Форма.Элементы.ГруппаВозвратныеОтходы.Заголовок,
Форма.Элементы.ГруппаВыходныеПобочныеИзделия.Заголовок);
КонецФункции
&НаСервере
Функция КомандаПроверитьЗаполнениеВСтатусеДействует()
Результат = Ложь;
РежимПроверкиЗаполненияВСтатусеДействует = Истина;
Если ПроверитьЗаполнениеОсновногоИзделия()
И ПроверитьЗаполнение() Тогда
Результат = Истина;
КонецЕсли;
РежимПроверкиЗаполненияВСтатусеДействует = Ложь;
Возврат Результат;
КонецФункции
&НаСервере
Процедура УстановитьДоступностьКомандИзмененияСтатуса()
Элементы.УстановитьСтатусДействует.Доступность = (Объект.Статус <> Перечисления.СтатусыСпецификаций.Действует);
Элементы.УстановитьСтатусаЗакрыта.Доступность = (Объект.Статус <> Перечисления.СтатусыСпецификаций.Закрыта);
Элементы.УстановитьСтатусВРазработке.Доступность = (Объект.Статус <> Перечисления.СтатусыСпецификаций.ВРазработке);
Элементы.ПроверитьЗаполнение.Доступность = (Объект.Статус <> Перечисления.СтатусыСпецификаций.Действует);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьНовыйСтатусИЗаписать(Статус)
ОчиститьСообщения();
Если Объект.ПометкаУдаления Тогда
ТекстПредупреждения = НСтр("ru = 'Нельзя изменить статус помеченной на удаление спецификации.'");
ПоказатьПредупреждение(,ТекстПредупреждения);
Возврат;
КонецЕсли;
Если Статус = ПредопределенноеЗначение("Перечисление.СтатусыСпецификаций.Действует") Тогда
Если Не ПроверитьЗаполнениеОсновногоИзделия() Тогда
Возврат;
КонецЕсли;
КонецЕсли;
Если Статус = ПредопределенноеЗначение("Перечисление.СтатусыСпецификаций.Закрыта")
И НЕ ЗначениеЗаполнено(Объект.КонецДействия) Тогда
Объект.КонецДействия = ОбщегоНазначенияКлиент.ДатаСеанса();
КонецЕсли;
ЗаписатьСпецификацию(Статус);
КонецПроцедуры
&НаКлиенте
Функция ЗаписатьСпецификацию(Статус = Неопределено)
ОценкаПроизводительностиКлиент.ЗамерВремени(
"Справочник.РесурсныеСпецификации.Форма.ФормаЭлемента.ЗаписатьСпецификацию");
ОчиститьСообщения();
Результат = ЗаписатьСпецификациюНаСервере(Статус);
Если Результат Тогда
Оповестить("Запись_РесурсныеСпецификации");
ОповеститьОбИзменении(Объект.Ссылка);
ОповеститьОбИзменении(Тип("СправочникСсылка.ЭтапыПроизводства"));
КонецЕсли;
Возврат Результат;
КонецФункции
&НаСервере
Функция ЗаписатьСпецификациюНаСервере(Знач Статус = Неопределено)
Результат = Ложь;
ИзменитьСтатус = Статус <> Неопределено И Объект.Статус <> Статус;
Если ИзменитьСтатус Тогда
ТекущийСтатус = Объект.Статус;
Объект.Статус = Статус;
КонецЕсли;
Попытка
Результат = Записать();
Исключение
Если ИзменитьСтатус Тогда
СобытиеЖурналаРегистрации = НСтр("ru = 'Не удалось изменить статус спецификации'",
ОбщегоНазначения.КодОсновногоЯзыка());
Иначе
СобытиеЖурналаРегистрации = НСтр("ru = 'Не удалось записать спецификацию'",
ОбщегоНазначения.КодОсновногоЯзыка());
КонецЕсли;
ЗаписьЖурналаРегистрации(
СобытиеЖурналаРегистрации,
УровеньЖурналаРегистрации.Ошибка,
,
,
ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
Если ИзменитьСтатус И НЕ Результат Тогда
Объект.Статус = ТекущийСтатус;
КонецЕсли;
Возврат Результат;
КонецФункции
&НаКлиенте
Процедура ОбработчикУстановитьСтатусВРазработке(РезультатЗакрытия, ДополнительныеПараметры) Экспорт
Если РезультатЗакрытия = Истина Тогда
УстановитьНовыйСтатусИЗаписать(ПредопределенноеЗначение("Перечисление.СтатусыСпецификаций.ВРазработке"));
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбработкаВыбораПодборНаСервере(ВыбранноеЗначение)
Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") И ВыбранноеЗначение.Свойство("АдресТоваровВХранилище")
И ЭтоАдресВременногоХранилища(ВыбранноеЗначение.АдресТоваровВХранилище) Тогда
СписокТоваров = ПолучитьИзВременногоХранилища(ВыбранноеЗначение.АдресТоваровВХранилище);
Иначе
Возврат;
КонецЕсли;
ИмяТЧ = "МатериалыИУслуги";
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
СтруктураДействий.Вставить("ЗаполнитьПризнакСерииИспользуются", Новый Структура("Номенклатура", "СерииИспользуются"));
СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры"));
СтруктураДействий.Вставить("ПроверитьХарактеристикуПоВладельцу");
СтруктураДействий.Вставить("ПроверитьЗаполнитьУпаковкуПоВладельцу");
ОбрабатываемыеСтроки = Новый Массив();
Таблица = Объект[ИмяТЧ];
Для каждого СтрокаТовара Из СписокТоваров Цикл
ТекущаяСтрока = Таблица.Добавить();
ЗаполнитьЗначенияСвойств(ТекущаяСтрока, СтрокаТовара);
ПриВводеНовойСтрокиСпецификации(ЭтотОбъект, ИмяТЧ, ТекущаяСтрока);
ОбрабатываемыеСтроки.Добавить(ТекущаяСтрока);
КонецЦикла;
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
ОбрабатываемыеСтроки,
СтруктураДействий,
Таблица);
ЗаполнитьСлужебныеРеквизитыМатериалыИУслуги();
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаВводаДолиСтоимости(Элемент, ТекущиеДанные, ВыбранноеЗначение)
Если ТекущиеДанные.ДоляСтоимости <> ВыбранноеЗначение.ДоляСтоимости Тогда
ПроизводствоКлиентСервер.ЗаполнитьДолюСтоимостиВСтроке(
ТекущиеДанные,
ВыбранноеЗначение);
РассчитатьПроцентРаспределенияЗатратНаВыходныеИзделия();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьВыборПоляВТаблице(ИмяТаблицы, Поле, СтандартнаяОбработка)
Если ДоступностьРеквизитов И НЕ (ТолькоПросмотр ИЛИ Поле.ТолькоПросмотр) Тогда
Возврат;
КонецЕсли;
ИмяПоля = Поле.Имя;
ТекущиеДанные = Элементы[ИмяТаблицы].ТекущиеДанные;
Если (СтрНайти(ИмяПоля, "Номенклатура") > 0
ИЛИ СтрНайти(ИмяПоля, "Артикул") > 0)
И ЗначениеЗаполнено(ТекущиеДанные.Номенклатура) Тогда
СтандартнаяОбработка = Ложь;
ПоказатьЗначение(, ТекущиеДанные.Номенклатура);
ИначеЕсли СтрНайти(ИмяПоля, "Спецификация") > 0
И ЗначениеЗаполнено(ТекущиеДанные.Спецификация) Тогда
СтандартнаяОбработка = Ложь;
ПоказатьЗначение(, ТекущиеДанные.Спецификация);
ИначеЕсли СтрНайти(ИмяПоля, "ЭтапРедактирование") > 0
И ЗначениеЗаполнено(ТекущиеДанные.ЭтапРедактирование) Тогда
СтандартнаяОбработка = Ложь;
ПоказатьЗначение(, ТекущиеДанные.ЭтапРедактирование);
ИначеЕсли ИмяПоля = "ТрудозатратыСтатьяКалькуляции"
И ЗначениеЗаполнено(ТекущиеДанные.СтатьяКалькуляции) Тогда
СтандартнаяОбработка = Ложь;
ПоказатьЗначение(, ТекущиеДанные.СтатьяКалькуляции);
ИначеЕсли ИмяПоля = "МатериалыИУслугиСтатьяКалькуляции"
И ЗначениеЗаполнено(ТекущиеДанные.СтатьяКалькуляции)
И Не ТекущиеДанные.ПроизводитсяВПроцессе Тогда
СтандартнаяОбработка = Ложь;
ПоказатьЗначение(, ТекущиеДанные.СтатьяКалькуляции);
ИначеЕсли (ИмяПоля = "ТрудозатратыВидРабот")
И ЗначениеЗаполнено(ТекущиеДанные.ВидРабот) Тогда
СтандартнаяОбработка = Ложь;
ПоказатьЗначение(, ТекущиеДанные.ВидРабот);
ИначеЕсли (СтрНайти(ИмяПоля, "ДоляСтоимостиПроцент") > 0 ИЛИ СтрНайти(ИмяПоля, "ЕстьОшибкиЗаполненияДолиСтоимости") > 0)
И Объект.СпособРаспределенияЗатратНаВыходныеИзделия <> ПредопределенноеЗначение("Перечисление.СпособыРаспределенияЗатратНаВыходныеИзделия.ПоДолямСтоимости") Тогда
СтандартнаяОбработка = Ложь;
ОткрытьФормуВводаДолиСтоимости(ТекущиеДанные);
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьФлагТребуетсяУказыватьСерии(СписокТЧ, Номенклатура, НовоеЗначение, Форма)
МассивТЧ = СтрРазделить(СписокТЧ, ",");
Для каждого ИмяТЧ Из МассивТЧ Цикл
Для каждого ДанныеСтроки Из Форма.Объект[ИмяТЧ] Цикл
Если ДанныеСтроки.Номенклатура = Номенклатура Тогда
ДанныеСтроки.ТребуетсяУказыватьСерии = НовоеЗначение;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ОбновитьЭлементыДополнительныхРеквизитов()
УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьФормуВводаДолиСтоимости(ТекущиеДанные)
НетОшибок = ПроизводствоКлиент.ПроверитьЗаполнениеПередВводомДолиСтоимости(ТекущиеДанные, ПараметрыРаспределенияЗатрат);
Если НетОшибок Тогда
ПараметрыФормы = ПараметрыФормыВводаДолиСтоимости(ТекущиеДанные.ПолучитьИдентификатор());
ОткрытьФорму("ОбщаяФорма.ВводДолиСтоимости",
ПараметрыФормы,
ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОчиститьНастройкуОбработатьПоСпецификации(ТекущиеДанные)
Если ТекущиеДанные.ОбработатьПоСпецификации Тогда
ТекущиеДанные.ОбработатьПоСпецификации = Ложь;
ТекущиеДанные.Спецификация = Неопределено;
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьСвойстваСворачиваемойГруппы(ЭлементГруппа, КартинкаГруппы, ГруппаСвернута)
ЭлементГруппа.Видимость = НЕ ГруппаСвернута;
Если ГруппаСвернута Тогда
КартинкаГруппы.Картинка = БиблиотекаКартинок.СтрелкаВправо;
Иначе
КартинкаГруппы.Картинка = БиблиотекаКартинок.СтрелкаВниз;
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура НастроитьВариантыНазначенияСпецификации(Форма)
Элементы = Форма.Элементы;
Объект = Форма.Объект;
ЭтоСборка = (Объект.ТипПроизводственногоПроцесса = ПредопределенноеЗначение("Перечисление.ТипыПроизводственныхПроцессов.Сборка"));
Элементы.ВариантНазначения.Видимость = Ложь;
СписокВыбора = Элементы.ВариантНазначения.СписокВыбора;
СписокВыбора.Очистить();
СписокВыбора.Добавить(ПредопределенноеЗначение("Перечисление.ВариантыНазначенияСпецификации.ВидНоменклатуры"), НСтр("ru = 'вид номенклатуры'"));
СписокВыбора.Добавить(ПредопределенноеЗначение("Перечисление.ВариантыНазначенияСпецификации.Номенклатура"), НСтр("ru = 'номенклатура'"));
Если ЭтоСборка И НЕ ЭтоТехнологическийНабор(Форма) Тогда
СписокВыбора.Добавить(ПредопределенноеЗначение("Перечисление.ВариантыНазначенияСпецификации.СписокНоменклатуры"), НСтр("ru = 'список номенклатуры'"));
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьЭтапВСтроках(ИмяТЧ)
Если НЕ РаботаСТабличнымиЧастямиКлиент.ВыбранаСтрокаДляВыполненияКоманды(Элементы[ИмяТЧ]) Тогда
Возврат;
КонецЕсли;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ИмяТЧ", ИмяТЧ);
ПараметрыФормы.Вставить("АдресВХранилище", ДеревоЭлементовПроизводственногоПроцессаДляВыбораВХранилище(ПараметрыФормы));
ОткрытьФорму(
"Справочник.РесурсныеСпецификации.Форма.ФормаВыбораЭлементаПроизводственногоПроцесса",
ПараметрыФормы,
ЭтотОбъект,,,,,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьСтатьюКалькуляцииВСтроках(ИмяТЧ)
Если НЕ РаботаСТабличнымиЧастямиКлиент.ВыбранаСтрокаДляВыполненияКоманды(Элементы[ИмяТЧ]) Тогда
Возврат;
КонецЕсли;
Отбор = Новый Структура;
Отбор.Вставить("ТипЗатрат", ПроизводствоКлиент.ТипыЗатратДляВыбораСтатьиКалькуляции(ИмяТЧ));
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Отбор", Отбор);
ПараметрыФормы.Вставить("МножественныйВыбор", Ложь);
ОписаниеОповещения = Новый ОписаниеОповещения("ЗаполнитьСтатьюКалькуляцииВСтрокахЗавершение", ЭтотОбъект, ИмяТЧ);
ОткрытьФорму(
"Справочник.СтатьиКалькуляции.ФормаВыбора",
ПараметрыФормы,
ЭтотОбъект,,,,
ОписаниеОповещения,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьСтатьюКалькуляцииВСтрокахЗавершение(РезультатЗакрытия, ИмяТЧ) Экспорт
Если РезультатЗакрытия = Неопределено Тогда
Возврат;
КонецЕсли;
ВыделенныеСтроки = Элементы[ИмяТЧ].ВыделенныеСтроки;
ТабличнаяЧасть = Объект[ИмяТЧ];
Для каждого ИдентификаторСтроки Из ВыделенныеСтроки Цикл
ТекущиеДанные = ТабличнаяЧасть.НайтиПоИдентификатору(ИдентификаторСтроки);
ТекущиеДанные.СтатьяКалькуляции = РезультатЗакрытия;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ФормаСкопироватьЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Не Результат = КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;
СсылкаРезультат = ФормаСкопироватьЗавершениеНаСервере();
УправлениеДаннымиОбИзделияхКлиент.КопироватьРесурснуюСпецификациюПослеКопирования(СсылкаРезультат);
КонецПроцедуры
&НаСервере
Функция ФормаСкопироватьЗавершениеНаСервере()
Если НЕ ЗначениеЗаполнено(Объект.Ссылка) ИЛИ Модифицированность Тогда
Если НЕ Записать() Тогда
Возврат Неопределено;
КонецЕсли;
КонецЕсли;
Возврат УправлениеДаннымиОбИзделияхВызовСервера.КопироватьРесурснуюСпецификацию(Объект.Ссылка);
КонецФункции
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
КонецПроцедуры
&НаСервере
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт
ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_СвойстваВыполнитьКоманду(ЭлементИлиКоманда, НавигационнаяСсылка = Неопределено, СтандартнаяОбработка = Неопределено)
УправлениеСвойствамиКлиент.ВыполнитьКоманду(ЭтотОбъект, ЭлементИлиКоманда, СтандартнаяОбработка);
КонецПроцедуры
#КонецОбласти
#КонецОбласти