Группа: Пользователи
Сообщений: 6
Спасибо сказали: 0 раз
Рейтинг: 0
Добрый день!
Уже как два дня сижу над отчетом но ничего не выходит...Платформа стоит 8.2.15.289, конфигурация бухгалтерия для Украины релиз 1.2.5.3
Суть проблемы заключается вот в чем:
Есть внешний отчет, который выбирает за конкретный день все документы "отчет производства за смену" и должен выводить сначала продукцию которая производиться в каждом документе, а затем материалы с которых сделана продукция, проблема заключается вот в чем:
Отчет по циклу перебирает все документы и соответственно выводит материалы конкретно для каждого документа а нужно что выводилась сводная таблица (наименование,количество, ед.измерения) по всем документам за день, и с условием что если номенклатура совпадает то суммировать количество и вставлять одну строку, а если нет то добавлять новую строку соответственно.
Вот основная функция запроса:
Запрос = Новый Запрос; Запрос.УстановитьПараметр("ДатаОтчета",ДатаОтчета); Запрос.Текст = "ВЫБРАТЬ | Док.Номер КАК Номер, | Док.Дата КАК Дата, | Док.Организация КАК Организация, | Док.Ссылка КАК Ссылка |ИЗ | Документ.ОтчетПроизводстваЗаСмену КАК Док |ГДЕ | Док.Дата = &ДатаОтчета"; Выборка=Запрос.Выполнить().Выбрать();
ТабДокумент = Новый ТабличныйДокумент; ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ОтчетПроизводстваЗаСмену_Накладная";
Пока Выборка.Следующий() Цикл ОбработкаПрерыванияПользователя(); Основа = Макет.ПолучитьОбласть("Элемент"); Основа.Параметры.НомерДок = Выборка.Номер; СсылкаНаДокумент = Выборка.Ссылка; ///Выборка Продукции Запрос = Новый Запрос; Запрос.УстановитьПараметр("СсылкаНаДокумент",СсылкаНаДокумент); Запрос.Текст = "ВЫБРАТЬ | ВложенныйЗапрос.Номенклатура, | ВЫРАЗИТЬ(ВложенныйЗапрос.Номенклатура.НаименованиеПолное КАК Строка(200)) КАК Товар, | ВложенныйЗапрос.Количество КАК Количество, | ВложенныйЗапрос.ЕдиницаИзмерения КАК ЕдиницаИзмерения, | ВложенныйЗапрос.НомерСтроки КАК НомерСтроки |ИЗ | (ВЫБРАТЬ | ОтчетПроизводстваЗаСмену.Номенклатура КАК Номенклатура, | ОтчетПроизводстваЗаСмену.Номенклатура.БазоваяЕдиницаИзмерения.Наименование КАК ЕдиницаИзмерения, | СУММА(ОтчетПроизводстваЗаСмену.Количество) КАК Количество, | МИНИМУМ(ОтчетПроизводстваЗаСмену.НомерСтроки) КАК НомерСтроки | ИЗ | Документ.ОтчетПроизводстваЗаСмену.Продукция КАК ОтчетПроизводстваЗаСмену | | ГДЕ | ОтчетПроизводстваЗаСмену.Ссылка = &СсылкаНаДокумент | | СГРУППИРОВАТЬ ПО | ОтчетПроизводстваЗаСмену.Номенклатура) КАК ВложенныйЗапрос | |УПОРЯДОЧИТЬ ПО | НомерСтроки"; ВыборкаТабПродукция = Запрос.Выполнить().Выгрузить(); Для каждого ВыборкаСтрокПродукция Из ВыборкаТабПродукция Цикл
Если НЕ ЗначениеЗаполнено(ВыборкаСтрокПродукция.Номенклатура) Тогда Сообщить(НСтр("ru='В одной из строк не заполнено значение номенклатуры - строка при печати пропущена.';uk='В одному з рядків не заповнене значення номенклатури - рядок під час друку буде пропущений.'"), СтатусСообщения.Важное); Продолжить; КонецЕсли;
Запрос = Новый Запрос; Запрос.УстановитьПараметр("СсылкаНаДокумент",СсылкаНаДокумент); Запрос.Текст = "ВЫБРАТЬ | ВложенныйЗапрос.Номенклатура, | ВЫРАЗИТЬ(ВложенныйЗапрос.Номенклатура.НаименованиеПолное КАК Строка(200)) КАК Товар, | ВложенныйЗапрос.Количество КАК Количество, | ВложенныйЗапрос.ЕдиницаИзмерения КАК ЕдиницаИзмерения, | ВложенныйЗапрос.НомерСтроки КАК НомерСтроки |ИЗ | (ВЫБРАТЬ | ОтчетПроизводстваЗаСмену.Номенклатура КАК Номенклатура, | ОтчетПроизводстваЗаСмену.Номенклатура.БазоваяЕдиницаИзмерения.Наименование КАК ЕдиницаИзмерения, | СУММА(ОтчетПроизводстваЗаСмену.Количество) КАК Количество, | МИНИМУМ(ОтчетПроизводстваЗаСмену.НомерСтроки) КАК НомерСтроки | ИЗ | Документ.ОтчетПроизводстваЗаСмену.Материалы КАК ОтчетПроизводстваЗаСмену | | ГДЕ | ОтчетПроизводстваЗаСмену.Ссылка = &СсылкаНаДокумент | | СГРУППИРОВАТЬ ПО | ОтчетПроизводстваЗаСмену.Номенклатура) КАК ВложенныйЗапрос | |УПОРЯДОЧИТЬ ПО | НомерСтроки"; ВыборкаТабМатериалы = Запрос.Выполнить().Выгрузить(); Для каждого ВыборкаСтрокМатериалы Из ВыборкаТабМатериалы Цикл
Если НЕ ЗначениеЗаполнено(ВыборкаСтрокМатериалы.Номенклатура) Тогда Сообщить(НСтр("ru='В одной из строк не заполнено значение номенклатуры - строка при печати пропущена.';uk='В одному з рядків не заповнене значення номенклатури - рядок під час друку буде пропущений.'"), СтатусСообщения.Важное); Продолжить; КонецЕсли;
Материал = СокрЛП(ВыборкаСтрокМатериалы.Товар); Количество = ВыборкаСтрокМатериалы.Количество; Номер = ВыборкаТабМатериалы.Индекс(ВыборкаСтрокМатериалы) + 1; Ед = ВыборкаСтрокМатериалы.ЕдиницаИзмерения;
Группа: Пользователи
Сообщений: 63
Спасибо сказали: 14 раз
Рейтинг: 0
Есть такая конструкция как "Итоги По". И запрос всего один нужен к двум таб. частям одновременно. А что Ваш отчет покажет, если выпускалось несколько видов продукции за смену?
З.Ы. Запросы в цикле не есть хорошо. Да и запросы к документам, а не к движениям тоже.
Группа: Пользователи
Сообщений: 6
Спасибо сказали: 0 раз
Рейтинг: 0
Цитата(Magdych @ 21.03.12, 9:12)
Есть такая конструкция как "Итоги По". И запрос всего один нужен к двум таб. частям одновременно. А что Ваш отчет покажет, если выпускалось несколько видов продукции за смену?
З.Ы. Запросы в цикле не есть хорошо. Да и запросы к документам, а не к движениям тоже.
Продукция выпускается только одна на один документ, а по документам, потому что именно так можно сделать то требует отчет.
Я так понял один запрос, это объединить с помощью ОБЪДЕНИТЬ ПО ? И разве Итоги смогу обьединить так как нужно учитывая совпадение номенклатуры?
Группа: Пользователи
Сообщений: 6
Спасибо сказали: 0 раз
Рейтинг: 0
Цитата(Magdych @ 21.03.12, 11:12)
Выбрать Продукция, Материал, Кво Из <таб часть Продукция> Левое соединение <таб часть материалы> По Таб продукция.ссылка = таб. материалы.ссылка
Итоги Сумма(Кво) ПО Продукция
Как то так.
Да, в итоги еще материал подпосунуть забыл.
То есть я так понял это объединение двух последних запросов, а что делать с запросом который выбирает документы за день, он же запускает цикл, и поэтому будет в результате тоже аналогично моему результату?
Группа: Пользователи
Сообщений: 63
Спасибо сказали: 14 раз
Рейтинг: 0
Цитата(mabuta_account @ 21.03.12, 15:53)
То есть я так понял это объединение двух последних запросов, а что делать с запросом который выбирает документы за день
Сломать и сжечь
Цитата(mabuta_account @ 21.03.12, 15:53)
, он же запускает цикл, и поэтому будет в результате тоже аналогично моему результату?
Тут ничего не понял.
Консоль отчетов знаете где находится? Вставьте туда вот это и пожмакайте на кнопки для наглядности
ВЫБРАТЬ ОтчетПроизводстваЗаСменуМатериалы.Номенклатура КАК Материал, ОтчетПроизводстваЗаСменуПродукция.Номенклатура КАК Номенклатура, ОтчетПроизводстваЗаСменуПродукция.Количество КАК Количество, ОтчетПроизводстваЗаСменуМатериалы.Ссылка ИЗ Документ.ОтчетПроизводстваЗаСмену.Продукция КАК ОтчетПроизводстваЗаСменуПродукция ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтчетПроизводстваЗаСмену.Материалы КАК ОтчетПроизводстваЗаСменуМатериалы ПО ОтчетПроизводстваЗаСменуПродукция.Ссылка = ОтчетПроизводстваЗаСменуМатериалы.Ссылка {ГДЕ ОтчетПроизводстваЗаСменуМатериалы.Ссылка.Дата} ИТОГИ СУММА(Количество) ПО Номенклатура, Материал
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!