Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Проблемы с внешним отчетом (Общий отчет по "отчет производства за смену")          
mabuta_account Подменю пользователя
сообщение 21.03.12, 4:43
Сообщение #1

Молчаливый
*
Группа: Пользователи
Сообщений: 6
Спасибо сказали: 0 раз
Рейтинг: 0

Добрый день!

Уже как два дня сижу над отчетом но ничего не выходит...Платформа стоит 8.2.15.289, конфигурация бухгалтерия для Украины релиз 1.2.5.3

Суть проблемы заключается вот в чем:

Есть внешний отчет, который выбирает за конкретный день все документы "отчет производства за смену" и должен выводить сначала продукцию которая производиться в каждом документе, а затем материалы с которых сделана продукция, проблема заключается вот в чем:

Отчет по циклу перебирает все документы и соответственно выводит материалы конкретно для каждого документа а нужно что выводилась сводная таблица (наименование,количество, ед.измерения) по всем документам за день, и с условием что если номенклатура совпадает то суммировать количество и вставлять одну строку, а если нет то добавлять новую строку соответственно.

Вот основная функция запроса:

Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ДатаОтчета",ДатаОтчета);
    Запрос.Текст =
    "ВЫБРАТЬ
    | Док.Номер КАК Номер,
    | Док.Дата КАК Дата,
    | Док.Организация КАК Организация,
    | Док.Ссылка КАК Ссылка
    |ИЗ
    | Документ.ОтчетПроизводстваЗаСмену КАК Док
    |ГДЕ
    | Док.Дата = &ДатаОтчета";
    Выборка=Запрос.Выполнить().Выбрать();
    
    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ОтчетПроизводстваЗаСмену_Накладная";

    Макет = ПолучитьМакет("Накладная");

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

        Основа.Параметры.Заполнить(ВыборкаСтрокПродукция);
        Основа.Параметры.Товар = СокрЛП(ВыборкаСтрокПродукция.Товар);
        Основа.Параметры.НомерСтроки = ВыборкаТабПродукция.Индекс(ВыборкаСтрокПродукция) + 1;
        Основа.Параметры.Количество = ВыборкаСтрокПродукция.Количество;
        Основа.Параметры.Ед = ВыборкаСтрокПродукция.ЕдиницаИзмерения;
        
        ТабДокумент.Вывести(Основа);
        КонецЦикла;

        
        ///Выборка Материалов
        
        ОбластьМатериалы = Макет.ПолучитьОбласть("Мат");
        
        Запрос = Новый Запрос;
        Запрос.УстановитьПараметр("СсылкаНаДокумент",СсылкаНаДокумент);
        Запрос.Текст = "ВЫБРАТЬ
                   |    ВложенныйЗапрос.Номенклатура,
                   |    ВЫРАЗИТЬ(ВложенныйЗапрос.Номенклатура.НаименованиеПолное КАК Строка(200)) КАК Товар,
                   |    ВложенныйЗапрос.Количество КАК Количество,
                   |    ВложенныйЗапрос.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
                   |    ВложенныйЗапрос.НомерСтроки КАК НомерСтроки
                   |ИЗ
                   |    (ВЫБРАТЬ
                   |        ОтчетПроизводстваЗаСмену.Номенклатура КАК Номенклатура,
                   |        ОтчетПроизводстваЗаСмену.Номенклатура.БазоваяЕдиницаИзмерения.Наименование КАК ЕдиницаИзмерения,
                   |        СУММА(ОтчетПроизводстваЗаСмену.Количество) КАК Количество,
                   |        МИНИМУМ(ОтчетПроизводстваЗаСмену.НомерСтроки) КАК НомерСтроки
                   |    ИЗ
                   |        Документ.ОтчетПроизводстваЗаСмену.Материалы КАК ОтчетПроизводстваЗаСмену
                   |    
                   |    ГДЕ
                   |        ОтчетПроизводстваЗаСмену.Ссылка = &СсылкаНаДокумент
                   |    
                   |    СГРУППИРОВАТЬ ПО
                   |        ОтчетПроизводстваЗаСмену.Номенклатура) КАК ВложенныйЗапрос
                   |
                   |УПОРЯДОЧИТЬ ПО
                   |    НомерСтроки";
        ВыборкаТабМатериалы = Запрос.Выполнить().Выгрузить();
        Для каждого ВыборкаСтрокМатериалы Из ВыборкаТабМатериалы Цикл
        
        Если НЕ ЗначениеЗаполнено(ВыборкаСтрокМатериалы.Номенклатура) Тогда
            Сообщить(НСтр("ru='В одной из строк не заполнено значение номенклатуры - строка при печати пропущена.';uk='В одному з рядків не заповнене значення номенклатури - рядок під час друку буде пропущений.'"), СтатусСообщения.Важное);
            Продолжить;
        КонецЕсли;

        ОбластьМатериалы.Параметры.Заполнить(ВыборкаСтрокМатериалы);
        
        Материал = СокрЛП(ВыборкаСтрокМатериалы.Товар);
        Количество = ВыборкаСтрокМатериалы.Количество;
        Номер = ВыборкаТабМатериалы.Индекс(ВыборкаСтрокМатериалы) + 1;
        Ед = ВыборкаСтрокМатериалы.ЕдиницаИзмерения;
        
        ОбластьМатериалы.Параметры.ТоварМ = Материал;
        ОбластьМатериалы.Параметры.НомерСтрокиМ = Номер;
        ОбластьМатериалы.Параметры.КоличествоМ = Количество;
        ОбластьМатериалы.Параметры.ЕдМ = Ед;
        
         ТабДокумент.Вывести(ОбластьМатериалы);
    
     КонецЦикла;
    
КонецЦикла;
    Возврат ТабДокумент;


Буду очень благодарен за любую помощь!!!

Ниже приложу картинки отчета как на данный момент выводит alt1 [x] и как должно быть alt2 [x]


 ! 

Картинки удалены, ознакомьтесь с правилами
 


Сообщение отредактировал Vofka - 21.03.12, 8:52

Magdych Подменю пользователя
сообщение 21.03.12, 9:12
Сообщение #2

Говорящий
***
Группа: Пользователи
Сообщений: 63
Спасибо сказали: 14 раз
Рейтинг: 0

Есть такая конструкция как "Итоги По". И запрос всего один нужен к двум таб. частям одновременно.
А что Ваш отчет покажет, если выпускалось несколько видов продукции за смену?

З.Ы. Запросы в цикле не есть хорошо. Да и запросы к документам, а не к движениям тоже.

Спасибо сказали: mabuta_account,

mabuta_account Подменю пользователя
сообщение 21.03.12, 10:41
Сообщение #3

Молчаливый
*
Группа: Пользователи
Сообщений: 6
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(Magdych @ 21.03.12, 9:12) *
Есть такая конструкция как "Итоги По". И запрос всего один нужен к двум таб. частям одновременно.
А что Ваш отчет покажет, если выпускалось несколько видов продукции за смену?

З.Ы. Запросы в цикле не есть хорошо. Да и запросы к документам, а не к движениям тоже.


Продукция выпускается только одна на один документ, а по документам, потому что именно так можно сделать то требует отчет.

Я так понял один запрос, это объединить с помощью ОБЪДЕНИТЬ ПО ? И разве Итоги смогу обьединить так как нужно учитывая совпадение номенклатуры?

Magdych Подменю пользователя
сообщение 21.03.12, 11:12
Сообщение #4

Говорящий
***
Группа: Пользователи
Сообщений: 63
Спасибо сказали: 14 раз
Рейтинг: 0

Выбрать 
Продукция,
Материал,
Кво
Из
<таб часть Продукция>
Левое соединение <таб часть материалы>
По
Таб продукция.ссылка = таб. материалы.ссылка

Итоги
Сумма(Кво)
ПО
Продукция


Как то так.


Да, в итоги еще материал подсунуть забыл.

Спасибо сказали: mabuta_account,

mabuta_account Подменю пользователя
сообщение 21.03.12, 15:53
Сообщение #5

Молчаливый
*
Группа: Пользователи
Сообщений: 6
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(Magdych @ 21.03.12, 11:12) *
Выбрать 
Продукция,
Материал,
Кво
Из
<таб часть Продукция>
Левое соединение <таб часть материалы>
По
Таб продукция.ссылка = таб. материалы.ссылка

Итоги
Сумма(Кво)
ПО
Продукция


Как то так.


Да, в итоги еще материал подпосунуть забыл.

То есть я так понял это объединение двух последних запросов, а что делать с запросом который выбирает документы за день, он же запускает цикл, и поэтому будет
в результате тоже аналогично моему результату?

Magdych Подменю пользователя
сообщение 21.03.12, 16:07
Сообщение #6

Говорящий
***
Группа: Пользователи
Сообщений: 63
Спасибо сказали: 14 раз
Рейтинг: 0

Цитата(mabuta_account @ 21.03.12, 15:53) *
То есть я так понял это объединение двух последних запросов, а что делать с запросом который выбирает документы за день


Сломать и сжечь

Цитата(mabuta_account @ 21.03.12, 15:53) *
, он же запускает цикл, и поэтому будет
в результате тоже аналогично моему результату?


Тут ничего не понял.

Консоль отчетов знаете где находится? Вставьте туда вот это и пожмакайте на кнопки для наглядности

ВЫБРАТЬ
    ОтчетПроизводстваЗаСменуМатериалы.Номенклатура КАК Материал,
    ОтчетПроизводстваЗаСменуПродукция.Номенклатура КАК Номенклатура,
    ОтчетПроизводстваЗаСменуПродукция.Количество КАК Количество,
    ОтчетПроизводстваЗаСменуМатериалы.Ссылка
ИЗ
    Документ.ОтчетПроизводстваЗаСмену.Продукция КАК ОтчетПроизводстваЗаСменуПродукция
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтчетПроизводстваЗаСмену.Материалы КАК ОтчетПроизводстваЗаСменуМатериалы
        ПО ОтчетПроизводстваЗаСменуПродукция.Ссылка = ОтчетПроизводстваЗаСменуМатериалы.Ссылка
{ГДЕ
    ОтчетПроизводстваЗаСменуМатериалы.Ссылка.Дата}
ИТОГИ
    СУММА(Количество)
ПО
    Номенклатура,
    Материал

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.03.24, 12:56
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!