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