Данные для хранения в регистры попадают из документов. В регистре накопления хранятся записи с нужным набором измерений, ресурсов и реквизитов. Каждой записи соответствует регистратор - документ, который сделал эту запись. Записи в регистры выполняются при проведении документа. Этот процесс еще называют формированием движений по регистру.
Для того чтобы назначить документ ПоступлениеМатериалов регистратором для регистра, пройдем в окно свойств документа, перейдем на вкладку Движения и отметим регистр накопления ОстаткиМатериалов ( рис. 5.12). Сразу после этого станет активна кнопка Конструктор движений в нижней части формы. Документ можно назначить регистратором и из формы настройки свойств регистра.
Обратите внимание на настройки, которые можно задавать на вкладке Движения.
Сейчас мы готовы к тому, чтобы настроить процедуру проведения документа. Нажмем на кнопку Конструктор движений. Появится форма конструктора ( рис. 5.13).
В окне конструктора мы можем выбрать регистр, по которому следует сформировать движение (в нашем случае - это единственный регистр ОстаткиМатериалов. Параметр Тип движения регистра может принимать одно из двух значений: Приход или Расход. В нашем случае здесь нужно оставить значение по умолчанию - то есть - Приход.
Здесь же нужно указать, какие реквизиты документа и реквизиты табличных частей документа соответствуют измерениям, ресурсам и реквизитам регистра. В нашем случае документ имеет одну табличную часть Материалы - ее следует указать в поле Табличная часть.
Теперь, если нажать на кнопку Заполнить выражения, конструктор попытается автоматически сопоставить данные документа и регистра.
Автоматическое заполнение производится, во-первых, с учетом типов, во-вторых, с учетом названий. На рис. 5.14 вы можете видеть окно конструктора движений после выбора в поле Табличная часть табличной части Материалы и нажатия на кнопку Заполнить выражения.
Автоматическое заполнение сопоставляет документ и регистр, основываясь на именах и типах параметров. Следует обязательно проверять результаты автоматического заполнения выражений. В частности, в нашем случае три выражения заполнены верно. А вот выражение для измерения ЦентрОтветственности, которое, напомним, имеет тип СправочникСсылка.Сотрудники, осталось незаполненным. Обратите внимание на то, что система подсказывает, какой именно реквизит документа (или табличной части документа ) подходит к выделенному в таблице полю регистра. В таблице Реквизиты документа выделяется галочкой тот реквизит, который соответствует выделенному в таблице полю регистра. Причем, одному и тому же полю регистра могут соответствовать несколько реквизитов документа.
Выделим поле ЦентрОтветственности. Ему соответствует реквизит документа ОтветственныйСотрудник. Для того, чтобы подставить реквизит в поле, достаточно сделать по нему двойной щелчок. На рис. 5.15 вы можете видеть результат заполнения поля ЦентрОтветственности.
В поле ЦентрОтветственности подставлен реквизит документа, а в остальные поля - реквизиты табличной части документа. Особенность табличной части заключается в том, что она может содержать несколько строк с информацией о полученных материалах. Одна запись соответствует одной строке. Табличная часть обрабатывается построчно, поэтому мы видим записи такого содержания:
ТекСтрокаМатериалы.Номенклатура ТекСтрокаМатериалы.Количество ТекСтрокаМатериалы.Сумма
Сейчас работа с конструктором движений завершена, нажмем на кнопку ОК. Будет сформирована процедура, которая сработает при проведении документа, рис. 5.16.
Ниже приведен текст процедуры:
Процедура ОбработкаПроведения(Отказ, Режим) //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ // Данный фрагмент построен конструктором. // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! Для Каждого ТекСтрокаМатериалы Из Материалы Цикл // регистр ОстаткиМатериалов Приход Движение = Движения.ОстаткиМатериалов.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Приход; Движение.Период = Дата; Движение.Номенклатура = ТекСтрокаМатериалы.Номенклатура; Движение.ЦентрОтветственности = ОтветственныйСотрудник; Движение.Количество = ТекСтрокаМатериалы.Количество; Движение.Сумма = ТекСтрокаМатериалы.Сумма; КонецЦикла; //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ КонецПроцедуры
Эта процедура расположена в модуле объекта - то есть - документа.
Основой процедуры является цикл:
Для Каждого ТекСтрокаМатериалы Из Материалы Цикл КонецЦикла;
Этот цикл выполняется для каждой строки (на нее ссылается переменная ТекСтрокаМатериалы ) табличной части Материалы. То есть, в цикле последовательно перебираются все строки табличной части
В теле цикла создается новое движение из коллекции движений документа:
Движение = Движения.ОстаткиМатериалов.Добавить();
Далее устанавливается вид движения и заполняются реквизиты движения.
Проверим созданный механизм на практике. В пользовательском режиме создадим новый документ ПоступлениеМатериалов, заполним табличную часть несколькими строками материалов. Обратите внимание на то, что регистр ОстаткиМатериалов пуст, рис. 5.17.
Провести документ можно нажатием на кнопку ОК - тогда он будет сохранен, проведен и закрыт. Так же можно воспользоваться кнопкой Провести, которая находится на панели управления документа. Этой кнопкой удобно пользоваться в тех случаях, когда вы хотите проверить результаты проведения документа и предполагаете, при необходимости, продолжить заполнение документа или исправить его, и провести снова, или, для отмены проведения, воспользоваться кнопкой Отмена проведения, которая становится активной после проведения документа. Обратите внимание на кнопку Перейти на панели инструментов документа. С ее помощью можно перейти к регистру накопления ОстаткиМатериалов.
Проведем документ нажатием на кнопку Провести - посмотрим - какие движения он сформировал и проверим правильность отражения сведений в регистре, рис. 5.18.
В регистре появились записи. Это - записи по приходу материалов (в левой части каждой строки мы видим знак "+"), регистратором выступает документ, который мы только что сформировали. Реквизиты Номенклатура, Центр ответственности, Количество, Сумма, заполнены верно.
Теперь в нашей конфигурации есть документ, который позволяет отражать в учетной системе поступление материалов, есть механизмы для хранения данных о поступивших материалах и "инфраструктура" в виде набора справочников. Следующим шагом нашей работы станет дальнейшее расширение возможностей документа.