Как в 1С:Розница 2 продавать товары по разным типам цен и автоматически подставлять их в документ "Реализация товаров" без отображения скидок?

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

Многие компании, использующие 1С:Розница 2, сталкиваются с необходимостью продажи товаров по разным типам цен. Например, обычным розничным покупателям товары отпускаются по одной цене, а оптовым клиентам или контрагентам, оформляющим покупки через документ "Реализация товаров", — по другой. При этом крайне важно, чтобы второй тип цены подставлялся как основная цена продажи, а не как цена со скидкой, которая может ввести в заблуждение или некорректно отображаться в документах.

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

Основы ценообразования в 1С:Розница 2: Виды цен и Правила ценообразования

Прежде чем углубляться в детали, давайте разберемся с ключевыми понятиями ценообразования в 1С:Розница 2. В системе существуют Виды цен (или Типы цен), которые позволяют задавать различные ценовые уровни для номенклатуры, например, "Розничная", "Оптовая", "Мелкооптовая" и т.д. Для каждого вида цен мы можем определить свой метод расчета: вручную, по формуле, процентом от другого вида цен и так далее.

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

Наша цель — обеспечить, чтобы для обычных покупателей в РМК использовался Тип цен №1 (например, "Розничная"), а для контрагентов в документе "Реализация товаров" — Тип цен №2 (например, "Оптовая"), причем без визуального отображения скидки.

Ручной выбор типа цен в документе "Реализация товаров"

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

  1. Откройте документ "Реализация товаров", который вы оформляете для контрагента.
  2. После заполнения табличной части товарами, обратите внимание на панель кнопок над табличной частью. Здесь вы найдете кнопку, обычно называемую "Цены" или "Изменить цены".
  3. Нажмите на эту кнопку. В открывшемся меню или форме вы увидите команду "По виду цен".
  4. Выберите команду "По виду цен". Откроется небольшое диалоговое окно, в котором вам будет предложен список доступных видов цен, которые настроены в вашей системе и помечены как используемые для продаж.
  5. Выберите необходимый Тип цен №2 (например, "Оптовая") из списка и подтвердите выбор.

После этого система автоматически пересчитает цены для всех позиций в табличной части документа в соответствии с выбранным видом цен. Важный момент: при таком способе цены устанавливаются напрямую по выбранному типу, и система не отображает их как "цену со скидкой". Это именно то, что нам требовалось – прямая подстановка второго типа цены в поле Цена.

Автоматическое подставление типа цен в документе "Реализация товаров": Стандартные механизмы и доработки

Ручной выбор удобен для разовых операций, но если вы регулярно оформляете реализации по Типу цен №2 для определенных контрагентов, возникает потребность в автоматизации. В отличие от конфигураций 1С:Управление торговлей или 1С:Бухгалтерия предприятия, где мы можем указать вид цен по умолчанию в договоре контрагента, в типовой 1С:Розница 2 прямого аналогичного механизма нет.

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

Использование "Правил ценообразования" и "Дополнительных видов цен" как отправной точки для доработки

Как мы уже упоминали, у каждого магазина есть свое Правило ценообразования, которое определяет основной вид цен. Также в правиле ценообразования можно указать Дополнительные виды цен. Мы можем разработать механизм, который будет обращаться к этому списку дополнительных видов цен при заполнении документа "Реализация товаров".

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

Это может выглядеть следующим образом:

  1. Выбираем Магазин в документе Реализация товаров.
  2. Система определяет Правило ценообразования этого магазина.
  3. Из Дополнительных видов цен, указанных в этом правиле, выбирается нужный (например, первый, или тот, который соответствует неким условиям).
  4. Выбранный вид цен автоматически применяется к товарам в табличной части.

Реализация такого подхода потребует изменения логики в модуле объекта документа Реализация товаров.

Возможные доработки для автоматизации

Для полной автоматизации подстановки Типа цен №2 в документ "Реализация товаров" для контрагентов, нам потребуется внести изменения в конфигурацию. Рассмотрим несколько подходов:

1. Привязка типа цен к контрагенту или его договору:

Это один из наиболее логичных и часто используемых подходов в других конфигурациях 1С. Хотя в Рознице это не реализовано по умолчанию, мы можем добавить необходимый функционал.

  1. Добавление реквизита: Мы можем добавить новый реквизит (например, ОсновнойВидЦенДляРеализации) в справочник Справочник.Контрагенты или в документ Документ.ДоговорКонтрагента. Тип этого реквизита должен быть СправочникСсылка.ВидыЦен.
  2. Настройка заполнения: В обработчике события, например, ПриИзмененииКонтрагента() или ПриИзмененииДоговораКонтрагента() в модуле объекта документа Реализация товаров, мы можем прописать логику считывания этого реквизита и автоматического применения соответствующего вида цен к товарам в табличной части.

Вот пример псевдокода, демонстрирующий концепцию:


// В модуле объекта документа РеализацияТоваров или в форме документа
Процедура ПриИзмененииКонтрагента()
    Если Не ЗначениеЗаполнено(Объект.Контрагент) Тогда
        Возврат;
    КонецЕсли;

    // Предполагаем, что реквизит "ВидЦеныДляРеализации" добавлен в справочник Контрагенты
    ПереопределенныйВидЦены = Объект.Контрагент.ВидЦеныДляРеализации;

    Если ЗначениеЗаполнено(ПереопределенныйВидЦены) Тогда
        // Вызываем функцию для установки цен в табличной части
        // Эта функция должна быть реализована отдельно, возможно, 
        // через вызов серверной процедуры или используя стандартный функционал
        // заполнения цен (как при нажатии кнопки "Цены -> По виду цен").
        УстановитьВидЦенВТабличнойЧастиДокумента(ПереопределенныйВидЦены);
    Иначе
        // Если у контрагента не указан специальный вид цен,
        // можно использовать вид цен по умолчанию для магазина или ничего не делать.
        УстановитьВидЦенВТабличнойЧастиДокумента(ПолучитьОсновнойВидЦенМагазина());
    КонецЕсли;
КонецПроцедура

// Пример реализации процедуры установки цен (серверная процедура)
Процедура УстановитьВидЦенВТабличнойЧастиДокумента(ВидЦеныДляРасчета)
    Если Не ЗначениеЗаполнено(ВидЦеныДляРасчета) Тогда
        Возврат;
    КонецЕсли;

    // Временная таблица для хранения номенклатуры и ее характеристик
    ТаблицаДляРасчетаЦен = Новый ТаблицаЗначений;
    ТаблицаДляРасчетаЦен.Колонки.Добавить("Номенклатура");
    ТаблицаДляРасчетаЦен.Колонки.Добавить("Характеристика");
    ТаблицаДляРасчетаЦен.Колонки.Добавить("Упаковка");
    ТаблицаДляРасчетаЦен.Колонки.Добавить("СтрокаТабличнойЧасти");

    Для Каждого СтрокаТЧ Из Объект.Товары Цикл
        НоваяСтрока = ТаблицаДляРасчетаЦен.Добавить();
        НоваяСтрока.Номенклатура = СтрокаТЧ.Номенклатура;
        НоваяСтрока.Характеристика = СтрокаТЧ.Характеристика;
        НоваяСтрока.Упаковка = СтрокаТЧ.Упаковка;
        НоваяСтрока.СтрокаТабличнойЧасти = СтрокаТЧ;
    КонецЦикла;

    // Получаем цены для всей номенклатуры по выбранному виду цен
    // Используем стандартные механизмы получения цен из библиотеки
    // стандартных подсистем или специфичные для Розницы.
    МассивНоменклатуры = ТаблицаДляРасчетаЦен.ВыгрузитьКолонку("Номенклатура");
    МассивХарактеристик = ТаблицаДляРасчетаЦен.ВыгрузитьКолонку("Характеристика");

    Параметры = Новый Структура;
    Параметры.Вставить("Дата", Объект.Дата);
    Параметры.Вставить("ВидЦен", ВидЦеныДляРасчета);
    Параметры.Вставить("Номенклатура", МассивНоменклатуры);
    Параметры.Вставить("Характеристика", МассивХарактеристик);
    // Дополнительные параметры, если нужны (например, для соглашений)

    // Функция, возвращающая цены (примерный вызов)
    ТаблицаЦен = Цены.ПолучитьЦеныНоменклатуры(Параметры); 

    Для Каждого СтрокаТЧ Из Объект.Товары Цикл
        // Находим цену в ТаблицаЦен
        НайденаяЦена = ТаблицаЦен.Найти(СтрокаТЧ.Номенклатура, "Номенклатура"); // Уточнить поиск по характеристикам
        
        Если НайденаяЦена <> Неопределено Тогда
            СтрокаТЧ.Цена = НайденаяЦена.Цена;
            СтрокаТЧ.Сумма = СтрокаТЧ.Цена * СтрокаТЧ.Количество;
            // И так далее для других полей, например, НДС
        КонецЕсли;
    КонецЦикла;
КонецПроцедура

Обратите внимание, что при изменении цены обязательно следует также пересчитывать сумму строки (СтрокаТЧ.Сумма) и, возможно, другие зависимые поля, такие как НДС.

2. Использование механизма "Соглашений с клиентами" (для более новых версий 1С:Розница):

В некоторых версиях 1С:Розница 2 функционал Соглашений с клиентами может быть более развит. Если в вашей версии присутствуют Соглашения с клиентами, их можно расширить, добавив в них реквизит для указания вида цен по умолчанию для реализаций. Тогда при выборе Контрагента и Соглашения в документе Реализация товаров, система сможет автоматически подтягивать вид цен из выбранного соглашения.

  1. Расширение Соглашения: Добавьте реквизит ВидЦенПоУмолчанию (тип СправочникСсылка.ВидыЦен) в объект Справочник.СоглашенияСКлиентами.
  2. Логика заполнения: В модуле объекта или форме документа Реализация товаров, при изменении полей Контрагент или Соглашение, проверяйте наличие вида цен в выбранном соглашении и, если он заполнен, применяйте его к табличной части аналогично предыдущему пункту.

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

3. Переопределение стандартного поведения подбора цен:

При добавлении номенклатуры в документ Реализация товаров (например, через кнопку "Подбор") цены также подставляются. Можно изменить этот алгоритм подбора, чтобы он учитывал не только основной тип цен магазина, но и другие условия – наличие контрагента, его договора или соглашения. Это может быть реализовано путем изменения процедуры, отвечающей за подбор цен при добавлении новой строки в табличную часть.

Такая доработка потребует более глубокого анализа кода подсистемы ценообразования в 1С:Розница 2 и может затронуть несколько мест в конфигурации.

Продажа без отображения скидок

Один из ключевых запросов автора темы был о том, чтобы цены не отображались как скидка. Все предложенные нами решения направлены именно на это.

Когда вы устанавливаете Тип цен №2 (например, "Оптовая") в документе "Реализация товаров" (будь то вручную через кнопку "Цены" или автоматически через доработку), система воспринимает эти цены как основные цены продажи для данного документа. Разница между Типом цен №1 (розничным) и Типом цен №2 (оптовым) в этом случае не интерпретируется как скидка, а просто как применение другого прайс-листа. Таким образом, в документе и печатных формах не будут фигурировать автоматически рассчитанные скидки, что полностью соответствует нашим требованиям.

Проблемы с отображением скидок, как упоминал автор (когда "выдает цену с первого типа, а второй тип ставит в цену со скидкой"), возникают при использовании механизма акций и скидок. Если вы используете акции, которые снижают цену Типа цен №1 до уровня Типа цен №2, тогда система корректно покажет эту разницу как скидку. Наша же задача — избежать такого поведения и сразу задать целевой тип цены как базовый.

Заключение

В 1С:Розница 2 можно эффективно управлять продажами по разным типам цен. Ручной выбор типа цен в документе "Реализация товаров" является стандартной возможностью и не требует доработок. Для автоматизации этого процесса для контрагентов необходимо будет внести изменения в конфигурацию. Мы рассмотрели несколько подходов к такой доработке, включая привязку типа цен к контрагенту или его соглашению, а также использование Правил ценообразования магазина. При правильной реализации этих подходов вы сможете обеспечить, что цены в документе "Реализация товаров" будут подставляться автоматически по требуемому типу цен, без нежелательного отображения в виде скидки.

← На главную