Контакти

1с 8 керований режим блокування не працює. Механізм керованих блокувань. Якщо є помилки, то повертаємося з обробника події

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

Принципова відмінність цих режимів полягає в наступному. Режим автоматичних блокувань не вимагає від розробника будь-яких дій з управління блокуваннями в транзакції для того. Ці правила забезпечуються платформою системи «1С: Підприємство» за рахунок використання певних рівнів ізоляції транзакцій в тій чи іншій СУБД. Такий режим роботи є найбільш простим для розробника, проте в деяких випадках (наприклад, при інтенсивній одночасній роботі великої кількості користувачів) використовуваний рівень ізоляції транзакцій в СУБД не може забезпечити достатньої паралельності роботи, що проявляється у вигляді великої кількості конфліктів блокувань при роботі користувачів.

При роботі в режимі керованих блокувань система «1С: Підприємство» використовує набагато нижчий рівень ізоляції транзакцій в СУБД, що дозволяє значно підвищити паралельність роботи користувачів прикладного рішення. Однак, на відміну від режиму автоматичних блокувань, даний рівень ізоляції транзакцій вже не може сам по собі забезпечити виконання всіх правил роботи з даними в транзакції. Тому при роботі в керованому режимі від розробника потрібно самостійно управляти блокуваннями, що встановлюються в транзакції.

У зведеному вигляді відмінності при роботі в режимі автоматичних блокувань і в режимі керованих блокувань наведені в наступній таблиці:

вид блокування Рівень ізоляції транзакцій
автоматичні блокування
файлова БД таблиць Serializable
MS SQL Server записів
IBM DB2 записів Repetable Read або Serializable
PostgreSQL таблиць Serializable
Oracle Database таблиць Serializable
керовані блокування
файлова БД таблиць Serializable
MS SQL Server записів Read Commited
IBM DB2 записів Read Commited
PostgreSQL записів Read Commited
Oracle Database записів Read Commited

Установка режиму блокувань в конфігурації
Конфігурація має властивість. Кожен прикладної об'єкт конфігурації також має властивість Режим управління блокуванням даних.
Режим управління блокуванням даних для всієї конфігурації в цілому може бути встановлений в значення Автоматичний, Керований (встановлено за умовчанням для нової конфігурації) і Автоматичний і керований. Значення Автоматичний і Керований означають, що відповідний режим блокування буде використовуватися для всіх об'єктів конфігурації, незалежно від значень, встановлених для кожного з об'єктів. значення Автоматичний і керований означає, що для конкретного об'єкта конфігурації буде використаний той режим, який вказаний в його властивості Режим управління блокуванням даних: Автоматичний або Керований.
Слід зазначити, що режим управління блокуванням даних, вказаний для об'єкта метаданих, встановлюється для тих транзакцій, які ініціюються системою «1С: Підприємство» при роботі з даними цього об'єкта (наприклад, при модифікації даних об'єкта).
Якщо ж, наприклад, операція запису об'єкта виконується в транзакції, ініційованої розробником (метод НачатьТранзакцію ()), То режим управління блокуванням даних буде визначатися значенням параметра режим блокуваньметоду НачатьТранзакцію (), А не значенням властивості об'єкта метаданих Режим управління блокуванням даних.
За замовчуванням режим блокувань має значення РежімУправленіяБлокіровкойДанних.Автоматіческій, Тому для
того, щоб в явній транзакції використовувати режим керованих блокувань, слід вказувати значення цього параметра
РежімУправленіяБлокіровкойДанних.Управляемий (Встановлювати цей параметр має сенс, якщодля характеристики зміни «Режим управління блокуванням даних» вибрано значення «Автоматичний і Керований») .

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

Умови задаються на рівність значення поля вказаною значенням або на входження значення поля в зазначений діапазон.
Умови можуть бути задані двома способами:

● за допомогою явної вказівки імені поля і значення (метод УстановітьЗначеніе () об'єкта ЕлементБлокіровкіДанних);
● за допомогою вказівки джерела даних, що містить необхідні значення (властивість ІсточнікДанних об'єкта ЕлементБлокіровкіДанних).

Для кожного елемента блокування може бути заданий один з двох режимів блокування:

● розділяється,
● винятковий.

Таблиця сумісності керованих блокувань виглядає наступним чином

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

Особливості роботи в режимі «Автоматичний і керований»

При роботі в режимі управління блокуваннями Автоматичний і керований слід враховувати дві особливості:

● Незалежно від режиму, зазначеного для даної транзакції, система буде встановлювати відповідні керовані
блокування.
● Режим управління блокуваннями визначається транзакцією самого «верхнього» рівня. Іншими словами, якщо до моменту початку транзакції була розпочата інша транзакція, то починає транзакція може бути виконана тільки в тому в режимі, який встановлений для вже виконується транзакції.

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

Ви потрапили на потрібну сторінку! Швидше за все, вранці ви виявили, що улюблена 1С 8.3 не починається з повідомленням: « Початок сеансу з інформаційною базою заборонено. Щоб створити резервну копію ...».

Перше, що зараз потрібно зробити - терміново дозволити роботу користувачам. Після цього спокійно дочитайте статтю до кінця і дізнайтеся, чому так сталося і що таке «Блокування та розблокування з інформаційної бази 1С 8.3 ».

Мій досвід підказує, що ви - користувач (не системний адміністратор і не програміст), а ваша інформаційна база - файлова (якщо база SQL, вашою проблемою вже займаються фахівці). Для початку треба зрозуміти, в якій папці (каталозі) вона розташована і видалити в цій папці один файл - 1Cv8.cdn (Файл годі й зберігати, він більше не знадобиться).

* Якщо ви ІТ-фахівець, можете сміливо переходити до читання розділу «Блокування та розблокування з інформаційної бази 1С».

У вікні зі списком інформаційних баз знайдіть свою базу (цифра 1 на ілюстрації нижче) і натисніть на неї один (і тільки один!) Раз мишкою. Потім натисніть кнопку «Змінити» (цифра 2).

У списку може бути тільки одна база, тому це вікно вам може бути знайоме як «вікно запуску 1С». У цьому випадку просто натисніть кнопку «Змінити».

Якщо ви бачите, що інформаційна база розташована на даному комп'ютері або в локальної мережі - мій досвід не підвів - база файлова, і ми все робимо правильно. Розмістіть цей шлях ( цифри 3 і 4).

Тепер зайдіть в цю папку.

Про всяк випадок, ось кілька варіантів запуску Провідника:

  • У вас Windows XP або Windows 7. Натисніть Пуск, Виконати, вставте раніше скопійоване розташування інформаційної бази. Відкриється Провідник.
  • У вас Windows 7. Але пункту «Виконати» немає. Вставляйте розташування відразу після натискання Пуск. Відкриється Провідник.
  • У вас Windows 8 або Windows 10. Натисніть Пуск, у правому верхньому кутку натисніть на Лупу, вставте раніше скопійоване розташування інформаційної бази, натисніть Enter. Відкриється Провідник.

  • Знайдіть на панелі завдань жовту дискету і натисніть на неї. Вставте розташування інформаційної бази в адресний рядок у верхній частині вікна Провідника. (Правою кнопкою миші на адресний рядок, Змінити адресу, правою кнопкою ще раз на адресний рядок, Вставити).

  • Універсальний спосіб для всіх версій Windows і її налаштувань. Натисніть на клавіатурі кнопку з прапорцем і, не відпускаючи її, натисніть на клавіатурі латинську R (або російську К). Відкриється вікно «Виконати», вставте туди раніше скопійоване розташування інформаційної бази і натисніть ОК.

Скориставшись одним із запропонованих варіантів, ви потрапите у вікно провідника з розташуванням інформаційної бази.


У вікні провідника знайдіть в списку файлів файл 1Cv8.cdn, натисніть на ньому правою кнопкою миші, виберіть «Видалити», як показано на попередньому малюнку.

Готово! Ваша «1С: Бухгалтерія» або «1С: Зарплата і управління персоналом» або «1С: Управління торгівлею» знову запускаються.

Блокування та розблокування з інформаційної бази 1С. Руйнуємо міфи.

В даному розділі ви знайдете унікальну інформацію по роботі з блокуваннями, а також отримаєте спростування поширених помилок на тему «Блокування даних».

Як встановити блокування?

Механізм блокування інформаційної бази призначений для завершення поточних відкритих сеансів і запобігання нових підключень. Розташування функціоналу блокування в меню може відрізнятися в залежності від конфігурації. Наприклад, в УТ, редакція 11 (11.3.3.163) це НДІ і адміністрування, [Сервіс] Блокування роботи користувачів. Альтернативний варіант: НДІ і адміністрування, Підтримка і обслуговування, Блокування роботи користувачів. В УТ, редакція 10.3 (10.3.21.2) це Сервіс, Користувачі, Блокування установки з'єднань з інформаційною базою.

* Існують спеціальні галузеві конфігурації, в яких блокування з точки зору інтерфейсу і з точки зору механізму буде виглядати не так, як описано в даній статті. Оскільки ми розглядаємо стандартний механізм для більшості конфігурацій 1С, спеціальні галузеві конфігурації зачіпати не будемо.


При виборі даного пункту відкриється діалогове вікно «Блокування роботи користувачів», в якому необхідно ввести повідомлення для користувачів, час початку і завершення блокування, а також код для розблокування.


Оскільки вводиться початок і закінчення дії блокування, необхідно бути вкрай уважним в цьому діалозі і ввести інформацію в явному вигляді. Якби в діалозі була б можливість ввести початок блокування «через 15 хвилин» тривалістю «на 20 хвилин», або хоча б довідково відображалися ці величини на підставі абсолютного часу початку і закінчення блокування, то було б складно встановити блокування тривалістю в рік, як це може трапитися при помилку введення дати-часу.

Параметр «Час початку» рекомендується встановити як поточна дата / час + час, необхідний користувачам на підготовку до виходу зі збереженням редагованих документів. Наприклад, зараз 9 год 50 хв, даємо 10 хвилин користувачам для збереження їх результатів. Разом час початку блокування повинно бути 10 год 00 хв.

Час кінця - можна не вводити, при цьому блокування об'єкта буде встановлена \u200b\u200bбезстроково (навічно).

Код для розблокування - одноразовий «пароль» на запуск «з нуля», всупереч встановленій блокування, який може знадобитися в деяких випадках (буде сказано далі). Вводити і запам'ятовувати обов'язково. Цей параметр в разі SQL-варіанту інформаційної бази видно в оснащенні «Адміністрування серверів 1С підприємства» і називається там «Код дозволу».

У разі SQL-варіанту інформаційної бази додатково буде потрібно авторизація адміністратора інформаційної бази або адміністратора кластера.


Отже, після натискання кнопки «Встановити блокування» і позитивної відповіді на підтвердження ...


... ви повернетеся в попереднє діалогове вікно, зовнішній вигляд якого змінився:


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


Запланована? Бути може це якось пов'язано з регламентними завданнями?

Чи спрацює запланована блокування роботи користувачів, якщо встановлена \u200b\u200bблокування регламентних завдань? Так, спрацює. Механізм блокування не використовує регламентні завдання.

Що побачать користувачі і я сам?

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


Ініціатор блокування отримує інше повідомлення:


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



Бомба вибухає точно в призначений час. Сирена виє до вибуху.

Всупереч поширеній думці, що завершення сеансів активних користувачів проводиться м'яко, після попередження, яке можна ігнорувати і продовжити роботу, насправді завершення, а краще сказати, «обрубування», активних сеансів відбувається точно за розкладом, жорстко і з втратою всіх незбережених результатів. Усі попередження видаються в інтервалі від часу натискання кнопки «Встановити блокування» до часу початку блокування, після настання якого, завершення активного сеансу відбудеться без будь-якого повідомлення, а 1С перейде в цикл спроб запуску конфігурації заново, з інтервалом в 1 хвилину.

Не є винятком режими введення довідкових значень, при яких введено значення, відсутнє в довіднику - вийти з режиму введення не можна (наприклад, закрити 1С хрестиком), але це не завадить завершити роботу. Більш значний інтерес представляє режим модального діалогу, тому про нього буде сказано докладніше.

* Завершення сеансів користувачів в старих конфігураціях відбувається трохи пізніше призначеного часу, тому що користувачі спочатку отримують сповіщення «Робота системи завершується».

А точно вибухне?

Для початку зазначимо, що в старих конфігураціях може не спрацювати блокування для ініціатора блокування. А тепер перейдемо до розгляду питання для платформи 8.3.

Користувач файлової ІБ, який вирішив, наприклад, видалити документ, а потім піти на обід, залишивши на екрані діалог «Позначити документ на видалення?», Буде тримати відкритим з'єднання з інформаційною базою. Звичайно, його сеанс завершиться після обіду, після того, як він відповість «Так» або «Ні», але до цього моменту ви будете бачити, що є активні користувачі. При цьому ініціатор блокування побачить повідомлення:


У журналі реєстрації з'явиться повідомлення про runtime-помилку, яке слід інтерпретувати не як runtime-помилку, а як «не всі користувачі завершили свої сеанси»:


І це не єдина причина, по якій блокування може не спрацювати (Див. Далі розділи «За чиїм годинах?» І «А як же мої користувачі у Владивостоці?»).

Модальний діалог в SQL-варіанті інформаційної бази на керованих формах

Сервер додатків 1С має можливість видалити сеанс незважаючи на режим модального діалогу. Інтерфейс 1С і модальний діалог залишаться у користувача на екрані, створюючи видимість незавершеного сеансу, але насправді сеанс буде видалений, а з'єднання з ІБ буде своєчасно розірвано. При спробі продовжити роботу користувач побачить повідомлення про помилку «Сеанс відсутня або видалений» або «Сеанс роботи завершено Адміністратором» в залежності від нюансів.



Модальний діалог в SQL-варіанті інформаційної бази на звичайних формах

Сеанси користувачів завершуються.

Після установки блокування з діалогу краще не виходити, тому що при повторному вході в цей діалог до початку блокування спливає не відповідає дійсності повідомлення про те, що блокування вже встановлена \u200b\u200b(правда тільки наполовину), активних сеансів нуль (неправда). При цьому продовжується процес завершення роботи користувачів (суперечить нулю активних сеансів + не зовсім так, тому що користувачі «самі себе завершують»). Хоча код блокування роботи користувачів не ідеальний, врешті-решт, це не завадить встановити блокування і завершити активні сеанси, однак дезорієнтує Адміністратора інформаційної бази.



Чи спрацює блокування, якщо встановити блокування і закрити діалог?

Чи спрацює блокування, якщо встановити блокування і відразу вийти з 1С (тобто завершити сеанс 1С до початку дії блокування)?

Так. Механізм реагування на встановлену блокування не передбачає взаємодії між ініціатором блокування і іншими користувачами. Сеанси користувачів самостійно перевіряють, чи можна їм працювати.

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

Проблема рассинхронизации годин

При файлової ІБ кожен комп'ютер сам перевіряє, чи є в ІБ встановлений часовий діапазон блокування, і порівнює його зі своїми локальними годинами. Від точності свого годинника залежить, чи зможе даний комп'ютер здійснити завершення сеансу точно в потрібний час. Якщо база блокується з 10:00, для одного комп'ютера цей момент настане раніше, а для іншого - пізніше.

У доменній середовищі і при бездоганній роботі системних адміністраторів час на всіх комп'ютерах синхронізуються з контролером домену. Але по різних причин час може бути збито: не настроєна синхронізація часу з контролером домену, налаштована синхронізація часу із зовнішнім сервером точного часу, який більш недоступний, збої в роботі мережевих або доменних служб, відсутність прав на зміну системного часу і т.д.

Здається, що мова може йти про секундах, в крайньому випадку, хвилинах. Але насправді, на комп'ютері може бути, наприклад, не встановлено оновлення операційної системи, Що підтримує перехід на сезонний (зимовий / літній) час, і помилка вже може становити не секунди, а годинник. Легко провести такий експеримент: заплануйте блокування на 10 ранку тривалістю півгодини, а на одному з комп'ютерів переведіть час на годину вперед - блокування на нього не подіє.

Тому перед установкою блокування уважно звірте час в правому нижньому кутку комп'ютера зі своїми наручними годинниками, А також завчасно зверніться до свого системного адміністратора з питанням, чи працює синхронізація часу в вашій ІТ-інфраструктурі.

А як же мої користувачі у Владивостоці?

Проблема абсолютного часу при користувачів з різних часових поясів

Часовий діапазон блокування зберігається в інформаційній базі. Подивіться на вміст блокувального файлу 1Cv8.cdn (який створюється в файловому варіанті ІБ), в ньому записано час початку блокування 17.07.2017 13:59 в форматі ГГГГММДДЧЧММСС без якої-небудь вказівки на часовий пояс:


Без вказівки на часовий пояс було б зрозуміло, про яке абсолютному часу йдеться, Якщо час завжди ставилося б до якогось конкретного часового поясу, наприклад UTC + 0. Але в базі зберігається локальний час по годинах комп'ютера, який був ініціатором блокування. З якого часового поясу був цей комп'ютер - невідомо, а значить невідомо абсолютне час блокування.

Якщо в Москві, в централізованої ІБ, ви встановлюєте блокування о 13:59, і цей момент часу для московських користувачів знаходиться в майбутньому, то у користувачів цієї ж ІБ у Владивостоці 13:59 було 7 годин тому. І в залежності від технічного рішення, відповідно до якого здійснюється робота з ІБ користувачів Владивостока, блокування цих користувачів або спрацює, чи ні.

Які можуть бути технічні рішення, в яких блокування буде працювати неправильно для користувачів Владивостока? Ті, при яких клієнтська частина 1С отримає час по Владивостоку, а не по Москві. Наприклад, офіси пов'язані в локальну мережу по VPN, а клієнтська частина 1С запускається з локального комп'ютера, Маючи час UTC + 10. Але якщо вони працюють з базою через RDP-з'єднання або в режимі RemoteApp на московському сервері, запускаючи на цьому сервері клієнтську частину 1С - все буде добре, тому що вона матиме час UTC + 3.

Чи є проблеми рассинхронизации годин і часового поясу в разі SQL-варіанту інформаційної бази?

Ні. В даному варіанті є «годинник сервера», які приймаються за еталон.

Викине мене з Конфігуратора, якщо я був в ньому, а блокування введено в дію?

Чи можна буде зайти в Конфігуратор після початку дії блокування?

Не можна! Перевірка можливості роботи з конфігуратором виконується тільки при запуску і не виконується в процесі роботи. Тому, якщо блокування встановлюється для подальшої роботи в конфігураторі, набагато легше попередньо його запустити, ніж потім обходити заборону на запуск.

Як зняти блокування?

У тому ж діалозі, в якому блокування встановлювалася. Нагадуємо, що після установки блокування в ньому замість кнопки «Встановити блокування» кнопка «Зняти блокування».

У разі SQL-варіанту ІБ зняття блокування можливе також в оснащенні «Адміністрування серверів підприємства 1С». (Див. Далі)

Для чого потрібен код розблокування?

Для входу в ІБ в той момент, коли діє блокування. Ситуації, в яких це необхідно:

  • Після установки блокування був завершений сеанс роботи з ІБ (вручну або в результаті дії блокування на самого ініціатора), і потрібно почати новий сеанс;
  • Час закінчення блокування помилково було не заповнено взагалі;
  • Час закінчення блокування було заповнене помилково (наприклад, був ненароком введений наступний місяць або рік);
  • Інформаційна база в SQL-варіанті, і для скасування невірно встановленої блокування неможливо видалити файл 1Cv8.cdn в каталозі інформаційної бази.

В такому разі скористайтеся підказкою, яка дається при запуску. Тобто у вікні зі списком інформаційних баз натисніть «Змінити» і введіть в додаткові параметри запуску рядок:

ENTERPRISE / F "Z: \\ Обмін \\ УТ 11" / CРазрешітьРаботуПользователей / UC12345

... з урахуванням каталогу розташування і коду розблокування.


Дану рядок краще скопіювати в буфер обміну і підправити в діалозі «Редагування інформаційної бази». Якщо ви переплутали тип лапок або російську «С» і латинську, то побачите повідомлення про помилку:



У разі правильного введення і подальшого запуску 1С в режимі підприємства, 1С автоматично зніме блокування і завершить свою роботу. Після цього можна буде видалити додаткові параметри і запускати 1С як зазвичай.

Що робити, якщо я не встановлював блокування, а SQL-база кимось заблокована? При цьому я не знаю код розблокування.

Блокування інформаційної бази може встановлюватися самої конфігурацією на час створення резервної копії. Якщо процес її створення не був завершений нормально, SQL-база може залишитися в стані блокування. У цьому випадку необхідний доступ до консолі (більш правильно - оснащенні) «Адміністрування серверів 1С: Підприємства».

Де її шукати?

Оснащення «Адміністрування серверів 1С: Підприємства» часто встановлена \u200b\u200bна тому ж сервері, де розгорнуто SQL server, А також де розгорнуто сам «Сервер 1С» (або «Сервер додатків 1С»). Хоча це і не обов'язково: SQL може бути встановлений на одному комп'ютері, «Сервер додатків 1С» - на іншому, а оснащення можна розгорнути і на своїй робочої станції. З великою ймовірністю успіху можна досягти, зробивши наступне:

  • Підключіться по RDP до сервера, який вказаний в рядку Srvr \u003d ... використовуючи свій доменний логін і пароль. При неможливості підключення попросіть системного адміністратора додати вас до групи користувачів віддаленого робочого стола. (В разі відмови в таких правах - розгорніть і налаштуйте на робочої станції оснащення «Адміністрування серверів підприємства 1С»);

  • На сервері знайдіть оснастку «Адміністрування серверів 1С: Підприємства»;
  • Запустіть оснащення, розгорніть дерево до вузла з вашої інформаційною базою;

  • У властивостях інформаційної бази зніміть чекбокс «Блокування початку сеансів включена» або виправте час початку і кінця блокування або подивіться «код дозволу» для входу в ІБ (він же «код для розблокування» в діалозі установки блокування).

Що робити, якщо всі користувачі інформаційної бази SQL вийшли, а запустити Конфігуратор як і раніше не можна, тому що є активні користувачі?

У вузлі «З'єднання» інформаційної бази, в правій частині екрану можна видалити наявні з'єднання.


Це далеко не всі питання, пов'язані з темою блокування інформаційної бази.

Якщо у вас залишилися питання:

  • Чи можна працювати за московським часом, якщо ви орендуєте сервер в Європі і не хочете залежати від його часового поясу?
  • Як знайти Сервер додатків 1С, якщо невідомо, де він встановлений?
  • Як розгорнути оснащення «Адміністрування серверів 1С: Підприємства» і як її налаштувати?
  • Якщо в одній локальній мережі кілька серверів додатків, як бути?
  • Як бути у випадку кластерної системи? і т.д.

Наші сертифіковані консультанти з технологічних питань 1С з задоволенням на них дадуть відповідь.

Періодично доводиться розбиратися в застосуванні механізмів блокувань в тих чи інших випадках для реалізації різних завдань. Хоча інформації на ці теми досить багато, вона сильно розрізнена і з часом починає забуватися той купу матеріалу, який довелося перелопатити. Доводиться розбиратися заново ...

У підсумку, з'явилася ідея структурувати і коротко викласти суть різних режимів блокувань в 1С в цілому і стосовно до типових конфігурацій. Сподіваюся, це буде корисно.

І так, поїхали ...

Спершу напишу про рівні ізоляції транзакцій, коротко розгляну тільки ті рівні, які мають відношення до даної статті.

Рівні ізоляції транзакцій

Read committed (Читання завершених) - дозволено читання даних в транзакції, зміни за якими були завершені усіма іншими транзакціями. За замовчуванням використовується для більшості баз даних.

Read committed Snapshot (Версіонування даних) - дозволено читання старої версії даних, зміни за якими не завершені іншими транзакціями. Штатно підтримується базами даних: Postgre SQL і Oracle. Починаючи з версії платформи 1С 8.3 реалізований для роботи з базами даних:MSSQL .

Repeatable read (Повторюване читання) - заборона на зміну записів в транзакції, які вже були прочитані раніше в рамках інших транзакцій.

З приводу ізоляції транзакцій поки все, далі хочеться сказати пару слів про механізм поділу підсумків у регістрах накопичення.

Поділ підсумків регістрів накопичення

Регістр накопичення на рівні бази даних складається з двох таблиць: Основна таблицяі Таблиця підсумків. Під час запису в регістр (як по приходу так і по витраті) відбувається запис даних в обидві таблиці, в основну таблицю записуються безпосередньо дані, в таблиці підсумків оновлюється підсумковий рядок по набору вимірів регістра. Відповідно, при роботі паралельних транзакцій запис в таблицю підсумків по одному набору вимірів не може бути виконана одночасно, що знижує швидкість проведення документів.

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

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

Механізми контролю залишків в типових конфігураціях 1С

Стара схема, далі OLD - формується запит до бази даних для виконання контролю вільних залишків, в разі позитивного рішення, формується рух по регістру. на наразі застосовується в Бухгалтерії 3.0 і в деяких алгоритмах УТ 11, КА 2, ЕРП 2.

недоліки :

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

Нова схема, далі NEW - виконується рух по регістру, потім перевіряється наявність негативних залишків, в разі їх наявності, операція відкочується. На даний момент застосовується в УТ 11, КА 2, ЕРП 2.

переваги:

  • не потрібно видаляти руху документа окремою операцією, дані перезаписувати без попереднього запису порожніх наборів. Це серйозно збільшує швидкість проведення документа.
  • підвищена швидкість виконання запиту до залишків, так як в більшості випадків, запит після проведення видає порожній результат.
  • Немає необхідності попередньої блокування змінюваних даних.

недоліки :

  • в разі, якщо для виконання проведення необхідно отримувати дані з регістрів обліку (наприклад розрахунок собівартості для списання), в будь-якому випадку необхідно блокувати записи вже в момент їх прочитання.

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

Ну що, настав час перейти, власне, до викладу основної теми даної статті - опис режимів блокувань. Насправді, режимів всього два: автоматичнийі керований, Вони вказуються в загальні властивості конфігурації, впевнений, що все це прекрасно знають, тому не зупиняюся на цьому докладно.

Ви вже напевно здогадалися, що працювати з цими двома режимами необхідно по різному стосовно до різних механізмів проведення документів. Розберемо це більш докладно.

Режим автоматичних блокувань

В даному випадку використовується описаний вище режим ізоляції транзакцій:Repeatable read.

Примітка: в даній статті розглядається переважно клієнт серверний варіант роботи. Для файлового режиму буде застосовуватися ще більш високий рівень ізоляції, який тут розглядати не будемо.

Для виключення взаімоблокіровок при проведенні документів з контролем залишків -OLD застосовується конструкція мови запитів « ДЛЯ ЗМІНИ», Що дозволяє при першому читанні даних в транзакції накласти на ці дані не розділяється блокування на читання, а блокування оновлення. Відповідно, в іншій транзакції вже буде неможливо виконати подібну процедуру, так як накласти на одні й ті ж дані дві блокування оновлення з різних транзакцій можна.

Блокування накладається тільки на ті записи, які фігурують в запиті (в гіршому випадку, при неоптимальном плані запиту або некоректному його написанні може бути заблоковано більше записів, ніж необхідно).

Примітка: У разі роботи з файлової базою і з P postgre SQL , Блокування накладається цілком на всю таблицю.

приклад:

ВИБРАТИ ОстаткіТоваров.Номенклатура, ОстаткіТоваров.КолічествоОстаток ЯК Кількість ІЗ РегістрНакопленія.ОстаткіТоваров.Остаткі ЯК ОстаткіТоваров ДЛЯ ЗМІНИ

Використовувати режим контролю залишків -NEW спільно з автоматичним режимом блокувань має сенс тільки для регістрів без поділу підсумків, в цьому випадку, ніяких додаткових дій робити не потрібно. При використанні регістрів з поділом підсумків може виникнути d ea dlock на читанні даних, якщо запис в регістр проводилася одночасно, і якимось чином вирішити дану проблему не вийде.

Режим керованих блокувань

В даному випадку, застосовується режими ізоляції транзакцій:Read committed іRead committed Snapshot .

OLD - колективна блокування знімається після прочитання даних про залишки, тому, щоб виключити можливість виникнення негативних залишків, необхідно виконати блокування необхідних записів в регістрі явно до формування запиту на отримання залишків. Власне, в цьому і полягає принцип керованого режиму блокувань.

приклад:

БлокіровкаДанних \u003d Новий БлокіровкаДанних; ЕлементБлокіровкі \u003d БлокіровкаДанних.Добавіть ( "РегістрНакопленія.ТовариНаСкладах.НаборЗапісей"); ЕлементБлокіровкі.УстановітьЗначеніе ( "Склад", Склад); ЕлементБлокіровкі.УстановітьЗначеніе ( "Номенклатура", Номенклатура); ЕлементБлокіровкіДанних.Режім \u003d РежімБлокіровкіДанних.Ісключітельний; БлокіровкаДанних.Заблокіровать ();

Використання режиму контролю залишків NEW :

У разі використання регістрів без поділу підсумків додаткові блокування до накладеними базою даних не потрібні, СУБД сама заблокує необхідні дані (в даному випадку записи в таблиці підсумків регістра накопичення).

У разі використання регістрів накопичення з поділом підсумків (за замовчуванням до конфигураторе створюються регістри саме з даними прапором) можна отримати наступні негативні ситуації:

  • Без режиму версіонірованія (MS SQL і 1С 8.2) - отримаємо взаємоблокування при спробі читання даних, якщо запис в двох транзакціях була виконана одночасно. При запису даних блокування не буде виникати, тому що використовуються різні рядки СУБД (поділ підсумків)
  • З режимом версіонірованія Snapshot (postgresql, oracle або 1С 8.3) - блокування виникати не буде, але будуть з'являтися негативні залишки, так як контроль буде виконаний без урахування всіх незавершених транзакцій.

Для виключення подібної ситуації необхідно перед записом в регістр встановити прапор набору записів: БЛОКУВАТИМУТЬ ДЛЯ ЗМІНИ. Дана конструкція дає команду під час запису накладати виняткову блокування на записи таблиці залишків регістра без урахування роздільник підсумків, за своєю суттю, вона просто напросто тимчасово відключає поділ підсумків для регістра накопичення.

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

приклад:

НаборЗапісей. БлокіроватьДляІзмененія \u003d Істина;

Сподіваюся, дана стаття була корисною, і після її прочитання створюється більш цілісне розуміння роботи платформи 1С при різних режимах блокувань, використовуючи різні механізми контролю залишків.

Якщо щось упустив і в чомусь був не точний, буду руд побачити це в коментарях до статті.

Окреме величезне спасибі, якщо відзначите статтю зірочкою, так як ніщо так не мотивує на написання нових статей, як Ваше схваленняJ

Сьогодні мова піде про блокування як на рівні 1С 8.3 і 8.2, так і на рівні СУБД. Блокування даних - обов'язковий елемент будь-якої системи, кількість користувачів в якій більше одного.

Нижче я розпишу, як працюють блокування, і яких типів вони бувають.

Блокування - це інформація про те, що ресурс системи захоплений іншим користувачем. Існує думка, що блокування - це помилка. Ні, блокування - це неминуча міра в багато користувачів для поділу ресурсів.

Шкода системі можуть принести тільки надлишкові ( «зайві») блокування, це ті блокування, які блокують зайву інформацію. Такі блокування необхідно навчитися усувати, вони можуть привести до неоптимальною роботі системи.

Блокування в 1С діляться умовно на об'єктні і транзакційні.

Об'єктні бувають, в свою чергу, оптимістичними і песимістичними. А транзакційні можна розділити на керовані і автоматичні.

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

Даний вид блокувань повністю реалізований на рівні платформи 1С і ніяк не впливає на СУБД.

Отримайте 267 відеоуроків по 1С безкоштовно:

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

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

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

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

Транзакційні блокування 1С

Механізм тразакціонних блокувань 1С набагато цікавіше і більш функціональний, ніж механізм об'єктних блокувань. У цьому механізмі беруть активну участь блокування на рівні СУБД.

Невірна робота транзакційних блокувань може привести з наступних проблем:

  • проблема втраченого зміни;
  • проблема брудного читання;
  • неповторяемость читання;
  • читання фантомів.

Детально ці проблеми були розглянуті в статті про.

Автоматичні транзакційні блокування 1С та СУБД

В автоматичному режимі роботи за блокування цілком і повністю відповідає СУБД. Розробник в даному випадку абсолютно не бере участі в процесі. Це полегшує працю програміста 1С, однак створення інформаційної системи для великої кількості користувачів на автоматичних блокувань небажано (особливо для СУБД PostgreSQL, Oracle BD - при модифікації даних вони повністю блокують таблицю).

Для різних СУБД в автоматичному режимі використовуються різні ступені ізоляції:

  • SERIALIZABLE на всю таблицю - файловий режим 1С, Oracle;
  • SERIALIZABLE на записи - MS SQL, IBM DB2 при роботі з не об'єктними сутностями;
  • REPEATABLE READ на записи - MS SQL, IBM DB2 при роботі з об'єктними сутностями.

Керовані режим транзакційних блокувань 1С та СУБД

В всю відповідальність на себе бере розробник прикладного рішення на рівні 1С. При цьому СУБД встановлює досить високий рівень ізоляції для транзакцій - READ COMMITED (SERIALIZABLE для файлової СУБД).

При виконанні будь-якої операції з БД менеджер блокувань 1С аналізує можливість блокування (захоплення) ресурсу. Блокування одного і того ж користувача завжди сумісні.

Дві блокування НЕ сумісні, якщо: встановлені різними користувачами, мають несумісні види (виняткова / колективна) і встановлені на один і той же ресурс.

Фізична реалізація блокувань в СУБД

Фізично блокування є таблицю, яка знаходиться в БД під назвою master. Сама таблиця блокувань носить ім'я syslockinfo.

Таблиця умовно має чотири поля:

  1. ВД блокує сесії SPID;
  2. що саме заблоковано RES ID;
  3. тип блокування - S, U або X MODE (Насправді в MS SQL їх 22 типу, проте в зв'язки з 1С використовується тільки три);
  4. стан блокування - може приймати значення GRANT(Встановлена) і WAIT(Очікує своєї черги).

механізм транзакційних блокувань використовується для конкурентного доступу користувачів до СУБД.
Транзакція - ця якась нерозривна операція, в ході якої змінюється стан бази. Це мінімальний квант змін: не можна зробити пів-транзакції; якщо транзакція не завершилася, то база відкотиться в початковий стан.
Оскільки транзакція захоплює масив даних, виникає нюанс щодо доступу до цього масиву: наприклад, одна транзакція змінює дані, а інша намагається їх прочитати. Результат читання може бути некоректним, тому що не включить останніх змін. Тому, на рівні СУБД працює ізоляція транзакцій. Можливі такі рівні ізоляції:

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

Якщо для конфігурації 1С: Підприємства встановлений режим автоматичних блокувань, То рівень ізоляції транзакції вибирається СУБД. У випадку з MS SQL, це буде Repeatable read або Serializable рівні, тобто ізоляція даних близька до максимальної. Це вирішує проблеми з коректністю даних, але може призводити до появи блокувань на рівні СУБД при інтенсивній роботі користувачів. Тому, в 1С: Підприємстві є свій функціонал роботи з блокуваннями, який активізується включенням режиму керованих блокувань. У цьому випадку рівень ізоляції транзакцій для MS SQL буде Read commited. Платформа сама буде ізолювати дані, не покладаючись на СУБД.

Функція переходу в режим керованих блокувань відбувається у властивостях конфігурації:

Також, режим блокування може бути встановлений для конкретних об'єктів конфігурації:

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

Для режиму Автоматичний і керований є один момент. Транзакція, єдина для користувача може являти собою кілька транзакцій з точки зору платформи. Наприклад, інтерактивне проведення документа за регістром робить двітранзакції - запис самого документа, і всередині цієї транзакції запис набору рядків по регістру. Залежно від режиму управління блокуваннями для самого документа і рухатися їм регістра, можливі чотири ситуації:

  1. Режим документа Автоматичний, режим регістра Автоматичний -\u003e
  2. Режим документа Керований, режим регістра Управляемий-\u003e запис по регістру в керованому режимі
  3. Режим документа Автоматичний, режим регістра Керований -\u003e запис по регістру в автоматичному режимі
  4. Режим документа Керований, режим регістра Автоматичний -\u003e виняткова ситуація (Помилка)

Питання 06.59 іспиту 1С: Професіонал по платформі. При проведенні документа з якого-небудь регістра в разі якщо у документа встановлено автоматичний режим управління транзакційними блокуваннями, а у регістра керований (у властивостях конфігурації використовується варіант "Автоматичний і керований"), то таке проведення призведе:

Правильна відповідь другий, визначаємо по першій транзакції, якщо автоматична, то все автоматично.

Питання 06.60 іспиту 1С: Професіонал по платформі. При проведенні документа з якого-небудь регістра в разі якщо у документа встановлено керований режим управління транзакційними блокуваннями, а у регістра автоматичний (у властивостях конфігурації використовується варіант "Автоматичний і керований"), то таке проведення призведе:

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

Правильна відповідь перший, визначаємо по першій транзакції, якщо керована, то помилка.

Питання 06.61 іспиту 1С: Професіонал по платформі. При проведенні документа з якого-небудь регістра в разі якщо у документа встановлено автоматичний режим управління транзакційними блокуваннями, а у регістра керований (у властивостях конфігурації використовується варіант "Керований"), то таке проведення призведе:

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


Сподобалася стаття? поділіться їй