Работа с объектом Документ. Создание объекта Регистр Накопления

Лабораторная №2. Работа с объектом Документ. Создание объекта Регистр Накопления.

1. Создание объекта Документ

1.1 Создание документа ОказаниеУслуги

Создайте второй документ ОказаниеУслуги. Создайте новый объект конфигурации Документ ОказаниеУслуги с реквизитами:

- склад, тип СправочникСсылка.Склады

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

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

Создайте табличную часть этого документа ПереченьНоменклатуры с реквизитами:

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

- количество, тип Число, длина 15, точность 3, неотрицательное

- цена, тип Число, длина 15, точность 2, неотрицательное

- сумма, тип Число, длина 15, точность 2, неотрицательное

В результате документ ОказаниеУслуги будет выглядеть следующим образом:

В форме документа ОказаниеУслуги добавьте код процедуры для расчета суммы при изменении аналогично предыдущему документу для соответствующей табличной части.

После того, как эти действия будут выполнены, запустите 1С:Предприятие в режиме отладки и убедитесь, что при вводе цены и количества в табличную часть документа ОказаниеУслуги сумма пересчитывается по алгоритму.

  1. Заполенние документа Счет-фактура на основании документа Договор на оказание услуги

Автоматическое заполнение полей возможно не только из справочников, но также на основании документов.

Создайте документ ДоговорНаОказаниеУслуги со следующими реквизитами:

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

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

- сумма с типом Число, длиной 15, точностью 2, неотрицательное.

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

- комментарий с типом Строка, Длина неограниченная.

Выберете закладку Формы. Для того чтобы создать форму документа, нажмите на символ выбора в поле ввода и выберете Форма документа.

Отредактируйте форму:

- перетащите дату в одну строку с номером

- присвойте полю Дата заголовок от

- в подменю Форма главного меню выберете Вставить элемент управления – Кнопка. Присвойте элементу управления имя Печать.Код обработчика оставляем без изменений

- поместите на форму в левом нижнем углу элемент управления Надпись и присвойте имя Подпись.

Создайте справочник Вид Счета-фактур. В режиме 1С:Предприятие добавьте следующие наименования справочника:

- На реализацию,

- На аванс.

Создайте документ СчетФактура со следующими реквизитами:

- вид СчетФактуры с типом СправочникСсылка.СправочникСсылка.ВидСчетФактур

- основание с типом ДокументСсылка.ДоговорНаОказаниеУслуги

- ответственный с типом СправочникСсылка.Сотрудники

- комментарий с типом Строка, Длина неограниченная

После этого добавьте табличную часть с именем Договор и создайте у нее четыре реквизита:

- номерДоговора с типом ДокументСсылка.ДоговорНаОказаниеУслуги

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

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

- сумма с типом Число, длиной 15, точностью 2, неотрицательное

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

Процедура ЗаполнитьКлиента (СтрокаТабличнойЧасти)

СтрокаТабличнойЧасти.Клиент = СтрокаТабличнойЧасти.НомерДоговора.Клиент;

КонецПроцедуры

Процедура ЗаполнитьУслугу (СтрокаТабличнойЧасти)

СтрокаТабличнойЧасти.Услуга = СтрокаТабличнойЧасти.НомерДоговора.Услуга;

КонецПроцедуры

Процедура ЗаполнитьСумму (СтрокаТабличнойЧасти)

СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.НомерДоговора.Сумма;

КонецПроцедуры

Процедура ДоговорНомерДоговораПриИзменении(Элемент)

ЗаполнитьКлиента(ЭлементыФормы.Договор.ТекущиеДанные);

ЗаполнитьУслугу(ЭлементыФормы.Договор.ТекущиеДанные);

ЗаполнитьСумму(ЭлементыФормы.Договор.ТекущиеДанные);

КонецПроцедуры

Запустите 1С:Предприятие в режиме отладки создайте несколько документов Договор на оказание услуги и проведите документами. Убедитесь, что при заполнении документа Счет-фактура реквизиты табличной части помещаются автоматически. Проведите документ.

2. Объект конфигурации Регистр накопления

Объект конфигурации Регистр накопления является прикладным объектом и предназначен для описания структуры накопления данных. На основе объекта конфигурации Регистр накопления платформа создает в базе данных информационную структуру, в которой будут накапливаться данные, "поставляемые" различными объектами базы данных. Эти данные будут храниться в регистре в виде отдельных записей, каждая из которых имеет одинаковую, заданную в конфигураторе, структуру.

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

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

2.1 Создание регистра накопления ОстаткиМатериалов

Создайте объект конфигурации Регистр накопления. Задайте имя регистра ОстаткиМатериалов.

Создайте измерения регистра:

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

- Склад, с типом СправочникСсылка.Склады.

Затем создайте ресурс Количество с длиной 15 и точностью 3.

В результате этих действий регистр ОстаткиМатериалов должен иметь следующий вид:

2.2 Создание движений документа ПриходнаяНакладная

Движения документа – это записи в регистрах, которые создаются в процессе проведения документа и отражают изменения, производимые документом. Откройте окно редактирования объекта конфигурации Документ ПриходнаяНакладная.

Перейдите на закладку Движения и в списке регистров конфигурации отметьте регистр накопления ОстаткиМатериалов:

После отметки выбранного регистра становится доступной кнопка Конструктор движений. Конструктор устроен просто. В списке "Регистры" перечислены регистры, в которых документ может создавать движения.

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

В поле выбора Табличная часть выберете табличную часть вашего документа –Материалы. Список реквизитов документа автоматически заполнится реквизитами табличной части. Теперь нажмите Заполнить выражения. В нижнем окне сформируется соответствие полей и выражений.

Конструктор движений установил соответствия подходящим образом: в качестве материала в регистр будет записан материал из табличной части документа, в качестве склада – склад, указанный в шапке документа, а в качестве количества – количество из табличной части документа. Нажмите ОК и посмотрите, какой текст сформировал конструктор в модуле объекта:

Процедура ОбработкаПроведения(Отказ, Режим)

//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

// Данный фрагмент построен конструктором.

// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

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

   // регистр ОстаткиМатериалов Приход

   Движение = Движения.ОстаткиМатериалов.Добавить();

   Движение.ВидДвижения = ВидДвиженияНакопления.Приход; [91]

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

   Движение.Материал = ТекСтрокаМатериалы.Материал;

   Движение.Склад = Склад;

   Движение.Количество = ТекСтрокаМатериалы.Количество;

КонецЦикла;

// записываем движения регистров

Движения.ОстаткиМатериалов.Записать();

//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

КонецПроцедуры

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

Запустите 1С:Предприятие в режиме отладки и откройте одновременно два окна: список документов ПриходнаяНакладная и список регистра накопления ОстаткиМатериалов.

При проведении приходной накладной появляются соответствующие записи в регистрах накопления:

Также создайте движение документа РасходнаяНакладная с типом движения Расход.

2.3 Создание движений документа ОказаниеУслуги

Аналогичным образом создайте движения документа ОказаниеУслуги. При использовании конструктора обратите внимание на то, что документ ОказаниеУслуги должен расходовать материалы. Поэтому перед тем, как нажать ОК убедимся, что выбран правильный тип движения регистров (Расход).

4. Ввод на основании

Механизм ввода на основании может быть использован для ввода новых объектов различного типа (документы, справочники, планы видов характеристик и т.д.). Для каждого объекта конфигурации Документ можно разрешить его ввод на основании других объектов базы данных и возможность являться основанием для других объектов. Действия по заполнению реквизитов при вводе на основании должны быть описаны в модуле объекта Документ, в обработчике события "Обработка заполнения". Есть возможность использовать конструктор ввода на основании, который позволяет визуальными средствами конструировать текст обработчика.

4.1 Ввод на основании справочника

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

Откройте окно редактирования объекта конфигурации Документ ОказаниеУслуги и добавьте новый реквизит документа – ОбъектОснование с типом СправочникСсылка.Клиенты. Создание такого реквизита не является обязательной частью механизма ввода на основании и понадобится только для того, чтобы в последствии построить цепочку зависимых документов.

Перейдите на закладку Ввод на основании и определите состав документов, на основании которых может вводиться документ ОказаниеУслуги, и основанием для которых он может являться:

Затем вызовете конструктор ввода на основании и задате значения реквизитов документа, создаваемого на основании. Для этого воспользуетесь кнопкой Заполнить выражения:

Обратите внимание, что для заполнения реквизита ОбъектОснование конструктор предложил использовать значение Основание.Ссылка. В данном случае такая запись будет избыточной, поскольку в качестве основания будет передана ссылка на элемент справочника. Однако в общем случае событие Обработка заполнения возникает при создании нового объекта на основании некоторого переданного значения. Совсем не обязательно, что это значение будет иметь тип ссылки.

Согласитесь со всем, что предложил конструктор, и нажмите ОК.В модуле документа будет сформирован текст обработчика события Обработка заполнения:

Процедура ОбработкаЗаполнения(Основание)

   //{{__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ

   // Данный фрагмент построен конструктором.

   // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!![495]

   Если ТипЗнч(Основание) = Тип("СправочникСсылка.Клиенты") Тогда

       // Заполнение шапки

       Клиент = Основание.Ссылка;

       ОбъектОснование = Основание.Ссылка;

   КонецЕсли;

   //}}__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ

КонецПроцедуры

Запустите 1С:Предприятие в режиме отладки и проверьте работу ввода на основании. Обратите внимание, что в командной панели формы списка справочника "Клиенты" появилась кнопка "Ввести на основании":

Работа с объектом Документ. Создание объекта Регистр Накопления