Почему в 1С:Торговля и Склад 7.7 возникают отрицательные остатки и как с ними бороться?

Программист 1С v7.7 Управленческий учет Торговля и дистрибуция
← На главную

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

Техническая причина возникновения зависшей себестоимости

Проанализируем работу регистра партий ПартииТоваров в момент проведения документов при разрешенном превышении остатка:

  1. Проведение реализации «в минус»: Когда документ продажи проводиться при отсутствии товара, система уменьшает количество на складе, но не может определить входящую стоимость товара (так как партия отсутствует). В движение регистра записывается расход количества, а расход суммы списывается как 0.
  2. Оформление прихода задним или более поздним числом: При проведении документа Поступление ТМЦ в регистр записывается приход количества и полной суммы поступления.
  3. Результат в регистрах: На конец периода суммарный количественный остаток по товару равен нулю (-1 + 1 = 0). Однако сумма поступления не была списана реализацией, так как расходный документ проводился раньше прихода и ничего о нем не знал. В результате в регистре партий остается нулевое количество и незакрытая сумма себестоимости.

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

Способы решения проблемы отрицательных остатков

Рассмотрим основные методические и технические подходы к ликвидации зависших сумм и отрицательных остатков.

1. Полный административный запрет продаж в минус

Самый надежный способ исключить расхождения в партионном учете — отключить константу Разрешить превышение остатка ТМЦ. В этом случае оператор не сможет провести документ продажи, если нужного количества товара нет на оперативном остатке. Если товары фактически прибыли, но документы задерживаются, рекомендуется использовать ордерную схему учета или оприходование по акту приема.

2. Восстановление последовательности партионного учета

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

3. Программный контроль и автоматическое перепроведение зависимых документов

Чтобы не запускать полное восстановление последовательности для всей базы, можно перепроводить только те расходные документы, которые зависят от изменяемой приходной накладной. Посмотрим на пример кода, встроенного в модуль документа ПриходнаяНакладная, который при сохранении или изменении документа находит и перепроводит все затронутые расходные документы.


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

Процедура ПриЗакрытии()
    ПроверкаЗависимыхДокументов();
КонецПроцедуры

Альтернативные варианты оформления документов

Выясним, какие организационные схемы помогают избежать «минусов» без изменения типового кода:

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

← На главную