&Вместо("РазузловатьОперации")
Процедура Расш1_РазузловатьОперации(Запрос, ДокументыРазузлования, ИмяТЧ, УровеньВложенности)
Если Запрос.МенеджерВременныхТаблиц=Неопределено Тогда
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
КонецЕсли;
Если ТипЗнч(ДокументыРазузлования)=Тип("Массив") Тогда
МассивДокументов = ДокументыРазузлования;
Иначе
МассивДокументов = Новый Массив;
Если ЗначениеЗаполнено(ДокументыРазузлования) Тогда
МассивДокументов.Добавить(ДокументыРазузлования);
КонецЕсли;
КонецЕсли;
// Выборка спецификаций из ТЧ документа
Если Запрос.МенеджерВременныхТаблиц.Таблицы.Найти("ТаблицаОпераций")=Неопределено Тогда
Если МассивДокументов.Количество()=0 ИЛИ ПустаяСтрока(ИмяТЧ) Тогда
Возврат;
КонецЕсли;
ПервыйДокумент = МассивДокументов[0];
Запрос.УстановитьПараметр("МассивДокументов", МассивДокументов);
Если ПервыйДокумент.Метаданные()=Метаданные.Документы.ЗаказПокупателя И ИмяТЧ="Запасы" И Запрос.МенеджерВременныхТаблиц.Таблицы.Найти("ВТЗаказПокупателяЗапасы")<>Неопределено Тогда
Запрос.Текст =
"ВЫБРАТЬ
0 КАК Уровень,
МИНИМУМ(ТабличнаяЧасть.НомерСтроки) КАК Порядок,
0 КАК НомерСтроки,
ЗНАЧЕНИЕ(Справочник.ЭтапыПроизводства.ПустаяСсылка) КАК Этап,
ТабличнаяЧасть.Спецификация КАК Спецификация,
ТабличнаяЧасть.Спецификация КАК ВложеннаяСпецификация,
ИСТИНА КАК ЭтоУзел,
ТабличнаяЧасть.Номенклатура КАК Операция,
//infostart //Mogilnikova
//
1 КАК НормаВремени
1 КАК НормаВремени,
ЗНАЧЕНИЕ(Справочник.Ключевыересурсы.ПустаяСсылка) КАК РесурсПредприятия,
1 КАК ДлительностьРаботы
//\\ infostart
ПОМЕСТИТЬ ТаблицаОпераций
ИЗ
ВТЗаказПокупателяЗапасы КАК ТабличнаяЧасть
ГДЕ
ТабличнаяЧасть.Спецификация <> ЗНАЧЕНИЕ(Справочник.Спецификации.ПустаяСсылка)
СГРУППИРОВАТЬ ПО
ТабличнаяЧасть.Номенклатура,
ТабличнаяЧасть.Спецификация";
Иначе
Запрос.Текст =
"ВЫБРАТЬ
0 КАК Уровень,
МИНИМУМ(ТабличнаяЧасть.НомерСтроки) КАК Порядок,
0 КАК НомерСтроки,
ЗНАЧЕНИЕ(Справочник.ЭтапыПроизводства.ПустаяСсылка) КАК Этап,
ТабличнаяЧасть.Спецификация КАК Спецификация,
ТабличнаяЧасть.Спецификация КАК ВложеннаяСпецификация,
ИСТИНА КАК ЭтоУзел,
ТабличнаяЧасть.Номенклатура КАК Операция,
//infostart //Mogilnikova
//
1 КАК НормаВремени
1 КАК НормаВремени,
ЗНАЧЕНИЕ(Справочник.Ключевыересурсы.ПустаяСсылка) КАК РесурсПредприятия,
1 КАК ДлительностьРаботы
//\\ infostart
ПОМЕСТИТЬ ТаблицаОпераций
ИЗ
Документ.ЗаказПокупателя.Запасы КАК ТабличнаяЧасть
ГДЕ
ТабличнаяЧасть.Ссылка В(&МассивДокументов)
И ТабличнаяЧасть.Спецификация <> ЗНАЧЕНИЕ(Справочник.Спецификации.ПустаяСсылка)
СГРУППИРОВАТЬ ПО
ТабличнаяЧасть.Спецификация,
ТабличнаяЧасть.Номенклатура";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ЗаказПокупателя.Запасы", ПервыйДокумент.Метаданные().Имя+"."+ИмяТЧ);
КонецЕсли;
Запрос.Выполнить();
КонецЕсли;
Запрос.УстановитьПараметр("УровеньВложенности", УровеньВложенности);
Запрос.УстановитьПараметр("ИспользоватьЭтапыПроизводства", ПолучитьФункциональнуюОпцию("ИспользоватьЭтапыПроизводства"));
Запрос.Текст =
"ВЫБРАТЬ
ТаблицаОпераций.Уровень КАК Уровень,
ТаблицаОпераций.Порядок КАК Порядок,
ТаблицаОпераций.НомерСтроки КАК НомерСтроки,
ТаблицаОпераций.Этап КАК Этап,
ТаблицаОпераций.Спецификация КАК Спецификация,
ТаблицаОпераций.ВложеннаяСпецификация КАК ВложеннаяСпецификация,
ТаблицаОпераций.ЭтоУзел КАК ЭтоУзел,
ТаблицаОпераций.Операция КАК Операция,
//infostart //Mogilnikova
//
ТаблицаОпераций.НормаВремени КАК НормаВремени
ТаблицаОпераций.НормаВремени КАК НормаВремени,
ТаблицаОпераций.РесурсПредприятия как РесурсПредприятия,
ТаблицаОпераций.ДлительностьРаботы как ДлительностьРаботы
//\\ infostart
ПОМЕСТИТЬ ВремТаблицаОпераций
ИЗ
ТаблицаОпераций КАК ТаблицаОпераций
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ТаблицаОпераций
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ТаблицаОпераций.Уровень КАК Уровень,
ТаблицаОпераций.Порядок КАК Порядок,
ТаблицаОпераций.НомерСтроки КАК НомерСтроки,
ТаблицаОпераций.Этап КАК Этап,
ТаблицаОпераций.Спецификация КАК Спецификация,
ТаблицаОпераций.ВложеннаяСпецификация КАК ВложеннаяСпецификация,
ТаблицаОпераций.ЭтоУзел КАК ЭтоУзел,
ТаблицаОпераций.Операция КАК Операция,
СУММА(ТаблицаОпераций.НормаВремени) КАК НормаВремени,
//infostart //Mogilnikova
//
НЕОПРЕДЕЛЕНО КАК Исполнитель
НЕОПРЕДЕЛЕНО КАК Исполнитель,
ТаблицаОпераций.РесурсПредприятия как РесурсПредприятия,
СУММА(ТаблицаОпераций.ДлительностьРаботы) как ДлительностьРаботы
//\\ infostart
ПОМЕСТИТЬ ТаблицаОпераций
ИЗ
(ВЫБРАТЬ
ТаблицаОпераций.Уровень КАК Уровень,
ТаблицаОпераций.Порядок КАК Порядок,
0 КАК НомерСтроки,
ТаблицаОпераций.Этап КАК Этап,
ТаблицаОпераций.Спецификация КАК Спецификация,
НЕОПРЕДЕЛЕНО КАК ВложеннаяСпецификация,
ЛОЖЬ КАК ЭтоУзел,
ТаблицаОпераций.Операция КАК Операция,
//infostart //Mogilnikova
//
ТаблицаОпераций.НормаВремени КАК НормаВремени
ТаблицаОпераций.НормаВремени КАК НормаВремени,
ТаблицаОпераций.РесурсПредприятия как РесурсПредприятия,
ТаблицаОпераций.ДлительностьРаботы как ДлительностьРаботы
//\\ infostart
ИЗ
ВремТаблицаОпераций КАК ТаблицаОпераций
ГДЕ
НЕ ТаблицаОпераций.ЭтоУзел
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ТаблицаОпераций.Уровень,
ТаблицаОпераций.Порядок,
ВЫБОР
КОГДА ТаблицаОпераций.НомерСтроки = 0
ТОГДА СпецификацииОперации.НомерСтроки
ИНАЧЕ ТаблицаОпераций.НомерСтроки
КОНЕЦ,
ВЫБОР
КОГДА НЕ &ИспользоватьЭтапыПроизводства
ТОГДА ЗНАЧЕНИЕ(Справочник.ЭтапыПроизводства.ПустаяСсылка)
КОГДА ТаблицаОпераций.Этап = ЗНАЧЕНИЕ(Справочник.ЭтапыПроизводства.ПустаяСсылка)
ТОГДА СпецификацииОперации.Этап
ИНАЧЕ ТаблицаОпераций.Этап
КОНЕЦ,
ТаблицаОпераций.Спецификация,
НЕОПРЕДЕЛЕНО,
ЛОЖЬ,
ЕСТЬNULL(СпецификацииОперации.Операция, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)),
ТаблицаОпераций.НормаВремени * ВЫБОР
КОГДА СпецификацииОперации.НормаВремени ЕСТЬ NULL
ТОГДА 1
ИНАЧЕ ВЫБОР
КОГДА СпецификацииОперации.КоличествоПродукции = 0
ТОГДА 0
ИНАЧЕ СпецификацииОперации.НормаВремени / СпецификацииОперации.КоличествоПродукции
КОНЕЦ
//infostart //Mogilnikova
//
КОНЕЦ
КОНЕЦ,
ЕСТЬNULL(СпецификацииОперации.РесурсПредприятия, ЗНАЧЕНИЕ(Справочник.Ключевыересурсы.ПустаяСсылка)),
ТаблицаОпераций.НормаВремени * ВЫБОР
КОГДА СпецификацииОперации.НормаВремени ЕСТЬ NULL
ТОГДА 1
ИНАЧЕ ВЫБОР
КОГДА СпецификацииОперации.КоличествоПродукции = 0
ТОГДА 0
ИНАЧЕ СпецификацииОперации.НормаВремени / СпецификацииОперации.КоличествоПродукции
КОНЕЦ
КОНЕЦ
//\\ infostart
ИЗ
ВремТаблицаОпераций КАК ТаблицаОпераций
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Спецификации.Операции КАК СпецификацииОперации
ПО ТаблицаОпераций.ВложеннаяСпецификация = СпецификацииОперации.Ссылка
ГДЕ
ТаблицаОпераций.ЭтоУзел
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ТаблицаОпераций.Уровень + 1,
СпецификацииСостав.НомерСтроки,
0,
ВЫБОР
КОГДА НЕ &ИспользоватьЭтапыПроизводства
ТОГДА ЗНАЧЕНИЕ(Справочник.ЭтапыПроизводства.ПустаяСсылка)
КОГДА ТаблицаОпераций.Этап = ЗНАЧЕНИЕ(Справочник.ЭтапыПроизводства.ПустаяСсылка)
ТОГДА СпецификацииСостав.Этап
ИНАЧЕ ТаблицаОпераций.Этап
КОНЕЦ,
ТаблицаОпераций.Спецификация,
СпецификацииСостав.Спецификация,
ИСТИНА,
СпецификацииСостав.Номенклатура,
ТаблицаОпераций.НормаВремени * ВЫБОР
КОГДА СпецификацииСостав.КоличествоПродукции = 0
ТОГДА 0
ИНАЧЕ СпецификацииСостав.Количество / СпецификацииСостав.КоличествоПродукции
//infostart //Mogilnikova
//
КОНЕЦ
КОНЕЦ,
ЕСТЬNULL(ТаблицаОпераций.РесурсПредприятия, ЗНАЧЕНИЕ(Справочник.Ключевыересурсы.ПустаяСсылка)),
ТаблицаОпераций.НормаВремени * ВЫБОР
КОГДА СпецификацииСостав.КоличествоПродукции = 0
ТОГДА 0
ИНАЧЕ СпецификацииСостав.Количество / СпецификацииСостав.КоличествоПродукции
КОНЕЦ
//\\ infostart
ИЗ
ВремТаблицаОпераций КАК ТаблицаОпераций
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Спецификации.Состав КАК СпецификацииСостав
ПО ТаблицаОпераций.ВложеннаяСпецификация = СпецификацииСостав.Ссылка
ГДЕ
ТаблицаОпераций.ЭтоУзел
И СпецификацииСостав.ТипСтрокиСостава = ЗНАЧЕНИЕ(Перечисление.ТипыСтрокСоставаСпецификации.Узел)
И СпецификацииСостав.Спецификация <> ЗНАЧЕНИЕ(Справочник.Спецификации.ПустаяСсылка)
И &УровеньВложенности < 50) КАК ТаблицаОпераций
СГРУППИРОВАТЬ ПО
ТаблицаОпераций.Уровень,
ТаблицаОпераций.Порядок,
ТаблицаОпераций.НомерСтроки,
ТаблицаОпераций.Этап,
ТаблицаОпераций.Спецификация,
ТаблицаОпераций.ВложеннаяСпецификация,
ТаблицаОпераций.ЭтоУзел,
//infostart //Mogilnikova
//
ТаблицаОпераций.Операция
ТаблицаОпераций.Операция,
ТаблицаОпераций.РесурсПредприятия
//\\ infostart
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ВремТаблицаОпераций
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ ПЕРВЫЕ 1
ТаблицаОпераций.Спецификация КАК Спецификация
ИЗ
ТаблицаОпераций КАК ТаблицаОпераций
ГДЕ
ТаблицаОпераций.ЭтоУзел";
Результат = Запрос.Выполнить();
Если НЕ Результат.Пустой() Тогда
РазузловатьОперации(Запрос, МассивДокументов, ИмяТЧ, УровеньВложенности+1);
КонецЕсли;
КонецПроцедуры