Керований режим блокування 1с. Управління транзакційними блокуваннями

Система «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С натисканням кількох кнопок 2. Керовані блокування. September 4th, 2011

Якщо прочитати методику перекладу конфігурації на керовані блокування від 1С – можна там знайти багато всього цікавого та лякаючого. Насправді все просто: У властивостях конфігурації змінюєте режим блокування даних - "Керований". Всі. Можу вас привітати – ви щойно перейшли на керовані блокування. Насправді все дещо складніше – але не на багато.

Для початку невеликий теоретичний екскурс - навіщо потрібні блокування: У кого є доступ, звичайно можна прочитати тут: http://kb.1c.ru/articleView.jsp?id=30 1С перейнялися написати досить доступну статтю про блокування даних. У кого ж доступу немає двома словами опишу для чого потрібні блокування:

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

Транзакція 1 Транзакція 2 Стан залишків
початок | 1 шт
| початок 1 шт
| | 1 шт
Читання залишків | 1 шт
| Читання залишків 1 шт
| | 1 шт
Списання із залишків | 0 шт
| Списання залишків -1 шт
Завершення |
Завершення

Що тут не таке? Контроль залишків дав збій. Другий документ встиг прочитати залишки раніше, ніж перший встиг їх записати. При цьому побачив, що на залишках 1 штука і спокійно списав їх за першим. Варто зазначити, що за фактом блокування тут таки будуть. 2 документи не зможуть списати залишки одночасно, це необхідно для логічної цілісності БД, але для вирішення прикладного завдання в цьому прикладі навряд чи корисно.

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

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

Блокування = Новий БлокуванняДаних;
ЕлементБлокування = Блокування. Додати( "РегістрНакопичення.ТовариНаСкладах") ;
ЕлементБлокування. УстановитиЗначення("Якість" , Довідники. Якість. ЗнайтиПоКоду("1" ) ) ;
ЕлементБлокування. Режим = РежимБлокуванняДаних. Винятковий;
ЕлементБлокування. ДжерелоДаних = ДокументОб'єкт. ПоворотнаТара;
ЕлементБлокування. ВикористовуватиДжерелаДанних("Номенклатура" , "Номенклатура" ) ;
ЕлементБлокування. ВикористовуватиДжерелаДаних("Склад", "Склад");
Блокування. Заблокувати() ;

Власне все відразу зрозуміло - блокуємо "товари на складах", 1 вимір стаємо у явному вигляді, значення 2-х інших візьмемо з джерела даних - ТЧ документа.

Ті, хто читав книжки по 8.2, напевно пам'ятають про "Нову логіку проведення" - коли контроль залишків проводиться після запису рухів документа. Задавалися питанням навіщо це? А ось цю ж табличку перемалюємо так що контоль залишків та блокування будуть після запису рухів:

Транзакція 1 Транзакція 2 Стан залишків
початок | 1 шт
| початок 1 шт
| | 1 шт
Списання із залишків | 0 шт
| Списання із залишків -1 шт
Блокування | -1 шт
Читання залишків Спроба блокування -1 шт
| Очікування на блокуванні -1 шт
| Очікування на блокуванні -1 шт
Завершення Очікування на блокуванні -1 шт
Блокування -1 шт
Читання залишків -1 шт
| -1 шт
Відмова 0 шт

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

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

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

Для варіювання між такими різними завданнями в СУБД вигадали рівні ізоляції. Встановлюючи рівень ізоляції транзакцій можна сказати СУБД які блокування накладати в різних випадках (при записі і при читанні в транзакції) у різних випадках накладаються S (можна читати не можна писати) або X (не можна читати ні писати) блокування.

Так в автоматичному режимі у вас майже завжди буде рівень ізоляції SERIALIZABLE, який накладатиме X блокування де потрібно і де не потрібно, що істотно псуватиме вам життя

А в керованому у вас буде READ COMMITED, який накладатиме і відразу зніматиме S блокування при читанні, і X тільки при записі. Найхитріший рівень. Швидко накладається S блокування дозволяє перевірити чи не накладена де на ці дані X блокування, що і забезпечує читання тільки узгоджених даних, як прийнято для даного рівня ізоляції, а якщо ви прочитали і виконали дії, рекомендовані в попередній статті, то не буде навіть S блокування при читанні, таким чином на рівні СУБД блокуватиметься лише запис під час запису - що правильно і необхідно для узгодженості даних.

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

Сьогодні мова піде про блокування як на рівні 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(Чекає своєї черги).

Ви потрапили на потрібну сторінку! Швидше за все, вранці ви виявили, що кохана 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 хв.

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

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

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


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


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


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


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

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

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

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


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


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



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

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

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

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

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

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

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


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


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

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

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



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

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

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



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

Чи спрацює блокування, якщо встановити блокування та одразу вийти з 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С:Підприємства" часто встановлене на тому ж сервері, де розгорнуть SQL server, а також де розгорнуть сам "Сервер 1С" (або "Сервер додатків 1С"). Хоча це й не обов'язково: SQL може бути встановлений на одному комп'ютері, "Сервер додатків 1С" - на іншому, а оснащення можна розгорнути і на своїй робочій станції. З великою ймовірністю успіху можна досягти, зробивши таке:

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

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

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

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

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


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

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

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

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

Основні причини переходу на керовані блокування:

  • Основна причина - рекомендація 1С: Експерта на підставі показань або 1С: ЦУП
  • Проблеми з паралельною роботою користувачів ()
  • Використання Oracle, PostgreSQL та .

Вартість робіт:

Суть керованих блокувань

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

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

При роботі з високою конкуренцією за ресурси (велика кількість користувачів) у якийсь момент вплив надмірності блокувань стає помітним з точки зору продуктивності при паралельному режимі.

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


Нові зміни фірми 1С реалізовані одночасно у керованому режимі.

  • Питання: Чи можна спочатку зробити аудит, а потім переказ на УБ?

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

  • Питання: Для перекладу на УБ, який саме потрібно надати доступ – RDP, TeamViewer? Чи можна вам надіслати файл-конфігурації?

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

  • Запитання: У нас 10 штатних програмістів, які щодня щось змінюють у цукерці. Використовується загальне сховище конфігурації. Як буде організовано взаємодію під час перекладу на УБ? Чи всіх програмістів потрібно відправляти у відпустку?

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



Подібні публікації