Проблема с «зависшими» остатками на забалансовом счете МЦ.04 («Инвентарь и хозяйственные принадлежности в эксплуатации») — классическая ситуация в практике бухгалтеров и внедренцев 1С. Вроде бы общего остатка по номенклатурной позиции в Оборотно-сальдовой ведомости (ОСВ) нет, но если развернуть отчет по субконто, мы увидим встречные плюсы и минусы на уровне материально-ответственных лиц (МОЛ) или партий. Часто эти пустые строки отображаются в виде скобок <...>, которые визуально кажутся одинаковыми, но система отказывается их закрывать. В этой статье мы подробно разберем природу данной проблемы и рассмотрим все возможные пути ее решения.
Для того чтобы понять, как исправить эту ошибку, нам необходимо заглянуть во внутреннее устройство платформы 1С:Предприятие. С точки зрения базы данных «пустота» в субконто может иметь совершенно разную природу:
Для пользователя в Оборотно-сальдовой ведомости все эти три состояния будут выглядеть абсолютно одинаково — в виде пустых скобок <...>. Однако для механизма итогов 1С это три разные аналитики. В результате приход фиксируется по аналитике NULL (например, при вводе начальных остатков), а расход списывается по аналитике ПустаяСсылка. Из-за этого программа видит их как независимые цепочки и не схлопывает остаток в ноль.
Выясним причины возникновения такой ситуации на практике. Чаще всего к этому приводят следующие действия:
МЦ.04 пользователь может случайно очистить субконто до состояния NULL или Неопределено вместо корректной пустой ссылки.МЦ.04) в процессе ведения учета.Проанализируем детально методы решения этой проблемы в зависимости от ограничений вашей базы данных.
Если «виновником» зависшего остатка стал документ в открытом периоде (например, та самая ручная операция или некорректный ввод остатков), исправить ситуацию проще всего в первоисточнике. Выполним следующие шаги:
МЦ.04.После перепроведения документа типы данных в приходе и расходе станут идентичными, и остатки в ОСВ успешно закроются под ноль.
Что делать, если остатки тянутся с прошлых лет (например, с 2016 года), период давно закрыт, сдан в налоговую, и любое перепроведение документов прошлых периодов категорически запрещено руководством? В этом случае мы можем сделать корректировку в текущем открытом периоде:
МЦ.04.Такой способ позволяет «схлопнуть» аналитику внутри одного счета без изменения финансовых результатов и закрытых периодов.
Иногда расхождение возникает из-за сбоя в таблицах итогов регистра бухгалтерии. Если вы уверены, что в самих документах субконто заполнены верно, но в отчетах все равно двоится аналитика, необходимо выполнить пересчет итогов. Разберем по шагам, как это сделать безопасно:
Администрирование — Тестирование и исправление....Также пересчет итогов можно выполнить в режиме «1С:Предприятие» через обработку «Управление итогами» (раздел «Администрирование» — «Обслуживание» — «Регламентные операции»). Убедитесь, что период рассчитанных итогов установлен актуальный (на текущий месяц).
Если документов с битой аналитикой очень много, а перепроводить их нельзя (чтобы не нарушить границу последовательности и не сдвинуть распределение партий), программист может исправить движения документов программно. Для этого используется объект РегистрБухгалтерииНаборЗаписей с установленным свойством ОбменДанными.Загрузка = Истина. Это позволяет переписать движения регистра напрямую, минуя стандартные обработчики проведения документов.
Рассмотрим пример кода внешней обработки, которая находит движения по счету МЦ.04 и программно заменяет битые пустые субконто на пустые ссылки нужного типа:
Процедура ИсправитьДвиженияДокумента(СсылкаНаДокумент) Экспорт
// Создаем набор записей регистра бухгалтерии с отбором по регистратору
НаборЗаписей = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(СсылкаНаДокумент);
НаборЗаписей.Прочитать();
Модифицирован = Ложь;
Для Каждого Запись Из НаборЗаписей Цикл
// Обрабатываем Дебет счета МЦ.04
Если Запись.СчетДт = ПланыСчетов.Хозрасчетный.МЦ04 Тогда
Для Каждого КлючСубконто Из Запись.СубконтоДт Цикл
// Проверяем, если значение не заполнено (NULL или Неопределено)
Если Не ЗначениеЗаполнено(КлючСубконто.Значение) Тогда
// Получаем правильный тип субконто из настроек счета
ТипСубконто = КлючСубконто.Ключ.ТипЗначения;
// Принудительно устанавливаем пустую ссылку этого типа
Запись.СубконтоДт[КлючСубконто.Ключ] = ТипСубконто.ПривестиЗначение(Неопределено);
Модифицирован = Истина;
КонецЕсли;
КонецЦикла;
КонецЕсли;
// Обрабатываем Кредит счета МЦ.04
Если Запись.СчетКт = ПланыСчетов.Хозрасчетный.МЦ04 Тогда
Для Каждого КлючСубконто Из Запись.СубконтоКт Цикл
Если Не ЗначениеЗаполнено(КлючСубконто.Значение) Тогда
ТипСубконто = КлючСубконто.Ключ.ТипЗначения;
Запись.СубконтоКт[КлючСубконто.Ключ] = ТипСубконто.ПривестиЗначение(Неопределено);
Модифицирован = Истина;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
// Записываем измененный набор без вызова бизнес-логики проведения
Если Модифицирован Тогда
НаборЗаписей.ОбменДанными.Загрузка = Истина;
НаборЗаписей.Записать();
Сообщить("Успешно скорректированы движения для документа: " + Строка(СсылкаНаДокумент));
КонецЕсли;
КонецПроцедуры
Этот метод гарантирует абсолютную безопасность для последовательности проведения: даты актуальности учета не сдвинутся, а «визуальный мусор» из ОСВ исчезнет, так как все пустые субконто получат одинаковый тип данных.
Чтобы забалансовый счет МЦ.04 больше не преподносил неприятных сюрпризов, рекомендуем придерживаться простых правил:
Применяя эти методики, вы сможете быстро навести порядок в Оборотно-сальдовой ведомости и предотвратить появление расхождений в аналитическом учете в дальнейшем.