В начало

Отчет по продажам и закупкам

            Имеется два документа: «ПриходнаяНакладная» и «РасходнаяНакладная».

            Нужно создать отчет, показывающий совокупные покупки и продажи по каждой номенклатуре.

            Создаем новый объект в дереве объектов в разделе «Отчеты» и называем его просто – «ЗакупкиИПродажи».

Затем в свойствах объекта создаем форму отчета и добавляем кнопку «Сформировать», после чего перетаскиваем ее на командную панель.

Далее переходим в модуль формы отчета и создаем 2 процедуры: шаблон первой автоматически создаст мастер после того как мы перейдем в модуль формы через ранее созданную команду «Сформировать», а вторую создаем руками. После чего во второй процедуре вызываем контекстным меню конструктор запросов с обработкой результатов. В конструкторе запросов нужно вставить запрос по обработке документов, который можно проверить и отладить в консоли запросов.

Листинг 1. Исходный запрос, отлаженный в консоли запросов

ВЫБРАТЬ

      Номенклатура,

      СУММА (Закупки),

      СУММА (Продажи)

ИЗ (ВЫБРАТЬ

      Номенклатура,

      Количество КАК Закупки,

      0 Продажи

ИЗ ДокументриходнаяНакладная.Товары

 

ОБЪЕДИНИТЬ ВСЕ

 

ВЫБРАТЬ

      Номенклатура,

      0 Закупки,

      Количество КАК Продажи

 

ИЗ ДокументасходнаяНакладная.Товары) КАК ВложенныйЗапрос

 

СГРУППИРОВАТЬ ПО

      Номенклатура

 

            После чего конструктор все обработает и даже создаст макет формы.

Рис. 1. Макет отчета по закупкам и продажам

Листинг 2

&НаКлиенте

Процедура Сформировать(Команда)

                ТабДок = Новый ТабличныйДокумент;

                СоздатьОтчет(ТабДок);

                ТабДококазать();

КонецПроцедуры

 

&НаСервереБезКонтекста

Процедура СоздатьОтчет (ТабДок)

                Макет = ОтчетыакупкиИПродажи.ПолучитьМакет("Макет");

                Запрос = Новый Запрос;

                Запросекст =

                               "ВЫБРАТЬ

                               |               ВложенныйЗапросоменклатура,

                               |               СУММА(ВложенныйЗапросакупки) КАК Закупки,

                               |               СУММА(ВложенныйЗапросродажи) КАК Продажи

                               |ИЗ

                               |               (ВЫБРАТЬ

                               |                               ПриходнаяНакладнаяТоварыоменклатура КАК Номенклатура,

                               |                               ПриходнаяНакладнаяТоварыоличество КАК Закупки,

                               |                               0 КАК Продажи

                               |               ИЗ

                               |                               ДокументриходнаяНакладная.Товары КАК ПриходнаяНакладнаяТовары

                               |              

                               |               ОБЪЕДИНИТЬ ВСЕ

                               |              

                               |               ВЫБРАТЬ

                               |                               РасходнаяНакладнаяТоварыоменклатура,

                               |                               0,

                               |                               РасходнаяНакладнаяТоварыоличество

                               |               ИЗ

                               |                               ДокументасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары)

                            |              КАК ВложенныйЗапрос

                               |

                               |СГРУППИРОВАТЬ ПО

                               |               ВложенныйЗапросоменклатура";

 

                Результат = Запросыполнить();

 

                ОбластьЗаголовок = МакетолучитьОбласть("Заголовок");

                ОбластьПодвал = МакетолучитьОбласть("Подвал");

                ОбластьШапкаТаблицы = МакетолучитьОбласть("ШапкаТаблицы");

                ОбластьПодвалТаблицы = МакетолучитьОбласть("ПодвалТаблицы");

                ОбластьДетальныхЗаписей = МакетолучитьОбласть("Детали");

 

                ТабДокчистить();

                ТабДокывести(ОбластьЗаголовок);

                ТабДокывести(ОбластьШапкаТаблицы);

                ТабДокачатьАвтогруппировкуСтрок();

 

                ВыборкаДетальныеЗаписи = Результатыбрать();

 

                Пока ВыборкаДетальныеЗаписиледующий() Цикл

                               ОбластьДетальныхЗаписейараметры.Заполнить(ВыборкаДетальныеЗаписи);

                               ТабДокывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень());

                КонецЦикла;

 

                ТабДокакончитьАвтогруппировкуСтрок();

                ТабДокывести(ОбластьПодвалТаблицы);

                ТабДокывести(ОбластьПодвал);

 

КонецПроцедуры

 

Рис. 2. Сформированный отчет

 

            Как следует из отчета у нас сформировалась информация по трем видам номенклатуры. В столбце «Закупке» указано количество купленного товара, а в столбце «Продажи» – проданного.

 

ПРИМЕЧАНИЕ: данный отчет выполнен на версии 8.2.