Многие технические специалисты и бухгалтеры, работающие в конфигурации 1С:Розница 2.2 (и более поздних редакциях), сталкиваются с неприятной ситуацией: в отчетах по валовой прибыли или остаткам себестоимость товара отображается нулевой или «красной». При этом складские документы (поступления, перемещения) проведены, остатки на складах верны, а взаиморасчеты с контрагентами отражены корректно. Однако специфический регистр СебестоимостьПоставкиТоваров остается пустым, из-за чего регламентный документ РасчетИУстановкаСебестоимости не видит данных для работы. Рассмотрим подробнее, почему это происходит и как исправить ситуацию системно.
В «1С:Розница» процесс формирования себестоимости разделен на два этапа. Сначала первичные документы (такие как ПоступлениеТоваров или ПеремещениеТоваров) делают записи в регистр сведений СебестоимостьПоставкиТоваров. Затем, обычно по расписанию, запускается регламентное задание, которое создает документ РасчетИУстановкаСебестоимости. Этот документ анализирует накопленные данные и формирует окончательные движения в регистре накопления СебестоимостьТоваров, который и используется в аналитических отчетах.
Проанализируем ситуацию: если на первом этапе первичный документ по какой-то причине не сделал запись в регистр сведений, второй этап (регламентный расчет) просто проигнорирует эти позиции номенклатуры. Выясним, какие факторы мешают формированию первичных записей.
Как показывает практика и анализ механизмов платформы, основной причиной «хаотичного» отсутствия движений является работа в распределенной информационной базе (РИБ). Разберем по шагам, что происходит при обмене:
ОбменДанными.Загрузка = Истина.В режиме Загрузка = Истина платформа 1С отключает стандартные обработчики проведения, чтобы ускорить процесс и предотвратить конфликты данных. Разработчики конфигурации часто выносят логику заполнения регистра СебестоимостьПоставкиТоваров в обработчики, которые в этом режиме могут игнорироваться. В результате документ в центральной базе оказывается в статусе «Проведен», но его движения по себестоимости отсутствуют. Перепроведение документа вручную принудительно запускает логику, и записи появляются.
Посмотрим на ситуацию со стороны складского учета. Документ РасчетИУстановкаСебестоимости крайне чувствителен к хронологии. Если на момент его формирования по товару числится отрицательный остаток (даже кратковременно внутри дня), система может не рассчитать себестоимость.
Рассмотрим понятие точки актуальности (ТА). В современных конфигурациях при проведении документов запросы к остаткам часто делаются на текущий момент без учета оперативной отметки времени. Если документ поставки был введен «задним числом» или его время в пределах секунды оказалось позже документа реализации, возникший «минус» заблокирует корректный расчет.
Если документов много, ручное перепроведение становится невозможным. Рассмотрим, как автоматизировать процесс восстановления движений. Мы можем создать небольшую обработку или регламентное задание, которое будет находить документы с «пустой» себестоимостью и перепроводить их программно. Проанализируем пример кода для поиска таких документов:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПоступлениеТоваров.Ссылка КАК Ссылка
|ИЗ
| Документ.ПоступлениеТоваров КАК ПоступлениеТоваров
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СебестоимостьПоставкиТоваров КАК Себестоимость
| ПО ПоступлениеТоваров.Ссылка = Себестоимость.Регистратор
|ГДЕ
| ПоступлениеТоваров.Проведен = ИСТИНА
| И ПоступлениеТоваров.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
| И Себестоимость.Регистратор ЕСТЬ NULL";
Запрос.УстановитьПараметр("ДатаНачала", НачалоМесяца(ТекущаяДата()));
Запрос.УстановитьПараметр("ДатаОкончания", КонецДня(ТекущаяДата()));
Результат = Запрос.Выполнить().Выгрузить();
Для Каждого Строка Из Результат Цикл
ОбъектДок = Строка.Ссылка.ПолучитьОбъект();
Попытка
ОбъектДок.Записать(РежимЗаписиДокумента.Проведение);
Сообщить("Документ " + Строка.Ссылка + " успешно перепроведен.");
Исключение
Сообщить("Ошибка проведения: " + ОписаниеОшибки());
КонецПопытки;
КонецЦикла;
Данный подход позволяет восстановить записи в регистре СебестоимостьПоставкиТоваров, после чего типовой расчет себестоимости отработает корректно.
Выясним еще одну причину: отсутствие цен. Часто в документах ПеремещениеТоваров между магазинами или складами внутри одной организации пользователи не указывают цену, полагая, что система «сама разберется». Однако, если в настройках не включено автоматическое заполнение цен по виду цен, запись в регистр поставки может не создаться из-за нулевого значения суммы.
Важный момент: проверьте, заполнены ли цены в табличных частях документов. Если цена равна нулю, документ РасчетИУстановкаСебестоимости не сможет распределить на этот товар дополнительные расходы (например, логистику), и себестоимость останется неопределенной.
Для минимизации подобных сбоев в будущем, рекомендуем выполнить следующие действия:
ПриУстановкеПометкиУдаления или аналогичных обработчиках обмена) будет сбрасывать флаг Загрузка для определенных типов документов, чтобы движения формировались сразу. Но будьте осторожны: это может замедлить обмен.Настройки номенклатуры выбран корректный Способ оценки стоимости товаров (Средняя взвешенная или упрощенный автономный учет для магазинов).Таким образом, мы выяснили, что основная проблема кроется в технологических особенностях обмена РИБ. Использование программного перепроведения и контроль чистоты данных по отрицательным остаткам позволяют полностью устранить «красноту» в отчетах и обеспечить бухгалтерию достоверными данными о прибыли.