Найти в Дзене

Ведущий программист 1С: вопросы на собеседовании и ответы на них (транзакции, блокировки)

Оглавление
anekdot.ru
anekdot.ru

Сегодня 24 апреля 2022 года 10 часов 47 минут, +11
Всем доброго дня!

Продолжаю разбирать возможные и невозможные вопросы на собеседовании на должность ведущего программиста 1С.

Еще раз напоминаю, что опыт работы никого не интересует, главное ответить на вопросы так, как от вас ожидает это услышать эксперт по данному вопросу.

Начало:

Ведущий программист 1С: вопросы на собеседовании и ответы на них (УФ)

Ведущий программист 1С: вопросы на собеседовании и ответы на них (СКД, запросы)

Сегодня разберем транзакции.

Транзакции

за основу можно взять

Транзакции и механизмы их контроля

Следует помнить, что в данном случае они рассматриваются с точки зрения SQL и об этом не следует упоминать, дабы не вводить в ярость экспертов по 1С.

Итак, приступим.

Что такое транзакции?

Транзакцией называется последовательность операций над данными в базе, имеющая начало и конец

Зачем нужны транзакции?

Транзакции обеспечивают сохранение целостности данных, параллельную работу пользователей с базой данных, восстановление данных при откатах и сбоях

Как они реализованы в 1С?

Процедура ЗаписатьДанныеВИБ()
НачатьТранзакцию();
Попытка
        ... // чтение или запись данных
        ДокументОбъект.Записать()
        ЗафиксироватьТранзакцию();
    Исключение
        ОтменитьТранзакцию();
        ... // дополнительные действия по обработке исключения
    КонецПопытки;
КонецПроцедуры

Есть очень большой пласт задач на использование транзакций, например:

А = 0;

НачатьТранзакцию();

А = 2;

ОтменитьТранзакцию();

Чему равно А?

Тут следует помнить, что механизм транзакций имеет отношение исключительно к базе данных (ненавистному SQL, например)

А = 2

Транзакции плавно вытекаю к темам блокировки.

Блокировки

Очень своеобразная тема. Приведу пример. На одном из собеседований руководитель разработки радостно сообщил мне, что недавно прошел курсы разработчика 1С.

Практически сразу прозвучал вопрос: какие виды блокировок в 1С(!) вы знаете?

На ум сразу полезли блокировка объекта (записи), блокировка части данных таблицы, блокировка всей таблицы, блокировка всей базы данных.

Далее вспомнились механизмы эскалации блокировок, взаимоблокировки.

Выяснилось, что я заблуждаюсь.

В 1С существует два вида блокировок - оптимистичные и пессимистичные

Да, по итогам собеседования, мне было рекомендовано пройти курсы разработчика, которые только что прошел руководитель.

Что значит пессимистичная блокировка?

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

Что значит оптимистичная блокировка?

Оптимистическая блокировка запрещает запись объекта в базу данных, если после считывания объекта он был изменен в базе данных другими сеансами или другими программными объектами этого же сеанса.
По факту проверка перед записью объекта не был ли изменен объект в другом сеансе - ошибка на несоответствие версии объекта

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

На сайте 1С удалось найти вот это:

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

В то же время, разработчик имеет возможность задействовать рассматриваемый механизм, используя средства встроенного языка. Для того, чтобы установить пессимистическую блокировку объекта, можно использовать метод объекта Заблокировать().

сам по себе факт установки блокировки не препятствует изменению или удалению объекта в базе данных (занавес)

Поэтому для того, чтобы обеспечить невозможность изменения заблокированного объекта, операции изменения объекта в другом сеансе должна также предшествовать попытка блокировки того же самого объекта

Блокировка заблокированного объекта базы данных вызывает исключение, которое может быть обработано конструкцией Попытка ... Исключение ... КонецПопытки.

и вишенка на торт

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

На мой взгляд, это все, что нужно знать о блокировках 1С. Они просто не работают.

Поэтому перед изменением "заблокированного" объекта необходимо попробовать заблокировать его снова и если попытка вторичной блокировки не удалась - БИНГО! Объект оказывается был заблокирован и изменять его нельзя.

Что же... очень ценное знание относительно видов блокировок 1С. Но почему-то сами разработчики фирмы 1С им не пользуются...

Исходя из этих данных, формы справочников и документов "ПриСозданииНаСервере" должны пестреть попытками заблокировать объект, чего в типовых конфигурациях почему-то не наблюдается.

Исходя из собственного опыта, могу сделать вывод, что в открытый объект можно вносить изменения программно. Блокировки 1С дай бог отрабатывают на уровне пользователя и то не всегда. Чаще всего реальные блокировки возникают при записи на уровне СУБД (ненавистный SQL). Файловая база 1С вообще не умеет блокировать запись, а блокирует всю таблицу и при автоматических и при управляемых блокировках - это заявлено на официальном сайте. Хотя, в файловой базе удается заблокировать конкретный элемент справочника, не блокируя всю таблицу. Тоже вопрос.

удалось найти

Типы блокировок 1С

Они подразделяются на объектные и транзакционные. Первые делятся на оптимистические и пессимистические. А вторые на управляемые и автоматические.

Объектные

Этот вид блокировок внедрен целиком в 1С и никоим образом не касается СУБД.

Пессимистические

Они активируются, когда, к примеру, вы поменяли что-либо в справочнике, а другой ваш коллега то же делает попытки корректировки объекта в форме.

Оптимистические

Блокировка проводит сравнение версий объекта. Т.е., когда два пользователя «зашли» в форму, и один внес изменения и сохранил объект, то другой в процессе записи получит от системы сообщение об ошибке - о возникновении отличия в вариантах объектов.

Транзакционные

Это интересный механизм со множеством функций, в отличие от перечисленных выше. В нем действуют блокировки на уровне СУБД.
Применять их следует с осторожностью, чтобы не было проблемных моментов на разных уровнях изоляции транзакций.

Вроде стало более-менее понятно.

Лично я для себя делаю вывод, что конечно не мешало бы знать о блокировках 1С в той части, что они практически не работают.

Для файловой базы механизм блокировки объекта - отдельная фича 1С. Управляемые блокировки в файловой базе 1С накладываются исключительно на всю таблицу и лично я не вижу смысла их применения.

Можно еще вспомнить про автоматические и управляемые блокировки в 1С.

Чем отличаются разделяемые и исключительные блокировки в 1С?

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

вот, собственно, и все, что нужно знать про блокировки в 1С.

#ведущий программист 1с #транзакции #блокировки #оптимистичные блокировки #пессимистичные блокировки