Как исправить красно-черные остатки по партиям в 1С:ERP?

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

Каждый практикующий специалист по 1С:ERP рано или поздно сталкивается с проблемой возникновения так называемых «красно-черных» остатков в партионном учете. Это неприятная ситуация, когда общее количество товара на складе и его общая стоимость равны нулю (или положительны), но внутри регистров накопления по аналитическим разрезам (партиям, видам запасов, номерам ГТД) висят перекрестные плюсы и минусы. В отчетах это выглядит как развернутое сальдо, где по одной партии числится «плюс», а по другой — точно такой же «минус».

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

Почему возникает «краснота» по партиям и видам запасов?

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

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

Техническая причина: почему обычное перепроведение документов не помогает?

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

В 1С:ERP при проведении документов реализации, перемещения или списания система автоматически рассчитывает и заполняет скрытую табличную часть «Виды запасов». Этот расчет базируется на текущих остатках в регистрах на момент проведения. Проблема заключается в том, что при стандартном групповом перепроведении система берет уже сохраненные в документе виды запасов и просто транслирует их в регистры накопления, не пересчитывая их заново!

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

Для решения этой задачи в открытом периоде мы рекомендуем использовать следующую последовательность действий:

  1. Программно распровести проблемные документы в хронологическом порядке.
  2. Очистить табличные части «Виды запасов» в этих документах.
  3. Последовательно провести документы заново.

Что делать, если период закрыт «намертво»?

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

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

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

Рассмотрим структуру программного кода для автоматического подбора перекрестных партий и формирования корректирующих движений:


// Шаг 1. Выбираем развернутые остатки по регистру "Себестоимость товаров"
Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
|	Себестоимость.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
|	Себестоимость.РазделУчета КАК РазделУчета,
|	Себестоимость.ВидЗапасов КАК ВидЗапасов,
|	Себестоимость.Партия КАК Партия,
|	Себестоимость.КоличествоОстаток КАК КоличествоОстаток,
|	Себестоимость.СтоимостьОстаток КАК СтоимостьОстаток
|ИЗ
|	РегистрНакопления.СебестоимостьТоваров.Остатки(&ГраницаДаты, ) КАК Себестоимость
|ГДЕ
|	Себестоимость.КоличествоОстаток <> 0";

РезультатЗапроса = Запрос.Выполнить();
ТаблицаОстатков = РезультатЗапроса.Выгрузить();

// Шаг 2. Распределяем положительные и отрицательные остатки для сопоставления
ТаблицаПлюсов = ТаблицаОстатков.Скопировать(Новый Структура("КоличествоОстаток"), "КоличествоОстаток > 0");
ТаблицаМинусов = ТаблицаОстатков.Скопировать(Новый Структура("КоличествоОстаток"), "КоличествоОстаток < 0");

// Шаг 3. Заполняем документ "Корректировка регистров"
ДокКорректировка = Документы.КорректировкаРегистров.СоздатьДокумент();
ДокКорректировка.Дата = ТекущаяДата();
ДокКорректировка.Комментарий = "Автоматическое схлопывание красно-черных остатков по партиям";

ТаблицаДвижений = ДокКорректировка.Таблицы.Добавить();
ТаблицаДвижений.ИмяРегистра = "СебестоимостьТоваров";

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

ДокКорректировка.Записать(РежимЗаписиДокумента.Проведение);

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

Штатные инструменты исправления в ERP 2.5

Если вы уже перешли на редакцию 1С:ERP 2.5 (или используете актуальные релизы комплексной автоматизации), то в вашем арсенале появились мощные штатные инструменты, которые позволяют решать данные проблемы гораздо меньшей кровью.

Проанализируем две ключевые возможности, которые заложили методологи фирмы «1С»:

1. Настройка исправительных документов прошлых периодов

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

2. Помощник исправления отрицательных остатков

В рамках рабочего места «Закрытие месяца» теперь доступен специализированный отчет и встроенный помощник «Исправление дублей видов запасов». Этот инструмент автоматически анализирует регистры на предмет наличия «красно-черных» записей по видам запасов и предлагает пользователю автоматически сформировать корректирующие документы одним кликом. Это существенно снижает потребность в написании кастомных внешних обработок.

Рекомендации по профилактике партионного учета

Чтобы минимизировать появление подобных проблем в будущем, мы рекомендуем внедрить следующие правила работы в вашей базе 1С:ERP:

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

← На главную