Почему не рассчитывается себестоимость товаров в 1С:Розница 2.2 и как решить проблему пустых регистров?

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

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

Разбор механизма расчета себестоимости

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

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

Причина 1: Влияние РИБ и режим загрузки данных

Как показывает практика и анализ механизмов платформы, основной причиной «хаотичного» отсутствия движений является работа в распределенной информационной базе (РИБ). Разберем по шагам, что происходит при обмене:

  1. Документ создается и проводится в периферийном узле (магазине). Там он формирует все необходимые движения.
  2. При синхронизации документ передается в центральную базу (ЦБ).
  3. Во время загрузки в ЦБ срабатывает программный механизм ОбменДанными.Загрузка = Истина.

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

Причина 2: Отрицательные остатки и точка актуальности

Посмотрим на ситуацию со стороны складского учета. Документ РасчетИУстановкаСебестоимости крайне чувствителен к хронологии. Если на момент его формирования по товару числится отрицательный остаток (даже кратковременно внутри дня), система может не рассчитать себестоимость.

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

Решение проблемы через автоматизацию перепроведения

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


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |	ПоступлениеТоваров.Ссылка КАК Ссылка
    |ИЗ
    |	Документ.ПоступлениеТоваров КАК ПоступлениеТоваров
    |	ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СебестоимостьПоставкиТоваров КАК Себестоимость
    |	ПО ПоступлениеТоваров.Ссылка = Себестоимость.Регистратор
    |ГДЕ
    |	ПоступлениеТоваров.Проведен = ИСТИНА
    |	И ПоступлениеТоваров.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
    |	И Себестоимость.Регистратор ЕСТЬ NULL";

Запрос.УстановитьПараметр("ДатаНачала", НачалоМесяца(ТекущаяДата()));
Запрос.УстановитьПараметр("ДатаОкончания", КонецДня(ТекущаяДата()));

Результат = Запрос.Выполнить().Выгрузить();
Для Каждого Строка Из Результат Цикл
    ОбъектДок = Строка.Ссылка.ПолучитьОбъект();
    Попытка
        ОбъектДок.Записать(РежимЗаписиДокумента.Проведение);
        Сообщить("Документ " + Строка.Ссылка + " успешно перепроведен.");
    Исключение
        Сообщить("Ошибка проведения: " + ОписаниеОшибки());
    КонецПопытки;
КонецЦикла;

Данный подход позволяет восстановить записи в регистре СебестоимостьПоставкиТоваров, после чего типовой расчет себестоимости отработает корректно.

Причина 3: Нулевые цены в документах перемещения

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

Важный момент: проверьте, заполнены ли цены в табличных частях документов. Если цена равна нулю, документ РасчетИУстановкаСебестоимости не сможет распределить на этот товар дополнительные расходы (например, логистику), и себестоимость останется неопределенной.

Рекомендации по настройке системы

Для минимизации подобных сбоев в будущем, рекомендуем выполнить следующие действия:

  1. Сдвиг расписания: Настройте запуск регламентного задания «Расчет и установка себестоимости» с временным лагом в 30-60 минут после завершения обмена данными с периферийными узлами. Это даст время всем данным «улечься» в базе.
  2. Контроль отрицательных остатков: Проанализируйте отчет «Остатки товаров» на наличие отрицательных значений. Если в системе разрешено списание в минус, себестоимость всегда будет иметь погрешности.
  3. Использование расширений: Можно написать небольшое расширение, которое при загрузке данных (в процедуре ПриУстановкеПометкиУдаления или аналогичных обработчиках обмена) будет сбрасывать флаг Загрузка для определенных типов документов, чтобы движения формировались сразу. Но будьте осторожны: это может замедлить обмен.
  4. Проверка настроек маркетинга: Убедитесь, что в разделе Настройки номенклатуры выбран корректный Способ оценки стоимости товаров (Средняя взвешенная или упрощенный автономный учет для магазинов).

Таким образом, мы выяснили, что основная проблема кроется в технологических особенностях обмена РИБ. Использование программного перепроведения и контроль чистоты данных по отрицательным остаткам позволяют полностью устранить «красноту» в отчетах и обеспечить бухгалтерию достоверными данными о прибыли.

← На главную