Как связать расходные и приходные накладные в «1С:Розница»: реализуем партионный учет

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

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

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

Вариант 1. Виртуальный партионный учет (Алгоритм обратного распределения по ФИФО)

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

Давайте разберем логику работы этого алгоритма по шагам:

  1. Определение периода анализа: Мы выбираем период, за который необходимо построить отчет по продажам.
  2. Сбор данных по приходам: Программа собирает все документы поступления товаров (ПоступлениеТоваров) по выбранной номенклатуре за весь период ведения учета, отсортированные по дате в хронологическом порядке.
  3. Сбор данных по продажам: Собираются все документы расхода (РеализацияТоваровУслуг, ЧекККМ, ОтчетОРозничныхПродажах).
  4. Распределение по методу ФИФО (Первый пришел — первый ушел): Мы последовательно сопоставляем каждую проданную единицу товара с самым старым доступным поступлением, у которого еще остался нераспределенный остаток.

Проанализируем пример реализации такого алгоритма на встроенном языке 1С. Ниже представлен фрагмент кода, выполняющий виртуальное распределение партий:


Процедура РаспределитьПродажиПоПоступлениям(ТаблицаПродаж, ТаблицаПоступлений) Экспорт

    // ТаблицаПродаж должна содержать колонки: Номенклатура, Количество, ДокументПродажи
    // ТаблицаПоступлений должна содержать: Номенклатура, Количество, ДокументПоступления, Цена
    
    ТаблицаСвязи = Новый ТаблицаЗначений;
    ТаблицаСвязи.Колонки.Добавить("Номенклатура");
    ТаблицаСвязи.Колонки.Добавить("ДокументПродажи");
    ТаблицаСвязи.Колонки.Добавить("ДокументПоступления");
    ТаблицаСвязи.Колонки.Добавить("Количество");
    ТаблицаСвязи.Колонки.Добавить("ЦенаПоступления");

    Для Каждого СтрокаПродажи Из ТаблицаПродаж Цикл
        
        ОсталосьРаспределить = СтрокаПродажи.Количество;
        
        // Находим поступления по данной номенклатуре, где еще есть остаток
        ПараметрыОтбора = Новый Структура("Номенклатура", СтрокаПродажи.Номенклатура);
        СтрокиПриходов = ТаблицаПоступлений.НайтиСтроки(ПараметрыОтбора);
        
        Для Каждого СтрокаПрихода Из СтрокиПриходов Цикл
            
            ДоступноВПриходе = СтрокаПрихода.Количество;
            Если ДоступноВПриходе = 0 Тогда
                Продолжить;
            КонецЕсли;
            
            Распределяем = Мин(ОсталосьРаспределить, ДоступноВПриходе);
            
            // Фиксируем связь в результирующей таблице
            НоваяСвязь = ТаблицаСвязи.Добавить();
            ЗаполнитьЗначенияСвойств(НоваяСвязь, СтрокаПродажи);
            НоваяСвязь.ДокументПоступления = СтрокаПрихода.ДокументПоступления;
            НоваяСвязь.Количество = Распределяем;
            НоваяСвязь.ЦенаПоступления = СтрокаПрихода.Цена;
            
            // Уменьшаем доступный остаток в партии прихода и остаток к распределению
            СтрокаПрихода.Количество = ДоступноВПриходе - Распределяем;
            ОсталосьРаспределить = ОсталосьРаспределить - Распределяем;
            
            Если ОсталосьРаспределить = 0 Тогда
                Прервать;
            КонецЕсли;
            
        КонецЦикла;
        
    КонецЦикла;
    
    // Результат можно вывести в отчет или записать в специальный регистр
КонецПроцедуры

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

Вариант 2. Использование характеристик номенклатуры в качестве партий

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

Выясним, как настроить этот процесс по шагам:

  1. В настройках параметров учета программы включаем использование характеристик номенклатуры.
  2. Для каждого вида номенклатуры, где требуется партионный учет, создаем свойство характеристики, например, «Партия (Поступление)».
  3. При оформлении документа ПоступлениеТоваров для каждой товарной позиции создается новая характеристика. В наименовании характеристики указывается номер и дата приходной накладной (например, «Партия №15 от 12.10.2023»).
  4. При продаже товара в документах РеализацияТоваровУслуг или в интерфейсе кассира (РМК) выбирается именно эта конкретная характеристика.

Плюсы данного метода:

Минусы и сложности:

Вариант 3. Использование серийного учета

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

Рассмотрим, как настроить учет партий через серии в «1С:Розница»:

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

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

Вариант 4. Кардинальное решение — переход на «1С:Розница 3.0»

Если вы только планируете автоматизацию или находитесь на этапе выбора программного продукта, обратите внимание на новую редакцию программы — «1С:Розница 3.0».

Эта редакция разработана на единой архитектурной платформе с решением «1С:Управление нашей фирмой» (УНФ). Это означает, что в «1С:Розница 3.0» полноценный партионный учет теперь реализован на уровне платформы и доступен «из коробки».

Для активации партионного учета в редакции 3.0 выполните следующие действия:

  1. Перейдите в раздел Настройки — Еще больше возможностей — Общее.
  2. Установите флажок Партии номенклатуры.
  3. В карточках товаров, для которых необходим детальный учет, включите признак Использовать партии.

При таком подходе при создании приходной накладной система автоматически или вручную сформирует партию. Все последующие списания (в том числе продажи через РМК) будут автоматически списывать партии по методу ФИФО или по средней стоимости в зависимости от настроек учетной политики. Все стандартные отчеты по запасам и продажам можно будет легко детализировать в разрезе партий (документов поступления) без привлечения программистов.

Вариант 5. Классическая схема автоматизации Front-Office + Back-Office

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

Классическим архитектурным решением является разделение контуров учета:

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

Такой подход позволяет сохранить высокую скорость обслуживания клиентов на местах и при этом получать абсолютно достоверную и детальную аналитику по партиям и рентабельности бизнеса в центральном офисе.

← На главную