Каждый специалист, работающий с конфигурацией «1С:Управление производственным предприятием» (УПП) или «1С:Комплексная автоматизация 1.1» в режиме РАУЗ (Расширенная аналитика учета затрат), рано или поздно сталкивается с загадочным поведением системы при расчете себестоимости. Типичная ситуация: на складе числится положительный остаток товара в количественном выражении, но после проведения документа Расчет себестоимости выпуска суммовая стоимость уходит в огромный минус.
Давайте подробно разберем, почему возникает эта проблема, как она связана с математической моделью РАУЗ, при чем здесь ключи аналитики и отключение учета по качеству, а также как исправить подобные ошибки и вернуть учет в корректное состояние.
Проанализируем классическую ситуацию, описанную пользователем:
Реализация товаров и услуг продано 5 шт. за 50 рублей.Расчет себестоимости программа делает корректировочное движение по расходу на сумму, например, 200 рублей.На первый взгляд это кажется программным сбоем: распределяемые затраты должны увеличивать стоимость запасов, а не уменьшать ее. Чтобы понять, почему система ведет себя именно так, нам придется заглянуть «под капот» механизма РАУЗ.
В отличие от классического партионного учета, где списание себестоимости происходит последовательно по документам (ФИФО или по средней), РАУЗ использует принципиально иной подход. Расчет стоимости ТМЦ и затрат строится на основе решения системы линейных алгебраических уравнений (СЛАУ) итерационным методом (как правило, методом Якоби или Гаусса-Зейделя).
Каждая уникальная комбинация аналитик учета (номенклатура, склад, качество, заказ и т. д.) представляет собой отдельный узел в графе распределения затрат. Для каждого такого узла формируется математическое уравнение баланса:
Начальный остаток (стоимость) + Приход (стоимость) = Расход (стоимость) + Конечный остаток (стоимость)
Система уравнений сходится и дает корректный результат только в том случае, если граф распределения непрерывен. Если же в системе по конкретному узлу (ключу аналитики) возникает разрыв — например, когда расход зафиксирован по одному ключу аналитики, а приход или начальный остаток лежит на другом — алгоритм расчета СЛАУ начинает расходиться. Чтобы сбалансировать уравнение математически, алгоритм на каждой итерации расчета начинает накручивать корректировочные суммы (иногда колоссального масштаба), пытаясь закрыть разрыв. Именно этот математический перекос мы и видим в виде «бешеных минусов» по сумме.
В рассматриваемом нами случае причиной «расколбаса» стало изменение настроек параметров учета — а именно, отключение ведения учета по качеству номенклатуры. Разберем по шагам, как это ломает логику РАУЗ на уровне базы данных:
УчетЗатрат (или УчетЗатратРегл) с использованием ключей аналитики, в которых реквизит «Качество» имел конкретное значение (например, «Новый»). На этом ключе аналитики (назовем его Ключ_Качество_Новый) сформировался и завис входящий остаток — наши 10 шт. на 100 рублей.Реализация товаров и услуг списывает 5 шт. Программа генерирует или подбирает под это движение новый ключ аналитики (назовем его Ключ_Качество_Пустое), где значение качества не заполнено (или равно значению «Неопределено»).Ключ_Качество_Новый висит остаток 10 шт. на 100 рублей. По нему в текущем периоде нет никакого движения.Ключ_Качество_Пустое зафиксирован только расход в количестве 5 шт. Прихода и начального остатка по этому ключу нет.Для РАУЗ списание с узла Ключ_Качество_Пустое является «чистым» отрицательным остатком без источника финансирования (суммовой оценки). Пытаясь распределить затраты и решить СЛАУ, алгоритм производит некорректные математические корректировки, уводя суммовой остаток по новому ключу в глубокий минус, в то время как на старом ключе продолжает мертвым грузом висеть положительный остаток.
Для устранения этой проблемы нам необходимо восстановить логическую связь в регистре учета затрат и перенести остатки со старых (неактуальных) ключей аналитики на новые. Рассмотрим основные способы решения этой задачи.
Это первое стандартное действие, которое необходимо выполнить. В конфигурации присутствует регламентная обработка, предназначенная для актуализации ключей.
Что делает обработка: Она проверяет ссылочную целостность справочника ключей аналитики, удаляет неиспользуемые элементы и объединяет дублирующиеся ключи.
Почему она может не помочь: Если настройки параметров учета уже изменены, а движения прошлых закрытых периодов записаны по старым ключам, обработка не сможет автоматически «перекинуть» остатки прошлых периодов. Она не имеет права менять движения в закрытых для редактирования периодах. Тем не менее запуск этой процедуры перед расчетом себестоимости является обязательным шагом для минимизации дублей.
Если конфигурация работает в штатном режиме, а настройки аналитики были изменены «на лету» в середине года, самым надежным способом будет принудительное выравнивание остатков на начало расчетного периода.
Разберем по шагам, как правильно выполнить эту операцию:
Ведомость по учету затрат детально анализируем остатки по проблемной номенклатуре. Нам необходимо вывести группировки по регистратору и по ключам аналитики (включая реквизиты ключей: склад, качество, спецификация и т.д.).Корректировка записей регистров в периоде, когда были изменены настройки (но строго до выполнения расчета себестоимости за этот месяц).Учет затрат (управленческий учет)Учет затрат (бухгалтерский и налоговый учет) (если ведется регламентированный учет)Расчет себестоимости выпуска. Теперь алгоритм СЛАУ увидит корректный приход на новом ключе аналитики и рассчитает среднюю стоимость списания без аномальных корректировок.Если номенклатурных позиций, по которым произошел сбой, слишком много (сотни или тысячи), ручной перенос с помощью корректировки регистров становится слишком трудоемким. В таком случае программисты прибегают к массовому перепроведению или использованию специализированных обработок.
Для исправления ситуации можно использовать обработку типа «Поиск и замена дублей» (или аналогичную из состава «Инструментов разработчика»), перенастроенную на работу со справочником ключей аналитики:
Ключи аналитики учета номенклатуры, которые содержат старое (отключенное) качество.Пример кода для понимания структуры работы с аналитикой РАУЗ (программное получение ключа аналитики номенклатуры):
ПараметрыКлюча = Новый Структура;
ПараметрыКлюча.Вставить("Номенклатура", СсылкаНоменклатура);
ПараметрыКлюча.Вставить("Склад", СсылкаСклад);
ПараметрыКлюча.Вставить("ХарактеристикаНоменклатуры", Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка());
ПараметрыКлюча.Вставить("Качество", Справочники.Качество.ПустаяСсылка()); // Передаем пустое качество после отключения
КлючАналитики = РегистрыСведений.АналитикаУчетаНоменклатуры.ПолучитьКлючАналитики(ПараметрыКлюча);
Появление суммовых минусов в РАУЗ при расчете себестоимости практически всегда связано с нарушением аналитического разреза учета запасов. Чтобы избежать подобных проблем в будущем, рекомендуем придерживаться следующих правил:
УчетЗатрат при наличии ненулевых остатков по заполненным аналитикам.