Почему 1С:УНФ обнуляет себестоимость при закрытии месяца и как это исправить

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

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

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

Анализ цепочки документов и движений регистра

Рассмотрим типичную ситуацию, которая приводит к ошибке. Предположим, у нас есть следующая последовательность операций:

  1. Ввод начальных остатков: на оптовый склад поступает товар в количестве 10 шт. на сумму 3000 руб.
  2. Перемещение запасов: 4 шт. перемещаются с оптового склада на розничный. В документе указана связь с Заказом покупателя.
  3. Расходная накладная: оформляется продажа этих 4 шт. с розничного склада.
  4. Закрытие месяца: процедура расчета себестоимости формирует сторнирующую запись на -1200 руб. по розничному складу.

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

Влияние скрытой аналитики «Заказ покупателя»

Ключевая проблема кроется в заполнении реквизита Корр. заказ (Корреспондирующий заказ) в регистре Запасы. Разберем механизм по шагам:

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

Техническое решение: очистка реквизита через расширение

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

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


&Вместо("ПередЗаписью")
Процедура Расшир_ПередЗаписью(Отказ, Замещение)
    // Проверяем, что документ является перемещением запасов
    Если ТипЗнч(ЭтотОбъект.Ссылка) = Тип("ДокументСсылка.ПеремещениеЗапасов") Тогда
        // Проходим по всем движениям регистра "Запасы"
        Для Каждого Движение Из ЭтотОбъект.Движения.Запасы Цикл
            // Если реквизит КоррЗаказ заполнен, очищаем его
            Если ЗначениеЗаполнено(Движение.КоррЗаказ) Тогда
                Движение.КоррЗаказ = Неопределено;
            КонецЕсли;
            
            // Также стоит обратить внимание на реквизит Заказ, 
            // если он мешает сопоставлению в Расходной накладной
            Если ЗначениеЗаполнено(Движение.Заказ) И ЭтотОбъект.Статус = Перечисления.СтатусыПеремещенияЗапасов.Завершено Тогда
                // Логика очистки зависит от того, используется ли резервирование
                // Движение.Заказ = Неопределено; 
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;
КонецПроцедуры

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

Дополнительные факторы: Intercompany и тип склада

Выясним, какие еще настройки могут влиять на обнуление себестоимости, помимо заказов покупателей:

  1. Настройка «Учет по компании в целом»: Если в базе ведется учет по нескольким организациям и включена опция «Управленческая компания», система может пытаться консолидировать затраты. Если в цепочке документов (Поступление -> Перемещение -> Продажа) хотя бы в одном месте указана другая организация, механизм Intercompany может отработать некорректно, если не оформлены документы передачи между организациями.
  2. Тип склада «Розница»: Посмотрим на специфику розничных складов в УНФ. Если склад имеет тип «Розница», учет на нем может отличаться от оптового склада. В некоторых случаях алгоритм закрытия месяца пытается рассчитать торговую наценку или списать стоимость по среднему, исходя из цен в розничной точке. Если аналитика (партия или заказ) в перемещении заполнена, а в чеке ККМ или накладной — нет, возникнет аналогичный конфликт.
  3. Последовательность проведения: УНФ критично относится к хронологии. Даже если вы перепровели документы, важно убедиться, что время Расходной накладной строго позже времени Перемещения запасов. В противном случае на момент продажи остатка еще «нет», и закрытие месяца будет пытаться исправить отрицательные остатки через корректирующие записи.

Рекомендации по диагностике

Чтобы точно определить причину обнуления себестоимости, выполните следующие действия:

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

← На главную