об'єктні блокування

При роботі з об'єктними даними (довідники, документи, плани рахунків і т.д.) система «1С: Підприємство» забезпечує два види об'єктних блокувань: песимістичну й оптимістичну. Вони дозволяють виконувати цілісні зміни об'єктів при одночасній роботі декількох користувачів.

блокування

При роботі з об'єктними даними (довідники, документи, плани рахунків і т.д.) система «1С: Підприємство» забезпечує два види об'єктних блокувань: песимістичну й оптимістичну. Вони дозволяють виконувати цілісні зміни об'єктів при одночасній роботі декількох користувачів.

Об'єктна песимістична блокування

Песимістична об'єктна блокування призначена для заборони змін даних об'єкта, поки блокування не буде знято. Система (за допомогою відповідних розширень форми об'єкта) автоматично встановлює песимістичну блокування, в момент, коли користувач намагається провести зміну даних об'єкта. Якщо після цього інший користувач, наприклад, спробує виконати редагування того ж об'єкта, йому буде видано повідомлення про те, що не вдалося заблокувати об'єкт. Коли форма буде закрита користувачем, дане блокування буде знято.

Чи не зберігаючи документ увійдемо в інформаційну базу під користувачем «Іванов І.І.», відкриємо той же документ і спробуємо внести зміни в будь-якому реквізиті документа. Система не дасть нам внести зміни і видасть повідомлення про помилку (рис. 1.4).

Звідси випливає, що песимістична блокування гарантує, що користувач, почавши змінювати дані об'єкта, зможе записати ці зміни в інформаційну базу.

Розробник використовуючи засоби вбудованої мови може задіяти песимістичну блокування. Використовуючи метод «Заблокувати ()» відбувається установка песимістичній об'єктної блокування, а для зняття використовується метод «Розблокувати ()».


Давайте розглянемо ще один приклад. Під користувачем «Васильєв В.В.» в розділі «Нормативно-довідкова інформація» відкриємо елемент довідника «Склади» з найменуванням «Склад №1» і внесемо зміни в найменування (рис. 1.5).


Чи не зберігаючи перемкнемося в вікно інформаційної бази, який був запущений під користувачем «Іванов В.В.», в розділі «Нормативно-довідкова інформація» відкриємо обробку «Видалення об'єкта». Виберемо в якості об'єкту, що видаляється виберемо елемент довідника «Склади» з найменуванням «Склад №1» і натиснемо «Видалити об'єкт» (рис. 1.6).

В результаті система дозволить видалити даний елемент довідника і система не видасть повідомлення про помилку. Справа в тому, що операція блокування не перешкоджає операції зміни або видалення об'єкта в базі даних.

Для того, щоб забезпечити неможливість зміни або видалення заблокованого об'єкт необхідно провести перевірку на блокування об'єкта.

Є два способи перевірки:

  1. Метод «Заблоковано ()» використовується для перевірки блокування об'єкта бази даних поточним сеансом. Даний метод не надає можливість перевірки заблокований об'єкт взагалі.
  2. Для перевірки заблокований об'єкт бази даних взагалі використовується метод «Заблокувати ()». Спроба блокування заблокованого об'єкта викликає виняток, яке може бути оброблено конструкцією «Спроба ... ..Ісключеніе ... ..КонецПопиткі».

Песимістична блокування в керованих формах

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

Справа в тому, що дані методи використовуються для об'єктів бази даних. Об'єкт бази даних існує тільки на сервері. Виходить розробнику доведеться виконати серверний виклик, отримати об'єкт бази даних шляхом перетворення основного реквізиту форми за допомогою методу форми «РеквізітФормиВЗначеніе». Далі викликається один з методів об'єкта «Заблокувати ()», «Розблокувати ()» або «Заблоковано ()». Але даний спосіб блокування буде марний, якщо завдання стоїть, щоб об'єкт був заблокований поки відкрита форма, так як отриманий об'єкт буде жити до кінця серверного виклику.

Для роботи з блокуваннями з керованою форми необхідно використовувати методи: «ЗаблокіроватьДанниеФормиДляРедактірованія ()» і «РазблокіроватьДанниеФормиДляРедактірованія ()». Дані методи використовуються для блокування або розблокування даних основного реквізиту форми.

Розглянемо приклад. У розділі «Нормативно-довідкова інформація» відкриємо будь-який елемент довідника «Номенклатура» під користувачем «Васильєв В.В.», внесемо зміни в найменування і не зберігаючи під користувачем «Іванов І.І.» відкопаємо той же елемент довідника. При спроби внесення змін система видасть повідомлення про помилку.


Далі в формі елемента довідника під користувачем «Васильєв В.В.» натиснемо на кнопку «Розблокувати» (рис. 1.7) і спробуємо знову внести зміни до цього елемент довідника під користувачем «Іванов І.І.». В даному випадку система дасть внести зміни і записати елемент довідника.


Для відключення песимістичній блокування в керованих формах у властивості основного реквізиту треба зняти прапор «Зберігаються дані». Даний прапор визначає чи буде при інтерактивному редагуванні блокуватися дані основного реквізиту, чи ні рис (1.8).

Об'єктна оптимістична блокування

Оптимістична блокування являє собою перевірку, яка виконується перед записом об'єкта в базу даних. У об'єкта є властивість «ВерсіяДанних», яка разом з об'єктом зчитується з бази даних. Оптимістична блокування виробляє перед записом виробляє порівняння значення властивості «ВерсіяДанних» об'єкта, який знаходиться в оперативній пам'яті з значенням властивості «ВерсіяДанних» об'єкта знаходиться в базі даних. Якщо значення властивості «ВерсіяДанних» у об'єктів відрізняється, то оптимістична блокування забороняє запис об'єкта в базу даних і видає повідомлення про помилку.

У розділі «Нормативно-довідкова інформація» відкриємо будь-який елемент довідника «Номенклатура» під користувачем «Васильєв В.В.», далі не закриваючи форму елемента під користувачем «Іванов І.І.» в розділі «Нормативно-довідкова інформація» відкриємо обробку « змінити об'єкт ».

В обробці виберемо ту ж номенклатуру і натиснемо кнопку «Змінити об'єкт». Дана команда додасть в кінці найменування «. »(Рис. 1.9).

Після зміни спробуємо записати відкритий елемент довідника номенклатури під користувачем «Васильєв В.В.». Система видасть попередження про те, що дані об'єкти були змінені або видалені і не дасть записати даний об'єкт (рис. 1.10).

Для відключення оптимістичній блокування необхідно перед записом об'єкта знаходиться в оперативній пам'яті порівняти версію з версією об'єкта бази даних. Якщо версії даних відрізняються, то отримуємо об'єкт з бази даних і переносимо зміни в нього, далі записуємо.

Схожі статті