При работе в программе 1С:Бухгалтерия предприятия пользователи регулярно сталкиваются с процедурой проведения банковских документов. Одним из наиболее неприятных сюрпризов становится появление системного сообщения о невозможности проведения операции: «в базе данных отсутствует расчетный документ на который имеется ссылка...». При этом в скобках программа обычно выводит длинный набор символов — уникальный идентификатор отсутствующего объекта.
В этой статье мы подробно разберем, почему возникает данная неполадка, в каких именно документах скрывается проблема и какими способами можно оперативно вернуть базу данных в рабочее состояние.
Для начала проанализируем ситуацию с технической точки зрения и развенчаем популярное заблуждение. Часто пользователи считают, что ошибка возникает непосредственно при проведении документа ПлатежноеПоручение. Однако важно понимать особенности архитектуры конфигурации 1С:Бухгалтерия. Документ ПлатежноеПоручение представляет собой лишь печатную форму (шаблонный формуляр). Он предназначен для передачи распоряжения в банк, сам по себе не формирует никаких бухгалтерских или налоговых проводок и, соответственно, физически не может быть проведен с отражением движений по регистрам.
Реальное проведение и отражение движения денежных средств происходят в момент регистрации банковской выписки с помощью документов СписаниеСРасчетногоСчета или ПоступлениеНаРасчетныйСчет. Именно в них при попытке провести документ система обращается к аналитике расчетов с контрагентами.
Если в настройках договора с контрагентом или непосредственно в самом платежном документе выбран способ погашения задолженности «По документу», программа требует указать конкретную сделку или документ расчетов (например, РеализацияТоваровУслуг, ПоступлениеТоваровУслуг или ДокументРасчетовСКонтрагентом). Если этот документ-основание был физически удален из базы данных (минуя стандартную процедуру пометки на удаление и контроля ссылочной целостности), в поле выбора образуется «битая ссылка». В интерфейсе пользователя она отображается как строка <Объект не найден>, за которой следует уникальный 36-значный идентификатор (UUID) удаленной записи.
При попытке провести списание или поступление по расчетному счету платформа пытается прочитать данные этого несуществующего объекта для формирования проводок по счетам расчетов (например, 60.01, 60.02, 62.01, 62.02). Не найдя запись в таблицах базы данных, СУБД блокирует проведение транзакции и сообщает об ошибке.
Прежде чем переходить к лечению базы данных, разберем основные сценарии, которые приводят к возникновению подобных коллизий:
1С:Розница или 1С:УправлениеТорговлей, а затем выгружаются в бухгалтерию), удаление или пересоздание документов в торговой базе может привести к замене ссылок. При очередном сеансе синхронизации объект-основание в бухгалтерии затирается, оставляя битую ссылку в табличной части банковского документа.ДокументРасчетовСКонтрагентомРучнойУчет. Бухгалтеры нередко ошибочно принимают их за дубли или мусорные записи и удаляют, нарушая цепочки расчетов в выписках.Если ошибка носит единичный характер и вы точно знаете, по какому контрагенту не проводится платеж, проще всего исправить проблему вручную непосредственно в пользовательском интерфейсе.
Выполним следующие действия по шагам:
СписаниеСРасчетногоСчета или ПоступлениеНаРасчетныйСчет), который отказывается проводиться, и откроем его форму.<Объект не найден>....В ситуациях, когда битых ссылок накопилось много (например, после некорректного переноса данных или массового удаления документов), открывать каждую банковскую выписку вручную неэффективно. Проанализируем, как решить эту задачу в групповом режиме с помощью встроенного инструмента платформы.
Для массового исправления выполним следующую инструкцию:
Списание с расчетного счета.Документ расчетов — вид сравнения Содержит — значение Объект не найден (или укажем отбор по конкретному периоду и контрагенту).Документ расчетов.Способ погашения задолженности установим значение Автоматически.Если битая ссылка зарыта глубоко в системных регистрах сведений или накопления и не отображается на форме документа напрямую, нам потребуется прибегнуть к стандартному механизму обслуживания базы данных в Конфигураторе.
Важное предупреждение: перед выполнением любых административных процедур в Конфигураторе обязательно создайте резервную копию (бэкап) вашей информационной базы! Обработка по исправлению ссылок работает в монопольном режиме и вносит необратимые изменения в таблицы данных.
Для запуска тестирования выполним следующие шаги:
Иногда возникают ситуации, когда документ расчетов был стерт случайно, но на него опирается множество взаимосвязанных отчетов и сложных цепочек закрытия месяца. Если у нас есть точный UUID удаленного объекта (его можно скопировать из текста сообщения об ошибке), мы можем восстановить этот документ программным путем, сохранив исходный уникальный идентификатор. В этом случае все битые ссылки в базе автоматически «оживут».
Посмотрим на пример программного кода, который решает эту задачу:
// Создадим новый документ с сохранением исходного UUID
УтерянныйИдентификатор = Новый УникальныйИдентификатор("12345678-1234-1234-1234-123456789012");
СсылкаНаДокумент = Документы.РеализацияТоваровУслуг.ПолучитьСсылку(УтерянныйИдентификатор);
НовыйДокумент = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
НовыйДокумент.УстановитьСсылкуНового(СсылкаНаДокумент);
// Заполним минимально необходимые реквизиты для корректной записи
НовыйДокумент.Дата = ТекущаяДата();
НовыйДокумент.Организация = Справочники.Организации.ПустаяСсылка();
НовыйДокумент.Контрагент = Справочники.Контрагенты.ПустаяСсылка();
// Запишем документ без проведения
НовыйДокумент.Записать(РежимЗаписиДокумента.Запись);
После выполнения данного кода в системе появится пустой документ РеализацияТоваровУслуг с нужным внутренним ключом. Нам останется лишь зайти в него через стандартный интерфейс программы, заполнить табличную часть актуальными товарами или услугами и провести его. Ошибка в банковской выписке исчезнет сама собой.
Бывают редкие случаи, когда документ расчетов физически присутствует в базе данных, без проблем открывается на других компьютерах, но на конкретном рабочем месте бухгалтера программа упрямо выдает ошибку о его отсутствии. Это явный признак локального сбоя кэша метаданных платформы 1С.
Проанализируем простейший способ устранения этой проблемы: