Каркасная конфигурация

Предполагается, что задание будет выполняться в начальной информационной базе. Это и есть каркасная конфигурация! Анализ показывает, что она практически пуста: несколько простейших справочников, такая же ситуация с документами и прочим содержимым. К плюсам можно отнести наличие в ее составе стандартных обработок «Консоль запросов» и «Заполнение графика», к минусам - то, что воспользоваться консолью запроса в режиме управляемого приложения не удастся.

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

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

  • С помощью объекта БлокировкаДанных;
  • С помощью свойства БлокироватьДляИзменения у набора записей регистров накопления и регистров бухгалтерии;

Что это для нас означает? Только то, что транзакции, исполняющиеся в режиме управляемых блокировок, могут конфликтовать с транзакциями, исполняющимися в режиме автоматического управления блокировками. И в нашей каркасной конфигурации именно так все и происходит! Дело в том, что свойство Режим управления блокировкой данных каркасной конфигурации имеет значение Автоматический. И если, например, в процедуре ОбработкаПроведения документа РасходнаяНакладная написать что-то вроде:


Движения.ОстаткиНоменклатуры.Записывать = Истина;
Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина;
Движения.ОстаткиНоменклатуры.Записать();

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

Ошибка блокировки
Ошибка блокировки

Интересно, что управляемая блокировка с помощью объекта БлокировкаДанных конфликта не вызывает:


Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры");

ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");

В примере решения задачи по оперативному учету из нового сборника задач для подготовки к экзамену «1С:Специалист» по платформе «1С:Предприятие 8» (редакция 3, июнь 2010) используется именно объект БлокировкаДанных. Однако, обоснованность этого примера вызывает некоторые сомнения, о чем будет рассказано здесь.

Краткий вывод - без знания режимов управления блокировкой данных, умения работать с управляемыми блокировками - испытывать свою удачу на экзамене не рекомендуется! А рекомендуется - установить первым делом свойство Режим управления блокировкой данных каркасной конфигурации в значение Управляемый. Это приведет к тому, что соответствующий режим блокировки будет использоваться для всех объектов конфигурации, независимо от значений, установленных для каждого из объектов. Тогда останется только не посрамиться при обращении с самими управляемыми блокировками!

1Gb.ru counter Рейтинг сайтов Бийска