1С:Предприятие / Простой склад / Глава 9

2.25 Оборотные ведомости.

Документом "Накладная на перемещение " мы завершили создание системы учета остатков на складах и товарооборота. Но учет не имеет смысла без отчетности. У нас уже есть отчеты, которые показывают состояние остатков и долгов на конкретную дату. Создадим два отчета: один нам покажет изменение долгов за какой-то период, а второй движение по складу товаров.

  1. Создаем новый отчет "ОбороткаПоДолгам";
  2. Добавим поле ввода ДатаН – тип Дата, формула ДатаН();
  3. Добавим поле ввода ДатаК – тип Дата, формула ДатаК();

  4. Пропишем процедуры в модуле формы:

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

  7. Сохраним конфигурацию;
  8. Создаем новый отчет "ОбороткаПоСкладу";
  9. Добавим поле ввода ДатаН – тип Дата, формула ДатаН();
  10. Добавим поле ввода ДатаК – тип Дата, формула ДатаК();
  11. Добавим поле ввода Склад – тип С.Склады;

  12. Пропишем процедуры в модуле формы:

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

  15. Сохраним изменения в конфигурации;
  16. Загрузим 1С:Предприятие;
  17. Создадим несколько новых документов, проведем старые и посмотрим, что выдадут нам наши отчеты;


2.26 Отчет по прибыли с товара.

В регистре "ОстаткиТовара" мы хранили такую информацию, как сумма поступления и сумма реализации. Создадим отчет, показывающий прибыль, которую мы получили в результате нашей хозяйственной деятельности.

  1. Создаем новый отчет "Прибыль";
  2. Добавим поле ввода ДатаН – тип Дата, формула ДатаН();
  3. Добавим поле ввода ДатаК – тип Дата, формула ДатаК();
  4. Добавим поле ввода Склад – тип С.Склады;
  5. Добавим кнопку [Х]. Пропишем в поле Формула свойств кнопки Склад="", этой кнопкой мы будем очищать поле "Склад";

  6. Пропишем процедуры в модуле формы:

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


2.27 Отчет по обороту товара.

Сформируем отчет по товарообороту. Для него мы возьмем данные из регистра "ОборотыТоваров".

  1. Создаем новый отчет "ТоварооборотПоСкладу";
  2. Добавим поле ввода ДатаН – тип Дата, формула ДатаН();
  3. Добавим поле ввода ДатаК – тип Дата, формула ДатаК();
  4. Добавим поле ввода Склад – тип С.Склады;
  5. Добавим кнопку [Х]. Пропишем в поле Формула свойств кнопки Склад="", этой кнопкой мы будем очищать поле "Склад";

  6. Пропишем процедуры в модуле формы:

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

  9. Теперь мы можем загрузить 1С:Предприятие и посмотреть, что нам выдадут наши отчеты;

<< Предыдущая глава | Содержание | Следующая глава >>