Не смотря на свою простоту, каркасная конфигурация содержит и подводные камни, о которых нужно быть в курсе. Речь идет о возможном конфликте режимов управления блокировкой данных. Напомним, что раньше, в версии 8.1 платформы, в конфигурации стандартно использовался автоматический режим управления блокировками. Этот режим не требует от разработчика каких-либо действий по управлению блокировками в транзакции, всю заботу о них берет на себя платформа.
В версии 8.2 платформы, для того, чтобы повысить параллельность работы пользователей прикладного решения, появился управляемый режим управления блокировками. Однако, в отличие от режима автоматических блокировок, данный режим уже не может сам по себе обеспечить корректность работы с данными в транзакции. Поэтому при работе в управляемом режиме от разработчика требуется самостоятельно управлять устанавливаемыми блокировками:
Что это для нас означает? Только то, что транзакции, исполняющиеся в режиме управляемых блокировок, могут конфликтовать с транзакциями, исполняющимися в режиме автоматического управления блокировками. И в нашей каркасной конфигурации именно так все и происходит! Дело в том, что свойство Режим управления блокировкой данных каркасной конфигурации имеет значение Автоматический. И если, например, в процедуре ОбработкаПроведения документа РасходнаяНакладная написать что-то вроде:
Движения.ОстаткиНоменклатуры.Записывать = Истина; Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина; Движения.ОстаткиНоменклатуры.Записать();
то получаем классический конфликт режимов блокировок вида:
Интересно, что управляемая блокировка с помощью объекта БлокировкаДанных конфликта не вызывает:
Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры"); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры; ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
В примере решения задачи по оперативному учету из нового сборника задач для подготовки к экзамену «1С:Специалист» по платформе «1С:Предприятие 8» (редакция 3, июнь 2010) используется именно объект БлокировкаДанных. Однако, обоснованность этого примера вызывает некоторые сомнения, о чем будет рассказано здесь.
Краткий вывод - без знания режимов управления блокировкой данных, умения работать с управляемыми блокировками - испытывать свою удачу на экзамене не рекомендуется! А рекомендуется - установить первым делом свойство Режим управления блокировкой данных каркасной конфигурации в значение Управляемый. Это приведет к тому, что соответствующий режим блокировки будет использоваться для всех объектов конфигурации, независимо от значений, установленных для каждого из объектов. Тогда останется только не посрамиться при обращении с самими управляемыми блокировками!