При попытке удалить запись из регистра сведений - получаю ошибку: она заблокирована, ошибка блокировок и т.д.
Отключил всех пользователей, перезапустил сервер, пробую удалить - опять ошибка блокировки
Путем тестов было вяснено, что проблема не в коде, а происходит это на этапе обращения платформы к SQL серверу... после долгих поисков решений, в интернете была найдена статья, которая помогла в решении данной проблемы:
Кто что блокирует, MS SQL + 1C
В повседневной работе достаточно задействовать только первый блок "/*кто кого*/". Открываем MS SQL Server Management Studio, правой на корень - "new query" - вставляем код запроса (только верхнюю часть до "Кто что блокирует", остальное - для детального анализа), выполняем запрос (вверху есть кнопочка выполнения запроса).
Выполнив запрос, запоминаем "ID виновника", быстренько идем в консоль сервера 1С, заходим в ветку "Сеансы" нашей базы. Видим все соединения с 1С-сервером, ищем там колонку "Соединение с СУБД", чтобы увидеть соединения 1С-сервера с MSSQL-сервером. В колонке будет всего несколько заполненных значений, среди них и будет "ID виновника".
Что делать если его там нет, тут 3 варианта:
1. Вернитесь в MSSQL и сделайте запрос еще несколько раз подряд, если значения меняются или таблица вообще пуста - постоянной блокировки нет, у вас (уже) все в порядке.
2. Сеанс который блокирует MSSQL находится в другой базе т.е. блокировка не в той базе (можно попробовать задействовать ветку всех сеансов в консоли 1С-сервера) - вернитесь в MSSQL и внимательно посмотрите в колонку DB в ней находится название базы.
3. Бывает что ID процесса в 1С-консоли вообще отсутствует, такое тоже бывает если у вас есть какие-то внешние программы подключенные напрямую в базу 1С, если пускаете кого-то в MSSQL напрямую, то вариант не исключен.
Установленный монопольный режим позволит пользователю быть единственным пользователем базы, пока он установлен. Однако сам монопольный режим можно установить только в том случае, если на момент установки пользователь был единственным! Установка монопольного режима
Как видите, если применение процедуры работы с информационной базой УстановитьМонопольныйРежим() приводит к ошибке, приходится с этим смириться. Хотя если захотите обеспечить выход других пользователей из системы, в настоящем издании есть пример того, как этого добиться: Как принудительно завершить работу всех пользователей информационной базы ?».
Кроме самой установки монопольного режима можно еще, например, убедиться, что в текущий момент работа идет в монопольном режиме:
Проверка монопольного режима
Или же снять монопольный режим (Отмена монопольного режима):
В 1С 7.7, режим «Монопольно» присутствует только в сетевых версиях 1С. Если же у Вас не сетевая версия, то Вы будете по умолчанию заходить монопольно – Вас об этом даже не спросят.
Для определения режима работы существует специальный метод: МонопольныйРежим(). Возвращаемое значение: Число 1 — если программа запущена в монопольном режиме; Число 0 — если программа запущена в сетевом режиме. Небольшой пример:
Буду краток, делаем так:
1. Установить на сервер MSSQL. Краткая инструкция по установке есть в этом FAQ.
2. Установить на рабочую станцию драйвера ODBC из поставки 1C или ODBC-клиента от Microsoft (он зовется MDAC).
3. Установить на рабочую станцию собственно SQL-версию 1С:Предприятия, ее исполняемый файл, в отличие от сетевой версии, назвается 1Cv7s.exe.
4. Открыть SQL Enterprise Manager и создать новую базу данных. Если непонятно, как это делать — почитайте хелп, он там весьма развесистый. Размер БД выбирается из следующих соображений: данные в sql-базе займут места раза в 2-2.5 больше, чем весит dbf-база, и как минимум 20% пространства sql-базы должно остаться свободным. Размер лога также играет роль — если планируется перенос данных из dbf-версии, следует иметь лог ~25% от размера sql-базы. Можно сразу же установить для базы режим T_runcate log on checkpoint, это поможет избежать проблем с переполнением лога и немного повысит производительность, но лишит возможности в случае аварии БД сделать откат на момент “за пять минут до сбоя”.
5. Подготовить данные dbf-версии к переносу — если он планируется. Это делается с помощью операции “Выгрузить данные”, которая не просто запаковывает таблицы, а переводит информацию в хитрый формат и кладет в файл с расширением *.dat.
6. Создать пустую директорию для хранения конфигурации sql-базы. Она не должна совпадать с директорией, где хранятся файлы собственно sql-базы, последние вообще желательно сделать недоступными для пользователей.
7. Открыть Конфигуратор, зарегистрировать новую базу данных (та самая пустая директория) и на вопрос о типе БД ответить “SQL server”.
8. Выставить в конфигураторе “Параметры базы данных sql...” — это сетевое имя сервера, имя базы данных, как оно было задано в Enterprise Manager, имя пользователя и пароль для доступа к данным через ODBC (встроенная в MSSQL учетная записть администратора имеет логин sa и пустой пароль).
9. Загрузить данные в БД. Если Вам нужна пустая конфигурация, это делается с помощью процедуры “Загрузить измененную конфигурацию”, если данные переносятся из dbf-версии — “Загрузить данные”, конфигурация при этом загрузится автоматически.
10. Можно работать с БД. Не забывайте время от времени архивировать и индексировать свою sql-базу — архивация средствами sql, в отличие от файл-серверной версии, не требует монопольного доступа к базе и может осуществлятся прямо во время работы. Индексация и проверка целостности БД производится последовательным запуском двух TSQL-скриптов, очень простых:
Индексация требует монопольного доступа к данным, поэтому не пытайтесь в это время работать. И архивирование, и индексацию можно (и нужно) повесить на автоматическое исполнение.