При работе с 1С:Бухгалтерией 3.0 бухгалтеры и пользователи часто сталкиваются с ситуацией, когда на 41 счете остаются “зависшие” суммы, несмотря на то, что товар, казалось бы, списан. Особенность таких остатков — отсутствие указания склада в аналитике, то есть субконто "Склады" отображается как пустое значение, NULL или Неопределено. Разберем эту проблему подробнее и предложим эффективное решение.
Выясняем причину возникновения "зависших" сумм на 41 счете
Прежде чем перейти к решению, важно понять, почему возникают такие остатки. Чаще всего это происходит по следующим причинам:
NULL, Неопределено или "Пустая ссылка".Разбираемся в понятиях: NULL, Неопределено и "Пустая ссылка" в 1С
Для программного решения нашей проблемы критически важно понимать разницу между этими понятиями в контексте 1С:
Неопределено: Это специальное значение в 1С, которое указывает на то, что переменной или свойству объекта еще не было присвоено никакое значение. С точки зрения системы, это "ничто", отсутствие какого-либо объекта или значения.().NULL: Это термин из систем управления базами данных (СУБД), обозначающий отсутствие какого-либо значения. В контексте 1С, когда пользователь видит в ОСВ "пустое" значение склада, скорее всего, речь идет именно о значении, которое в СУБД хранится как NULL, а для программной обработки в 1С оно будет интерпретировано как Неопределено или "Пустая ссылка" в зависимости от контекста. В нашем случае, остатки с "без склада" будут соответствовать Неопределено при программной работе.Прежде чем мы начнем вносить изменения, рекомендуем выполнить следующие шаги:
Мы будем использовать документ "Операция (бухгалтерский и налоговый учет)" и немного программного кода, чтобы принудительно установить субконто "Склады" в значение Неопределено.
В документе "Операция" создайте две проводки, которые будут "обнулять" зависшие суммы:
Например, если у нас висит положительный остаток на 41.01, мы делаем проводку:
Дт 90.02.1 Кт 41.01 на сумму зависшего остатка.
Важно: На данном этапе заполняем только номенклатуру и партию (если есть), а поле "Склад" оставляем пустым. Сумму указываем ту, которую нужно списать. Если в ОСВ у вас две записи с разными знаками, но без склада, например, +1000 и -1000, вам нужно сделать проводки, которые нейтрализуют именно эти "безскладовые" записи. То есть, если висит +1000 без склада, вы делаете Кт 41.01 на 1000. Если висит -1000 без склада, вы делаете Дт 41.01 на 1000.
После ввода всех необходимых проводок (без указания склада), не проводите документ. Нам нужно будет внести изменения через программный код.
НеопределеноДля того чтобы система корректно увидела "пустой склад" как Неопределено, нам потребуется использовать программный код. Мы можем выполнить этот код с помощью временной внешней обработки или через кнопку "Действия" -> "Изменить форму" -> "События" в документе "Операция (бухгалтерский и налоговый учет)" (если у вас есть права разработчика).
Предположим, у нас есть документ ОперацияБухгалтерская, который мы только что создали. Нам нужно получить доступ к его движениям и установить для нужного субконто значение Неопределено.
Вот пример кода, который был предложен на форуме и подтвержден как рабочий:
// Предполагаем, что у нас есть ссылка на текущий документ 'ОперацияБухгалтерская'
// (Например, если это внешняя обработка, то вы можете открыть документ и передать его ссылку)
// Если вы вставляете это в событие "ПередЗаписью" или "ПриЗаписи" документа,
// то 'ЭтотОбъект' будет ссылкой на текущий документ.
Для Каждого Проводка Из ЭтотОбъект.Движения.Хозрасчетный Цикл
// Проверяем, является ли проводка по счету 41.01
Если Проводка.СчетДт = ПланыСчетов.Хозрасчетный.ТоварыНаСкладах ИЛИ Проводка.СчетКт = ПланыСчетов.Хозрасчетный.ТоварыНаСкладах Тогда
// Обрабатываем субконто по дебету
Для Каждого Субконто Из Проводка.СубконтоДт Цикл
Если СокрЛП(""+Субконто.Ключ) = "Склады" Тогда // Принудительно меняем на Неопределено
Проводка.СубконтоДт.Вставить(Субконто.Ключ, Неопределено);
КонецЕсли;
КонецЦикла;
// Обрабатываем субконто по кредиту
Для Каждого Субконто Из Проводка.СубконтоКт Цикл
Если СокрЛП(""+Субконто.Ключ) = "Склады" Тогда // Принудительно меняем на Неопределено
Проводка.СубконтоКт.Вставить(Субконто.Ключ, Неопределено);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Как применить этот код:
ЭтотОбъект на переменную, содержащую ссылку на ваш документ.ПередЗаписью или ПриЗаписи, с условием на определенные проводки), вставьте код. Будьте крайне осторожны: это изменение затронет все ручные операции. Лучше сделать это временно, а затем удалить.Пояснение к коду:
Для Каждого Проводка Из ЭтотОбъект.Движения.Хозрасчетный Цикл.Проводка.СчетДт = ПланыСчетов.Хозрасчетный.ТоварыНаСкладах ИЛИ Проводка.СчетКт = ПланыСчетов.Хозрасчетный.ТоварыНаСкладах).Проводка.СубконтоДт) и по кредиту (Проводка.СубконтоКт) каждой проводки.СокрЛП(""+Субконто.Ключ) = "Склады"), мы принудительно устанавливаем его значение в Неопределено с помощью метода Вставить(). Это гарантирует, что система обработает это субконто как "без склада".После применения кода, записываем и проводим документ "Операция (бухгалтерский и налоговый учет)". Затем снова формируем Оборотно-сальдовую ведомость по счету 41.01. Вы должны увидеть, что зависшие суммы с пустым складом исчезли.
Чтобы избежать повторного возникновения подобных ситуаций, рекомендуем следовать этим правилам:
Используя предложенное решение и превентивные меры, вы сможете эффективно справиться с зависшими суммами на 41 счете и поддерживать бухгалтерский учет в 1С:Бухгалтерии 3.0 в актуальном и корректном состоянии.