Как прописать покороче отчет

Новая тема
"Пишу отчет в ПУБе 7.7 по трудозатратам на готовую продукцию, т.е.мы выбираем готовую продукцию и по ней должны выбрать все тех операциикоторые даже входят в полуфабрикаты, а эти полуфабрикаты тоже состоят из полуфабрикатов.Подскажите как прописать правильно чтобы отследить все техОперации до конечных полуфабрикатов, я кое-что накидала, но с такой писаниной можно писать до бесконечности, если кто может подскажите какая команда мне поможет, я пробовала ВключатьПодчиненные, но я ей не правильно воспользовалась и результата нет, посмотрите подскажите, СПАСИБО.
перем ПояснениеПоНоменклатуре;
перем Колво;
//*******************************************


//*******************************************
// Процедура генерации запроса Сформировать.
//
Процедура Сформировать()
Перем Запрос, ТекстЗапроса, Таб;
//если  выбрали
Если ВыбНоменклатура.Выбран()=1 Тогда
ИтогоТ = 0;
Запрос2 = СоздатьОбъект("Запрос");
//здесь мы находим количество для выполнения плана продаж на месяц
ТекстЗапроса = "С ВыбНачПериода по ВыбКонПериода;
|Номенклатура =Регистр.План.Номенклатура;
|Количество = регистр.План.Количество;
|Функция КолвоС = НачОст(Количество);
|Условие (Номенклатура = ВыбНоменклатура);
|Группировка Номенклатура;
|"
;

Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Сформировать");
// Заполнение полей "Заголовок"
Таб.ВывестиСекцию("Заголовок");
Состояние("Заполнение выходной таблицы...");
Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);

Если Запрос2.Выполнить(ТекстЗапроса) = 0 тогда
Сообщить("Ошибка выполнения запроса");
СтатусВозврата(0);
Возврат;
КонецЕсли;

Пока Запрос2.Группировка(1) = 1 Цикл
Номенклатура = Запрос2.Номенклатура;
Артикул = Номенклатура.Артикул;
КолП = Запрос2.КолвоС;
//выводим саму продукцию или выбранную номенклатуру
Таб.ВывестиСекцию("Номенклатура");
//здесь по выбранной номенклатуре выбираем техоперации
СпрНР = СоздатьОбъект("Справочник.НормыРасходов");
СпрНР.ИспользоватьВладельца(Запрос2.Номенклатура);
СпрНР.ВыбратьЭлементы();
Пока СпрНр.ПолучитьЭлемент() = 1  Цикл
//проверка на тех операции, чтобы отбросить ненужные данные
Если СпрНР.ВидЭлемента = Перечисление.ВидыЭлементовНормРасходов.ТехОперация Тогда
Продукция = СпрНР.Владелец;
Работа = СпрНР.Элемент;
Норма = СпрНР.Норма.Получить(ВыбКонПериода);;
Стоимость = СпрНР.Стоимость.Получить(ВыбКонПериода);
//СОЗДАЕМ ЗАПРОС ДЛЯ ПОИСКА ОСТАТКА ПО РАНЕЕ ПОЛУЧЕНОЙ ТехОперации т.е. её оприходовали
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(про)
|Период с ВыбНачПериода по ВыбКонПериода;
|Обрабатывать НеПомеченныеНаУдаление;
|Наименование = Регистр.Работа.Наименование;
|Количество = Регистр.Работа.Количество;
|Цена = Регистр.Работа.Цена;
|Функция КолвоКонОст = КонОст(Количество);
|Функция ЦенаКонОст = КонОст(Цена);
|Условие(Наименование = Работа.ТекущийЭлемент());
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;

КолвоО = Запрос.КолвоКонОст;
ЦенаО = Запрос.ЦенаКонОст;
ИтогоО = Окр(КолвоО * ЦенаО,2);
КолвоТ = Окр((Норма * КолП)-КолвоО,2);
СуммаТ = Окр(КолвоТ * Стоимость,2);
ИтогоТ = ИтогоТ + СуммаТ;
//выводим саму работу
Таб.ВывестиСекцию("Работа");
//проверяем есть ли в спецификации полуфабрикаты
ИначеЕсли СпрНР.ВидЭлемента = Перечисление.ВидыЭлементовНормРасходов.Полуфабрикат Тогда
Полуфабрикат = СпрНР.Элемент;
ЗапросПолуфабрикат = СоздатьОбъект("Запрос");
//проверяем есть ли она в плане продаж
ТекстЗапроса = "С ВыбНачПериода по ВыбКонПериода;
|Номенклатура =Регистр.План.Номенклатура;
|Количество = регистр.План.Количество;
|Функция КолвоС = НачОст(Количество);
|Условие (Номенклатура = Полуфабрикат.ТекущийЭлемент());
|Группировка Номенклатура;
|"
;
Если ЗапросПолуфабрикат.Выполнить(ТекстЗапроса) = 0 тогда
Сообщить("Ошибка выполнения запроса");
СтатусВозврата(0);
Возврат;
КонецЕсли;

Пока ЗапросПолуфабрикат.Группировка(1) = 1 Цикл
Полуфабрикат1 = ЗапросПолуфабрикат.Номенклатура;
Артикул = Полуфабрикат.Артикул;
КолвоП = ЗапросПолуфабрикат.КолвоС;
//выводим полуфабрикат
Таб.ВывестиСекцию("Полуфабрикат");
СпрНР.использоватьВладельца(Полуфабрикат);
СпрНР.ВыбратьЭлементы();
Пока СпрНР.ПолучитьЭлемент()=1 Цикл
Если СпрНР.ВидЭлемента = Перечисление.ВидыЭлементовНормРасходов.ТехОпреация Тогда
Полуфабрикат2 = СпрНР.СпрНР.Владелец;
Артикул = Полуфабрикат2.Артикул;
РаботаП = СпрНР.Элемент;///и получается в таком духе до бесконечности
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;


ПояснениеПоНоменклатуре = "  Для выполнения плана в размере    "+КолП+"   шт.   по продукции   "+"*"+Номенклатура+"*" + " потребуется    "+ИтогоТ+"руб" ;
Таб.ВывестиСекцию("Итого");
// Вывод заполненной формы
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать", """");
КонецПроцедуры    
"
Читают тему
(гостей: 1)

Быстрый переход