Файловые блокировки в 1С   

 

Многие пользователи путают проблему файловых блокировок с проблемой  блокировок в 1С SQL, в связи с этим рекомендуем первоначально ознакомиться со статьей, в которой описан вариант решения проблемы блокировок в 1С SQL на базе технологии "Гибкие блокировки" . 

Итак, файловые блокировки. Например, при открытии элемента формы справочника происходит блокировка определенного байта файла, соответствующего типу объекта в 1С. Более подробное описание таких блокировок можно прочитать в статье. При блокировке справочника создается файл с наименованием, к примеру sc35.$lk, а при открытии документа - 1sjourn.$lk . Номер блокируемого байта соответсвует записи первичного ключа. Очевидно, эта система осталась еще с DBF-версии, в которой, кстати, полей типа Row_id вообще не было, их определяли по номеру строки DBF.
Результатом подобного наследия являются неэффективные инструменты администрирования и ненадежная система работы. Особенно это проявляется при нестабильном сетевом оборудовании. Наверняка администраторам системы знакомы сообщения подобного рода:
 
 
 
В подобных случаях самым плохим является то, что сложно понять, кто же блокирует данный объект. К сожалению, журнал событий не всегда отображает все корректно. Да и сам по себе факт, что при потере хендла на файл будет возникать подобное событие по всем объектам, может привести к полной потери функциональности системы.
 
Более логичным является использование блокировок SQL для решения задач подобного рода. Компания "СофтПоинт" реализовала компоненту с механизмом SQL блокировок.

ВАЖНО! Представленный код загрузки компоненты необходимо выполнять ПЕРЕД любым обращением к объектам метаданных видов "Справочник" и "Документ", то есть первой строчкой глобального модуля конфигурации (перед определениями процедур и функций, в разделе операторов основной программы):

Пример внедрения в конфигурацию:
Пример инициализации компоненты
К примеру, загрузка компоненты в теле процедуры ПриНачалеРаботыСистемы() может оказаться запоздалой и приведет к некорректности работы механизма SQL-блокировок!
В результате этот механизм становится надежным и легко контролируемым. Для того чтобы посмотреть, кто заблокировал конкретный справочник, необходимо запустить определенную конструкцию на T-SQL (select * from syslockinfo) и, выбрав интересующие нас блокировки, получить имя пользователя в 1С. 

 

 Информацию о том, кто заблокировал объект, пользователь получает автоматически в он-лайн режиме в окне сообщений 1С.

Правда, в данном случае необходимо решить еще задачу преобразования хеш функции. Дело в том, что информация о блокировках MSSQL хранит только первые 4-е символа, все остальные значения переводятся в хеш. Но разработка компании "СофтПоинт" решает и эту задачу. В результате можно просмотреть отчет, у кого из пользователей какие объекты открыты и соответственно заблокированы. Эти блокировки можно также административно снять, единственное, это приведет к закрытию сеанса в 1С у пользователя, который блокировал этот объект (что, впрочем, и логично).

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

 
Также на эту тему:
 
 

Перепечатка, воспроизведение в любой форме, распространение, в том числе в переводе, любых материалов с сайта www.softpoint.ru возможны только с письменного разрешения компании "СофтПоинт". Это правило действует для всех без исключения случаев, кроме тех, когда в материале прямо указано разрешение на копирование (основание: Закон Российской Федерации "Об авторском праве и смежных правах"). 



При открытии форм и записи объектов в 1С:Предприятие 7.7. проблема грязного чтения и одновременного обновления решается с помощью файловых блокировок. Если бы этого не было, то два пользователя могли бы одновременно открыть один и тот же документ и начать его изменять. Затем первый пользователь сохранил бы этот документ, а за ним второй пользователь, не подозревая, что он изменяет уже заполненный документ, перезаписал бы его. Представляете, к чему бы это привело?