Почему возникают расхождения по регистрам в 1С:Управление торговлей и как их устранить

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

В процессе работы с конфигурациями «1С:Управление торговлей» (как редакции 10.3, так и 11) специалисты часто сталкиваются с ситуацией, когда данные в связанных регистрах накопления перестают совпадать. Типичный пример: остатки по количественному регистру ТоварыНаСкладах не соответствуют данным стоимостного (партионного) регистра ПартииТоваровНаСкладах. Аналогичные проблемы возникают в паре Продажи и ПродажиСебестоимость.

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

Причина 1: Настройки учетной политики и отложенные механизмы

Прежде всего, разберем ситуацию, которая часто принимается за ошибку, но на деле является штатной логикой программы. В УТ 10.3 существует настройка «Списывать партии при проведении документов». Если эта галочка снята, то при проведении реализации товар списывается только из регистра ТоварыНаСкладах. Записи в ПартииТоваровНаСкладах появятся только после запуска обработки «Проведение по партиям».

В УТ 11 аналогичная ситуация возникает с механизмом «Интеркампани». Товар может быть списан со склада одной организации, а документ Передача товаров между организациями, который закрывает стоимостную часть, еще не оформлен. Также стоит помнить, что окончательная себестоимость в УТ 11 формируется только после выполнения регламентной операции «Закрытие месяца».

Причина 2: Использование документа «Корректировка записей регистров»

Одной из самых частых причин «рукотворных» расхождений является использование документа КорректировкаЗаписейРегистров. Рассмотрим ситуацию: пользователь или администратор решил вручную поправить остатки на складе, сделав запись только в ТоварыНаСкладах, забыв при этом про партионный учет. Проанализируем последствия: в отчетах по складу остаток верный, а при попытке продажи программа выдает ошибку «Недостаточно партий», так как в партионном регистре данных нет.

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

Причина 3: Технические сбои и транзакции

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

Для исправления таких последствий необходимо выполнить процедуру «Тестирование и исправление»:

  1. Перейдите в конфигуратор.
  2. Меню «Администрирование» — «Тестирование и исправление».
  3. Выберите пункты «Проверка логической целостности» и «Пересчет итогов».

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

Причина 4: Аналитика и «человеческий фактор»

Посмотрим на пример, когда пользователь меняет аналитику в документе. Например, в поступлении товаров была изменена ХарактеристикаНоменклатуры или Серия. Если документ был перепроведен, а последующие цепочки (перемещения, продажи) — нет, то по регистру ТоварыНаСкладах остаток может «переехать» на новую характеристику, а в ПартииТоваровНаСкладах остаться на старой из-за специфики работы партионной последовательности.

Как найти конкретный документ, вызвавший расхождение

Для поиска проблемного документа не стоит использовать стандартные ведомости. Нам поможет «Универсальный отчет». Разберем алгоритм настройки:

  1. Выбираем тип данных «Регистр накопления».
  2. Строим отчет по регистру ТоварыНаСкладах, группировка по полю Регистратор.
  3. Строим второй такой же отчет по ПартииТоваровНаСкладах.
  4. Сравниваем данные. Если по конкретному регистратору в одном отчете есть движение, а в другом — нет (или суммы/количества различаются), мы нашли виновника.

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


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

Профилактика расхождений

Чтобы минимизировать появление ошибок в будущем, проанализируем следующие шаги:

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

← На главную