Ситуация, при которой система сообщает об обнаружении суммового остатка при нулевом количестве в регистре Себестоимость товаров, является одной из самых сложных для диагностики при закрытии месяца. Эта проблема характерна для конфигураций, использующих партионный учет версии 2.2 и выше (ERP, Комплексная автоматизация 2, Управление торговлей 11). Суть ошибки заключается в том, что по определенной аналитике (номенклатура, склад, организация, вид деятельности НДС) количество товара списано в ноль, но на остатке числится ненулевая стоимость (регламентированная, управленческая или сумма НДС).
Рассмотрим подробно причины возникновения этой коллизии и разберем методы ее решения: от исправления учетных документов до корректировки программного кода.
Одной из неочевидных причин возникновения ошибки является особенность работы внутреннего механизма 1С по распределению партий. Проанализируем программный код, ответственный за нумерацию строк временных таблиц при расчете себестоимости. В некоторых релизах конфигураций (УТ 11.3, КА 2.2) ошибка может быть вызвана некорректным соединением таблиц в запросе из-за выбора неудачного поля в качестве разделителя.
Выясним причину глубже: в общем модуле УниверсальныеМеханизмыПартийИСебестоимости существует функция ЗаполнитьНомераСтрокВременнойТаблицы. Она использует переменную ОптимальныйРазделитель для деления данных на порции. Если в качестве этого разделителя система выбирает числовое поле с дробной частью (например, поле стоимости или цены), при внутреннем соединении таблиц часть данных может «отсекаться» из-за погрешностей точности или особенностей работы СУБД с типом Numeric. В результате количество списывается полностью, а соответствующая ему сумма в одной из порций данных теряется, оставаясь «висеть» на регистре.
Для решения этой проблемы на уровне кода можно принудительно ограничить количество строк в таблице значений, чтобы система изменила логику выбора разделителя. Рассмотрим пример модификации кода:
// В общем модуле УниверсальныеМеханизмыПартийИСебестоимости
// Находим место инициализации параметров расчета
ОграниченияВыборки.Вставить("КоличествоСтрокВТЗ", 10000); // Устанавливаем лимит в 10 000 строк
Разберем, почему это помогает. Уменьшение этого параметра заставляет систему более аккуратно подходить к формированию временных таблиц. Также рекомендуется проверить функцию ЗаполнитьНомераСтрокВременнойТаблицы с помощью отладчика. Если вы видите, что ПараметрыНумерации.ОптимальныйРазделитель принимает значение суммы или цены, это верный признак того, что данные могут быть сопоставлены некорректно.
Другой распространенный сценарий связан с использованием документа Корректировка поступления. Рассмотрим ситуацию: товар поступил по одной цене, часть его была перемещена на другой склад или продана, а затем вводится корректировка поступления, которая меняет стоимость или количество исходной партии. Если после такой корректировки расчетный остаток по конкретной аналитике становится нулевым или отрицательным, механизм расчета себестоимости может не справиться с «закрытием» стоимостных хвостов.
Проанализируем ситуацию на примере перемещения. Если Перемещение товаров произошло по цене себестоимости на дату документа, а последующая Корректировка поступления изменила входящую цену, возникает разрыв. Система не всегда может автоматически «протолкнуть» изменение стоимости через всю цепочку перемещений, если количество товара на конечном складе уже равно нулю.
Для выявления таких позиций проанализируем данные с помощью запроса к регистру Себестоимость товаров. Нам необходимо найти записи, где КоличествоОстаток меньше или равно нулю, но СтоимостьОстаток не равна нулю в периоде, где фигурирует корректировка поступления:
ВЫБРАТЬ
СебестоимостьТоваровОстатки.АналитикаУчетаНоменклатуры,
СебестоимостьТоваровОстатки.Организация,
СебестоимостьТоваровОстатки.КоличествоОстаток,
СебестоимостьТоваровОстатки.СтоимостьОстаток
ИЗ
РегистрНакопления.СебестоимостьТоваров.Остатки(&ПериодОкончания, ) КАК СебестоимостьТоваровОстатки
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.КорректировкаПоступления.Расхождения КАК КорректировкаПоступленияРасхождения
ПО КорректировкаПоступленияРасхождения.Ссылка.Организация = СебестоимостьТоваровОстатки.Организация
ГДЕ
СебестоимостьТоваровОстатки.КоличествоОстаток <= 0
И СебестоимостьТоваровОстатки.СтоимостьОстаток <> 0
Метод лечения: в таких случаях помогает временное создание искусственного остатка. Выполним следующие шаги:
Оприходование излишков товаров на конец проблемного месяца для позиций с нулевым количеством и зависшей суммой. Количество указываем минимальное (например, 1 шт.).Списание недостач товаров, чтобы убрать технический остаток.Часто ошибка возникает из-за того, что сумма «зависает» на одном ключе аналитики, а количество списывается с другого. Посмотрим на текст ошибки из примера: раздел учета: Товары на складах, вид деятельности НДС: Продажа облагается НДС. Это прямое указание на то, что система разделяет стоимость по видам налогообложения.
Рассмотрим подробнее, как это происходит. Если товар приходовался для деятельности Продажа облагается НДС, а списывался (например, документом Списание на расходы или Передача в производство) с аналитикой Продажа НЕ облагается НДС или Для операций, облагаемых по ставке 0%, то в регистре образуется два «хвоста»: по одной аналитике будет положительное количество и сумма, а по другой — отрицательное количество и сумма. В итоговом отчете по складу остаток может выглядеть как нулевой, но в разрезе ключей аналитики Себестоимость товаров возникнет ошибка.
Для исправления проанализируем отчет «Ведомость по партиям товаров» в разрезе всех доступных полей аналитики (включая вид деятельности НДС и назначение). Если обнаружен разрыв, необходимо привести документы списания в соответствие с документами поступления или воспользоваться документом Корректировка обособленного учета.
Проанализируем еще одну частую причину — некорректную работу схемы передачи товаров между организациями. Если включена опция «Продажа товаров между организациями», товар может быть продан от лица компании «А», хотя фактически закуплен на компанию «Б».
Выясним, как это влияет на себестоимость. До момента формирования документа Передача товаров между организациями у продающей организации числится отрицательный остаток («пустое» количество и сумма). Если передача оформлена не за весь период или по ценам, которые система не может сопоставить с закупкой, возникают суммовые остатки. Проверим отчет «Остатки товаров к передаче». Все передачи должны быть оформлены строго в хронологическом порядке до запуска процедуры закрытия месяца.
Также не стоит исключать появление дублей в справочнике Ключи аналитики учета номенклатуры. Это случается редко, обычно при программном переносе данных или сбоях обновления. Система может создать два разных ключа с идентичными параметрами. Проверим базу с помощью стандартной обработки «Поиск и удаление дублей» для этого справочника.
Подводя итог, разберем пошаговый алгоритм действий при обнаружении данной ошибки:
Товары на складах (только количество) и Себестоимость товаров (количество и сумма). Если в первом ноль, а во втором есть остатки — ищем документ, который сделал движение только по одному из этих регистров (например, ручная операция или некорректная корректировка регистров).Корректировка стоимости списания товаров, введенный в конце месяца.Соблюдение методологии учета и своевременный контроль за чистотой аналитики (особенно в части НДС и назначений) позволяют избежать большинства подобных ошибок без вмешательства в программный код системы.