Как устранить промежуточные отрицательные остатки по складу в 1С:УТП и восстановить партионный учет?

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

Приветствуем коллег! Сегодня мы разберем одну из самых частых, болезненных и методологически сложных проблем в конфигурациях 1С на классическом партионном учете (таких как 1С:Управление торговым предприятием 8.2, 1С:Управление производственным предприятием 1.3, 1С:Комплексная автоматизация 1.1 и 1С:Управление торговлей 10.3). Речь идет о промежуточных отрицательных остатках номенклатуры по складу внутри дня.

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

---

Почему промежуточный минус уничтожает вашу валовую прибыль?

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

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

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

---

Вариант 1. Автоматическое упорядочивание документов внутри дня («Плюсы перед минусами»)

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

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

  1. Выбирать за указанный период все документы, влияющие на остатки товаров на складах.
  2. Разделять их на две категории:
    • Приходные: ПоступлениеТоваровУслуг, ОприходованиеТоваров, ВозвратТоваровОтПокупателя, приходные документы ПеремещениеТоваров.
    • Расходные: РеализацияТоваровУслуг, СписаниеТоваров, ТребованиеНакладная, расходные документы ПеремещениеТоваров.
  3. Программно изменять время документов: приходные документы устанавливать на интервал с 00:00:00 по 08:00:00, а расходные — после 12:00:00.

Посмотрим на пример кода, реализующий базовый сдвиг времени для расходных документов в конец дня:


// Пример программного изменения времени документов для устранения минусов внутри дня
Процедура ПереместитьРасходныеДокументыНаКонецДня(ДатаАнализа) Экспорт
    
    // Запрос для выбора расходных документов за день
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   Реализация.Ссылка КАК Ссылка,
        |   Реализация.Дата КАК Дата
        |ИЗ
        |   Документ.РеализацияТоваровУслуг КАК Реализация
        |ГДЕ
        |   Реализация.Дата МЕЖДУ &НачалоДня И &КонецДня
        |   И Реализация.Проведен = ИСТИНА";
        
    Запрос.УстановитьПараметр("НачалоДня", НачалоДня(ДатаАнализа));
    Запрос.УстановитьПараметр("КонецДня", КонецДня(ДатаАнализа));
    
    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();
    
    // Начальное время для сдвига расходов (например, 18:00:00)
    ТекущееВремяСдвига = НачалоДня(ДатаАнализа) + 18 * 3600; 
    
    Пока Выборка.Следующий() Цикл
        
        ДокОбъект = Выборка.Ссылка.ПолучитьОбъект();
        
        // Устанавливаем новое время с секундным интервалом во избежание коллизий блокировок
        ДокОбъект.Дата = ТекущееВремяСдвига;
        ТекущееВремяСдвига = ТекущееВремяСдвига + 1; 
        
        Попытка
            // Записываем документ с проведением в неоперативном режиме
            ДокОбъект.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
            Сообщить("Документ " + ДокОбъект.Ссылка + " успешно сдвинут на конец дня.");
        Исключение
            Сообщить("Ошибка проведения документа: " + ОписаниеОшибки(), СтатусСообщения.Важное);
        КонецПопытки;
        
    КонецЦикла;
    
КонецПроцедуры

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

---

Вариант 2. Сравнение и точечное выравнивание регистров

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

Проанализируем ситуацию: очень часто из-за неоперативного проведения остаток по регистру ТоварыНаСкладах равен нулю, а по регистру ПартииТоваровНаСкладах висит незакрытое развернутое сальдо (например, +10 штук по одной партии и -10 по «партии отрицательных остатков»). Это происходит потому, что приходный документ провелся по партиям позже, чем расходный, и они «не встретились».

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

Номенклатура Склад Остаток (Товары на складах) Остаток (Партии на складах) Расхождение
Кабель силовой ВВГ 3х2.5 Основной склад 150 м 150 м (в т.ч. -50 м технический минус) Развернутое сальдо в партиях

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

---

Вариант 3. Исправление остатков в закрытых периодах без перепроведения документов

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

В этом случае у нас есть два пути решения:

  1. Использование документа КорректировкаЗаписейРегистров:

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

  2. Техническое оприходование и списание:

    На конец отчетного месяца все отрицательные остатки перекрываются документом ОприходованиеТоваров на склад по нулевой стоимости (или по стоимости последнего прихода) на статью прочих доходов. Это временно выравнивает складские остатки. В начале следующего месяца эти же объемы списываются документом СписаниеТоваров на прочие расходы. Данный метод обязательно нужно согласовывать с главным бухгалтером, так как он напрямую влияет на балансовые счета учета доходов и расходов.

---

Профилактические меры: как не допускать появления минусов в будущем

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

  1. Запрет списания в минус в правах пользователей:

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

  2. Регулярное фоновое восстановление последовательности:

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

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

← На главную