- •Лабораторная работа № (продолжение) Построение простейшей конфигурации по учету складских операций
- •2.7 Справочник складов
- •2.8 Справочник контрагентов
- •2.9 Справочник договоров с контрагентами
- •2.10 Работа со справочниками контрагентов и договоров
- •2.11 Справочник сортов
- •2.12 Хранение данных по взаиморасчетам с контрагентами
- •2.13 Первый документ. Приход денег
- •2.14 Работа с документом.
- •2.15 Отчет по долгам.
- •2.16 Документ "Выплата денег".
- •2.17 Документ "Изменение цен".
- •2.18 Регистры по товарам.
- •2.19 Приходная накладная.
- •2.20 Отчет по остаткам на складе.
- •2.21 Fifo/lifo/По-среднему.
- •2.22 Расходная накладная.
- •2.23 Расходная накладная. Продолжение.
- •2.24 Накладная на перемещение
- •2.25 Оборотные ведомости
- •2.26 Отчет по прибыли с товара
- •2.27 Отчет по обороту товара
- •2.28 Новые наборы прав
- •2.29 Новые интерфейсы
2.25 Оборотные ведомости
Документом "Накладная на перемещение " мы завершили создание системы учета остатков на складах и товарооборота. Но учет не имеет смысла без отчетности. У нас уже есть отчеты, которые показывают состояние остатков и долгов на конкретную дату. Создадим два отчета: один нам покажет изменение долгов за какой-то период, а второй движение по складу товаров.
Создаем новый отчет "ОбороткаПоДолгам";
Добавим поле ввода ДатаН – тип Дата, формула ДатаН();
Добавим поле ввода ДатаК – тип Дата, формула ДатаК();
Пропишем процедуры в модуле формы: Процедура ДатаН() Если ДатаН>ДатаК Тогда ДатаН=ДатаК; КонецЕсли; КонецПроцедуры //----------------------------------------------- Процедура ДатаК() Если ДатаК<ДатаН Тогда ДатаК=ДатаН; ИначеЕсли ДатаК>ПолучитьДатуТА() Тогда ДатаК=ПолучитьДатуТА(); КонецЕсли; КонецПроцедуры //----------------------------------------------- Процедура Сформировать() Запрос=СоздатьОбъект("Запрос"); ТекстЗапроса=" |Период с ДатаН по ДатаК; |Контр = Регистр.Взаиморасчеты.Контрагент; |Догов = Регистр.Взаиморасчеты.Договор; |Сумма = Регистр.Взаиморасчеты.Сумма; |Флаг = Регистр.Взаиморасчеты.ФлагДвижения; |Функция СуммаНачОст = НачОст(Сумма); |Функция СуммаПриходТов = Приход(Сумма) когда(Флаг=1); |Функция СуммаРасходТов = Расход(Сумма) когда(Флаг=2); |Функция СуммаРасходДен = Расход(Сумма) когда(Флаг=3); |Функция СуммаПриходДен = Приход(Сумма) когда(Флаг=4); |Функция СуммаКонОст = КонОст(Сумма); |Группировка Контр упорядочить по Контр.Код; |Группировка Догов;"; Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда Сообщить("Запрос не выполнен"); Возврат; КонецЕсли; Таб=СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Таблица"); ИтНачОст=Запрос.СуммаНачОст; ИтПрихТов=Запрос.СуммаПриходТов; ИтРасхДен=Запрос.СуммаРасходДен; ИтРасхТов=Запрос.СуммаРасходТов; ИтПрихДен=Запрос.СуммаПриходДен; ИтКонОст=Запрос.СуммаКонОст; // для итогов перед началом прохода по группировкам получаем // значения функций для всей выборки сразу Таб.ВывестиСекцию("Шапка"); Пока Запрос.Группировка(1)=1 Цикл Контра=Запрос.Контр; НачОст=Запрос.СуммаНачОст; ПрихТов=Запрос.СуммаПриходТов; РасхДен=Запрос.СуммаРасходДен; РасхТов=Запрос.СуммаРасходТов; ПрихДен=Запрос.СуммаПриходДен; КонОст=Запрос.СуммаКонОст; Если Контра.ЭтоГруппа()=1 Тогда Таб.ВывестиСекцию("Группа"); Иначе Таб.ВывестиСекцию("Контра"); Пока Запрос.Группировка(2)=1 Цикл Дог=Запрос.Догов; НачОст=Запрос.СуммаНачОст; ПрихТов=Запрос.СуммаПриходТов; РасхДен=Запрос.СуммаРасходДен; РасхТов=Запрос.СуммаРасходТов; ПрихДен=Запрос.СуммаПриходДен; КонОст=Запрос.СуммаКонОст; Таб.ВывестиСекцию("Дог"); КонецЦикла; КонецЕсли; КонецЦикла; Таб.ВывестиСекцию("Итого"); Таб.ТолькоПросмотр(1); Таб.ПараметрыСтраницы(1,100,1); Таб.Показать(""); КонецПроцедуры
Создадим шаблон печатной формы;
Сохраним конфигурацию;
Создаем новый отчет "ОбороткаПоСкладу";
Добавим поле ввода ДатаН – тип Дата, формула ДатаН();
Добавим поле ввода ДатаК – тип Дата, формула ДатаК();
Добавим поле ввода Склад – тип С.Склады;
Пропишем процедуры в модуле формы: //----------------------------------------------- Процедура ДатаН() Если ДатаН>ДатаК Тогда ДатаН=ДатаК; КонецЕсли; КонецПроцедуры //----------------------------------------------- Процедура ДатаК() Если ДатаК<ДатаН Тогда ДатаК=ДатаН; ИначеЕсли ДатаК>ПолучитьДатуТА() Тогда ДатаК=ПолучитьДатуТА(); КонецЕсли; КонецПроцедуры //----------------------------------------------- Процедура Сформировать() Если Склад.Выбран()=0 Тогда Сообщить("Не выбран склад"); Возврат; КонецЕсли; Запрос=СоздатьОбъект("Запрос"); ТекстЗапроса=" |Период с ДатаН по ДатаК; |Скл = Регистр.ОстаткиТоваров.Склад; |Товар = Регистр.ОстаткиТоваров.Товар; |Сорт = Регистр.ОстаткиТоваров.Сорт; |Количество = Регистр.ОстаткиТоваров.Количество; |ФлагДвижения = Регистр.ОстаткиТоваров.ФлагДвижения; |Функция КолНачОстС = НачОст(Количество); |Функция КолПриходК = Приход(Количество) когда(ФлагДвижения=1); |Функция КолПриходВ = Приход(Количество) когда(ФлагДвижения=2); |Функция КолРасходВ = Расход(Количество) когда(ФлагДвижения=2); |Функция КолРасходК = Расход(Количество) когда(ФлагДвижения=1); |Функция КолКонОстС = КонОст(Количество); |Группировка Товар упорядочить по Товар.Код; |Группировка Сорт; |Условие(Скл=Склад);"; Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда Сообщить("Запрос не выполнен"); Возврат; КонецЕсли; Таб=СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица(""); Таб.ВывестиСекцию("Шапка"); ИтНачОстС = Запрос.КолНачОстС; ИтПриходК = Запрос.КолПриходК; ИтПриходВ = Запрос.КолПриходВ; ИтРасходВ = Запрос.КолРасходВ; ИтРасходК = Запрос.КолРасходК; ИтКонОстС = Запрос.КолКонОстС; Пока Запрос.Группировка("Товар")=1 Цикл ТТов=Запрос.Товар; НачОстС = Запрос.КолНачОстС; ПриходК = Запрос.КолПриходК; ПриходВ = Запрос.КолПриходВ; РасходВ = Запрос.КолРасходВ; РасходК = Запрос.КолРасходК; КонОстС = Запрос.КолКонОстС; Если ТТов.ЭтоГруппа()=1 Тогда Тов=СокрЛП(ТТов.Наименование); Таб.ВывестиСекцию("Группа"); Иначе Тов=СокрЛП(ТТов.Код)+" ("+СокрЛП(ТТов.Наименование)+")"; НачОстС = Запрос.КолНачОстС; ПриходК = Запрос.КолПриходК; ПриходВ = Запрос.КолПриходВ; РасходВ = Запрос.КолРасходВ; РасходК = Запрос.КолРасходК; КонОстС = Запрос.КолКонОстС; Таб.ВывестиСекцию("Товар"); Пока Запрос.Группировка("Сорт")=1 Цикл Срт=Запрос.Сорт; НачОстС = Запрос.КолНачОстС; ПриходК = Запрос.КолПриходК; ПриходВ = Запрос.КолПриходВ; РасходВ = Запрос.КолРасходВ; РасходК = Запрос.КолРасходК; КонОстС = Запрос.КолКонОстС; Таб.ВывестиСекцию("Сорт"); КонецЦикла; КонецЕсли; КонецЦикла; Таб.ВывестиСекцию("Итого"); Таб.ТолькоПросмотр(1); Таб.ПараметрыСтраницы(1,100,1); Таб.Показать(""); КонецПроцедуры Во многом модуль этого отчета похож на предыдущий.
Создадим шаблон печатной формы;
Сохраним изменения в конфигурации;
Загрузим 1С:Предприятие;
Создадим несколько новых документов, проведем старые и посмотрим, что выдадут нам наши отчеты;