- •Лабораторная работа 4. Оборотный регистр накопления
- •Создание оборотного регистра накопления «Продажи»
- •Проведение документа «Оказание услуги» по трем регистрам
- •Изменение процедуры проведения документа «Оказание услуги»
- •Создание отчетов
- •Работа с запросами
- •Язык запросов
- •Отчет «Реестр документов Оказание услуги»
- •Отчет Рейтинг услуг
Проведение документа «Оказание услуги» по трем регистрам
Откроем окно редактирования объекта конфигурации Документ ОказаниеУслуги и на закладке Движения укажем, что этот документ будет создавать движения по регистру Продажи.
Запустим 1С:Предприятие в режиме отладки и откроем формы списка регистров накопления Продажи и ОстаткиМатериалов. Обратите внимание, что формы практически одинаковы, за исключением состава измерений и ресурсов.
Изменение процедуры проведения документа «Оказание услуги»
На этот раз мы не будем использовать конструктор движений документа, а внесем необходимые дополнения прямо в обработчик события ОбработкаПроведения документа ОказаниеУслуги.
Откроем в конфигураторе модуль объекта конфигурации Документ ОказаниеУслуги и найдем в нем процедуру обработчика события ОбработкаПроведения.
В конце цикла после строки КонецЕсли и перед строкой КонецЦикла добавим строки кода, создающие движения регистра Продажи, производимые документом ОказаниеУслуги (листинг 12.1).
Сразу
после окончания первого цикла создадим
еще один цикл обхода табличной части и
команду записи движений регистра Продажи
(листинг 4.1).
Листинг 4.1. Добавление цикла обхода табличной части и записи движений регистра «Продажи»
… // Регистр Продажи
Движение = Движения.Продажи.Добавить();
Движение.Период = Дата;
Движение.Номенклатура = ТекСтрокаПереченьНоменклатуры.Номенклатура;
Движение.Клиент = Клиент;
Движение.Мастер = Мастер;
Движение.Количество = ТекСтрокаПереченьНоменклатуры.Количество;
Движение.Выручка = ТекСтрокаПереченьНоменклатуры.Сумма;
Движение.Стоимость = ТекСтрокаПереченьНоменклатуры.Стоимость *
ТекСтрокаПереченьНоменклатуры.Количество;
КонецЦикла;
Для
Каждого ТекСтрокаПереченьНоменклатуры
Из ПереченьНоменклатуры Цикл
//
Регистр Продажи
КонецЦикла;
//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
Теперь
в тело созданного нами цикла вставим
команды создания движений регистра
Продажи
(листинг 4.2).
Листинг
4.2.
Команды создания движений регистра
«Продажи»
Для
Каждого ТекСтрокаПереченьНоменклатуры
Из ПереченьНоменклатуры Цикл
//
Регистр Продажи
Движение
= Движения.Продажи.Добавить();
Движение.Период
= Дата;
Движение.Номенклатура
= ТекСтрокаПереченьНоменклатуры.Номенклатура;
Движение.Клиент
= Клиент;
Движение.Мастер
= Мастер;
Движение.Количество
= ТекСтрокаПереченьНоменклатуры.Количество;
Движение.Выручка
= ТекСтрокаПереченьНоменклатуры.Сумма;
Движение.Стоимость
= ТекСтрокаПереченьНоменклатуры.Стоимость
* ТекСтрокаПереченьНоменклатуры.Количество;
КонецЦикла;
Перед началом цикла установим свойство Записывать набора записей движений по этому регистру в значение Истина.
В результате процедура ОбработкаПроведения будет выглядеть следующим образом (листинг).
Листинг 4.1. Добавление цикла обхода табличной части и записи движений регистра «Продажи»
Процедура ОбработкаПроведения(Отказ, Режим)
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора внесенные вручную изменения будут утеряны!!!
// регистр ОстаткиМатериалов Расход
Движения.ОстаткиМатериалов.Записывать = Истина;
Движения.СтоимостьМатериалов.Записывать = Истина;
Движения.Продажи.Записывать = Истина;
Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл
Если ТекСтрокаПереченьНоменклатуры.Номенклатура.ВидыНоменклатуры = Перечисления.ВидыНоменклатуры.Материал Тогда
Движение = Движения.ОстаткиМатериалов.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Материал = ТекСтрокаПереченьНоменклатуры.Номенклатура;
Движение.Склад = Склад;
Движение.Количество = ТекСтрокаПереченьНоменклатуры.Количество;
//регистр СтоимостьМатериалов Расход
Движение = Движения.СтоимостьМатериалов.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Материал = ТекСтрокаПереченьНоменклатуры.Номенклатура;
Движение.СтоимостьМатериалов = ТекСтрокаПереченьНоменклатуры.Количество * ТекСтрокаПереченьНоменклатуры.Стоимость;
КонецЕсли;
// Регистр Продажи
Движение = Движения.Продажи.Добавить();
Движение.Период = Дата;
Движение.Номенклатура = ТекСтрокаПереченьНоменклатуры.Номенклатура;
Движение.Клиент = Клиент;
Движение.Мастер = Мастер;
Движение.Количество = ТекСтрокаПереченьНоменклатуры.Количество;
Движение.Выручка = ТекСтрокаПереченьНоменклатуры.Сумма;
Движение.Стоимость = ТекСтрокаПереченьНоменклатуры.Стоимость *
ТекСтрокаПереченьНоменклатуры.Количество;
КонецЦикла;
//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
Все добавленные конструкции вам уже хорошо известны. Обратите внимание лишь на то, что у оборотного регистра отсутствует свойство ВидДвижения, поскольку отражение вида движения (приход или расход) имеет смысл лишь при учете остатков. В случае регистра оборотов нас интересует только значение, которое должно быть записано в ресурс регистра.
В заключение отредактируем командный интерфейс формы документа, чтобы в панели навигации формы иметь возможность переходить к списку записей регистра Продажи, связанному с документом.
Для этого откроем форму документа ОказаниеУслуги. В левом верхнем окне перейдем на закладку Командный интерфейс. В разделе Панель навигации раскроем группу Перейти и увидим команду для открытия регистра накопления Продажи.
Установим свойство Видимость для этой команды.
Запустим 1С:Предприятие в режиме отладки и перепроведем все документы ОказаниеУслуги. Движения этих документов по регистру Продажи должны иметь следующий вид (рис. ):
Теперь у нас есть практически вся необходимая информация для анализа деятельности ООО «На все руки мастер». И далее мы займемся с вами тем, что создадим несколько отчетов, представляющих нам итоговую информацию о работе предприятия.
