Почему пропадают документы из журнала «Банковские выписки» после тестирования и исправления базы 1С и как это исправить?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

Каждый технический специалист или опытный бухгалтер в среде «1С:Предприятие» рано или поздно сталкивается с загадочным поведением базы данных. Одна из таких крайне неприятных ситуаций — внезапное исчезновение документов из журналов (например, из списка «Банковские выписки»), хотя физически документы остаются в базе данных, их проводки и движения не нарушены, а прямым запросом к СУБД или через универсальный отчет их можно без проблем открыть. Особенно часто этот симптом проявляется после выполнения регламентного Тестирования и исправления (ТИИ) или очередного обновления конфигурации.

В этой статье мы подробно разберем, почему возникает этот сбой, как устроена связь между физическими таблицами документов, расширениями и журналами, а также рассмотрим пошаговое руководство по гарантированному восстановлению видимости документов без потери важных пользовательских данных.

Выясняем причину: как устроен механизм журналов и при чем тут расширения

Для того чтобы понять природу этой ошибки, нам необходимо заглянуть «под капот» платформы «1С:Предприятие 8.3». Рассмотрим, каким образом функционирует журнал документов Банковские выписки. На самом деле этот журнал в типовых конфигурациях (таких как «Бухгалтерия предприятия 3.0», «Комплексная автоматизация» или «ERP») строится на базе общего журнала документов Деньги.

Журнал документов в СУБД — это отдельная индексированная таблица (в терминах SQL она обычно имеет префикс _DocumentJournal). Сама по себе эта таблица не содержит детальных данных документов, а лишь хранит ссылки на них, даты, номера, проведенность и ключевые реквизиты индексации для быстрого построения динамических списков. Когда пользователь открывает журнал банковских выписок, платформа делает запрос именно к этой индексной таблице, а не сканирует тяжелые таблицы документов Списание с расчетного счета и Поступление на расчетный счет напрямую.

Теперь проанализируем, что происходит, когда в базу данных внедряются расширения конфигурации. Если разработчик заимствует стандартный документ (например, СписаниеСРасчетногоСчета) в расширение для того, чтобы добавить новые реквизиты, платформа вынуждена изменить структуру таблиц СУБД:

Во время запуска утилиты Тестирование и исправление платформа обнаруживает эти расхождения. Она видит, что связи между метаданными нарушены, считает индексные записи в журнале поврежденными и просто вычищает строки документов из таблицы журнала документов, оставляя при этом сами физические документы нетронутыми в таблицах документов. В итоге бухгалтер открывает журнал выписок и видит пустой список, хотя баланс сходится, проводки активны, а отчет по счету 51 показывает корректные обороты.

Дополнительно эта проблема усугубляется сбоями в служебных регистрах сведений, таких как ДанныеПервичныхДокументов и ЖурналИзмененияДокументов, которые используются в управляемом интерфейсе для оптимизации отображения данных.

---

Шаг 1. Локализация проблемы и диагностика

Прежде чем приступать к лечению базы данных, нам необходимо убедиться, что мы столкнулись именно с этой проблемой. Для этого проведем диагностику с помощью несложного запроса. Мы можем запустить обработку «Консоль запросов» и выполнить два простых обращения к базе данных.

Сначала проверим физическое наличие самих документов в базе за определенный период (когда они «пропали»):


ВЫБРАТЬ
    Ссылка КАК ДокументСсылка,
    Проведен,
    ПометкаУдаления,
    Дата,
    Номер
ИЗ
    Документ.СписаниеСРасчетногоСчета
ГДЕ
    Дата МЕЖДУ &НачалоПериода И &КонецПериода

Если этот запрос возвращает все наши документы, значит, физически они целы. Теперь выполним второй запрос — непосредственно к журналу документов Деньги, который отвечает за вывод информации в банковские выписки:


ВЫБРАТЬ
    Ссылка КАК ДокументСсылка,
    Дата,
    Номер,
    ТипЗначения(Ссылка) КАК ТипДокумента
ИЗ
    ЖурналДокументов.Деньги
ГДЕ
    Дата МЕЖДУ &НачалоПериода И &КонецПериода
    И ТипЗначения(Ссылка) = ТИП(Документ.СписаниеСРасчетногоСчета)

Если первый запрос выводит документы, а второй по тем же самым документам возвращает пустой результат, диагноз поставлен точно: нарушена регистрация документов в журнале из-за конфликта реструктуризации расширения.

---

Шаг 2. Защита данных и подготовка расширения

Поскольку проблема кроется в заимствовании документа расширением, для исправления ситуации нам придется временно исключить этот документ из расширения или полностью удалить расширение. Внимание! Если в расширении созданы собственные уникальные реквизиты этого документа, в которых пользователи уже успели заполнить важные данные, простое удаление расширения безвозвратно уничтожит эти колонки в СУБД (те самые таблицы с суффиксом _X1).

Рассмотрим, как правильно обезопасить данные перед процедурой восстановления:

  1. Обязательно сделайте резервную копию базы данных (выгрузку .dt или архивную копию SQL-базы) перед проведением любых дальнейших манипуляций!
  2. Если в расширении содержатся ценные кастомные реквизиты документов, воспользуйтесь универсальной обработкой Выгрузка и загрузка данных XML. Выполните выгрузку документов Списание с расчетного счета и Поступление на расчетный счет в файл. Данная обработка умеет корректно выгружать свойства объектов вместе с реквизитами расширений.
  3. Если кастомных реквизитов нет, а расширение использовалось только для доработки форм, проведения или печатных форм — мы можем смело переходить к следующему этапу без промежуточного сохранения данных.
  4. Зайдите в базу в режиме Конфигуратор, откройте список расширений (меню Конфигурация -> Расширения конфигурации).
  5. Откройте конфигурацию расширения, найдите заимствованный документ СписаниеСРасчетногоСчета (и/или ПоступлениеНаРасчетныйСчет) и удалите его из метаданных расширения. Если расширение не критично или полностью завязано на эти документы — временно удалите само расширение из списка.
  6. Обновите конфигурацию базы данных (нажмите клавишу F7), согласившись с изменениями структуры метаданных. На данном этапе физические таблицы СУБД будут приведены к типовому стандартному виду без суффиксов расширений.

---

Шаг 3. Запуск Тестирования и Исправления базы (ТИИ)

Теперь наша задача — заставить платформу «1С:Предприятие» заново просканировать физические таблицы документов и восстановить отсутствующие индексные записи в таблице журнала документов Деньги. Сделать это вручную невозможно, но утилита тестирования и исправления отлично справляется с этой задачей при правильной настройке параметров.

Разберем по шагам, как настроить и запустить процесс:

  1. В режиме Конфигуратор перейдите в меню Администрирование -> Тестирование и исправление....
  2. В появившемся окне настроек выберите следующие проверки:
    • Реструктуризация таблиц информационной базы (этот пункт обязателен, так как он физически пересоздает и выравнивает структуру индексов);
    • Проверка логической целостности (именно она отвечает за обнаружение «сиротских» записей и сопоставление документов с их журналами).
  3. Критически важный шаг! Обратите внимание на настройки в нижней части формы тестирования:
    • В переключателе При наличии ссылок на несуществующие объекты установите значение Создавать объекты;
    • В переключателе При частичной потере данных объектов также установите значение Создавать объекты.

    Если оставить эти параметры в значении "Очищать ссылки" или "Ничего не предпринимать", платформа не сможет принудительно перерегистрировать утерянные связи документов с журналом и служебными регистрами.

  4. Нажмите кнопку Выполнить и дождитесь окончания процесса. Для больших баз данных (более 10–50 Гб) процесс реструктуризации может занять значительное время (от нескольких часов до суток), поэтому рекомендуется выполнять эту процедуру в технологическое окно (например, ночью или в выходные дни).

После завершения тестирования платформа выведет отчет о проделанной работе. В этом отчете вы увидите многочисленные строки следующего содержания:

Проверка логической целостности. Документ.ПоступлениеНаРасчетныйСчет ...
ОбщийРеквизит.ОбластьДанныхОсновныеДанные = 0
Документ не зарегистрирован в журнале Деньги. Создана новая запись в журнале.

Это верный признак того, что утерянные связи успешно восстановлены, платформа обнаружила физические документы и заново прописала их индексы в системный журнал.

---

Шаг 4. Восстановление расширения и возврат данных

Теперь нам необходимо вернуть систему в рабочее состояние для пользователей:

  1. Запустите базу данных в режиме «1С:Предприятие» и убедитесь, что все старые и новые документы Списание с расчетного счета и Поступление на расчетный счет успешно отображаются в журнале Банковские выписки.
  2. Если на Шаге 2 вы удаляли расширение или заимствованный документ — верните его обратно в конфигурацию расширения. Обновите базу данных по кнопке F7.
  3. Если выполнялась выгрузка данных в XML-файл из-за наличия кастомных реквизитов расширения, откройте обработку Выгрузка и загрузка данных XML в режиме предприятия и загрузите сохраненный ранее файл. Данные расширения безболезненно запишутся поверх восстановленных документов без нарушения целостности журнала.

---

Как избежать подобных сбоев в будущем?

Для предотвращения повторения этой коварной проблемы мы рекомендуем придерживаться нескольких простых правил при администрировании и разработке в среде 1С:

← На главную