Как исправить ошибку «Обнаружены ненулевые остатки по суммам при нулевом остатке по количеству в регистре себестоимости» в 1С:Управление торговлей 11?

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

Каждый специалист, занимающийся поддержкой и внедрением конфигураций на платформе «1С:Предприятие 8» (таких как «1С:Управление торговлей 11», «1С:Комплексная автоматизация 2» или «1С:ERP Управление предприятием»), рано или поздно сталкивается с проблемами при закрытии месяца. Одна из самых распространенных и труднодиагностируемых ошибок — появление суммовых остатков при нулевом количественном остатке в регистре себестоимости.

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

Выясняем причины возникновения проблемы

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

Почему система списывает количество, но «забывает» списать сумму? Выделим несколько ключевых причин:

  1. «Залипание» и рассогласование видов запасов. Это самая частая причина. В УТ 11 движение товаров ведется не только по складам и номенклатуре, но и по так называемым «видам запасов» (собственный товар, комиссионный товар, определенный поставщик или группа поставщиков). Если товар поступил с одним видом запасов, а при продаже система автоматически или вручную подобрала другой вид запасов, возникает перекос. По одному виду запасов останется плюс (количество и сумма), а по другому — минус (количество и сумма). При свертывании общего количества мы видим ноль, но суммы в разрезе аналитики не сходятся.
  2. Проведение документов «задним числом». Если после расчета себестоимости за прошлый месяц бухгалтер или менеджер изменил, перепровел или вставил документ в закрытый период, цепочка распределения партий нарушается. При последующем перезапуске закрытия месяца алгоритмы партионного учета могут отработать некорректно.
  3. Особенности учета ГТД и импорта. При поступлении импортного товара себестоимость формируется не только самим документом приобретения, но и документом Таможенная декларация на импорт (пошлины, сборы). Если товар продается в том же периоде, когда распределяются доп. расходы по ГТД, алгоритм расчета себестоимости в старых релизах может некорректно рассчитать сумму списания пошлины, оставив копейки или даже крупные суммы на остатке.
  4. Дублирование ключей аналитики. Ключи аналитики номенклатуры (справочник Ключи аналитики учета номенклатуры) создаются системой автоматически. Если по какой-то причине (например, сбой при обновлении или некорректный перенос данных) для одного и того же товара на одном складе создалось два разных ключа, система может оприходовать товар на один ключ, а списать с другого.

Рассмотрим подробнее, как локализовать и устранить эти расхождения.

Пошаговая диагностика с помощью Универсального отчета

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

Для детальной диагностики нам понадобится Универсальный отчет. Разберем по шагам, как его настроить:

  1. Перейдем в раздел НСИ и администрирование — Печатные формы, отчеты и обработки — Универсальный отчет.
  2. В качестве типа объекта выберем Регистр накопления.
  3. Имя регистра укажем как Себестоимость товаров, а таблицу выберем — Остатки и обороты.
  4. Нажмем кнопку Настройки и перейдем на вкладку Группировка. Добавим следующие поля в строгом порядке:
    • Организация
    • Раздел учета
    • Аналитика учета номенклатуры (внутри нее можно раскрыть поля Номенклатура, Склад)
    • Вид запасов
    • Партия (если используется партионный учет)
    • Регистратор (детальные записи для поиска конкретного документа)
  5. На вкладке Отбор установим фильтр по проблемной номенклатуре, которая указана в протоколе ошибок закрытия месяца.
  6. Нажмем Закрыть и сформировать.

Проанализируем полученную таблицу. Нам нужно найти строку, в которой конечный остаток по количеству равен нулю, а конечный остаток по сумме (или забалансовой стоимости) имеет ненулевое значение. По цепочке документов-регистраторов мы сразу увидим, какой именно документ (например, Реализация товаров и услуг или Списание товаров) провел списание количества без соразмерного списания стоимости.

Применим математическое правило проверки каждой строки движения:

Стоимость Конечный Остаток = Стоимость Начальный Остаток + Стоимость Приход - Стоимость Расход

В строке, где это равенство нарушается, и кроется первопричина сбоя.

Методы решения проблемы

В зависимости от масштаба проблемы и причин ее возникновения, мы можем применить несколько вариантов решения.

Вариант 1. Принудительное программное перезаполнение видов запасов

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

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


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

Запрос.УстановитьПараметр("НачалоПериода", НачалоДня(Объект.ПериодРегистрации));
Запрос.УстановитьПараметр("КонецПериода", КонецДня(Объект.ПериодРегистрации));

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

Этот способ позволяет автоматически выровнять цепочку партий и видов запасов «снизу вверх». После выполнения данной обработки необходимо запустить закрытие месяца заново.

Вариант 2. Очистка документов расчета себестоимости

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

Вариант 3. Использование документа «Корректировка регистров»

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

Проанализируем этот процесс на примере комиссионных товаров:

  1. Создаем новый документ Корректировка регистров в конце проблемного месяца (рекомендуется устанавливать время документа на 23:59:58, чтобы корректировка легла строго перед итоговым расчетом себестоимости).
  2. Добавляем в список регистров для корректировки регистр накопления Себестоимость товаров.
  3. Если в системе включен партионный учет (ФИФО), обязательно добавляем также регистр Партии товаров организаций, так как ручная корректировка только одного регистра приведет к рассогласованию партионного учета при следующем закрытии месяца.
  4. Заполняем строки движения:
    • Вид движения: Расход (если нужно убрать зависший плюс) или Приход (если завис минус).
    • Заполняем все ключевые измерения в точном соответствии с Универсальным отчетом (Организация, Раздел учета, Вид запасов, Аналитика номенклатуры, Партия).
    • Количество оставляем равным 0.
    • В поле Стоимость, СтоимостьБезНДС или Забалансовая стоимость (для комиссионных товаров) вносим ту сумму, которая зависла на остатке.
  5. Записываем документ корректировки и запускаем процедуру закрытия месяца.

Важные системные рекомендации

Для предотвращения подобных ошибок в будущем рекомендуется:

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

← На главную