Почему расчет себестоимости в 1С:УПП РАУЗ уводит сумму в минус при положительном количестве?

Программист 1С v8.3 (Обычные формы) Управленческий учет Промышленность, строительство и АПК
← На главную

Каждый специалист, работающий с конфигурацией «1С:Управление производственным предприятием» (УПП) или «1С:Комплексная автоматизация 1.1» в режиме РАУЗ (Расширенная аналитика учета затрат), рано или поздно сталкивается с загадочным поведением системы при расчете себестоимости. Типичная ситуация: на складе числится положительный остаток товара в количественном выражении, но после проведения документа Расчет себестоимости выпуска суммовая стоимость уходит в огромный минус.

Давайте подробно разберем, почему возникает эта проблема, как она связана с математической моделью РАУЗ, при чем здесь ключи аналитики и отключение учета по качеству, а также как исправить подобные ошибки и вернуть учет в корректное состояние.

Суть проблемы на простом примере

Проанализируем классическую ситуацию, описанную пользователем:

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

Математика РАУЗ: почему система «сходит с ума»

В отличие от классического партионного учета, где списание себестоимости происходит последовательно по документам (ФИФО или по средней), РАУЗ использует принципиально иной подход. Расчет стоимости ТМЦ и затрат строится на основе решения системы линейных алгебраических уравнений (СЛАУ) итерационным методом (как правило, методом Якоби или Гаусса-Зейделя).

Каждая уникальная комбинация аналитик учета (номенклатура, склад, качество, заказ и т. д.) представляет собой отдельный узел в графе распределения затрат. Для каждого такого узла формируется математическое уравнение баланса:

Начальный остаток (стоимость) + Приход (стоимость) = Расход (стоимость) + Конечный остаток (стоимость)

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

Механизм сбоя при отключении аналитики «Качество»

В рассматриваемом нами случае причиной «расколбаса» стало изменение настроек параметров учета — а именно, отключение ведения учета по качеству номенклатуры. Разберем по шагам, как это ломает логику РАУЗ на уровне базы данных:

  1. До отключения учета по качеству: Все документы движения МПЗ (поступления, выпуски) записывались в регистр накопления УчетЗатрат (или УчетЗатратРегл) с использованием ключей аналитики, в которых реквизит «Качество» имел конкретное значение (например, «Новый»). На этом ключе аналитики (назовем его Ключ_Качество_Новый) сформировался и завис входящий остаток — наши 10 шт. на 100 рублей.
  2. После изменения настроек: Пользователь отключает ведение учета по качеству в настройках параметров учета. Для программы это означает, что при проведении новых документов измерения качества больше не должны учитываться.
  3. Оформление продажи: Документ Реализация товаров и услуг списывает 5 шт. Программа генерирует или подбирает под это движение новый ключ аналитики (назовем его Ключ_Качество_Пустое), где значение качества не заполнено (или равно значению «Неопределено»).
  4. Результат в расчете себестоимости: Алгоритм расчета видит два абсолютно разных, не связанных между собой узла затрат:
    • На Ключ_Качество_Новый висит остаток 10 шт. на 100 рублей. По нему в текущем периоде нет никакого движения.
    • На Ключ_Качество_Пустое зафиксирован только расход в количестве 5 шт. Прихода и начального остатка по этому ключу нет.

Для РАУЗ списание с узла Ключ_Качество_Пустое является «чистым» отрицательным остатком без источника финансирования (суммовой оценки). Пытаясь распределить затраты и решить СЛАУ, алгоритм производит некорректные математические корректировки, уводя суммовой остаток по новому ключу в глубокий минус, в то время как на старом ключе продолжает мертвым грузом висеть положительный остаток.

Как решить проблему «зависших» остатков и вернуть корректный расчет

Для устранения этой проблемы нам необходимо восстановить логическую связь в регистре учета затрат и перенести остатки со старых (неактуальных) ключей аналитики на новые. Рассмотрим основные способы решения этой задачи.

Способ 1. Использование обработки «Тестирование и исправление ключей аналитики»

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

Что делает обработка: Она проверяет ссылочную целостность справочника ключей аналитики, удаляет неиспользуемые элементы и объединяет дублирующиеся ключи.

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

Способ 2. Ручной перенос остатков документом «Корректировка записей регистров»

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

Разберем по шагам, как правильно выполнить эту операцию:

  1. С помощью отчета Ведомость по учету затрат детально анализируем остатки по проблемной номенклатуре. Нам необходимо вывести группировки по регистратору и по ключам аналитики (включая реквизиты ключей: склад, качество, спецификация и т.д.).
  2. Убеждаемся, что остатки действительно раздвоились: например, количество висит на ключе с заполненным качеством, а расход ушел по ключу без качества.
  3. Создаем новый документ Корректировка записей регистров в периоде, когда были изменены настройки (но строго до выполнения расчета себестоимости за этот месяц).
  4. В табличную часть движения регистров добавляем разделы:
    • Учет затрат (управленческий учет)
    • Учет затрат (бухгалтерский и налоговый учет) (если ведется регламентированный учет)
  5. Выполняем операцию «переброски»:
    • Добавляем строку со знаком «Расход» по старому ключу аналитики (где качество заполнено), указывая зависшее количество и его стоимость.
    • Добавляем строку со знаком «Приход» на новый, корректный ключ аналитики (где качество пустое), указывая то же количество и стоимость.
  6. После проведения корректировки повторно запускаем документ Расчет себестоимости выпуска. Теперь алгоритм СЛАУ увидит корректный приход на новом ключе аналитики и рассчитает среднюю стоимость списания без аномальных корректировок.

Способ 3. Использование внешних обработок для свертки ключей

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

Для исправления ситуации можно использовать обработку типа «Поиск и замена дублей» (или аналогичную из состава «Инструментов разработчика»), перенастроенную на работу со справочником ключей аналитики:

  1. Находим все элементы справочника Ключи аналитики учета номенклатуры, которые содержат старое (отключенное) качество.
  2. Находим или программно создаем аналогичные «чистые» ключи без качества.
  3. Производим замену ссылок в документах текущего периода со старых ключей на новые.
  4. Выполняем групповое перепроведение документов за этот месяц для актуализации регистров накопления.

Пример кода для понимания структуры работы с аналитикой РАУЗ (программное получение ключа аналитики номенклатуры):


ПараметрыКлюча = Новый Структура;
ПараметрыКлюча.Вставить("Номенклатура", СсылкаНоменклатура);
ПараметрыКлюча.Вставить("Склад", СсылкаСклад);
ПараметрыКлюча.Вставить("ХарактеристикаНоменклатуры", Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка());
ПараметрыКлюча.Вставить("Качество", Справочники.Качество.ПустаяСсылка()); // Передаем пустое качество после отключения

КлючАналитики = РегистрыСведений.АналитикаУчетаНоменклатуры.ПолучитьКлючАналитики(ПараметрыКлюча);

Резюме и правила профилактики подобных ошибок

Появление суммовых минусов в РАУЗ при расчете себестоимости практически всегда связано с нарушением аналитического разреза учета запасов. Чтобы избежать подобных проблем в будущем, рекомендуем придерживаться следующих правил:

← На главную