Конструктор движений создает процедуру

Обновлено: 05.05.2024

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

Зелеными галочками в окне Реквизитов документа отмечены реквизиты, которые совпадают по типу данных с реквизитами регистра, движение для которого настраивается.

По нажатии кнопки Ок, платформа сформирует в модуле документа обработку проведения, которая впоследствии будет вызываться в момент проведения документа:

Вопрос 04.14 экзамена 1С:Профессионал по платформе. Назовите инструмент визуального создания алгоритма проведения документа и основное место его вызова

  1. Конструктор движений. Основное место вызова через окно редактирования объекта, закладка "Движения", кнопка "Конструктор движений"
  2. Конструктор движений. Основное место вызова через главное меню "Конструкторы" / "Движения регистров. "
  3. Конструктор проведения. Основное место вызова через окно редактирования объекта, закладка "Движения", кнопка "Конструктор проведения"
  4. Конструктор движений. Основное место вызова через окно редактирования объекта, закладка "Проведение", кнопка "Конструктор движений"
  5. Инструмент визуального создания алгоритма проведения документов в системе отсутствует

Вопрос 04.15 экзамена 1С:Профессионал по платформе. Назовите основное назначение конструктора движений документа

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

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

Вопрос 04.16 экзамена 1С:Профессионал по платформе. Можно ли произвести автозаполнение выражений и, если "да", то какими действиями?

  1. Да, можно. В элементе формы "Табличная часть" выбрать табличную часть "Состав" документа и нажать кнопку "Заполнить выражения"
  2. Нет, нельзя. Каждое выражение для поля-приемника необходимо определять "вручную"
  3. Да, можно. Оставить все настройки согласно рисунку и нажать кнопку "Заполнить выражения"

Вопрос 04.17 экзамена 1С:Профессионал по платформе. Процедуру с каким именем и в каком контексте определяет конструктор движений документа?

  1. ОбработкаПроведения. Определяется в модуле объекта документ
  2. ОбработкаПроведения. Определяется в модуле формы документа
  3. ДвиженияДокумента. Определяется в модуле объекта документа
  4. ДвиженияДокумента. Определяется в модуле формы документа

Вопрос 04.18 экзамена 1С:Профессионал по платформе. Если процедура с именем "ОбработкаПроведения" уже определена в модуле документа, то возможно ли в этом случае использование конструктора движений?

  1. Да, но при этом система попросит подтверждение на замещение алгоритма проведения уже существующей процедуры "ОбработкаПроведения" новым
  2. Нет, сначала надо вручную удалить "старую" обработку проведения, а только потом вызывать конструктор
  3. Да, но система при этом, безусловно, удалит "старую" обработку проведения
  4. Да, система закомментирует "старую" обработку проведения и создаст "новую"

Вопрос 04.19 экзамена 1С:Профессионал по платформе. Можно ли значение ресурса "Количество" задать произвольным выражением?

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

Конструктор движений позволяет:

  1. выбрать регистры, в которые будут вноситься записи;
  2. вручную или автоматически заполнить выражения, которые будут записаны в поля регистра.

Вызов конструктора движений 1С:

Конструктор может быть вызван из окна редактирования документа на вкладке "Движения":

Вызов конструктора движений 1С

Примечание: если кнопка "Конструктор движений" неактивна, то необходимо проверить свойство подчиненного регистра учета «Режим записи» - «Подчинение регистратору» (обязательно указание документа-регистратора записи).

Окно конструктора движений

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


Зелеными галочками в окне Реквизитов документа будут отмечены реквизиты, которые совпадают по типу данных с реквизитами регистра, движение для которого настраивается.

По нажатии кнопки "ОК" платформа сформирует в модуле документа обработку проведения, которая впоследствии будет вызываться в момент проведения документа:

Обработка проведения

Результатом работы конструктора движений является готовая процедура на встроенном языке с именем ОбработкаПроведения . Эта процедура располагается в модуле документа и будет вызвана системой в момент проведения документа.

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

Конструктор можно вызвать двумя способами:

Внимание! Конструктор доступен только для тех документов, для которых перечислены зависимые регистры накопления и\или сведений.

Описание конструктора


Сам конструктор состоит из одной единственной формы с тремя табличными полями и набором кнопок:

Поле А — список регистров, по которым формируются движения;
Поле Б — список реквизитов текущего документа, доступные для выбора (если в движениях участвует табличная часть, ее необходимо выбрать в одноименном поле);
Поле В — список полей текущего регистра накопления, доступные для заполнения;

При выделении регистра в поле А происходит изменение списка реквизитов в поле В. Поля Б и В также взаимосвязаны: в списке реквизитов (поле Б) отображаются только те реквизиты, которые подходят для выбора в качестве заполнителя для выделенного реквизита в поле В (совпадают по имени и типу). Галочкой в поле Б помечаются те реквизиты документа, которые имеют тот же тип, что и реквизит, выделенный в поле В.

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

Кнопка «Очистить выражения» — очищает любые изменения.

Кнопка «ОК» завершает работу конструктора с сохранением изменений.

Кнопка «Отмена» завершает работу конструктора без сохранения изменений.

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

Результатом работы конструктора будет процедура ОбработкаПроведения() в модуле текущего объекта. Обратите внимание, что в процедуре присутствуют служебные комментарии конструктора. Таким образом конструктор отделяет свои изменения от кода, введенного вручную:

Внимание! Если Вы впервые вызываете конструктор, а процедура ОбработкаПроведения() уже есть в модуле объекта и содержит код, то по окончании работы конструктора она будет замещена. Все изменения, внесенные вручную могут быть утеряны!

Смотреть на Youtube

Алгоритм проведения документа с учетом подписок на события

Если посмотреть свойства документа через палитру свойств, то можно увидеть два важных свойства: "Удаление движений" и "Запись движений при проведении", причем второе НЕ вынесено на закладку "Движения" окна редактирования документа.


1. Удаление движений.

Если свойство "Удаление движений" уставновлено в "Удалять автоматически", то ПЕРЕД началом проведения программа очищает все движения по регистрам. Фактически это означает запись пустого набора записей регистра с видом записи - замещение. А значит, программа выполняет код из процедур "ПередЗаписью" и "ПриЗаписи" модуля набора записей регистров.

2. Процедура "ОбработкаПроведения" модуля документа.

Обратим внимание: в начале обработки проведения у всех движений флаг модифицированности Ложь (значение возвращает метод Движения.Регистр.Модифицированность() ).

При работе с набором записей регистра (например, Движения.Регистр.Очистить() , Движения.Регистр.Добавить() и т.д.) флаг модифицированности становится Истина.

После записи движения в базу Движения.Регистр.Записать() модифицированность снова ложь.

Если в модуле процедуры подписки происходит запись набора регистра в явном виде ( .Записать() ), то программа выполняет код из процедур "ПередЗаписью" и "ПриЗаписи" модуля набора записей регистров и процедуры из подписки на событие "При записи" регистра.

3. Подписки на событие "При проведении" документа

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

Если регистры записываются с помощь метода Записать () , то выполняются все связанные процедуры.

4. Запись движений.

Вспомним про свойство "Запись движений при проведении" из настроек документа.

Если оно равно "Записывать модифицированные", то в базу будут записаны все движения документа, у которых флаг "Модифицированность" Истина.

Если оно равно "Записывать выбранные", то в базу будут записаны движения регистров, для которых мы явным образом указали необходимость записи.

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

И в конце р ассмотрим несколько примеров:

Пусть свойство документа "Запись движений при проведении" равно "Записывать модифицированные", а "Удаление движений" - "Не удалять автоматически".

При такой процедуре проведения документ при каждом перепроведении будет добавлять запись в регистр, записи будут множиться. Т.к. строка //*** добавляет записи в регистр, признак Модифицированности снимается.

Правильнее будет написать строку //*** как

или вообще ее опустить, и тогда программа сама запишет модифицированные движения.

В 1С 8 движения документа могут формироваться не только в обработке проведения, но и извне, например, из некоторой служебной обработки (так реализовано допроведение документов, восстановление авансов и т.д.).

В этом случае при перепроведении документа, если происходит изменение движений регистра бухгалтерии (флаг Модифицированности Истина), записи будут замещены записями, сформированными документом.

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

Если в процессе проведения документа движения по регистрам формируются не с помощью коллекции Движения, принадлежащей внутреннему объекту , а другими способами (вручную в форме набора записей или как в примере 2 и т.д.), то на этапе 4 эти записи будут замещены. Чтобы избежать замещения в типовых базах, для документа "ОперацияБух" свойство документа "Проведение" устанавливается в "Запретить".

Если документ должен проводиться по другим регистрам и нельзя запретить проведение, тогда нужно внимательно настраивать свойства документа:

- выбрать вариант записи движений "Записывать выбранные" и убедиться, что Движения.Регистр.Записывать = Ложь

- выбрать вариант записи движений "Записывать модифицированные" и контролировать признак Модифицированности для набора записей этого регистра.

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

Соответственно и коллекции движений у них будут разные. У "ОбъектаДок" коллекция движений будет включать только записанный в базу набор записей регистра, а у "ЭтогоОбъекта" - как записанные, так и добавленные и незаписанные записи. По окончании проведения (этап 4) в базу будут записаны наборы записей "ЭтогоОбъекта", причем с признаком Замещать = Истина.

Если записи в набор записей добавляются по способу, описанному выше, то они могут быть замещены на этапе 4.

Данные для хранения в регистры попадают из документов . В регистре накопления хранятся записи с нужным набором измерений , ресурсов и реквизитов . Каждой записи соответствует регистратор - документ , который сделал эту запись . Записи в регистры выполняются при проведении документа . Этот процесс еще называют формированием движений по регистру.

Для того чтобы назначить документ ПоступлениеМатериалов регистратором для регистра, пройдем в окно свойств документа , перейдем на вкладку Движения и отметим регистр накопления ОстаткиМатериалов ( рис. 5.12). Сразу после этого станет активна кнопка Конструктор движений в нижней части формы . Документ можно назначить регистратором и из формы настройки свойств регистра.

Начало настройки движений документа

Обратите внимание на настройки, которые можно задавать на вкладке Движения.

  • Проведение. Может принимать значения Разрешить и Запретить. Определяет возможность проведения документа .
  • Оперативное проведение. Так же принимает значения Разрешить и Запретить. Оперативное проведение - это проведение документа в режиме реального времени. При оперативном проведении документ получает оперативную отметку времени, которая либо соответствует текущему системному времени, либо превышает его - в том случае, если другой документ получил оперативную отметку времени, равную текущему системному времени. В итоге, документы , проведенные в оперативном режиме, выстраиваются в логически верную последовательность, соответствующую последовательности их ввода. При оперативном проведении документов производится контроль различных параметров реального времени. Например, если документ , проводимый оперативно, должен списывать какие-либо материалы, можно осуществить контроль фактического наличия материалов. Если дата документа отличается от текущей, документ может быть проведен в неоперативном режиме.
  • Удаление движений. По умолчанию этот параметр установлен в значение Удалять движения автоматически. Такая установка позволяет автоматически удалять движения, сформированные документом ранее, при перепроведении документа или при отмене проведения. Если вы хотите управлять удалением движений самостоятельно (например, для того, чтобы ускорить работу системы при перепроведении больших документов ), это свойство можно установить в значение Не удалять движения автоматически, но тогда удалять ненужные движения придется, используя средства встроенного языка.

Сейчас мы готовы к тому, чтобы настроить процедуру проведения документа . Нажмем на кнопку Конструктор движений. Появится форма конструктора ( рис. 5.13).

Форма конструктора движений

В окне конструктора мы можем выбрать регистр , по которому следует сформировать движение (в нашем случае - это единственный регистр ОстаткиМатериалов. Параметр Тип движения регистра может принимать одно из двух значений: Приход или Расход. В нашем случае здесь нужно оставить значение по умолчанию - то есть - Приход.

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

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

Автоматическое заполнение производится, во-первых, с учетом типов, во-вторых, с учетом названий. На рис. 5.14 вы можете видеть окно конструктора движений после выбора в поле Табличная часть табличной части Материалы и нажатия на кнопку Заполнить выражения.

Результаты автоматического заполнения выражений

Автоматическое заполнение сопоставляет документ и регистр , основываясь на именах и типах параметров. Следует обязательно проверять результаты автоматического заполнения выражений. В частности, в нашем случае три выражения заполнены верно. А вот выражение для измерения ЦентрОтветственности, которое, напомним, имеет тип СправочникСсылка.Сотрудники, осталось незаполненным. Обратите внимание на то, что система подсказывает, какой именно реквизит документа (или табличной части документа ) подходит к выделенному в таблице полю регистра. В таблице Реквизиты документа выделяется галочкой тот реквизит , который соответствует выделенному в таблице полю регистра. Причем, одному и тому же полю регистра могут соответствовать несколько реквизитов документа .

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

Заполнение поля ЦентрОтветственности

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

Сейчас работа с конструктором движений завершена, нажмем на кнопку ОК. Будет сформирована процедура, которая сработает при проведении документа , рис. 5.16.

Процедура ОбработкаПроведения, сформированная автоматически

Ниже приведен текст процедуры:

Эта процедура расположена в модуле объекта - то есть - документа .

Основой процедуры является цикл:

Этот цикл выполняется для каждой строки (на нее ссылается переменная ТекСтрокаМатериалы ) табличной части Материалы. То есть, в цикле последовательно перебираются все строки табличной части

В теле цикла создается новое движение из коллекции движений документа :

Далее устанавливается вид движения и заполняются реквизиты движения.

Проверим созданный механизм на практике. В пользовательском режиме создадим новый документ ПоступлениеМатериалов, заполним табличную часть несколькими строками материалов. Обратите внимание на то, что регистр ОстаткиМатериалов пуст, рис. 5.17.

Заполненный, но непроведенный документ и регистр накопления

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

Проведение документа

В регистре появились записи. Это - записи по приходу материалов (в левой части каждой строки мы видим знак "+"), регистратором выступает документ , который мы только что сформировали. Реквизиты Номенклатура, Центр ответственности, Количество, Сумма, заполнены верно.

5.4. Выводы

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

Читайте также: