Как реализовать партионный учет и изменить расчет себестоимости в 1С:Розница 2.3?

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

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

Анализ типового механизма и почему он не устраивает бизнес

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

Бизнесу нужно видеть прибыль сразу после продажи чека. Это возможно только при использовании партионного учета, когда каждая единица товара «знает», по какому документу поступления она пришла и какова её входящая цена.

Проектирование партионного учета через расширение

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

  1. Создадим новый РегистрНакопления с именем ПартииТоваровНаСкладах (вид — Остатки).
  2. В измерениях укажем: Номенклатура, Склад, Характеристика и, самое главное, Партия (тип данных — ДокументСсылка.ПоступлениеТоваров, ДокументСсылка.ПеремещениеТоваров и др.).
  3. В ресурсах добавим: Количество и Стоимость.

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

Реализация логики списания по FIFO

Разберем по шагам, как реализовать алгоритм списания партий при продаже. Нам нужно в модуле менеджера или в обработке проведения документа через расширение (метод ПередЗаписью или ПриПроведении) внедрить запрос к нашему новому регистру.

Проанализируем пример логики запроса для получения остатков по партиям в хронологическом порядке:


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

Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
Запрос.УстановитьПараметр("Номенклатура", ТекущаяСтрока.Номенклатура);
Запрос.УстановитьПараметр("Склад", Склад);

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

Обработка сложных ситуаций: Отрицательные остатки и Возвраты

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

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

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

Интеграция с отчетами и оптимизация производительности

После того как регистр наполнен данными, нужно создать отчет «Оценка склада в ценах закупки (FIFO)». Мы можем использовать схему компоновки данных (СКД), обращаясь к виртуальной таблице ПартииТоваровНаСкладах.Остатки. Это даст владельцу возможность в любой момент увидеть реальную стоимость товарного остатка.

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

  1. Фоновое проведение: При записи чека данные пишутся в промежуточную таблицу, а отдельное регламентное задание раз в несколько минут распределяет их по партиям.
  2. Упрощенный учет в течение дня: Списание партий происходит только при закрытии смены или раз в сутки.

Стоит ли игра свеч?

Подведем итог. Перепилить расчет себестоимости в «1С:Розница 2.3» под стандарт 7.7/10.3 вполне реально. Это требует создания одного регистра накопления, написания алгоритмов списания в расширении и разработки системы контроля последовательности документов.

Плюсы решения:

Риски:

Если ваши владельцы бизнеса категорически не хотят переходить на Управление торговлей, внедрение собственного партионного учета через расширение — это самый эффективный путь развития системы 1С:Розница.

← На главную