- •Объект конфигурации Регистр сведений
- •Создание функции Розничная цена()
- •Для получения розничной цены будем передавать в функцию два параметра:
- •Перечисления
- •Объект конфигурации Перечисление
- •Реорганизация справочника Номенклатура
- •Конструктор (листинг 3.1).
- •Изменение процедуры проведения документа Оказание услуги
- •Создание оборотного регистра накопления Продажи
- •Изменение процедуры проведения документа Оказание услуги
Конструктор (листинг 3.1).
Листинг 3.1. Процедура ОбработкаПроведения()
Процедура ОбработкаПроведения(Отказ, Режим)
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
Для Каждого ТекСтрокаМатериалы Из Материалы Цикл
// регистр ОстаткиМатериалов Приход
Движение = Движения.ОстаткиМатериалов.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Материал = ТекСтрокаМатериалы.Материал;
Движение.Склад = Склад;
Движение.НаборСвойств = ТекСтрокаМатериалы.НаборСвойств;
Движение.Количество = ТекСтрокаМатериалы.Количество;
КонецЦикла;
Для Каждого ТекСтрокаМатериалы Из Материалы Цикл
// регистр СтоимостьМатериалов Приход
Движение = Движения.СтоимостьМатериалов.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Материал = ТекСтрокаМатериалы.Материал;
Движение.Стоимость = ТекСтрокаМатериалы.Сумма;
КонецЦикла;
В общем случае документ может иметь несколько табличных частей, и информация, содержащаяся в каждой из них, может предназначаться для своего отдельного регистра.
В нашем случае табличная часть всего одна, поэтому можно объединить эти два цикла в один, закомментировав следующие строки (листинг 3.2).
Листинг 3.2. Объединение двух циклов в один
Запустим 1С:Предприятие в режиме отладки и перепроведем документ Приходная накладная № 1 и № 2.
Затем откроем первый документ и убедимся, что документ создает желаемые записи в регистрах накопления (рис. 3.3, 3.4, 3.5).
Рис.3.3. Приходная накладная №1
Изменение процедуры проведения документа Оказание услуги
Внесем изменения в процедуру обработки проведения документа ОказаниеУслуги.
На данном этапе, исходя из пожеланий, высказанных руководством необходимо указывать различную стоимость для одного и того же материала, которая рассчитана руководством исходя из текущих конъюнктурных соображений.
Поскольку в документе ОказаниеУслуги отражена только цена номенклатуры, понадобится добавить в табличную часть документа еще одно поле, в котором будет указываться стоимость номенклатуры.
Откроем в конфигураторе окно редактирования объекта конфигурации Документ ОказаниеУслуги, перейдем на закладку Данные и создадим новый реквизит табличной части документа с именем Стоимость, типом Число, длиной 15 и точностью 2 (рис. 3.6).
После этого откроем форму ФормаДокумента документа ОказаниеУслуги и добавим в табличное поле колонку, отображающую новый реквизит Стоимость, расположив ее после колонки Номенклатура (рис. 3.7).
Для этого выделим табличное поле и выполним команду контекстного меню Размещение данных. В окне Размещение данных отметим реквизит Стоимость и нажмем ОК.
После этого с помощью мыши перетащим колонку Стоимость после колонки Номенклатура.
Рис.3.6. Изменение документа оказание услуги. (б).
Рис.
3.7. Изменение формы документа ОказаниеУслуги
Создадим движения документа ОказаниеУслуги таким же образом, как это выполнялось для документа ПриходнаяНа-кладная.
Откроем в конфигураторе окно редактирования объекта конфигурации Документ ОказаниеУслуги и укажем, что он будет создавать движения по регистру накопления Стоимость Материалов.
Запустим конструктор движений документа и добавим в список регистров регистр СтоимостьМатериалов.
Опишем движения документа следующим образом (стоимость вычисляется как произведение стоимости и количества, указанных в табличной части), рис. 3.8.
Рис. 3.8. Конструктор движений документа (а)
Рис. 3.8. Конструктор движений документа (а, не введен реквизит стоимость)
Нажмем ОК и в тексте, сформированном конструктором (листинг 3.3), восстановим изменения, внесенные ранее (не записывать движения, если номенклатура - не материал).
Также объединим два цикла обхода табличной части документа в один (листинг 3.3).
Листинг 3.3. Процедура ОбработкаПроведения()
//Для варианта (б)
Процедура ОбработкаПроведения(Отказ, Режим)
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл
// регистр СтоимостьМатериалов Расход
Движение = Движения.СтоимостьМатериалов.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Материал = ТекСтрокаПереченьНоменклатуры.Номенклатура;
Движение.Стоимость = ТекСтрокаПереченьНоменклатуры.Цена*ТекСтрокаПереченьНоменклатуры.Количество;
КонецЦикла;
//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
Проверим, как работает проведение документа Оказа-ниеУслуги.
Запустим 1С:Предприятие в режиме отладки и укажем стоимость выбранных материалов в документе Оказание услуги № 1 (рис. 3.9).
Рис. 3.9. Документ Оказание услуги № 1
Проведем документ Оказание услуги № 1 и посмотрим на движения этого документа по регистру Стоимость материалов (рис. 3.10).
Рис. 3.10. Записи регистра Стоимость материалов
Создадим и проведем еще два документа Оказание услуги.
Эти документы понадобятся нам в дальнейшем, эти документы созданы другими датами (рис. 3.11, 3.12).
Рис. 3.12. Документ Оказание услуги № 3
Движения документов Оказание услуги № 2 и № 3 должны выглядеть соответственно следующим образом (рис. 3.13, 3.14).
Рис. 3.13. Движения документа Оказание услуги № 2
Рис. 3.14. Движения документа Оказание услуги № 3
Оборотный регистр накопления
Назначение регистра накопления
До сих пор создавались в регистрах накопления движения только для строк документа, которые содержат материалы. Услуги, содержащиеся в документе, не учитывались.
При учете услуг важны совершенно другие критерии, нежели при учете материалов.
Бессмысленно говорить о том, сколько услуг было и сколько их осталось, важна только сумма и количество услуг, которые были оказаны за определенный промежуток времени.
Кроме этого интересны следующие моменты:
какие именно услуги были оказаны (чтобы составить рейтинг услуг);
какому именно клиенту оказывались услуги (чтобы предоставить ему скидку от объема оплаченных ранее услуг, например);
какой мастер предоставлял услуги (чтобы начислить ему за работную плату).
Очевидно, что существующие регистры накопления совершенно не подходят для решения таких задач.
Поэтому создадим еще одно «хранилище» данных, которое будет использоваться в нашей программе, - оборотный регистр накопления Продажи.
