Как исправить некорректное списание по партиям после замены контрагентов в «1С:Бухгалтерия 3.0»

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

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

В данной статье мы подробно разберем, почему после массовой замены контрагентов (например, при переносе продаж с различных торговых точек на одного головного контрагента) программа начинает вести себя непредсказуемо: списывает партии «в минус» на забалансовом счете 004.01 («Товары, принятые на комиссию»), «не видит» остатки в оборотно-сальдовой ведомости (ОСВ) или выдает фантомные остатки по затратным счетам (например, по 26 счету). Мы проанализируем физическую структуру хранения данных 1С и изучим пошаговое руководство по исправлению этих ошибок.

Почему ломаются остатки: конфликт NULL и Пустой ссылки в СУБД

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

Давайте сопоставим два состояния базы данных:

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

Для обычного пользователя пустая ссылка и NULL выглядят одинаково — как пустое поле в отчете. Однако для СУБД и внутренних механизмов платформы 1С это принципиально разные сущности:

Диагностика проблемы с помощью запроса

Для того чтобы убедиться в наличии поврежденных записей в регистре бухгалтерии, мы можем написать и запустить простой запрос в консоли запросов. С его помощью мы найдем строки, где измерение заполнено пустой ссылкой вместо положенного NULL (или значения Неопределено на уровне платформы):


ВЫБРАТЬ
    ХозрасчетныйДвижения.Регистратор КАК ДокументРегистратор,
    ХозрасчетныйДвижения.НомерСтроки КАК НомерСтроки,
    ХозрасчетныйДвижения.Счет КАК СчетУчета,
    ХозрасчетныйДвижения.Подразделение КАК ЗначениеПодразделения
ИЗ
    РегистрБухгалтерии.Хозрасчетный КАК ХозрасчетныйДвижения
ГДЕ
    ХозрасчетныйДвижения.Счет = &ПараметрСчет
    И ХозрасчетныйДвижения.Подразделение <> НЕОПРЕДЕЛЕНО
    И ХозрасчетныйДвижения.Подразделение = ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка)

Если этот запрос возвращает строки документов (особенно тех, в которых производилась замена контрагентов), это подтверждает физическое повреждение логической структуры регистра бухгалтерии.

Решение проблемы через Тестирование и Исправление (ТИИ)

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

Рассмотрим пошаговый алгоритм лечения базы данных:

  1. Создание резервной копии: Это обязательный и самый важный шаг. Любые низкоуровневые операции с базой данных должны производиться только после создания резервной копии (файлового бэкапа .1cd или выгрузки в .dt). Рекомендуется сначала выполнить процедуру на копии базы данных.
  2. Запуск Конфигуратора: Запустите информационную базу в режиме Конфигуратора под пользователем с полными правами (администратора).
  3. Открытие формы ТИИ: Перейдите в главное меню: АдминистрированиеТестирование и исправление....
  4. Настройка параметров тестирования: В открывшемся окне установите флаги напротив следующих пунктов:
    • Реиндексация таблиц информационной базы (поможет оптимизировать индексы после массовых изменений);
    • Проверка логической целостности информационной базы (именно эта проверка отвечает за поиск несоответствий типов данных метаданным конфигурации);
    • Реструктуризация таблиц информационной базы (пересоздаст физические таблицы СУБД согласно текущему описанию метаданных).
  5. Настройка правил обработки ошибок: В нижней части окна в группе «При наличии неразрешенных ссылок» установите переключатели в положение «Очищать ссылки».
  6. Выполнение: Нажмите кнопку Выполнить и дождитесь окончания процесса. В зависимости от объема базы данных операция может занять от нескольких минут до нескольких часов.

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

Устранение сопутствующей проблемы: рассинхронизация итогов (на примере счета 26)

Часто после исправления логической целостности базы данных или некорректной работы обработок пользователи сталкиваются со следующей аномалией на затратных счетах (например, на счете 26 «Общехозяйственные расходы»):

Выясним причину этой проблемы. Регистр бухгалтерии на уровне СУБД состоит из двух ключевых таблиц:

  1. Таблица движений — физические проводки, создаваемые документами.
  2. Таблица итогов — предварительно рассчитанные остатки на конец каждого месяца, которые платформа использует для быстрого построения отчетов.

При логическом исправлении или удалении документов таблицы движений очищаются, но таблицы итогов могут вовремя не обновиться. В результате в таблице итогов «зависают» фантомные остатки, которые не подкреплены реальными проводками документов. Это классический слёт (рассинхронизация) итогов.

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

Способ 1. Пересчет итогов в Конфигураторе

Мы можем запустить процедуру из того же окна Тестирования и Исправления:

  1. Откройте Конфигуратор и зайдите в АдминистрированиеТестирование и исправление....
  2. Снимите все флаги и оставьте включенным только один пункт — «Пересчет итогов».
  3. Нажмите кнопку Выполнить. Платформа полностью очистит таблицы итогов всех регистров накопления и регистров бухгалтерии, после чего рассчитает их заново на основе реальных физических движений.

Способ 2. Управление итогами в режиме Предприятия

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

  1. Перейдите в раздел программы АдминистрированиеОбслуживание.
  2. Раскройте группу параметров Регламентные операции и выберите гиперссылку Управление итогами.
  3. В появившемся списке найдите нужный регистр бухгалтерии (как правило, это основной регистр Хозрасчетный).
  4. Выделите его строку, нажмите кнопку Управление итогами и выберите команду Пересчитать итоги. При необходимости вы можете указать период, начиная с которого будет запущен пересчет.

После завершения пересчета фантомные остатки на счете 26 исчезнут, и все виртуальные таблицы будут показывать одинаковые (нулевые) результаты. В завершение рекомендуется запустить обработку «Закрытие месяца» за проблемные периоды, чтобы программа корректно перераспределила и закрыла затраты на финансовый результат.

← На главную