Документом
"Накладная на перемещение " мы завершили создание системы учета
остатков на складах и товарооборота. Но учет не имеет смысла без
отчетности. У нас уже есть отчеты, которые показывают состояние
остатков и долгов на конкретную дату. Создадим два отчета: один
нам покажет изменение долгов за какой-то период, а второй движение
по складу товаров.
Процедура ДатаН()
  Если ДатаН>ДатаК Тогда
    ДатаН=ДатаК;
  КонецЕсли;
КонецПроцедуры
//-----------------------------------------------
Процедура ДатаК()
  Если  ДатаК<ДатаН Тогдаbr>     ДатаК=ДатаН;
  ИначеЕсли ДатаК>ПолучитьДатуТА() Тогда
    ДатаК=ПолучитьДатуТА();
  КонецЕсли;
КонецПроцедуры
//-----------------------------------------------
Процедура Сформировать()
  Запрос=СоздатьОбъект("Запрос");
  ТекстЗапроса="
  |Период с ДатаН по ДатаК;
  |Контр = Регистр.Взаиморасчеты.Контрагент;
  |Догов = Регистр.Взаиморасчеты.Договор;
  |Сумма = Регистр.Взаиморасчеты.Сумма;
  |Флаг = Регистр.Взаиморасчеты.ФлагДвижения;
  |Функция СуммаНачОст = НачОст(Сумма);
  |Функция СуммаПриходТов = Приход(Сумма) когда(Флаг=1);
  |Функция СуммаРасходТов = Расход(Сумма) когда(Флаг=2);
  |Функция СуммаРасходДен = Расход(Сумма) когда(Флаг=3);
  |Функция СуммаПриходДен = Приход(Сумма) когда(Флаг=4);
  |Функция СуммаКонОст = КонОст(Сумма);
  |Группировка Контр упорядочить по Контр.Код;
  |Группировка Догов;";
  Если Запрос.Выполнить(ТекстЗапроса)=0
Тогда
    Сообщить("Запрос не выполнен");
    Возврат;
  КонецЕсли;
  Таб=СоздатьОбъект("Таблица");
  Таб.ИсходнаяТаблица("Таблица");
  ИтНачОст=Запрос.СуммаНачОст;
  ИтПрихТов=Запрос.СуммаПриходТов;
  ИтРасхДен=Запрос.СуммаРасходДен;
  ИтРасхТов=Запрос.СуммаРасходТов;
  ИтПрихДен=Запрос.СуммаПриходДен;
  ИтКонОст=Запрос.СуммаКонОст;
// для итогов перед началом прохода
по группировкам получаем
// значения функций для всей выборки сразу
  Таб.ВывестиСекцию("Шапка");
  Пока Запрос.Группировка(1)=1 Цикл
    Контра=Запрос.Контр;
    НачОст=Запрос.СуммаНачОст;
    ПрихТов=Запрос.СуммаПриходТов;
    РасхДен=Запрос.СуммаРасходДен;
    РасхТов=Запрос.СуммаРасходТов;
    ПрихДен=Запрос.СуммаПриходДен;
    КонОст=Запрос.СуммаКонОст;
    Если Контра.ЭтоГруппа()=1 Тогда
      Таб.ВывестиСекцию("Группа");
    Иначе
      Таб.ВывестиСекцию("Контра");
      Пока Запрос.Группировка(2)=1 Цикл
        Дог=Запрос.Догов;
        НачОст=Запрос.СуммаНачОст;
        ПрихТов=Запрос.СуммаПриходТов;
        РасхДен=Запрос.СуммаРасходДен;
        РасхТов=Запрос.СуммаРасходТов;
        ПрихДен=Запрос.СуммаПриходДен;
        КонОст=Запрос.СуммаКонОст;
        Таб.ВывестиСекцию("Дог");
      КонецЦикла;
    КонецЕсли;
  КонецЦикла;
  Таб.ВывестиСекцию("Итого");
  Таб.ТолькоПросмотр(1);
  Таб.ПараметрыСтраницы(1,100,1);
  Таб.Показать("");
КонецПроцедуры
//-----------------------------------------------
Процедура ДатаН()
  Если ДатаН>ДатаК Тогда
    ДатаН=ДатаК;
  КонецЕсли;
КонецПроцедуры
//-----------------------------------------------
Процедура ДатаК()
  Если  ДатаК<ДатаН Тогдаbr>     ДатаК=ДатаН;
  ИначеЕсли ДатаК>ПолучитьДатуТА() Тогда
    ДатаК=ПолучитьДатуТА();
  КонецЕсли;
КонецПроцедуры
//-----------------------------------------------
Процедура Сформировать()
  Если Склад.Выбран()=0 Тогда
    Сообщить("Не выбран склад");
    Возврат;
  КонецЕсли;
  Запрос=СоздатьОбъект("Запрос");
  ТекстЗапроса="
  |Период с ДатаН по ДатаК;
  |Скл = Регистр.ОстаткиТоваров.Склад;
  |Товар = Регистр.ОстаткиТоваров.Товар;
  |Сорт = Регистр.ОстаткиТоваров.Сорт;
  |Количество = Регистр.ОстаткиТоваров.Количество;
  |ФлагДвижения = Регистр.ОстаткиТоваров.ФлагДвижения;
  |Функция КолНачОстС = НачОст(Количество);
  |Функция КолПриходК = Приход(Количество) когда(ФлагДвижения=1);
  |Функция КолПриходВ = Приход(Количество) когда(ФлагДвижения=2);
  |Функция КолРасходВ = Расход(Количество) когда(ФлагДвижения=2);
  |Функция КолРасходК = Расход(Количество) когда(ФлагДвижения=1);
  |Функция КолКонОстС = КонОст(Количество);
  |Группировка Товар упорядочить по Товар.Код;
  |Группировка Сорт;
  |Условие(Скл=Склад);";
  Если Запрос.Выполнить(ТекстЗапроса)=0
Тогда
    Сообщить("Запрос не выполнен");
    Возврат;
  КонецЕсли;
  Таб=СоздатьОбъект("Таблица");
  Таб.ИсходнаяТаблица("");
  Таб.ВывестиСекцию("Шапка");
  ИтНачОстС = Запрос.КолНачОстС;
  ИтПриходК = Запрос.КолПриходК;
  ИтПриходВ = Запрос.КолПриходВ;
  ИтРасходВ = Запрос.КолРасходВ;
  ИтРасходК = Запрос.КолРасходК;
  ИтКонОстС = Запрос.КолКонОстС;
  Пока Запрос.Группировка("Товар")=1 Цикл
    ТТов=Запрос.Товар;
    НачОстС = Запрос.КолНачОстС;
    ПриходК = Запрос.КолПриходК;
    ПриходВ = Запрос.КолПриходВ;
    РасходВ = Запрос.КолРасходВ;
    РасходК = Запрос.КолРасходК;
    КонОстС = Запрос.КолКонОстС;
    Если ТТов.ЭтоГруппа()=1 Тогда
      Тов=СокрЛП(ТТов.Наименование);
      Таб.ВывестиСекцию("Группа");
    Иначе
      Тов=СокрЛП(ТТов.Код)+" ("+СокрЛП(ТТов.Наименование)+")";
      НачОстС = Запрос.КолНачОстС;
      ПриходК = Запрос.КолПриходК;
      ПриходВ = Запрос.КолПриходВ;
      РасходВ = Запрос.КолРасходВ;
      РасходК = Запрос.КолРасходК;
      КонОстС = Запрос.КолКонОстС;
      Таб.ВывестиСекцию("Товар");
      Пока Запрос.Группировка("Сорт")=1 Цикл
        Срт=Запрос.Сорт;
        НачОстС = Запрос.КолНачОстС;
        ПриходК = Запрос.КолПриходК;
        ПриходВ = Запрос.КолПриходВ;
        РасходВ = Запрос.КолРасходВ;
        РасходК = Запрос.КолРасходК;
        КонОстС = Запрос.КолКонОстС;
        Таб.ВывестиСекцию("Сорт");
      КонецЦикла;
    КонецЕсли;
  КонецЦикла;
  Таб.ВывестиСекцию("Итого");
  Таб.ТолькоПросмотр(1);
  Таб.ПараметрыСтраницы(1,100,1);
  Таб.Показать("");
КонецПроцедуры
Во многом модуль этого отчета похож на предыдущий.
В регистре
"ОстаткиТовара" мы хранили такую информацию, как сумма поступления
и сумма реализации. Создадим отчет, показывающий прибыль, которую
мы получили в результате нашей хозяйственной деятельности.
Процедура ДатаН()
  Если ДатаН>ДатаК Тогда
    ДатаН=ДатаК;
  КонецЕсли;
КонецПроцедуры
//-----------------------------------------------
Процедура ДатаК()
  Если  ДатаК<ДатаН Тогдаbr>     ДатаК=ДатаН;
  ИначеЕсли ДатаК>ПолучитьДатуТА() Тогда
    ДатаК=ПолучитьДатуТА();
  КонецЕсли;
КонецПроцедуры
//-----------------------------------------------
Процедура Сформировать()
  Запрос=СоздатьОбъект("Запрос");
  ТекстЗапроса="
  |Период с ДатаН по ДатаК;
  |Скл = Регистр.ОстаткиТоваров.Склад;
  |Товар = Регистр.ОстаткиТоваров.Товар;
  |Сорт = Регистр.ОстаткиТоваров.Сорт;
  |Количество = Регистр.ОстаткиТоваров.Количество;
  |СуммаП = Регистр.ОстаткиТоваров.СуммаП;
  |СуммаД = Регистр.ОстаткиТоваров.СуммаД;
  |Ф = Регистр.ОстаткиТоваров.ФлагДвижения;
  |Функция КоличРасходС = Расход(Количество) когда(Ф=1);
  |Функция СуммаПРасход = Расход(СуммаП) когда(Ф=1);
  |Функция СуммаДРасход = Расход(СуммаД) когда(Ф=1);
  |Группировка Товар упорядочить по Товар.Код без групп;
  |Группировка Сорт упорядочить по Сорт.Код;";
// Мы не хотим в запросе получать
группы товара (для примера)
  СклТекст="По всем складам";
  Если Склад.Выбран()=1 Тогда
    СклТекст="По складу: "+СокрЛП(Склад.Наименование);
    ТекстЗапроса=ТекстЗапроса+"
    |Условие(Скл=Склад);";
  КонецЕсли;
  Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
    Сообщить("Запрос не выполнен");
    Возврат;
  КонецЕсли;
  Таб=СоздатьОбъект("Таблица");
  Таб.ИсходнаяТаблица("");
  ИтКолРасх = Запрос.КоличРасходС;
  ИтСумПРас = Запрос.СуммаПРасход;
  ИтСумДРас = Запрос.СуммаДРасход;
  ИтПрибыль = ИтСумДРас-ИтСумПРас;
  Таб.ВывестиСекцию("Шапка");
  Пока Запрос.Группировка("Товар")=1 Цикл
    ТТов=Запрос.Товар;
    Тов=СокрЛП(ТТов.Код)+" ("+СокрЛП(ТТов.Наименование)+")";
    КолРасх = Запрос.КоличРасходС;
    СумПРас = Запрос.СуммаПРасход;
    СумДРас = Запрос.СуммаДРасход;
    Прибыль = СумДРас-СумПРас;
    Таб.ВывестиСекцию("Товар");
    Пока Запрос.Группировка("Сорт")=1 Цикл
      Срт=Запрос.Сорт;
      КолРасх = Запрос.КоличРасходС;
      СумПРас = Запрос.СуммаПРасход;
      СумДРас = Запрос.СуммаДРасход;
      Прибыль = СумДРас-СумПРас;
      Таб.ВывестиСекцию("Сорт");
    КонецЦикла;
  КонецЦикла;
  Таб.ВывестиСекцию("Итого");
  Таб.ТолькоПросмотр(1);
  Таб.ПараметрыСтраницы(1,100,1);
  Таб.Показать("");
КонецПроцедуры
Сформируем
отчет по товарообороту. Для него мы возьмем данные из регистра "ОборотыТоваров".
//-----------------------------------------------
Процедура ДатаН()
  Если ДатаН>ДатаК Тогда
    ДатаН=ДатаК;
  КонецЕсли;
КонецПроцедуры
//-----------------------------------------------
Процедура ДатаК()
  Если  ДатаК<ДатаН Тогдаbr>     ДатаК=ДатаН;
  ИначеЕсли ДатаК>ПолучитьДатуТА() Тогда
    ДатаК=ПолучитьДатуТА();
  КонецЕсли;
КонецПроцедуры
//-----------------------------------------------
Процедура Сформировать()
  Запрос=СоздатьОбъект("Запрос");
  ТекстЗапроса="
  |Период с ДатаН по ДатаК;
  |Скл = Регистр.ОборотыТоваров.Склад;
  |Тов = Регистр.ОборотыТоваров.Товар;
  |Срт = Регистр.ОборотыТоваров.Сорт;
  |Кол = Регистр.ОборотыТоваров.Количество;
  |Сум = Регистр.ОборотыТоваров.СуммаУ;
  |Функция КолСум = Сумма(Кол);
  |Функция СумСум = Сумма(Сум);
  |Группировка Тов упорядочить по Тов.Код без групп;
  |Группировка Срт упорядочить по Сорт.Код;";
  СклТекст="По всем складам";
  Если Склад.Выбран()=1 Тогда
    СклТекст="По складу: "+СокрЛП(Склад.Наименование);
    ТекстЗапроса=ТекстЗапроса+"
    |Условие(Скл=Склад);";
  КонецЕсли;
  Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
    Сообщить("Запрос не выполнен");
    Возврат;
  КонецЕсли;
  Таб=СоздатьОбъект("Таблица");
  Таб.ИсходнаяТаблица("");
  ИтКолСум = Запрос.КолСум;
  ИтСумСум = Запрос.СумСум;
  Таб.ВывестиСекцию("Шапка");
  Пока Запрос.Группировка("Товар")=1 Цикл
    ТТов=Запрос.Товар;
    Тов=СокрЛП(ТТов.Код)+" ("+СокрЛП(ТТов.Наименование)+")";
    КолСум = Запрос.КолСум;
    СумСум = Запрос.СумСум;
    Таб.ВывестиСекцию("Товар");
    Пока Запрос.Группировка("Сорт")=1 Цикл
      Срт=Запрос.Сорт;
      КолСум = Запрос.КолСум;
      СумСум = Запрос.СумСум;
      Таб.ВывестиСекцию("Сорт");
    КонецЦикла;
  КонецЦикла;
  Таб.ВывестиСекцию("Итого");
  Таб.ТолькоПросмотр(1);
  Таб.ПараметрыСтраницы(1,100,1);
  Таб.Показать("");
КонецПроцедуры