Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка - курсы.doc
Скачиваний:
29
Добавлен:
21.11.2019
Размер:
2.53 Mб
Скачать

3 Задание

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

4 Ход работы

Создадим регистр накопления «СтоимостьМатериалов». Этот регистр будет иметь одно измерение – «Материал» с типом «СправочникСсылка.Номенклатура» и один ресурс – «Стоимость» с длиной 15 и точностью 2, неотрицательное. В древе конфигурации установим курсор на «Регистры накопления», выберем «Действия» - «Добавить»

Рисунок 1 – Созданный регистр накопления «СтоимостьМатериалов»

4.1 Изменение процедуры проведения документа «Приходная накладная»

Откроем в конфигураторе окно редактирования объекта конфигурации Документ «ПриходнаяНакладная» и перейдем на вкладку «Движения». В списке регистров отметим, что документ будет создавать теперь движения и по регистру «СтоимостьМатериалов».

Рисунок 2 – Добавляем движения по регистру «СтоимостьМатериалов»

Запустим конструктор движений. Нажмем кнопку «Конструктор движений» и согласимся с тем, что существующая процедура ОбработкаПроведения будет замещена.

Рисунок 3 – Запрос конфигуратора на подтверждение замещения процедуры

Откроется окно конструктора движений, которое будет содержать созданные ранее движения документа по регистру «ОстаткиМатериалов». Добавим в список регистров, по которым формируются движения, еще один – «СтоимостьМатериалов». Выберем для него ту же табличную часть «Материалы» и заполним выражения.

Для ресурса «Стоимость» выберем значения реквизита табличной части «Сумма».

Рисунок 4 – Движения по регистру «СтоимостьМатериалов»

Нажмем OK и проанализируем текст, который сформировал конструктор.

Конструктор создал два цикла обхода табличной части документа – отдельно для каждого регистра. Так происходит потому, что в общем случае документ может иметь несколько табличных частей, и информация, содержащаяся в каждой из них, может предназначаться для своего отдельного регистра.

Рисунок 5 – Обработка проведения по двум регистрам

Табличная часть всего одна, поэтому можно объединить эти два цикла в один, закомментировав следующие строки:

// КонецЦикла;

// Для Каждого ТекСтрокаМатериалы Из Материалы Цикл

Для того, чтобы сделать из строчки комментарий необходимо добавить перед строчкой «//».

Запустим 1С Предприятие в режиме отладки и перепроведем документы «ПриходнаяНакладная» №1 и №2.

Затем откроем «ПриходнуюНакладную» №1 и убедимся, что документ создает желаемые записи в регистрах накопления.

Рисунок 6 – Проведение документа «ПриходнаяНакладная» №1

4.2 Изменение процедуры проведения документа «Оказание услуги»

Требуется, чтобы при списании материалов, израсходованных в процессе оказания услуги, должна быть возможность указывать различную стоимость для одного и того же материала, которая рассчитана руководством исходя из текущих конъюнктурных соображений.

Поскольку в документе «ОказаниеУслуги» отражена только цена номенклатуры, нам понадобится добавить в табличную часть документа еще одно поле, в котором будет указываться стоимость номенклатуры.

Откроем в конфигураторе окно редактирования объекта конфигурации «Документ» - «ОказаниеУслуги», перейдем на закладку «Данные» и создадим новый реквизит табличной части документа с именем «Стоимость», типом «Число», длиной 15 и точностью 2, неотрицательное.

Рисунок 7 – Добавление реквизита табличной части

После этого откроем форму «ФормаДокумента» документа «ОказаниеУслуги» и добавим в табличное поле колонку, отображающую новый реквизит «Стоимость»», расположив ее после колонки «Номенклатура». Для этого выделим табличное поле и выполним команду контекстного меню «Размещение данных». В окне «Размещение данных» отметим реквизит «Стоимость» и нажмем «ОK». После этого с помощью мыши перетащим колонку «Стоимость» после колонки «Номенклатура».

Рисунок 8 – Модифицированная форма документа «ОказаниеУслуги»

Теперь создадим движения документа «ОказаниеУслуги» таким же образом, как для документа «ПриходнаяНакладная».

Откроем в конфигураторе окно редактирования объекта конфигурации «Документ» «ОказаниеУслуги» и укажем, что он будет создавать движения по регистру накопления «СтоимостьМатериалов».

Запустим конструктор движений документа и добавим в список регистров регистр «СтоимостьМатериалов». Восстановим движения по регистру «ОстаткиМатериалов». Опишем движения документа по регистру «СтоимостьМатериалов» следующим образом (обратите внимание, что стоимость вычисляется как произведение стоимости и количества, указанных в табличной части):

Рисунок 9 – Движения по регистру «СтоимостьМатериалов» в документе «ОказаниеУслуги»

Нажмем OK и в тексте, сформированном конструктором, восстановим изменения, внесенные нами ранее (не записывать движения, если номенклатура – не материал). Вставим после строчки «Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл» следующий код:

Если ТекСтрокаПереченьНоменклатуры.Номенклатура.ВидНоменклатуры <> Перечисления.ВидыНоменклатуры.Материал Тогда

Продолжить;

КонецЕсли;

Также объединим два цикла обхода табличной части документа в один, закомментировав строки, как в документе «ПриходнаяНакладная».

Запустим 1С Предприятие в режиме отладки. Теперь создадим и проведем еще два документа «ОказаниеУслуги». Эти документы понадобятся нам в дальнейшем, поэтому будьте внимательны и обратите внимание на то, что эти документы созданы другими датами

Рисунок 10 – Два новых документа «ОкзаниеУслуги»

Проверим движения по регистрам:

Рисунок 11 – Движения регистров обоих документов

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

Дело в том, что при учете услуг важны совершенно другие критерии, нежели при учете материалов. Прежде всего, бессмысленно говорить о том, сколько услуг было и сколько их осталось, важна только сумма и количество услуг, которые были оказаны за определенный промежуток времени. Кроме этого интересны следующие моменты:

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

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

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

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

Откроем конфигуратор и создадим новый объект конфигурации «Регистр накопления». Назовем его «Продажи» и определим вид регистра – «Обороты».

Рисунок 12 – Установка имени и вида регистра

На вкладке «Данные» создадим измерения регистра:

- «Номенклатура», тип «СправочникСсылка.Номенклатура»,

- «Клиент», тип «СправочникСсылка.Клиенты»,

- «Мастер», тип «СправочникСсылка.Сотрудники».

У регистра будет три ресурса:

- «Количество», тип Число, длина 15, точность 3 (неотрицательное),

- «Выручка», тип Число, длина 15, точность 2,

- «Стоимость», тип Число, длина 15, точность 2 (неотрицательное).

Откроем окно редактирования объекта конфигурации «Документ» - «ОказаниеУслуги» и на закладке «Движения» укажем, что этот документ будет создавать движения по регистру «Продажи».

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

Откроем в конфигураторе модуль объекта конфигурации «Документ» - «ОказаниеУслуги» и найдем в нем процедуру обработчика события «ОбработкаПроведения».

Сразу после окончания первого цикла создадим еще один цикл обхода табличной части и команду записи движений регистра «Продажи». Цикл должен содержать следующий код:

Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл

// Регистр Продажи

Движение = Движения.Продажи.Добавить();

Движение.Период = Дата;

Движение.Номенклатура = ТекСтрокаПереченьНоменклатуры.Номенклатура;

Движение.Клиент = Клиент;

Движение.Мастер = Мастер;

Движение.Количество = ТекСтрокаПереченьНоменклатуры.Количество;

Движение.Выручка = ТекСтрокаПереченьНоменклатуры.Сумма;

Движение.Стоимость = ТекСтрокаПереченьНоменклатуры.Стоимость * ТекСтрокаПереченьНоменклатуры.Количество;

КонецЦикла;

Все добавленные конструкции уже хорошо известны. Обратите внимание на то, что у оборотного регистра отсутствует свойство «ВидДвижения», поскольку отражение вида движения (приход или расход) имеет смысл лишь при учете остатков. В случае регистра оборотов интересует только значение, которое должно быть записано в ресурс регистра.

Запустим 1С:Предприятие в режиме отладки и перепроведем два ранее созданных документа «ОказаниеУслуги». Движения этих документов по регистру «Продажи» должны иметь следующий вид:

Рисунок 13 – Движения документов по регистру «Продажи»