Моя идея не была понята..
Эмм. попытаюсь донести снова.
Функцию мы используем в моем случае для получения таблицы значений/выборки по конкретному блюду.
Вызываем ее из процедуры и получаем значение в процедуре же: для чего вы процедуру из функции возвращаем только запрос.выполнить(). В моем случае заполнять параметры детальных записей(состав блюда) предполагалось заполнять в процедуре.
Код
Пока ВыборкаДетали.Следующий() Цикл
Если ВыборкаДетали.Меню.ЭтоГруппа Тогда
ОбластьГруппа.Параметры.Заполнить(ВыборкаДетали);
ТабДок.Вывести(ОбластьГруппа);
Иначе
ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали);
//далее мы получаем состав блюда и должны вывести его в макет
СоставБлюда = ВернутьСостав(ВыборкаДетали).Выбрать();
//НО ты ничего не делаешь для этого!!! ты присвоил Счетчик и..
ОбластьДетальныхЗаписей.Параметры.Счетчик = Счетчик;
//вывел строку в макет
ТабДок.Вывести(ОбластьДетальныхЗаписей);
КонецЕсли;
КонецЦикла;
Далее функция:
Код
Функция ВернутьСостав(Блюда)
Запрос = Новый Запрос;
//текст - это хорошо. но мы же должны получить состав для конкретного блюда? или..?????
//я не наблюдаю параметра запроса. Ты фактически получил ВСЕ технологические карты. Зачем?
Запрос.Текст =
"ВЫБРАТЬ
| ТехнологическиеКарты.Номенклатура,
| ТехнологическиеКарты.Ингредиент,
| ТехнологическиеКарты.Единица,
| ТехнологическиеКарты.КоличествоНетто
|ИЗ
| РегистрСведений.ТехнологическиеКарты КАК ТехнологическиеКарты";
Результат = Запрос.Выполнить();
//это что? ты в функции работаешь с макетом???
Макет = ПолучитьМакет("Меню");
ТабДок = новый ТабличныйДокумент;
ОбластьДетальныхИнгредиентов = Макет.ПолучитьОбласть("Ингредиент");
ВыборкаИнгр = Результат.Выбрать();
Пока ВыборкаИнгр.Следующий() Цикл
ОбластьДетальныхИнгредиентов.Параметры.Заполнить(ВыборкаИнгр);
ТабДок.Вывести(ОбластьДетальныхИнгредиентов);
КонецЦикла;
Возврат Запрос.Выполнить();
КонецФункции
Что я хотел донести.
ТабДок ты создаешь в основной процедуре, где обрабатываешь блюда.
Макет получаешь там же.
Основные записи выводишь там же.
Детали(состав блюда) можешь выводить как в осн.проц. так и в функции. Я рассматривал первый вариант.
Соответственно, в функции необходимо для запроса описать параметр:
Код
Запрос.УстановитьПараметр("Блюдо", Блюда); //где Блюда - параметр, передаваемый в функцию
В самом запросе добавить условие отбора по блюду:
Код
Дальше вернуть результат запроса в осн. процедуру:
Код
Возврат Запрос.Выполнить();
И уже в осн.процедуре вывести в макет:
Код
Пока СоставБлюда.Следующий() Цикл //ингр-тов же несколько!!!
ОбластьДетальныхИнгредиентов.Параметры.Заполнить(СоставБлюда);
ТабДок.Вывести(ОбластьДетальныхИнгредиентов);
КонецЦикла;
Ты же намутил...