Как исправить некорректные движения количества и себестоимости при комплектации в 1С-Рарус: Розница

Программист 1С v8.3 (Управляемые формы) 1С:Розница Управленческий учет Торговля и дистрибуция
← На главную

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

В рамках этой статьи мы подробно разберем, почему возникает этот программный сбой, как функционируют механизмы расчета себестоимости в конфигурациях от «1С-Рарус», почему проблема привязана к конкретным складам и как правильно исправить ошибку в коде без ущерба для ведения учета.

Выясняем причину: почему «ломаются» движения документа

Для того чтобы понять природу ошибки, проанализируем, как типовая конфигурация «1С:Розница» и надстройка от «1С-Рарус» рассчитывают себестоимость при комплектации. Документ «Комплектация номенклатуры» выполняет две ключевые операции:

  1. Списание комплектующих (ингредиентов или составных частей) со склада.
  2. Оприходование готового комплекта на склад.

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

Разработчики отраслевого решения от «1С-Рарус» интегрировали собственный, альтернативный механизм расчета себестоимости. Ошибка, при которой себестоимость подменяет количество в движениях, является следствием классического программного бага (так называемого «сдвига параметров» в коде):

Почему проблема воспроизводится локально на определенных складах?

Проанализируем ситуацию, когда замена склада в документе временно решает проблему, а возврат на исходный склад снова вызывает ошибку. Это происходит из-за зависимости алгоритмов проведения от аналитики конкретного склада:

1. Наличие отрицательных остатков (минусов)
Если на одном складе комплектующие есть в наличии в достаточном количестве, алгоритм успешно находит партии списания, вычисляет стоимость и корректно проводит документ. Если же на проблемном складе разрешено списание в минус и фактический остаток комплектующих отрицательный или равен нулю, алгоритм расчета себестоимости не находит данных в базе. В коде «1С-Рарус» не предусмотрена адекватная обработка такой исключительной ситуации, что приводит к некорректной работе математического алгоритма распределения сумм и количеств.

2. Различия в типах складов и магазинов
В «1С:Розница» проведение документов по розничным и оптовым складам регулируется разными ветками кода. На розничных складах учет может вестись в розничных ценах (с наценкой), в то время как на оптовых — по себестоимости. Баг в коде Раруса затрагивает именно ту ветку, которая отвечает за конкретный тип склада (например, розничный магазин с автономным учетом).

Последствия отключения расчета себестоимости («костыльное» решение)

Некоторые специалисты, столкнувшись с этой проблемой и не имея времени на детальную отладку, идут по пути наименьшего сопротивления: они просто комментируют строки кода, отвечающие за расчет себестоимости в документе комплектации. Рассмотрим подробнее, к каким катастрофическим последствиям для бизнеса это приводит:

  1. Нулевая себестоимость готовых комплектов: Документ проведется корректно по количеству, но стоимость комплекта будет равна нулю. При его последующей продаже в отчете «Оценка валовой прибыли» система покажет 100% рентабельность, что исказит реальную финансовую картину предприятия.
  2. Накопление ошибок в партионном учете: Поскольку комплект оприходован с нулевой стоимостью, при его списании или перемещении на другие склады система не сможет списать его стоимость, что приведет к «зависанию» суммовых остатков на регистрах при отсутствии количественных.

Поэтому комментирование кода — это опасный шаг, который в будущем потребует сложного и дорогостоящего восстановления последовательности партионного учета.

Разбираем правильные способы решения проблемы

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

Способ 1. Использование механизма расширений (рекомендуется)

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

Во-первых, запустим отладчик и установим точку останова в общем модуле расчета себестоимости «1С-Рарус». Нам необходимо отследить момент формирования движений документа КомплектацияНоменклатуры по регистру накопления (например, Рарус_ПартииТоваров или аналогичному отраслевому регистру).

Во-вторых, найдем строку, где происходит запись в набор движений. Код обычно выглядит следующим образом:


Движение = Движения.Рарус_ПартииТоваров.Добавить();
Движение.Период = Дата;
Движение.Количество = ?(УсловиеКоличества, СтоимостьСписания, Выборка.Количество); // Пример ошибочного кода
Движение.Стоимость = СтоимостьСписания;

В-третьих, создадим расширение конфигурации и добавим в него ошибочную процедуру с аннотацией &Вместо или &ИзменениеИВыборка. Пример корректного переопределения записи движений в расширении:


&Вместо("СформироватьДвиженияКомплектации")
Процедура Расш1_СформироватьДвиженияКомплектации(ДокументСсылка, Отказ)
    // Вызываем оригинальный расчет, но перехватываем параметры
    // Либо полностью замещаем логику с исправлением путаницы переменных:
    
    // Код исправления: гарантируем, что в Количество попадает именно количественный показатель
    Движение.Количество = Выборка.КоличествоОборот; 
    Движение.Стоимость = ?(Выборка.СуммаОборот = Неопределено, 0, Выборка.СуммаОборот);
КонецПроцедуры

Способ 2. Установка официального обновления конфигурации

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

Проанализируйте историю изменений (Changelog) к последним релизам «1С-Рарус: Розница». Если в списке исправленных ошибок присутствует исправление проведения комплектации, лучшим решением будет обновление системы до актуального релиза. Это позволит избежать написания собственного кода и гарантирует стабильность всей системы.

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

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

Выполните следующие действия:

  1. Откройте отчет «Ведомость по товарам на складах» с детализацией по регистратору и найдите комплектующие, которые списываются документом «Комплектация номенклатуры».
  2. Убедитесь, что на момент проведения документа на складе зафиксирован положительный остаток по всем позициям.
  3. Если обнаружены отрицательные остатки, оформите документы поступления (или оприходования) товаров до момента проведения комплектации.
  4. В настройках параметров учета временно (или на постоянной основе) отключите опцию «Разрешить списание при отсутствии остатков».

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

← На главную