Многие компании, использующие 1С:Розница 2, сталкиваются с необходимостью продажи товаров по разным типам цен. Например, обычным розничным покупателям товары отпускаются по одной цене, а оптовым клиентам или контрагентам, оформляющим покупки через документ "Реализация товаров", — по другой. При этом крайне важно, чтобы второй тип цены подставлялся как основная цена продажи, а не как цена со скидкой, которая может ввести в заблуждение или некорректно отображаться в документах.
Рассмотрим, как можно решить эту задачу в конфигурации 1С:Розница 2, используя как стандартные возможности, так и возможные доработки.
Прежде чем углубляться в детали, давайте разберемся с ключевыми понятиями ценообразования в 1С:Розница 2. В системе существуют Виды цен (или Типы цен), которые позволяют задавать различные ценовые уровни для номенклатуры, например, "Розничная", "Оптовая", "Мелкооптовая" и т.д. Для каждого вида цен мы можем определить свой метод расчета: вручную, по формуле, процентом от другого вида цен и так далее.
Однако, основной механизм, который определяет, какая цена будет использоваться по умолчанию в конкретном магазине, это Правила ценообразования. Каждому магазину в системе можно сопоставить одно правило ценообразования. В этом правиле мы указываем Основной вид цен, который будет использоваться при розничных продажах, например, через Рабочее Место Кассира (РМК). Помимо основного вида цен, в правилах ценообразования можно также задать Дополнительные виды цен, к которым мы вернемся при рассмотрении автоматизации.
Наша цель — обеспечить, чтобы для обычных покупателей в РМК использовался Тип цен №1 (например, "Розничная"), а для контрагентов в документе "Реализация товаров" — Тип цен №2 (например, "Оптовая"), причем без визуального отображения скидки.
Если нам требуется гибкость и возможность вручную выбирать тип цены для каждой конкретной реализации, 1С:Розница 2 предоставляет такой функционал стандартными средствами. Давайте посмотрим, как это сделать:
После этого система автоматически пересчитает цены для всех позиций в табличной части документа в соответствии с выбранным видом цен. Важный момент: при таком способе цены устанавливаются напрямую по выбранному типу, и система не отображает их как "цену со скидкой". Это именно то, что нам требовалось – прямая подстановка второго типа цены в поле Цена.
Ручной выбор удобен для разовых операций, но если вы регулярно оформляете реализации по Типу цен №2 для определенных контрагентов, возникает потребность в автоматизации. В отличие от конфигураций 1С:Управление торговлей или 1С:Бухгалтерия предприятия, где мы можем указать вид цен по умолчанию в договоре контрагента, в типовой 1С:Розница 2 прямого аналогичного механизма нет.
Однако, мы можем использовать существующие механизмы как основу для доработки, которая позволит добиться автоматического подбора цен.
Как мы уже упоминали, у каждого магазина есть свое Правило ценообразования, которое определяет основной вид цен. Также в правиле ценообразования можно указать Дополнительные виды цен. Мы можем разработать механизм, который будет обращаться к этому списку дополнительных видов цен при заполнении документа "Реализация товаров".
Например, можно доработать документ так, чтобы при выборе контрагента (или даже магазина, если у вас несколько магазинов с разными оптовыми ценами) он автоматически подбирал один из дополнительных видов цен, указанных в правиле ценообразования для этого магазина, и применял его к табличной части.
Это может выглядеть следующим образом:
Магазин в документе Реализация товаров.Правило ценообразования этого магазина.Дополнительных видов цен, указанных в этом правиле, выбирается нужный (например, первый, или тот, который соответствует неким условиям).Реализация такого подхода потребует изменения логики в модуле объекта документа Реализация товаров.
Для полной автоматизации подстановки Типа цен №2 в документ "Реализация товаров" для контрагентов, нам потребуется внести изменения в конфигурацию. Рассмотрим несколько подходов:
1. Привязка типа цен к контрагенту или его договору:
Это один из наиболее логичных и часто используемых подходов в других конфигурациях 1С. Хотя в Рознице это не реализовано по умолчанию, мы можем добавить необходимый функционал.
ОсновнойВидЦенДляРеализации) в справочник Справочник.Контрагенты или в документ Документ.ДоговорКонтрагента. Тип этого реквизита должен быть СправочникСсылка.ВидыЦен.
ПриИзмененииКонтрагента() или ПриИзмененииДоговораКонтрагента() в модуле объекта документа Реализация товаров, мы можем прописать логику считывания этого реквизита и автоматического применения соответствующего вида цен к товарам в табличной части.
Вот пример псевдокода, демонстрирующий концепцию:
// В модуле объекта документа РеализацияТоваров или в форме документа
Процедура ПриИзмененииКонтрагента()
Если Не ЗначениеЗаполнено(Объект.Контрагент) Тогда
Возврат;
КонецЕсли;
// Предполагаем, что реквизит "ВидЦеныДляРеализации" добавлен в справочник Контрагенты
ПереопределенныйВидЦены = Объект.Контрагент.ВидЦеныДляРеализации;
Если ЗначениеЗаполнено(ПереопределенныйВидЦены) Тогда
// Вызываем функцию для установки цен в табличной части
// Эта функция должна быть реализована отдельно, возможно,
// через вызов серверной процедуры или используя стандартный функционал
// заполнения цен (как при нажатии кнопки "Цены -> По виду цен").
УстановитьВидЦенВТабличнойЧастиДокумента(ПереопределенныйВидЦены);
Иначе
// Если у контрагента не указан специальный вид цен,
// можно использовать вид цен по умолчанию для магазина или ничего не делать.
УстановитьВидЦенВТабличнойЧастиДокумента(ПолучитьОсновнойВидЦенМагазина());
КонецЕсли;
КонецПроцедура
// Пример реализации процедуры установки цен (серверная процедура)
Процедура УстановитьВидЦенВТабличнойЧастиДокумента(ВидЦеныДляРасчета)
Если Не ЗначениеЗаполнено(ВидЦеныДляРасчета) Тогда
Возврат;
КонецЕсли;
// Временная таблица для хранения номенклатуры и ее характеристик
ТаблицаДляРасчетаЦен = Новый ТаблицаЗначений;
ТаблицаДляРасчетаЦен.Колонки.Добавить("Номенклатура");
ТаблицаДляРасчетаЦен.Колонки.Добавить("Характеристика");
ТаблицаДляРасчетаЦен.Колонки.Добавить("Упаковка");
ТаблицаДляРасчетаЦен.Колонки.Добавить("СтрокаТабличнойЧасти");
Для Каждого СтрокаТЧ Из Объект.Товары Цикл
НоваяСтрока = ТаблицаДляРасчетаЦен.Добавить();
НоваяСтрока.Номенклатура = СтрокаТЧ.Номенклатура;
НоваяСтрока.Характеристика = СтрокаТЧ.Характеристика;
НоваяСтрока.Упаковка = СтрокаТЧ.Упаковка;
НоваяСтрока.СтрокаТабличнойЧасти = СтрокаТЧ;
КонецЦикла;
// Получаем цены для всей номенклатуры по выбранному виду цен
// Используем стандартные механизмы получения цен из библиотеки
// стандартных подсистем или специфичные для Розницы.
МассивНоменклатуры = ТаблицаДляРасчетаЦен.ВыгрузитьКолонку("Номенклатура");
МассивХарактеристик = ТаблицаДляРасчетаЦен.ВыгрузитьКолонку("Характеристика");
Параметры = Новый Структура;
Параметры.Вставить("Дата", Объект.Дата);
Параметры.Вставить("ВидЦен", ВидЦеныДляРасчета);
Параметры.Вставить("Номенклатура", МассивНоменклатуры);
Параметры.Вставить("Характеристика", МассивХарактеристик);
// Дополнительные параметры, если нужны (например, для соглашений)
// Функция, возвращающая цены (примерный вызов)
ТаблицаЦен = Цены.ПолучитьЦеныНоменклатуры(Параметры);
Для Каждого СтрокаТЧ Из Объект.Товары Цикл
// Находим цену в ТаблицаЦен
НайденаяЦена = ТаблицаЦен.Найти(СтрокаТЧ.Номенклатура, "Номенклатура"); // Уточнить поиск по характеристикам
Если НайденаяЦена <> Неопределено Тогда
СтрокаТЧ.Цена = НайденаяЦена.Цена;
СтрокаТЧ.Сумма = СтрокаТЧ.Цена * СтрокаТЧ.Количество;
// И так далее для других полей, например, НДС
КонецЕсли;
КонецЦикла;
КонецПроцедура
Обратите внимание, что при изменении цены обязательно следует также пересчитывать сумму строки (СтрокаТЧ.Сумма) и, возможно, другие зависимые поля, такие как НДС.
2. Использование механизма "Соглашений с клиентами" (для более новых версий 1С:Розница):
В некоторых версиях 1С:Розница 2 функционал Соглашений с клиентами может быть более развит. Если в вашей версии присутствуют Соглашения с клиентами, их можно расширить, добавив в них реквизит для указания вида цен по умолчанию для реализаций. Тогда при выборе Контрагента и Соглашения в документе Реализация товаров, система сможет автоматически подтягивать вид цен из выбранного соглашения.
ВидЦенПоУмолчанию (тип СправочникСсылка.ВидыЦен) в объект Справочник.СоглашенияСКлиентами.
Реализация товаров, при изменении полей Контрагент или Соглашение, проверяйте наличие вида цен в выбранном соглашении и, если он заполнен, применяйте его к табличной части аналогично предыдущему пункту.
Этот подход предпочтительнее, если он вписывается в вашу архитектуру и версию Розницы, так как Соглашения предоставляют более гибкую систему настроек взаимодействия с клиентами.
3. Переопределение стандартного поведения подбора цен:
При добавлении номенклатуры в документ Реализация товаров (например, через кнопку "Подбор") цены также подставляются. Можно изменить этот алгоритм подбора, чтобы он учитывал не только основной тип цен магазина, но и другие условия – наличие контрагента, его договора или соглашения. Это может быть реализовано путем изменения процедуры, отвечающей за подбор цен при добавлении новой строки в табличную часть.
Такая доработка потребует более глубокого анализа кода подсистемы ценообразования в 1С:Розница 2 и может затронуть несколько мест в конфигурации.
Один из ключевых запросов автора темы был о том, чтобы цены не отображались как скидка. Все предложенные нами решения направлены именно на это.
Когда вы устанавливаете Тип цен №2 (например, "Оптовая") в документе "Реализация товаров" (будь то вручную через кнопку "Цены" или автоматически через доработку), система воспринимает эти цены как основные цены продажи для данного документа. Разница между Типом цен №1 (розничным) и Типом цен №2 (оптовым) в этом случае не интерпретируется как скидка, а просто как применение другого прайс-листа. Таким образом, в документе и печатных формах не будут фигурировать автоматически рассчитанные скидки, что полностью соответствует нашим требованиям.
Проблемы с отображением скидок, как упоминал автор (когда "выдает цену с первого типа, а второй тип ставит в цену со скидкой"), возникают при использовании механизма акций и скидок. Если вы используете акции, которые снижают цену Типа цен №1 до уровня Типа цен №2, тогда система корректно покажет эту разницу как скидку. Наша же задача — избежать такого поведения и сразу задать целевой тип цены как базовый.
В 1С:Розница 2 можно эффективно управлять продажами по разным типам цен. Ручной выбор типа цен в документе "Реализация товаров" является стандартной возможностью и не требует доработок. Для автоматизации этого процесса для контрагентов необходимо будет внести изменения в конфигурацию. Мы рассмотрели несколько подходов к такой доработке, включая привязку типа цен к контрагенту или его соглашению, а также использование Правил ценообразования магазина. При правильной реализации этих подходов вы сможете обеспечить, что цены в документе "Реализация товаров" будут подставляться автоматически по требуемому типу цен, без нежелательного отображения в виде скидки.