Рано или поздно любая растущая компания, использующая файловый вариант базы данных 1С:Предприятие (особенно на базе тяжелых конфигураций, таких как УправлениеТорговлей или КомплекснаяАвтоматизация), сталкивается с крайне неприятной проблемой. Пользователи начинают регулярно получать системное сообщение: "Конфликт блокировок при выполнении транзакции". Работа офиса замедляется, менеджеры нервничают, фоновые задания по обмену данными начинают сбоить.
В этой статье мы подробно разберем, почему файловый режим неизбежно приводит к таким последствиям, как диагностировать локальные проблемы сетевой инфраструктуры, как временно облегчить ситуацию с помощью веб-сервера и как подобрать правильные, понятные бизнесу аргументы для перехода на клиент-серверный вариант работы.
Для того чтобы аргументированно разговаривать с клиентом или руководством, нам необходимо четко понимать техническую суть проблемы. Давайте проанализируем разницу в механизмах управления блокировками между файловым и клиент-серверным вариантами работы.
Главный недостаток файлового режима работы (база в формате 1Cv8.1CD) заключается в низкой гранулярности блокировок:
Понятная аналогия для клиента: Представьте однополосную дорогу со шлагбаумом. Пока одна машина (документ одного пользователя) не проедет пункт оплаты и шлагбаум не закроется за ней, все остальные машины выстраиваются в очередь. Если машин становится слишком много, очередь блокирует весь перекресток (происходит ошибка блокировки). Клиент-серверный вариант — это многополосное скоростное шоссе, где потоки машин распределены и едут параллельно, не мешая друг другу.
Прежде чем предлагать радикальные архитектурные изменения, давайте исключим проблемы на стороне "железа" и локальной сети. Зачастую в файловом режиме блокировки усугубляются плохой связью или медленными дисками.
Проанализируем следующие критические точки:
Если клиент пока не готов финансово к переходу на СУБД, рассмотрим промежуточный технический маневр — перенос файла базы из сетевой папки общего доступа (SMB) и публикацию базы на веб-сервере Apache или IIS.
Давайте разберем по шагам, что дает этот метод:
Важное предупреждение: Публикация на веб-сервере не меняет внутреннюю архитектуру СУБД файла 1Cv8.1CD. Табличные блокировки никуда не исчезнут. Если 5-7 пользователей одновременно попытаются провести документы, они все равно упрутся в ограничение файлового движка. Более того, процессы веб-сервера (например, w3wp.exe или httpd.exe) могут монополизировать доступ к файлу базы, что затруднит создание резервных копий и обновление конфигурации.
Зачастую главным барьером для клиента является стоимость лицензий на сервер 1С:Предприятие и СУБД Microsoft SQL Server. Но современный рынок предлагает отличные альтернативы, которые позволяют решить проблему блокировок за вполне вменяемый бюджет.
Давайте рассмотрим эти варианты подробнее:
Вместо дорогостоящего MS SQL Server мы можем развернуть абсолютно бесплатную СУБД PostgreSQL (а именно — специальную сборку для работы с решениями 1С от компании Postgres Professional). Это легальное, стабильное и высокопроизводительное решение, которое полностью поддерживает построчные транзакционные блокировки.
Если у клиента небольшая команда (до 5 активных пользователей одновременно), нет необходимости покупать дорогую серверную лицензию уровня ПРОФ. Фирма 1С предлагает специальную лицензию — "1С:Предприятие 8.3. Сервер МИНИ на 5 подключений".
Этот сервер обладает следующими особенностями:
Если у клиента нет собственного производительного сервера или системного администратора для его обслуживания, прекрасным выходом станет перенос базы в облачный сервис (например, 1С:Fresh или услуга аренды выделенного сервера 1С). В облаке база по умолчанию будет работать в высокопроизводительном клиент-серверном режиме на мощном оборудовании провайдера за небольшую ежемесячную абонентскую плату.
Если вы хотите локализовать проблему программно или настроить транзакции в конфигураторе, рассмотрим пример использования механизма управляемых блокировок. Программист может принудительно заблокировать конкретные аналитические разрезы перед записью данных, чтобы избежать конфликтов на уровне СУБД.
Разберем пример кода на встроенном языке 1С:
// Создаем объект блокировки данных
Блокировка = Новый БлокировкаДанных;
// Задаем элемент блокировки для конкретного регистра
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ЗаказыКлиентов");
// Устанавливаем режим блокировки - Исключительный (запрещает чтение и запись другим транзакциям)
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
// Сужаем область блокировки конкретным значением измерения
ЭлементБлокировки.УстановитьЗначение("Организация", СсылкаНаОрганизацию);
// Активируем блокировку перед началом транзакции записи
Блокировка.Заблокировать();
Использование подобных конструкций позволяет тонко управлять конкурентным доступом к данным, но их полноценная и эффективная работа гарантирована именно в клиент-серверном варианте под управлением СУБД.
Чтобы убедить клиента в необходимости модернизации, переведите технические проблемы на язык бизнес-потерь. Проанализируем ключевые аргументы:
1Cv8.1CD на флешку (риск утечки конфиденциальной базы клиентов) или случайно удалить его. В клиент-серверном режиме пользователи вообще не имеют физического доступа к файлам СУБД.