Блокировки, частичный переход на управляемые

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

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

2 шаг: Тот документ который хотим перевести в управляемый режим, в свойствах на вкладке прочее, тоже переводим в режим: Управляемый

3 шаг: Открываем модуль объекта этого документа, и в обработке проведения пишем блокировки. Хорошо рассказано про блокировки вот здесь: http://1cexpo.ru/informacziya/27-blokirovki-dannyx-v-1spredpriyatii-8.html, если вы сними еще не ознакомились.

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

1. Блокировать, как правило нужно только регисты накопления, т.е. там где могут измениться остатки или какие-то данные, для начала смотрим какие регисты накопления прописаны в модуле, анализируем, где и что нам нужно заблокировать. У меня например были регистры накопления ОстаткиТоваровКомпании и ВзаиморасчетыКомпании. Для них в обработкеПроведения я прописывала вот такой код:

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



Блокировка = Новый БлокировкаДанных;
ЭБТовВП = Блокировка.Добавить("РегистрНакопления.ВзаиморасчетыКомпании");
ЭБТовВП.ИсточникДанных = ЭтотОбъект.Товары;
ЭБТовВП.ИспользоватьИзИсточникаДанных("Контрагент", "Контрагент");
ЭБТовВП.Режим = РежимБлокировкиДанных.Исключительный;
Блокировка.Заблокировать();

 

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

2. После того, как вы заблокировали нужные вам регистры накопления, вам нужно все регистры к которым идет обращение, или просто они хотябы упоминаются в этом модуле, их ВСЕ нужно (также в их свойствах, на вкладке прочее) перевести в управляемый режим, я еще раз повторюсь ВСЕ РЕГИСТРЫ (накопления, сведения), не важно блокировали вы их или нет!

Очень часто вываливается ошибка о менеджере блокировок и что-то там о невозможности использовать автоматический режим(к сожалению не сделала скриншот в свое время), это происходит вызов исключительной ситуации, когда главный документ по которому делается проведение, в управляемом режиме, а ему «подчиненный» остался в автоматическом, об этом написано в той статье на которую я дала ссылку. Иногда ошибки показывают на общий модуль, это тоже означает(как было в моем случае), что просто это функция вызывается оттуда, а там что-нибудь прописано о каком-нибудь регистреСведения например, или делается запрос из него, а этот регистр остался в автоматическом режиме, поэтоому просмотрите все внимательно, потому что эти внутренние транзакции бывают очень коварны)))

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

5 Comments

  1. Angeros

    Вообще то первоисточник инфы по 1с блокировкам находиться тут: http://kb.1c.ru/

    Остальное в целом пере посты…

    Reply
  2. Mortiferus

    Лучше все-таки в качестве источника данных передавать не саму табличную часть, а результат запроса. При проведении документа это будет шустрее работать.

    Reply
  3. Mortiferus

    И еще интересно, что заблокирует такая конструкция:

    ЭБТовВП.ИспользоватьИзИсточникаДанных(«Номенклатура», «Номенклатура»);

    ЭБТовВП.ИспользоватьИзИсточникаДанных(«СкладКомпании», «СкладКомпании»); ?

    Судя по кавычкам 2-го параметра во второй строке, используется реквизит табличной части СкладКомпании, а не реквизит шапки документа. Т.е. заблокируются все записи где встречаются и номенклатура из списка номенклатуры и склад из списка складов?

    Reply
  4. ZLENKO

    Современный взгляд на проблему тут http://forum.infostart.ru/forum24/topic90504/

    Reply
  5. Kamikadze

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

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *