При работе в программах 1С:Зарплата и управление персоналом (ЗУП 3.1), 1С:ERP или 1С:Комплексная автоматизация пользователи часто сталкиваются с неприятной ситуацией. После очередного обновления базы данных или проведения связанных документов некоторые ведомости в банк становятся непроведенными. При попытке провести их повторно система выдает ошибку: "Документ Ведомость в банк недоступен для редактирования, т.к. он был ранее передан для выплаты".
В этой статье мы подробно разберем, почему возникает этот «замкнутый круг», и рассмотрим пошаговые методы решения проблемы — от простых пользовательских настроек до технических приемов очистки регистров.
Для предотвращения случайного изменения платежных документов в 1С реализован механизм защиты. Блокировка ведомостей осуществляется через специальный регистр сведений ОграниченныеДокументы. Когда в настройках программы включена опция автоматической защиты, при выгрузке файла в банк или при ручной установке флага "Передан для выплаты" программа делает запись в этот регистр. Ключом записи является ссылка на конкретную ведомость.
Проблема (баг) возникает в процессе обновления базы данных или при перепроведении документов оплаты (например, СписаниеСРасчетногоСчета). Ведомость программно переводится в состояние "не проведена", но запись в регистре сведений ОграниченныеДокументы при этом автоматически не удаляется. Возникает логическое противоречие в коде системы:
ОграниченныеДокументы и блокирует любые изменения ведомости (включая попытку её проведения).Ниже мы подробно рассмотрим несколько способов решения этой проблемы, начиная с самых простых и безопасных.
---
Это самый надежный способ разорвать замкнутый круг блокировки. Нам необходимо напрямую удалить зависшую запись из технического регистра сведений. Рассмотрим, как это сделать.
Если у вас включен режим технического специалиста, выполним следующие шаги:
Ограниченные документы (в системе он зарегистрирован как РегистрСведений.ОграниченныеДокументы) и откройте его.Del (или через меню "Еще" — "Удалить").После удаления записи вернитесь в ведомость и проведите её. Она проведется без каких-либо ошибок.
---
Если у вас нет прав на открытие "Функций для технического специалиста" или вы используете базовую версию программы, можно перейти к нужному регистру напрямую по ссылке. Выполним следующие действия:
e1cib/list/РегистрСведений.ОграниченныеДокументы.---
Если вы хотите решить проблему исключительно стандартными средствами интерфейса без удаления записей из базы данных, мы можем принудительно вернуть скрытую кнопку на форму документа.
Авто на В командной панели.После этого кнопка (или флажок) появится на панели документа. Теперь вы можете кликнуть по ней, снять признак передачи для выплаты, спокойно провести документ, а затем вернуть признак обратно, если это необходимо.
---
Иногда блокировка ведомости связана с тем, что по ней уже был создан и проведен документ подтверждения. Проанализируем эту взаимосвязь:
---
Чтобы избежать подобных проблем при последующих обновлениях базы данных, можно временно или на постоянной основе отключить опцию автоматической блокировки в настройках системы. Для автоматизации технического обслуживания при работе с несколькими базами удобно использовать программу для обновления и архивирования 1С в тихом режиме.
Обратите внимание: если опция уже была отключена, но ошибка все равно возникает, это подтверждает наличие зависшей записи в регистре. В таком случае воспользуйтесь Способом 1 или Способом 3.
---
В исключительных случаях, когда стандартные методы не помогают, ИТ-специалисты прибегают к прямому редактированию таблиц базы данных на уровне СУБД.
Важное предупреждение: Данный метод крайне не рекомендуется для рабочих баз данных, так как он нарушает ссылочную целостность и может привести к непредсказуемым ошибкам в работе платформы. Используйте его только на копиях баз или под полную ответственность администратора СУБД, предварительно сделав резервную копию базы данных!
На уровне СУБД SQL Server за проведение ведомости отвечает поле Posted (принимает значения 0 или 1). Пример логики принудительного изменения статуса проведения:
-- ПРИМЕР ЗАПРОСА ДЛЯ ОЗНАКОМЛЕНИЯ
-- Находим нужную таблицу документа (например, Document307)
-- и принудительно устанавливаем признак проведения
UPDATE dbo._Document307
SET _Posted = 0x01
WHERE _IDRRef = <Уникальный идентификатор ссылки ведомости>
После выполнения данной операции на уровне СУБД документ отобразится в интерфейсе 1С как проведенный, и в меню "Еще" появится необходимый пункт для снятия флага выплаты. Тем не менее, для предотвращения подобных сложных сценариев всегда лучше использовать официальные методы очистки регистра сведений ОграниченныеДокументы.