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

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

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

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

Почему в типовой 1С:Розница 2 нельзя вести учет розничных цен по партиям?

Для начала проанализируем, как устроена подсистема ценообразования в типовом решении. В 1С:Розница 2 розничные цены регистрируются документом УстановкаЦенНоменклатуры и записываются в регистр сведений ЦеныНоменклатуры. Если мы откроем структуру этого регистра, то увидим следующие измерения:

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

Давайте рассмотрим три основных варианта решения этой проблемы, их плюсы, минусы и техническую реализацию.

---

Вариант №1. Использование механизма характеристик с автосозданием

Использование характеристик — это единственный штатный способ в 1С:Розница разделить один и тот же товар на несколько позиций с разными розничными ценами. Если мы сопоставим каждую «партию» с отдельной «характеристикой», система без доработок позволит вести раздельный складской учет и устанавливать разные цены. Однако ручной ввод характеристик для каждой поставки превратит работу оператора в кошмар. Решением является автоматизация процесса.

Разберем по шагам, как настроить автоматическое создание характеристик при проведении документа поступления:

  1. Включаем в настройках программы учет по характеристикам номенклатуры.
  2. Создаем для нужного вида номенклатуры индивидуальные характеристики.
  3. Пишем обработчик (или расширение), который при проведении документа ПоступлениеТоваров автоматически генерирует новую характеристику для каждой строки товара и подставляет её в документ. Наименованием характеристики может служить номер и дата партии (например, «Партия №123 от 15.08.2026»).
  4. Этим же обработчиком сразу создаем документ УстановкаЦенНоменклатуры, рассчитывая розничную цену на основании процента наценки от закупочной цены этой конкретной партии.

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


Функция АвтоматическиСоздатьХарактеристику(НоменклатураСсылка, ДокументПоступленияСсылка) Экспорт
    
    // Проверяем, включен ли учет по характеристикам для данного товара
    Если Не НоменклатураСсылка.ВидНоменклатуры.ИспользоватьХарактеристики Тогда
        Возврат Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка();
    КонецЕсли;
    
    // Формируем наименование новой характеристики-партии
    НаименованиеПартии = "Партия к док. № " + ДокументПоступленияСсылка.Номер + " от " + Формат(ДокументПоступленияСсылка.Дата, "ДФ=dd.MM.yyyy");
    
    // Ищем, не создана ли уже такая характеристика
    НайденнаяХарактеристика = Справочники.ХарактеристикиНоменклатуры.НайтиПоНаименованию(НаименованиеПартии, Истина, , НоменклатураСсылка);
    Если ЗначениеЗаполнено(НайденнаяХарактеристика) Тогда
        Возврат НайденнаяХарактеристика;
    КонецЕсли;
    
    // Создаем новый элемент справочника характеристик
    НовыйОбъект = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент();
    НовыйОбъект.Владелец = НоменклатураСсылка;
    НовыйОбъект.Наименование = НаименованиеПартии;
    
    Попытка
        НовыйОбъект.Записать();
        Возврат НовыйОбъект.Ссылка;
    Исключение
        ЗаписьЖурналаРегистрации("АвтосозданиеХарактеристик", УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки());
        Возврат Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка();
    КонецПопытки;

КонецФункции

Преимущества метода:

Недостатки метода:

---

Вариант №2. Разработка расширения для учета цен по партиям без характеристик

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

Проанализируем структуру необходимых доработок:

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

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


ВЫБРАТЬ
    ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
    ТоварыНаСкладахОстатки.Партия КАК Партия,
    ТоварыНаСкладахОстатки.ВНаличииОстаток КАК Остаток,
    ЦеныНоменклатурыСрезПоследних.Цена КАК РозничнаяЦена
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(&Период, Номенклатура = &Номенклатура) КАК ТоварыНаСкладахОстатки
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, Номенклатура = &Номенклатура) КАК ЦеныНоменклатурыСрезПоследних
        ПО ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
        И ТоварыНаСкладахОстатки.Партия = ЦеныНоменклатурыСрезПоследних.Партия
ГДЕ
    ТоварыНаСкладахОстатки.ВНаличииОстаток > 0

При таком подходе кассир при сканировании товара увидит удобное диалоговое окно со списком доступных цен и партий (например: «Остаток 5 шт. по цене 150 руб.» и «Остаток 10 шт. по цене 180 руб.») и сможет выбрать нужную позицию в зависимости от того, какой ценник наклеен на конкретную единицу товара.

Преимущества метода:

Недостатки метода:

---

Вариант №3. Переход на отраслевое решение «1С:Розница. Аптека»

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

Выясним, как решена эта проблема в отраслевом продукте:

Преимущества метода:

Недостатки метода:

---

Сравнительный анализ решений

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

Критерий сравнения Вариант 1 (Авто-характеристики) Вариант 2 (Расширение/Доработка) Вариант 3 (Отраслевая 1С:Аптека)
Затраты на разработку Минимальные (простой обработчик создания характеристик) Высокие (переписывание механизмов РМК и регистров цен) Отсутствуют (готовая коробка)
Сложность обновлений 1С Легко (конфигурация остается типовой) Сложно (требуется контроль кода РМК при каждом релизе) Легко (обновления выпускаются вендором)
Влияние на производительность Со временем может снизиться из-за роста справочника характеристик Незначительное (при правильном индексировании регистров) Оптимальное (архитектура изначально заточена под это)
Удобство для кассира Среднее (нужно выбирать правильную характеристику при продаже) Высокое (интерфейс кассира полностью адаптируется под ваши требования) Высокое (продуманный подбор серий)

---

Рекомендации по выбору решения

Подведем итоги нашего анализа. Выбор архитектурного решения зависит от масштаба вашего бизнеса и бюджета на автоматизацию:

← На главную