Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Объекты конфигурации.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
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

Оборотный регистр накопления

Назначение регистра накопления

До сих пор создавались в регистрах накопления движения только для строк документа, которые содержат материалы. Услуги, содержащиеся в документе, не учитывались.

При учете услуг важны совершенно другие кри­терии, нежели при учете материалов.

Бессмысленно го­ворить о том, сколько услуг было и сколько их осталось, важна только сумма и количество услуг, которые были оказаны за определенный промежуток времени.

Кроме этого интересны следующие моменты:

  • какие именно услуги были оказаны (чтобы составить рей­тинг услуг);

  • какому именно клиенту оказывались услуги (чтобы предо­ставить ему скидку от объема оплаченных ранее услуг, на­пример);

  • какой мастер предоставлял услуги (чтобы начислить ему за­ работную плату).

Очевидно, что существующие регистры накопления совершен­но не подходят для решения таких задач.

Поэтому создадим еще одно «хранилище» данных, которое будет использоваться в нашей программе, - оборотный регистр накопления Продажи.