Почему в 1С 7.7 остаются проводки в ОСВ при распроведении документа и как это исправить?

Программист 1С v7.7 Бухгалтерский учет IT и автоматизация бизнеса
← На главную

При активной работе в платформе 1С:Предприятие 7.7 пользователи иногда сталкиваются с неприятной ситуацией: документ распроведен, в его форме и в карточке счета проводок больше нет, однако в Оборотно-сальдовой ведомости (ОСВ) или журнале операций обороты продолжают отображаться. Проанализируем физические и программные причины такого поведения файловых баз и разберем по шагам действенные методы исправления проблемы.

Почему расходятся данные в ОСВ и карточке счета

Для понимания причин сбоя рассмотрим архитектуру хранения бухгалтерских проводок и итогов в файловой базе DBF:

  1. Разные источники данных для отчетов. Отчет Карточка счета строится напрямую по записям детальных проводок из таблицы 1SENTRY.DBF, связанных с операциями документов из 1SOPER.DBF. В то же время Оборотно-сальдовая ведомость за рассчитанные периоды обращается к предрассчитанным таблицам периодических итогов: 1SBKTTL.DBF (остатки и обороты по счетам) и 1SBKTTLC.DBF (итоги по субконто). При сетевом сбое или аварийном завершении работы транзакция отмены проведения может стереть запись из 1SENTRY.DBF, но оставить остаток в таблицах итогов.
  2. Ошибки в коде самописной конфигурации. Если в свойствах документа в Конфигураторе отключена опция Автоматическое удаление движений (или Автоматическое удаление проводок), платформа не очищает движения штатными средствами, ожидая ручного кода в модуле документа. Если разработчик забыл прописать удаление проводок в процедуре ОбработкаУдаленияПроведения(), проводки останутся в базе.
  3. Использование автономного объекта «Операция». Если проводки создавались через конструкцию СоздатьОбъект("Операция") без привязки к конкретному документу через Контекст.Операция, связь между документом и проводкой в поле DOCID нарушается. Штатный механизм платформы при отмене проведения просто «не видит» чужие проводки.
  4. Превышение критического размера файлов DBF. В 1С 7.7 предельный размер одной таблицы составляет 2 Гб, но проблемы со стабильностью чтения и записи индексов могут начинаться уже при достижении объема файла 1–1,2 Гб. В больших таблицах переполняются индексные файлы *.CDX, что приводит к некорректной выборке и зависанию остатков.

Способ 1. Принудительное пересоздание таблиц бухгалтерских итогов и индексов

Если штатный пересчет итогов в режиме «Предприятие» не помогает, необходимо пересоздать поврежденные файлы остатков с нуля. Разберем этот процесс по шагам:

  1. Создаем полную резервную копию базы данных. Обязательно скопируем весь каталог информационной базы на другой диск.
  2. Завершаем работу всех пользователей. База должна быть полностью освобождена.
  3. Удаляем файлы итогов и индексов. Перейдем в папку с базой данных и удалим следующие файлы:
    • 1SBKTTL.DBF — таблица остатков и оборотов по счетам;
    • 1SBKTTLC.DBF — таблица итогов по объектам аналитики (субконто);
    • Все индексные файлы с расширением *.CDX.

    Важно: Сами таблицы проводок 1SENTRY.DBF и операций 1SOPER.DBF удалять нельзя, так как именно в них хранятся первичные бухгалтерские записи.

  4. Запускаем Конфигуратор в монопольном режиме. При входе программа выдаст предупреждение об отсутствии индексов и выполнит автоматическую переиндексацию.
  5. Выполняем тестирование и исправление. В меню Администрирование откроем Тестирование и исправление ИБ, отметим пункты Реиндексация, Проверка физической целостности и Пересчет бухгалтерских итогов, после чего запустим процесс.
  6. Проверяем актуальность итогов в режиме Предприятия. Зайдем в 1С в монопольном режиме, перейдем в меню Операции → Управление бухгалтерскими итогами, установим расчет итогов по текущий квартал и нажмем Полный пересчет.

Способ 2. Выгрузка и загрузка данных через Конфигуратор

Механизм полной выгрузки данных платформы позволяет очистить базу от помеченных на удаление записей внутри DBF (сделать физическую упаковку таблиц) и устранить логические расхождения:

  1. В Конфигураторе выберем меню Администрирование → Выгрузить данные и сохраним zip-архив.
  2. Создадим новую пустую папку на диске и скопируем в нее только файл метаданных 1Cv7.MD (и файлы словарей 1Cv7.DD, если они есть).
  3. Запустим Конфигуратор, указав путь к новой пустой папке.
  4. Выберем пункт меню Администрирование → Загрузить данные и укажем ранее сформированный архив. В результате будет сформирована чистая база данных без поврежденных блоков и «хвостов» удаленных документов.

Способ 3. Программный поиск и удаление «осиротевших» проводок

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


Процедура ОчиститьЗависшиеПроводки()
    Перем Опер, Док;
    
    Опер = СоздатьОбъект("Операция");
    Док = СоздатьОбъект("Документ");
    
    Опер.ВыбратьОперации();
    Пока Опер.ПолучитьОперацию() = 1 Цикл
        // Проверяем наличие привязанного документа
        Если ПустоеЗначение(Опер.Документ) = 0 Тогда
            Если Док.НайтиДокумент(Опер.Документ) = 1 Тогда
                // Если документ найден, но снят с проведения, а проводки активны
                Если (Док.Проведен() = 0) И (Опер.КоличествоПроводок() > 0) Тогда
                    Сообщить("Удаление зависшей операции непроведенного документа: " + Строка(Док.ТекущийДокумент()));
                    Опер.Удалить();
                КонецЕсли;
            Иначе
                // Документ физически удален, а операция осталась
                Сообщить("Удаление операции несуществующего документа: " + Строка(Опер.Документ));
                Опер.Удалить();
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    
    Сообщить("Обработка завершена. Требуется полный пересчет итогов!");
КонецПроцедуры

Рекомендации по предотвращению сбоев в будущем

Для стабильной работы базы объемом более 1 Гб рекомендуется принять системные меры:

  1. Регулярная упаковка базы. При удалении объектов в файловой 1С 7.7 записи лишь помечаются байтом удаления *, но продолжают занимать место в файлах. Периодически выполняйте удаление помеченных объектов и выгрузку/загрузку данных для сжатия таблиц.
  2. Отключение оппортунистических блокировок Windows (Oplocks). При работе по локальной сети сетевое кэширование SMB2/SMB3 часто нарушает синхронизацию записи в DBF. Рекомендуется запускать пользователей через терминальный сервер (RDP) либо отключать Oplocks на файловом сервере.
  3. Переход на СУБД (MS SQL Server) или свертка базы. Если размер отдельных таблиц приближается к 1,5–2 Гб, файловый формат исчерпал свой ресурс. Необходимо выполнить свертку базы (перенос остатков на начало года с отсечением старых периодов) либо перевести информационную базу на версию 1С 7.7 для SQL Server.
← На главную