Создание движений документа «ПриходнаяНакладная»
Движения документа – это записи в регистрах, которые создаются в процессе проведения документа и отражают изменения, производимые документом. Откроем окно редактирования объекта конфигурации Документ ПриходнаяНакладная.
Перейдем на закладку Движения и в списке регистров конфигурации отметим регистр накопления ОстаткиМатериалов (рис. 2):
Обратите внимание, что сразу после отметки выбранного регистра становится доступной кнопка Конструктор движений. Этим конструктором мы и воспользуемся.
Конструктор устроен просто (рис. 3). В списке Регистры перечислены регистры, в которых документ может создавать движения. В нашем случае там пока один регистр ОстаткиМатериалов.
В списке Реквизиты документа должны находиться исходные данные для создания движений. А в таблице Поле – Выражение должны быть заданы формулы, по которым будут вычисляться значения измерений и ресурсов регистра при записи движений.
Рис. 2. Отметим регистр накопления и воспользуемся конструктором движений…
Рис. 3. Конструктор движений
Обратите внимание, что по умолчанию конструктор предлагает нам создавать движения прихода (Тип движения регистра – Приход, символ + рядом с названием регистра) по регистру ОстаткиМатериалов. Это нас вполне устраивает, ведь документ ПриходнаяНакладная и должен приходовать материалы.
В поле выбора Табличная часть выберем табличную часть нашего документа – Материалы. Список реквизитов документа автоматически заполнится реквизитами нашей табличной части. Теперь нажмем кнопку Заполнить выражения.
В нижнем окне сформируется соответствие полей и выражений (рис. 4).
Рис. 4. Выберем табличную часть и нажмем «Заполнить выражения»…
Как видите, конструктор движений установил соответствия подходящим образом: в качестве материала в регистр будет записан материал из табличной части документа, в качестве склада – склад, указанный в шапке документа, а в качестве количества – количество из табличной части документа.
Нажмем кнопку OK и посмотрим, какой текст сформировал конструктор в модуле объекта (листинг 1):
Листинг 1. Процедура ОбработкаПроведения()
Процедура ОбработкаПроведения(Отказ, Режим)
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора,
// внесенные вручную изменения будут утеряны!!!
Для Каждого ТекСтрокаМатериалы Из Материалы Цикл
// Регистр ОстаткиМатериалов Приход
Движение = Движения.ОстаткиМатериалов.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Материал = ТекСтрокаМатериалы.Материал;
Движение.Склад = Склад;
Движение.Количество = ТекСтрокаМатериалы.Количество;
КонецЦикла;
// }}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
Конструктор создал обработчик события ОбработкаПроведения объекта конфигурации Документ и поместил его в модуль объекта.
Внутри обработчика расположен цикл, который предназначен для перебора строк табличной части нашего документа. В цикле обращение к табличной части документа происходит по имени (Материалы), а строки табличной части документа представляют собой коллекцию значений, для перебора которой можно использовать конструкцию Для Каждого … Из … Цикл.
Объект встроенного языка ДокументОбъект имеет свойство Движения. Оно возвращает коллекцию наборов записей регистров, которые принадлежат этому документу. К набору записей документа, принадлежащему конкретному регистру, можно обратиться, указав через точку имя этого регистра.
Таким образом, в первой строке тела цикла мы добавляем к набору записей, который создает наш документ в регистре, новую запись и сохраняем ее в переменной Движение.
Затем мы присваиваем нужные значения всем полям этой записи и после перебора всех строк документа (после завершения цикла) «одним махом» записываем в регистр ОстаткиМатериалов весь набор записей движений документа.
Если мы теперь откроем окно редактирования объекта конфигу- рации Регистр накопления ОстаткиМатериалов и перейдем на закладку Регистраторы, то в списке документов, созданных в конфигурации, мы увидим отмеченный документ ПриходнаяНакладная, так как мы задали в модуле этого документа формирование движений в регистре ОстаткиМатериалов (рис. 6.10).
В заключение отредактируем командный интерфейс, чтобы в разделах Бухгалтерия, Оказание услуг и Учет материалов была доступна ссылка для просмотра записей нашего регистра накопления.
Дело в том, что команды открытия регистров также добавляются в панель команд разделов, но по умолчанию они невидимы, в отличие от команд открытия справочников и документов.
В дереве объектов конфигурации выделим ветвь Подсистемы, вызовем ее контекстное меню и выберем пункт Все подсистемы. В открыв- шемся окне слева в списке Подсистемы выделим подсистему УчетМатериалов. Справа в списке Командный интерфейс отразятся все команды выбранной подсистемы.
В группе Панель навигации.Обычное включим видимость у команды Остатки материалов и мышью перетащим ее в группу Панель навигации.См.также (рис. 6.11).
Посмотрим, как это работает. Запустим 1С:Предприятие в режиме отладки и откроем одновременно два окна: список документов ПриходнаяНакладная и список регистра накопления ОстаткиМатериалов.
Тем самым мы переносим команды открытия списка регистров
накопления в конец списка подобных команд раздела, так как эти команды не так часто используются и их приоритет невысок.
Аналогично, выделив подсистемы ОказаниеУслуг и Бухгалтерия, в группе Панель навигации.Обычное включим видимость у команды Остатки материалов и перенесем ее в группу Панель навигации См.также.
Откроем документ Приходная накладная №1 и нажмем OK. Обратите внимание, что при проведении приходной накладной появляются соответствующие записи в регистрах накопления (рис. 5):
Аналогичные действия проделаем и с документом Приходная накладная №2.
Рис. 5. Взаимодействие документа и регистра