Уже как два дня сижу над отчетом но ничего не выходит...Платформа стоит 8.2.15.289, конфигурация бухгалтерия для Украины релиз 1.2.5.3
Суть проблемы заключается вот в чем:
Есть внешний отчет, который выбирает за конкретный день все документы "отчет производства за смену" и должен выводить сначала продукцию которая производиться в каждом документе, а затем материалы с которых сделана продукция, проблема заключается вот в чем:
Отчет по циклу перебирает все документы и соответственно выводит материалы конкретно для каждого документа а нужно что выводилась сводная таблица (наименование,количество, ед.измерения) по всем документам за день, и с условием что если номенклатура совпадает то суммировать количество и вставлять одну строку, а если нет то добавлять новую строку соответственно.
Вот основная функция запроса:
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ДатаОтчета",ДатаОтчета);
Запрос.Текст =
"ВЫБРАТЬ
| Док.Номер КАК Номер,
| Док.Дата КАК Дата,
| Док.Организация КАК Организация,
| Док.Ссылка КАК Ссылка
|ИЗ
| Документ.ОтчетПроизводстваЗаСмену КАК Док
|ГДЕ
| Док.Дата = &ДатаОтчета";
Выборка=Запрос.Выполнить().Выбрать();
ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ОтчетПроизводстваЗаСмену_Накладная";
Макет = ПолучитьМакет("Накладная");
Шапка = Макет.ПолучитьОбласть("Шапка");
Шапка.Параметры.ДатаОтчета = ДатаОтчета;
ТабДокумент.Вывести(Шапка);
Пока Выборка.Следующий() Цикл
ОбработкаПрерыванияПользователя();
Основа = Макет.ПолучитьОбласть("Элемент");
Основа.Параметры.НомерДок = Выборка.Номер;
СсылкаНаДокумент = Выборка.Ссылка;
///Выборка Продукции
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("СсылкаНаДокумент",СсылкаНаДокумент);
Запрос.Текст = "ВЫБРАТЬ
| ВложенныйЗапрос.Номенклатура,
| ВЫРАЗИТЬ(ВложенныйЗапрос.Номенклатура.НаименованиеПолное КАК Строка(200)) КАК Товар,
| ВложенныйЗапрос.Количество КАК Количество,
| ВложенныйЗапрос.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| ВложенныйЗапрос.НомерСтроки КАК НомерСтроки
|ИЗ
| (ВЫБРАТЬ
| ОтчетПроизводстваЗаСмену.Номенклатура КАК Номенклатура,
| ОтчетПроизводстваЗаСмену.Номенклатура.БазоваяЕдиницаИзмерения.Наименование КАК ЕдиницаИзмерения,
| СУММА(ОтчетПроизводстваЗаСмену.Количество) КАК Количество,
| МИНИМУМ(ОтчетПроизводстваЗаСмену.НомерСтроки) КАК НомерСтроки
| ИЗ
| Документ.ОтчетПроизводстваЗаСмену.Продукция КАК ОтчетПроизводстваЗаСмену
|
| ГДЕ
| ОтчетПроизводстваЗаСмену.Ссылка = &СсылкаНаДокумент
|
| СГРУППИРОВАТЬ ПО
| ОтчетПроизводстваЗаСмену.Номенклатура) КАК ВложенныйЗапрос
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки";
ВыборкаТабПродукция = Запрос.Выполнить().Выгрузить();
Для каждого ВыборкаСтрокПродукция Из ВыборкаТабПродукция Цикл
Если НЕ ЗначениеЗаполнено(ВыборкаСтрокПродукция.Номенклатура) Тогда
Сообщить(НСтр("ru='В одной из строк не заполнено значение номенклатуры - строка при печати пропущена.';uk='В одному з рядків не заповнене значення номенклатури - рядок під час друку буде пропущений.'"), СтатусСообщения.Важное);
Продолжить;
КонецЕсли;
Основа.Параметры.Заполнить(ВыборкаСтрокПродукция);
Основа.Параметры.Товар = СокрЛП(ВыборкаСтрокПродукция.Товар);
Основа.Параметры.НомерСтроки = ВыборкаТабПродукция.Индекс(ВыборкаСтрокПродукция) + 1;
Основа.Параметры.Количество = ВыборкаСтрокПродукция.Количество;
Основа.Параметры.Ед = ВыборкаСтрокПродукция.ЕдиницаИзмерения;
ТабДокумент.Вывести(Основа);
КонецЦикла;
///Выборка Материалов
ОбластьМатериалы = Макет.ПолучитьОбласть("Мат");
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("СсылкаНаДокумент",СсылкаНаДокумент);
Запрос.Текст = "ВЫБРАТЬ
| ВложенныйЗапрос.Номенклатура,
| ВЫРАЗИТЬ(ВложенныйЗапрос.Номенклатура.НаименованиеПолное КАК Строка(200)) КАК Товар,
| ВложенныйЗапрос.Количество КАК Количество,
| ВложенныйЗапрос.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| ВложенныйЗапрос.НомерСтроки КАК НомерСтроки
|ИЗ
| (ВЫБРАТЬ
| ОтчетПроизводстваЗаСмену.Номенклатура КАК Номенклатура,
| ОтчетПроизводстваЗаСмену.Номенклатура.БазоваяЕдиницаИзмерения.Наименование КАК ЕдиницаИзмерения,
| СУММА(ОтчетПроизводстваЗаСмену.Количество) КАК Количество,
| МИНИМУМ(ОтчетПроизводстваЗаСмену.НомерСтроки) КАК НомерСтроки
| ИЗ
| Документ.ОтчетПроизводстваЗаСмену.Материалы КАК ОтчетПроизводстваЗаСмену
|
| ГДЕ
| ОтчетПроизводстваЗаСмену.Ссылка = &СсылкаНаДокумент
|
| СГРУППИРОВАТЬ ПО
| ОтчетПроизводстваЗаСмену.Номенклатура) КАК ВложенныйЗапрос
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки";
ВыборкаТабМатериалы = Запрос.Выполнить().Выгрузить();
Для каждого ВыборкаСтрокМатериалы Из ВыборкаТабМатериалы Цикл
Если НЕ ЗначениеЗаполнено(ВыборкаСтрокМатериалы.Номенклатура) Тогда
Сообщить(НСтр("ru='В одной из строк не заполнено значение номенклатуры - строка при печати пропущена.';uk='В одному з рядків не заповнене значення номенклатури - рядок під час друку буде пропущений.'"), СтатусСообщения.Важное);
Продолжить;
КонецЕсли;
ОбластьМатериалы.Параметры.Заполнить(ВыборкаСтрокМатериалы);
Материал = СокрЛП(ВыборкаСтрокМатериалы.Товар);
Количество = ВыборкаСтрокМатериалы.Количество;
Номер = ВыборкаТабМатериалы.Индекс(ВыборкаСтрокМатериалы) + 1;
Ед = ВыборкаСтрокМатериалы.ЕдиницаИзмерения;
ОбластьМатериалы.Параметры.ТоварМ = Материал;
ОбластьМатериалы.Параметры.НомерСтрокиМ = Номер;
ОбластьМатериалы.Параметры.КоличествоМ = Количество;
ОбластьМатериалы.Параметры.ЕдМ = Ед;
ТабДокумент.Вывести(ОбластьМатериалы);
КонецЦикла;
КонецЦикла;
Возврат ТабДокумент;
Буду очень благодарен за любую помощь!!!
Ниже приложу картинки отчета как на данный момент выводит alt1 [x] и как должно быть alt2 [x]
! | Картинки удалены, ознакомьтесь с правилами |