При попытке удалить запись из регистра сведений - получаю ошибку: она заблокирована, ошибка блокировок и т.д.
Отключил всех пользователей, перезапустил сервер, пробую удалить - опять ошибка блокировки
Путем тестов было вяснено, что проблема не в коде, а происходит это на этапе обращения платформы к 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 напрямую, то вариант не исключен.
В данном примере речь идет об объектных блокировках, которые могут быть установлены автоматически расширениями форм объектов либо программно с помощью метода Заблокировать().
Проверка в контексте объекта, через который и производилась сама блокировка, выполняется следующим образом:
Следует отметить, что в случае если объект заблокирован через другую переменную (например, открытую форму объекта), то метод Заблокирован() вернет значение Ложь.
Блокировка данных объекта влияет только на возможность его блокировки, но не препятствует изменению данных в базе данных. Поэтому, прежде чем изменять данные объекта, следует убедиться, что эти данных не заблокированы. Для этого необходимо попытаться установить блокировку:
Если попытка заблокировать объект была удачной, это означает, что объект ранее не был заблокирован.
Это сообщение возникает в том случае, если выполняется некоторая обработка изменяющая данные, а один из объектов (документ, справочник)открыт кем-либо из пользователей для редактирования. Например, это сообщение может быть выдано, если выполнять групповую обработку документов, а один из обрабатываемых документов окажется открытым. Название заблокированного документа обычно указывается в сообщении. Следует закрыть редактируемый объект и повторить действия.
Предложение ДЛЯ ИЗМЕНЕНИЯ позволяет заблаговременно заблокировать некоторые данные (которые могут читаться транзакцией другого соединения) уже при считывании, чтобы исключить взаимные блокировки при записи. ДЛЯ ИЗМЕНЕНИЯ дает возможность указать в запросе таблицы, считываемые данные которых предполагается изменять. В этом случае другое соединение будет ожидать освобождения этих данных уже в момент считывания внутри транзакции, т.е. не сможет прочесть заблокированные данные до тех пор, пока не будет завершена транзакция, наложившая блокировку. Блокировка от изменения данных считываемых в транзакции выполняется независимо от предложения ДЛЯ ИЗМЕНЕНИЯ. Это значит, что если внутри какой-либо транзакции считаны некоторые данные, то из другого соединения эти данные не могут быть изменены до тех пор, пока блокировка не будет снята. Если запрос выполняется вне транзакции, то в нем могут быть считаны и заблокированные данные.
Блокировки устанавливаются в момент выполнения запроса, сбрасываются же при окончании транзакции. В случае если запрос выполняется вне транзакции предложение ДЛЯ ИЗМЕНЕНИЯ игнорируется.
В случае если после предложения ДЛЯ ИЗМЕНЕНИЯ отсутствуют имена таблиц, блокироваться будут считанные данные из всех таблиц, задействованных в запросе. В случае указания конкретных таблиц будут блокироваться только данные из перечисленных таблиц. Для блокировки можно указывать только таблицы верхнего уровня (т.е. не табличные части), участвующие в запросе. Должны приводиться именно имена таблиц, а не их псевдонимы, определенные в запросе. В случае указания виртуальной таблицы будут блокированы данные из всех таблиц, задействованных в виртуальной таблице. При указании виртуальной таблицы следует записывать ее имя без параметров.
Пример использования предложения ДЛЯ ИЗМЕНЕНИЯ можно посмотреть в типовой конфигурации "Управление торговлей" в модуле документа РеализацияТоваров, в функции СформироватьЗапросПоШапке(Режим), которая вызывается из обработчика проведения документа. В этой функции, в случае оперативного проведения выполняется запрос, в котором накладывается блокировка на регистр остатков:
Для 8.х: Как отключить узел от распределенной информационной базы?
Поскольку сама конфигурация заблокирована, то этот код надо создавать в обработке, открыв каую-нибудь другую (незаблокированную) конфигурацию, вставить кнопку в конфигураторе. Сохранить её как внешнюю обработку и выполнить, запустив базу в режиме 1С:Предприятие в монопольном режиме (и открыв внешнюю обработку из файла).
При этом, этот код нельзя выполнить в режиме отладчика, т.е./или имея конфигуратор открытым на отключаемой базе, поскольку требуется исключительная блокировка доступа к базе этого кода.
Название параметра не имеет значение, хотя по умолчанию, параметр процедуры для кнопки командной панели
будет проставляется как "Кнопка", а вставляемой через меню Форма --> Вставить элемент управления... подучается "Элемент"
Привожу тут код внешней обработки отключение - восстановление подключения к УРБД:
Для 7.7:
При преобразовании информационной базы в режим использования компоненты УРБД (Управление Распределенными Информационными Базами), в ИБ вносятся некоторые изменения, не позволяющие использовать базу в обычном режиме. А именно: добавляются три таблицы, отвечающие за процесс синхронизации, и вносятся изменения в таблицу 1ssystem.dbf Не забудьте сделать резервную копию перед тем, как: Удалить файлы 1sdbset.dbf, 1sdbset.cdx, 1sdwnlds.dbf, 1sdwnlds.cdx, 1supdts.dbf, 1supdts.cdx Удалить единственную запись из файла 1ssystem.dbf Зайти в режим конфигуратора, открыть, например, свойства конфигурации, добавить какой-нибудь символ в комментарий, а потом его удалить. После этого сохранить конфигурацию.