В процессе работы с конфигурациями на базе 1С:ERP и 1С:Комплексная автоматизация 2 (КА 2) пользователи и администраторы иногда сталкиваются с критической проблемой: документы Списание безналичных денежных средств, которые уже были подтверждены банком и проведены, внезапно теряют признак Проведено банком и переходят в состояние «не проведено». Это влечет за собой расхождения в остатках по расчетным счетам и нарушение цепочки взаиморасчетов. Рассмотрим причины этого явления и разберем по шагам методы диагностики и предотвращения подобных ситуаций.
Первым делом нам необходимо выяснить, кто или что инициирует изменение документа. Разберем основные инструменты контроля, встроенные в платформу 1С:Предприятие 8.3.
Анализ журнала регистрации. Нам следует открыть Журнал регистрации и установить фильтр по событию «Данные — Изменение» и метаданным Документ.СписаниеБезналичныхДенежныхСредств. Если в колонке «Пользователь» указано имя сотрудника, но сам он отрицает выполнение действий, обратим внимание на колонку «Приложение». Часто там можно увидеть «Фоновое задание». Важно понимать, что фоновые задания в 1С могут запускаться под сеансом конкретного пользователя, который инициировал процесс (например, нажал кнопку «Загрузить выписку»).
Настройка и проверка версионирования. Проанализируем историю изменений объекта. Если в системе включено Версионирование объектов (Администрирование — Общие настройки — История изменений), мы можем увидеть, какие именно реквизиты изменились в момент отмены проведения. Особое внимание уделим реквизитам Статус и ПроведеноБанком. Если версионирование не было включено, это следует сделать немедленно для раздела «Казначейство», установив режим «Версионировать при записи».
Иногда внешние проявления не дают полной картины. Выясним причину, обратившись к данным, которые хранятся «внутри» документа, но не всегда видны на форме.
Рассмотрим реквизит ДанныеВыписки. В конфигурациях КА 2 и ERP в документах движения денежных средств существует скрытый строковый реквизит, в котором сохраняется фрагмент текста из файла обмена (Клиент-Банк), на основании которого был создан или обновлен документ. Проанализируем его с помощью консоли запросов:
ВЫБРАТЬ
Списание.Ссылка,
Списание.Дата,
Списание.Номер,
Списание.ДанныеВыписки
ИЗ
Документ.СписаниеБезналичныхДенежныхСредств КАК Списание
ГДЕ
Списание.Ссылка В (&МассивСсылок)
Если после очередного сбоя в этом поле появился новый текст, значит, документ был перезаписан механизмом загрузки выписки. Это происходит, когда бухгалтер загружает файл, содержащий операции за прошлые периоды, и система «находит» старые документы, пытаясь их актуализировать. Если алгоритм сопоставления в коде 1С видит минимальное расхождение, он может сбросить флаг Проведено банком перед обновлением данных.
Проанализируем ситуацию с точки зрения современных технологий прямого обмена с банками. Если используется DirectBank, система может автоматически запрашивать статусы платежей через фоновые задания.
Существует регламентное задание Загрузка статусов платежных документов. Если банк возвращает промежуточный статус (например, «Передано в банк» вместо «Исполнено»), логика типовой конфигурации в некоторых релизах (в частности, в ветке 2.4.11) могла ошибочно снимать признак окончательного проведения. Нам необходимо проверить расписание этого задания и временно отключить его, чтобы подтвердить или опровергнуть влияние данного механизма.
Самый простой и эффективный административный способ — использование механизма даты запрета изменений. Однако часто бухгалтерия не может закрыть период целиком. Рассмотрим, как сделать это выборочно.
В 1С предусмотрена возможность установки даты запрета с детализацией по разделам. Мы можем зайти в настройки даты запрета и установить ограничение только для раздела «Казначейство». Это позволит бухгалтерам продолжать работу с документами закупок и продаж в текущем месяце, но запретит любым процессам (включая автоматическую загрузку выписки) менять банковские документы за прошлые дни. Это гарантированно предотвратит «случайный» откат статусов при загрузке старых файлов выписок.
Если административные меры не помогают, мы можем прибегнуть к разработке расширения. Создадим механизм, который будет блокировать снятие флага проведения для документов прошлых периодов или записывать детальную информацию о виновнике в отдельный лог.
Рассмотрим пример кода для подписки на событие ПередЗаписью документа СписаниеБезналичныхДенежныхСредств. Мы проверим, если документ уже был проведен банком, а в новой версии объекта этот флаг снимается, то выдадим предупреждение или запретим действие.
&После("ПередЗаписью")
Процедура ЗащитаОтСнятияПроведенияПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
// Если это новый документ или загрузка данных, не проверяем
Если ЭтотОбъект.ОбменДанными.Загрузка Или ЭтотОбъект.ЭтоНовый() Тогда
Возврат;
КонецЕсли;
// Получим текущее состояние документа из базы данных
СтарыеДанные = Ссылка.ПолучитьОбъект();
// Если в базе документ уже "Проведен банком", а сейчас флаг снимается
Если СтарыеДанные.ПроведеноБанком И НЕ ЭтотОбъект.ПроведеноБанком Тогда
// Проверяем, не является ли дата документа слишком старой
Если ЭтотОбъект.Дата < НачалоДня(ТекущаяДата()) Тогда
Сообщить("Попытка отмены банковского проведения для документа прошлых суток!");
// При необходимости можно установить Отказ = Истина;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Выясним еще одну важную техническую особенность КА 2. В этой конфигурации используется механизм Онлайн-взаиморасчетов. При изменении первичных документов (заказов, накладных), к которым привязана оплата, система может инициировать фоновый пересчет распределения платежей.
Проанализируем работу фонового задания Выполнение отложенных движений по расчетам с клиентами/поставщиками. В редких случаях, при возникновении коллизий в регистрах, этот механизм может вызывать перезапись связанных документов денежных средств. Если проблема повторяется регулярно, рекомендуется выполнить полное перепроведение документов по взаиморасчетам и проверить базу на наличие логических ошибок утилитой Тестирование и исправление.
Массовая отмена проведения списаний в 1С:Комплексная автоматизация 2 редко является случайностью. Чаще всего это результат работы автоматизированных механизмов сопоставления выписки или синхронизации статусов DirectBank.
Для решения проблемы мы рекомендуем следующий алгоритм:
Проведено банком в процедуре ПередЗаписью.