В работе с конфигурацией 1С:Бухгалтерия предприятием 3.0 (особенно в релизах 3.0.181.х и 3.0.182.х) пользователи и технические специалисты часто сталкиваются с критической ошибкой. При проведении регламентной операции «Корректировка стоимости номенклатуры» в рамках закрытия месяца система формирует проводки на огромные отрицательные суммы. В результате на счете 41.01 (или других счетах учета ТМЦ) образуется «краснота» в денежном выражении при нулевом количественном остатке. В такой ситуации часто требуется списание суммовых остатков 41 счета с нулевым количеством, чтобы привести учет в соответствие с фактическими данными. Проанализируем, почему это происходит и как устранить проблему программным способом.
Рассмотрим стандартную ситуацию: организация реализует товар 10-го числа, а 20-го числа того же месяца покупатель возвращает часть товара или всю партию. Документ «Возврат товаров от клиента» создается на основании исходной «Реализации (акт, накладная, УПД)». Казалось бы, цепочка документов верна, но при закрытии месяца программа списывает в минус стоимость, которая может исчисляться миллионами рублей. Для детальной проверки первичных данных можно использовать анализ закупок и документов поступления с учетом возвратов, который наглядно показывает формирование стоимости по всем операциям.
Выясним причину такого поведения системы. Проблема кроется в логике работы модуля УчетТоваров. При проведении возврата программа должна определить себестоимость возвращаемого товара. Если возврат относится к реализации прошлого месяца, система жестко фиксирует себестоимость из документа-основания. Однако, если реализация и возврат произошли в одном и том же отчетном периоде (месяце), алгоритм ведет себя иначе.
Проанализируем фрагмент кода в модуле УчетТоваров (примерно строка 2277):
// Запишем себестоимость чтобы она не корректировалась автоматически
Если СтрокаОтгрузки.ВозвратПрошлогоМесяца Тогда
НоваяСтрока.Себестоимость = Макс(НоваяСтрока.СуммаСписания, 0.01);
КонецЕсли;
Здесь мы видим явное ограничение: Себестоимость фиксируется только в том случае, если установлен флаг ВозвратПрошлогоМесяца. Если же товар продан и возвращен в марте, это условие не срабатывает. Разработчики предполагали, что для текущего месяца себестоимость должна рассчитаться «в общем потоке» по методу средней или ФИФО. Чтобы проконтролировать этот процесс и увидеть, на каких этапах происходит сбой, полезно сформировать отчет по движениям и остаткам товаров в разрезе партий. На практике отсутствие фиксации приводит к тому, что регламентная операция корректировки не видит связи с отгрузкой и обнуляет стоимость поступления (возврата), создавая колоссальные перекосы в учете.
Разберем ситуацию глубже. Данное поведение связано с изменением механизмов учета в связи с ФСБУ 5/2019. Система пытается трактовать возврат текущего месяца как сторнирование реализации. Если в документе возврата колонка Себестоимость (которая часто скрыта от глаз пользователя) не заполнена программно, то алгоритм закрытия месяца не может корректно сопоставить партии или средневзвешенную цену. Подобные ошибки в регистрах часто требуют заполнения регистра себестоимости по остаткам ТМЦ, чтобы восстановить корректное сопоставление партий в учетной системе. В итоге «Корректировка стоимости» видит «приход» без суммы и пытается выровнять остатки на конец месяца, вычитая стоимость из общих оборотов.
Рассмотрим два основных способа исправления ситуации: официальный и технический (через расширение).
Фирма «1С» оперативно выпускает исправления для подобных критических ошибок. Перед тем как приступать к правке кода, рекомендуем выполнить следующие действия:
EF_0015..., которые исправляют работу регистра «Себестоимость товаров».Если обновление конфигурации или патчи недоступны, а закрывать месяц нужно срочно, воспользуемся методом, который подтвердил свою эффективность на практике. Нам необходимо убрать условие, которое ограничивает фиксацию себестоимости только прошлым месяцем. Для тех, кто предпочитает более гибкие инструменты управления партиями, также существует возможность ручного выбора партии для списания, что позволяет жестко связать документы отгрузки и возврата.
Проанализируем шаги по созданию расширения:
УчетТоваров.Нам нужно изменить логику так, чтобы Себестоимость фиксировалась всегда, когда есть ссылка на документ отгрузки, независимо от периода. Пример измененного кода:
// Убираем проверку на ВозвратПрошлогоМесяца, чтобы себестоимость фиксировалась всегда
// Если СтрокаОтгрузки.ВозвратПрошлогоМесяца Тогда
НоваяСтрока.Себестоимость = Макс(НоваяСтрока.СуммаСписания, 0.01);
// КонецЕсли;
После внесения этого изменения и перепроведения документов «Возврат товаров от клиента» за проблемный месяц, регламентная операция «Корректировка стоимости номенклатуры» начнет отрабатывать корректно. Сумма возврата будет жестко привязана к сумме реализации, и алгоритм расчета средней стоимости не будет «выдергивать» лишние деньги с остатков счета 41.
Часто бухгалтеры, видя миллионные минусы на счетах, пытаются исправить их документом «Операция, введенная вручную». Помните, что это только усугубляет проблему. Регламентная операция закрытия месяца опирается на данные регистров накопления (таких как Себестоимость товаров), а ручная операция правит только бухгалтерские проводки. В результате при следующем перезакрытии месяца система снова увидит расхождение между регистрами и проводками. В критических случаях, когда штатные методы не помогают, может потребоваться закрытие остатков по партиям на 41 счете через ввод остатков, чтобы корректно обнулить зависшие суммы.
Рекомендация: если вы уже вводили ручные правки, их необходимо удалить перед использованием программного исправления или перепроведением документов после установки патчей.
Мы проанализировали технический сбой в логике 1С:Бухгалтерия 3.0, выяснили, что причиной является избыточное условие СтрокаОтгрузки.ВозвратПрошлогоМесяца в модуле УчетТоваров, и рассмотрели способ исправления через расширение. Применение данного метода позволяет восстановить корректный учет себестоимости и успешно завершить процедуру закрытия месяца без образования фиктивных отрицательных остатков.