При проведении документов по какому либо регистру в свойствах конфигурации управляемый

При проведении документов по какому либо регистру в свойствах конфигурации управляемый thumbnail

Механизм транзакционных блокировок используется для конкурентного доступа пользователей к СУБД.
Транзакция — эта некая неразрывная операция, в ходе которой меняется состояние базы. Это минимальный квант изменений: нельзя сделать пол-транзакции; если транзакция не завершилась, то база откатится в начальное состояние.
Поскольку транзакция захватывает массив данных, возникает нюанс по доступу к этому массиву: например, одна транзакция меняет данные, а другая пробует их прочитать. Результат чтения может быть некорректным, т.к. не включит последних изменений. Поэтому, на уровне СУБД работает изоляция транзакций. Возможны следующие уровни изоляции:

  • Read uncommited — пока одна транзакция меняет массив, другая не может его менять, но может читать. Низший уровень изоляции.
  • Read commited — пока одна транзакция меняет массив, другая не может его ни менять, ни читать
  • Repeatable read — пока одна транзакция читает массив, другая не может его менять, но может прочесть
  • Serialaizable — пока одна транзакция читает массив, другая не может его ни менять, ни читать. Все операции последовательны. Максимальный уровень изоляции.

Если для конфигурации 1С:Предприятия установлен режим автоматических блокировок, то уровень изоляции транзакции выбирается СУБД. В случае с MS SQL, это будет Repeatable read или Serializable уровни, то есть изоляция данных близка к максимальной. Это решает проблемы с корректностью данных, но может приводить к появлению блокировок на уровне СУБД при интенсивной работе пользователей. Поэтому, в 1С:Предприятии есть свой функционал работы с блокировками, который активизируется включением режима управляемых блокировок. В этом случае уровень изоляции транзакций для MS SQL будет Read commited. Платформа сама будет изолировать данные, не полагаясь на СУБД.

Включение режима управляемых блокировок происходит в свойствах конфигурации:

Также, режим блокировок может быть установлен для конкретных объектов конфигурации:

В случае, если для конфигурации в целом установлен Автоматический режим блокировок, то все транзакции по всем регистрам будут работать именно в автоматическом режиме, безотносительно того режима, что выставлен для объекта конфигурации. Если Управляемый — то аналогично, все транзакции будут в управляемом. Если же для конфигурации выставлен режим Автоматический и управляемый, то режим для каждого объекта будет определяться его настройками.

Для режима Автоматический и управляемый есть один момент. Транзакция, единая для пользователя может представлять собой несколько транзакций с точки зрения платформы. Например, интерактивное проведение документа по регистру делает две транзакции — запись самого документа, и внутри этой транзакции запись набора строк по регистру. В зависимости от режима управления блокировками для самого документа и двигаемого им регистра, возможны четыре ситуации:

  1. Режим документа Автоматический, режим регистра Автоматический -> запись по регистру в автоматическом режиме
  2. Режим документа Управляемый, режим регистра Управляемый-> запись по регистру в управляемом режиме
  3. Режим документа Автоматический, режим регистра Управляемый -> запись по регистру в автоматическом режиме
  4. Режим документа Управляемый, режим регистра Автоматический -> исключительная ситуация (ошибка)

Вопрос 06.59 экзамена 1С:Профессионал по платформе. При проведении документа по какому-либо регистру в случае если у
документа установлен автоматический режим управления транзакционными блокировками, а у регистра управляемый (в свойствах конфигурации используется вариант «Автоматический и управляемый»), то такое
проведение приведет:

  1. к возникновению ошибочной ситуации
  2. вся транзакция будет выполнена в автоматическом режиме
  3. вся транзакция будет выполнена в управляемом режиме

Правильный ответ второй, определяем по первой транзакции, если автоматическая, то все автоматически.

***

Вопрос 06.60 экзамена 1С:Профессионал по платформе. При проведении документа по какому-либо регистру в случае если у
документа установлен управляемый режим управления транзакционными блокировками, а у регистра автоматический (в свойствах конфигурации используется вариант «Автоматический и управляемый»), то такое
проведение приведет:

  1. к возникновению ошибочной ситуации
  2. вся транзакция будет выполнена в автоматическом режиме
  3. вся транзакция будет выполнена в управляемом режиме

Правильный ответ первый, определяем по первой транзакции, если управляемая, то ошибка.

***

Вопрос 06.61 экзамена 1С:Профессионал по платформе. При проведении документа по какому-либо регистру в случае если у
документа установлен автоматический режим управления транзакционными блокировками, а у регистра управляемый (в свойствах конфигурации используется вариант «Управляемый»), то такое проведение приведет:

  1. к возникновению ошибочной ситуации
  2. вся транзакция будет выполнена в автоматическом режиме
  3. вся транзакция будет выполнена в управляемом режиме

Источник

Когда-то была программа 1С седьмой версии, и все программисты знали: если нужно проанализировать и/или исправить движения документа — смотри модуль документа, процедура ОбработкаПроведения(). В 1С 8 все гораздо сложнее. Кроме модуля проведения есть еще подписки на события, а также движения документа может «создавать» не сам документ. Эта статья о том, как происходит проведение и в какой момент записываются движения документа по регистрам.

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

Настройки документа:

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

Читайте также:  Какие полезные свойства есть у калины

 При проведении документов по какому либо регистру в свойствах конфигурации управляемый

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

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

Если для какого-либо регистра определена подписка на событие «При записи», то выполняется код из связанной процедуры.

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

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

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

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

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

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

Важно понимать: если в обработке проведения документа или в подписках на событие, вызванных ранее, не происходила запись движений регистров в явном виде (Движения.Регистр.Записать()), то движения документа еще НЕ записаны в базу. Поэтому их нельзя получить с помощью запроса, но можно получить из коллекции движений источника.

Процедура ПриПроведенииДокумента(Источник, Отказ, РежимПроведения) Экспорт
Регистр = Источник.Движения.Бухучет;
…..
КонецПроцедуры

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

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

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

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

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

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

Движения.Регистр.Записывать = Истина;

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

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

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

Пример 1.

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
НовЗапись = Движения.Регистр.Добавить();
….
Движения.Регистр.Записать(Ложь); //***
КонецПроцедуры

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

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

Движения.Регистр.Записать()

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

Пример 2.

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

Приход = Документы.ПриходнаяНакладная.Выбрать();
Проводки = РегистрыБухгалтерии.Регистр.СоздатьНаборЗаписей();
Пока Приход.Следующий() Цикл
ДокСсылка = Приход.Ссылка;
Проводки.Отбор.Регистратор.Установить(ДокСсылка);
НоваяПроводка = Проводки.Добавить();
НоваяПроводка.Период = ДокСсылка.Дата;
НоваяПроводка.Организация = ДокСсылка.Организация;
НоваяПроводка.СчетДт = ПланыСчетов.ПланСчетов.Товары;
НоваяПроводка.СчетКт = ПланыСчетов.ПланСчетов.Поставщики;
НоваяПроводка.Сумма = ДокСсылка.Всего;
Проводки.Записать(Ложь);
КонецЦикла;

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

Пример 3.

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

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

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

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

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

Пример 4.

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

ОбъектДок = ДокСсылка.ПолучитьОбъект();
ДвиженияДок = ОбъектДок.Движения;
НовДвижение = ДвиженияДок.Регистр.Добавить();
….
ДвиженияДок.Регистр.Записать();

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

Читайте также:  Основные свойства какого амина выражены слабее

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

Источник

В свое время, когда только начинал шаги в 1С и изучал, как проводятся документы в конфигурациях на платформе 1С по книге «Разработка управляемого интерфейса» (Хрусталева Е.Ю.), и там были представлены примеры совсем далекие от того, как сейчас проводятся документы в современных конфигурациях от 1С.

В свое время, когда только начинал шаги в 1С и изучал, как проводятся документы в конфигурациях на платформе 1С по книге «Разработка управляемого интерфейса» (Хрусталева Е.Ю.), и там были представлены примеры совсем далекие от того, как сейчас проводятся документы в современных конфигурациях от 1С.

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

// регистр ЗаказыКлиентов Расход
Движения.ЗаказыКлиентов.Записывать = Истина;
Для Каждого ТекСтрокаТовары Из Товары Цикл
Движение = Движения.ЗаказыКлиентов.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.ЗаказКлиента = ТекСтрокаТовары.ЗаказКлиента;
Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
Движение.Характеристика = ТекСтрокаТовары.Характеристика;
Движение.КодСтроки = ТекСтрокаТовары.КодСтроки;
Движение.Склад = ТекСтрокаТовары.Склад;
Движение.Серия = ТекСтрокаТовары.Серия;
Движение.Заказано = ТекСтрокаТовары.Количество;
Движение.КОформлению = ТекСтрокаТовары.Количество;
Движение.Сумма = ТекСтрокаТовары.Сумма;
КонецЦикла;

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

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

Совсем вкратце он выглядит примерно так:При проведении документов по какому либо регистру в свойствах конфигурации управляемый

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

Документы.РеализацияТоваровУслуг.ИнициализироватьДанныеДокумента(Ссылка, ДополнительныеСвойства); // тут мы инициализируем таблицы для регистров

ЗаказыСервер.ОтразитьЗаказыКлиентов(ДополнительныеСвойства, Движения, Отказ); // так выполняем запись

ПроведениеСерверУТ.ВыполнитьКонтрольРезультатовПроведения(ЭтотОбъект, Отказ); // тут выполняется контроль

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

Естественно, когда столкнулся с типовыми конфигурациями 1С, то так сразу понять где что инициализируется и что где от чего зависит было сложновато. Порядок следования процедур, функциональность каждой из них, тонкости использования сразу начинающему разработчику бывает трудно охватить, особенно если был опыт работы либо на старых конфигурациях, либо на самописных (сейчас еще они встречаются). Типовой подход при проведении документов сейчас так же важен как использование БСП (Библиотеки стандартных подсистем). Поэтому давайте немного разберем все по полочкам.

Свойства проведения документа.

Во-первых документы должны быть со следующими настройками режима проведения:

При проведении документов по какому либо регистру в свойствах конфигурации управляемый

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

Схема проведения в событии «Обработка проведения».

Давайте для примера возьмем документ РегистрацияТранспортныхСредств (В ЕРП И УТ он должен быть). Не будем разбирать на примере документа РеализацияТоваровУслуг или других основных документах, т.к. они достаточно нагружены различными процедурами, которые будут отвлекать от нашей схемы проведения документа.

Сама обработка проведения нашего документа выглядит так:

При проведении документов по какому либо регистру в свойствах конфигурации управляемый

К самой схеме проведения относятся процедуры:

1. ИнициализироватьДополнительныеСвойстваДляПроведения;
2. ИнициализироватьДанныеДокумента;
3. ПодготовитьНаборыЗаписейКРегистрацииДвижений;
4. ЗагрузитьТаблицыДвижений;
5. ЗаписатьНаборыЗаписей;
6. ОчиститьДополнительныеСвойстваДляПроведения;

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

Остальные процедуры:
1. РеестрДокументов.ЗаписатьДанныеДокумента;
2. ДокументыПоОС.ЗаписатьДанныеДокумента;
3. СформироватьЗаписиРегистровЗаданий;
Не относятся к схеме и могут отсутствовать в других документах. К примеру РеестрДокументов.ЗаписатьДанныеДокумента (1) используется для хранения реквизитов документов и быстрого доступа к ним, чтобы не обращаться к реквизитам самого документа (к которому у пользователей, к примеру не может быть доступа по RLS, или если и есть то эти права достаточно «тяжело» отрабатывают для SQL сервера). В результате запрос с использованием этого РС отрабатывает быстрее.

Они являются специфичными для документа и могут отсутствовать в других документах.

 Давайте разберем по очереди каждую из этих процедур схемы проведения.

1.

При проведении документов по какому либо регистру в свойствах конфигурации управляемый

Эта процедура инициализирует общие структуры, используемые для проведения документа.
Изменяется свойство ДокументОбъекта ДополнительныеСвойства в которое помещаются свойства:

«ТаблицыДляДвижений» — в него будут записываться таблицы, которые будут загружаться в регистр сведений (о чем речь пойдет далее);
«ДляПроведения» — будут содержаться свойства и реквизиты документы, используемые для проведения: «СтрукутраВременныеТаблицы» — записывается МенеджерВременныхТаблиц, записывается «Режим проведения» — режим проведения нашего документа, «МетаданныеДокумента» — метаданные документа и «Ссылка» — ссылка на текущий документ;

Теперь мы инициализировали данные, которые сможем использовать для проведения.

2.
При проведении документов по какому либо регистру в свойствах конфигурации управляемый

Эта процедура одна из самых основных.

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

При проведении документов по какому либо регистру в свойствах конфигурации управляемый

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

При проведении документов по какому либо регистру в свойствах конфигурации управляемый

В конце этой процедуры перебираются все колонки РезультатаЗапроса и устанавливаются параметры в Запрос. Наши будущие таблицы движений, которые будут помещены в свойство «ТаблицыДляДвижений», будут использовать эти параметры.

При проведении документов по какому либо регистру в свойствах конфигурации управляемый

В Функции ЗначенияПараметровПроцедения устанавливаются параметры в Запрос, которые берутся не из реквизитов

Теперь вернемся в процедуру ИнициализироватьДанныеДокумента и увидим несколько однотипных процедур:

При проведении документов по какому либо регистру в свойствах конфигурации управляемый

По параметрам этих процедур видно, что они одинаковые. И выполняют одинаковую цель — добавляют в тексты запросов для каждого из регистров, по которым будут сформированы движения, которые будут отражены в регистрах.
Названия у них, как правило: «ТекстЗапроса» + «Таблица» + ИмяРегистра, где ИмяРегистра — имя регистра, движения которого будут формироваться этим запросом.

Читайте также:  Какие свойства элемента характеризует сродство к электрону

На мой взгляд первые 2 процедуры отступают от общепринятого стандарта формирования таких процедур, и там явно не хватет «ТекстЗапросаТаблица».

Разберем одну из такий процедур (функций):

При проведении документов по какому либо регистру в свойствах конфигурации управляемый

Вначале проверяется, требуется ли таблица для движений (если в ТекстыЗапроса был ранее добавлен текст по этому регистру, то проверка вернет Ложь — значит не требуется. А далее добавляется текст запроса для текущего регистра в ТекстыЗапроса. В данной процедуре (функции) выбираются параметры, которые мы инициализировали в процедуре ЗаполнитьПараметрыИнициализации. Чаще всего в этих запросах берутся данные из ТЧ из которых формируются движения по номенклатуре, характеристике, количестве и т.д., реже из шапки документов (как в данном случае).

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

При проведении документов по какому либо регистру в свойствах конфигурации управляемый

При проведении документов по какому либо регистру в свойствах конфигурации управляемый

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

(Имена псевдонимов в Тексте запроса и Имена Измерений(Ресурсов, Реквизитов) регистров должны совпадать.

(Имена псевдонимов в Тексте запроса и Имена Измерений(Ресурсов, Реквизитов) регистров должны совпадать.

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

3.

Данная процедура, как следует из ее описания выполняет 2 основных функции:
1. Очищает наборы записей от старых записей (в настоящее время все менее актуальна, т.к. чаще работают на тонких клиентах, а не на толстых);

При проведении документов по какому либо регистру в свойствах конфигурации управляемый

2. Взводит флаг записи у регистров, по которым есть ТаблицыДляДвижений с количеством записей более 0. По сути смысл процедуры в строке Объект.Движения[ИмяРегистра].Записывать = Истина.

При проведении документов по какому либо регистру в свойствах конфигурации управляемый

Также в этой процедуре удаляются регистры, по которым документ является регистратором, но движения пишутся не из модуля документа или отложенно, к примеру, регламентными заданиями.

4.

Загружаются Таблицы для движений из свойства «ТаблицыДляДвижений». По сути самая главная строчка — это Движения[ИмяРегистра].Загрузить(Таблица.Значение). Обратите внимание, что разработчики решили повторно взвести флаг Записывать = Истина, хотя его уже установили на 3 этапе схемы проведения. Все таблицы для проведения должны начинаться с слова «Таблица».

При проведении документов по какому либо регистру в свойствах конфигурации управляемый

В данном случае загружаются таблицы в цикле, хотя могут также встречаться сразу несколько однотипных процедур с именами «Отразить» + ИмяРегистра, где ИмяРегистра — имя регистра, по которому отражаются движения.

5.

В процедуре ЗаписатьНаборыДанных Записываются движения (строка Объект.Движения.Записать()) и копируются параметры для выполнения регистрации движений (к примеру для использования их в контролях, Объект.Движения.ТоварыОрганизаций.ДополнительныеСвойства.Вставить(«РассчитыватьИзменения», Истина)).

При проведении документов по какому либо регистру в свойствах конфигурации управляемый

При проведении документов по какому либо регистру в свойствах конфигурации управляемый

6.

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

Схема проведения в событии «Обработка  удаления проведения».

При проведении документов по какому либо регистру в свойствах конфигурации управляемый

Схема удаления проведения похожа на обычную схему проведения, только в ней основных процедур не 6 (процедур в обработке проведения «Отразить» + ИмяРегистра (3) может быть несколько), а 4 необходимых только для удаления движений. Тут вызываются процедуры только общего модуля ПроведениеСерверУТ. Если сравнивать с обработкой проведения, то в обработке удаления проведения будут использоваться процедуры 1-3-5-6, ИнициализироватьДанныеДокумента(2) и ОтразитьДвиженияДокумента(4) отсутствуют.

Схема проверки Контролей при проведении документов.

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

При проведении документов по какому либо регистру в свойствах конфигурации управляемый

Схема контроля при проведении:

1. СформироватьСписокРегистровДляКонтроля;
2. ВыполнитьКонтрольРезультатовПроведения;

1.

В процедуре видно, что если РежимЗаписи документа = Проведение, то добавляется 2 регистра, по которым будет проходить контроль. В Дополнительные свойства «ДляПроведения» вставляется свойство «РегистрыДляПроведения» с массивом регистров для контроля.

При проведении документов по какому либо регистру в свойствах конфигурации управляемый

2.

Процедура ВыполнитьКонтрольРезультатовПроведения выполняет контроли по различным регистрам конфигурации.

При проведении документов по какому либо регистру в свойствах конфигурации управляемый

Тут следует обратить внимание на процедуру ЕстьИзмененияВТаблице, в ней определяется по флагу, есть ли изменения в таблице регистра, если есть, то контроль будет выполняться. Есть ли изменения по данному регистру определяется в самом регистре в модуле набора записей в процедурах ПередЗаписью и ПриЗаписи. ПередЗаписью берутся данные, которые были до, а ПриЗаписи как правило через ОБЪЕДЕНИТЬ ВСЕ берется разница движений, и если разница между движениями есть, то взводится флаг ДвижениеСвободныеОстаткиИзменение, который и проверяется.

При проведении документов по какому либо регистру в свойствах конфигурации управляемый

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

При проведении документов по какому либо регистру в свойствах конфигурации управляемый

В конце процедуры выполняется ПакетЗапросов, и если в есть не пустые результаты запроса из массива результатов, то из МассивКонтролей берется ИмяКонтроля и далее в много условном операторе Если ИначеЕсли … КонецЕсли для каждого контроля выполняется своя процедура отработки сообщений об ошибках.

Надеюсь в этой статье мне удалось немного упростить ознакомление с типовой схемой проведения для тех, кто только встретился с этим механизмом.

Источник