Перейти к содержанию

Формулы цен

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

Где искать: Модули → Цены → Регистры → Формулы цен

Регистр живёт в модуле Цены.

Разбор на примере

Карточка формулы RRP-10

Формула RRP-10 из демо-базы строит оптовые цены из розничных. Читается карточка так: взять базовое значение, умножить на «% корректировки», добавить «Доб. сумму 1», округлить до знаков из «Округление» и добавить «Доб. сумму 2». Именно в таком порядке: первая сумма попадает под округление, вторая добавляется после него.

  • «Основывать значение на» — откуда берётся база: «себестоимости», «отпускной цене» или «цене последней покупки» из карточки товара, либо «из прейскуранта» — тогда рядом указывают, из какого. Здесь база — прейскурант RRP.
  • «% корректировки» — сколько процентов от базы составит результат: 90 — минус десять процентов, 110 — плюс десять, 100 — без изменения.
  • «Округление» — количество знаков после запятой: 2 — до копеек, 0 — до целых, а отрицательное число округляет влево: −1 — до десятков, −2 — до сотен. Ровная половина всегда идёт вверх: 31,5 → 32, 45 → 50 при −1.

Сверло по плитке стоит в RRP 78,00. Формула RRP-10: 90 % → 70,20, округление до целых → 70, «Доб. сумму 2» −0,01 → 69,99. Так одним правилом получаются «психологические» ценники: в оптовом прейскуранте демо-базы все цены оснастки заканчиваются на ,99.

Правая колонка — «Если цена по прейскуранту не найдена» — нужна только базе «из прейскуранта»: что делать с товаром, которого в базовом прейскуранте нет. Три выхода: «Не добавлять цену», «Добав. цену с нулев. знач.» или «Исп. альтерн. формулу». В RRP-10 выбран третий: дюбелей нет в RRP, поэтому их оптовую цену достраивает запасная формула COST+25 — себестоимость плюс четверть: 33,00 → 41,25.

Список формул

Где формула работает

Сама по себе формула ничего не считает — её вписывают в матрицу прейскуранта:

Оптовый прейскурант с правилами

Каждая строка матрицы — правило «кому какая формула»: ценовая группа (строка 1: вся оснастка по RRP-10), конкретный товар (строка 2: дрель по COST+25) или пустая строка с одной лишь формулой — тогда правило распространяется на все товары. Правило для конкретного товара сильнее группового: сначала рассчитываются группы, потом точечные строки перекрывают их.

Превращает правила в числа обслуживание «Посчитать цены товаров» в модуле «Цены». Его можно сузить параметрами — один прейскурант, одна ценовая группа или один товар. Результат ложится в «Цены»: существующие строки обновляются, отсутствующие создаются. Цены, которые формулам не подчинены, пересчёт не трогает. Если прейскурант в валюте, базу пересчёт переводит в его валюту по курсу на сегодня (себестоимость и отпускную цену — из базовой валюты, цену последней покупки — из валюты покупки, цену другого прейскуранта — из его валюты); курса нет — база остаётся без пересчёта.

Порядок работы

1. Создать формулу

Код, комментарий, база, процент. Для базы «из прейскуранта» — ещё и поведение «если цена не найдена».

Базу выбирайте обязательно: карточку без выбранного «Основывать значение на» система сохранит, но пересчёт по такой формуле ничего не посчитает — товарам без цены она не появится, а существующие цены останутся прежними. То же — для базы «из прейскуранта» без выбранного варианта в «Если цена по прейскуранту не найдена»: товарам, которых нет в базовом прейскуранте, цена не появится.

2. Вписать правила в прейскурант

В матрице прейскуранта: строка на ценовую группу, на товар или одна пустая строка «на всех» — и код формулы в каждой.

3. Запустить пересчёт

Обслуживание «Посчитать цены товаров», при необходимости — с ограничением по прейскуранту. Проверить результат в регистре «Цены».

Частые ситуации

Написал в «% корректировки» 10, ждал минус десять процентов — а цены упали в десять раз. Поле означает не скидку, а долю базы в результате: минус десять процентов — это 90.

Зачем две добавочные суммы? «Доб. сумму 1» добавляется до округления, «Доб. сумму 2» — после. Ценник 69,99 строят именно второй: округлить до целых и отнять копейку.

Запустил пересчёт — ничего не изменилось. Проверьте строку матрицы: существует ли формула с таким кодом и стоят ли товары в этой ценовой группе. И базу: если она «из прейскуранта», а товара там нет при выборе «Не добавлять цену» — строка цены и не появится.

Можно ли округлить до рубля или до десятков? Да: «Округление» 0 — до целых, −1 — до десятков. Отрицательные значения округляют влево от запятой.

Формула не удаляется: «Запись реестра «Формулы цен» используется в: Прейскуранты!» Запись можно удалить, только пока её код не стоит ни в одной строке матрицы прейскуранта и ни одна другая формула не берёт её альтернативной (тогда отказ заканчивается «Формулы цен!»). Удалённая, формула оставила бы в прейскуранте код, который никуда не ведёт: прейскурант уже не сохранить, а пересчёт такую строку молча пропустит — цена останется старой. Сначала уберите код из строк прейскуранта или впишите туда другую формулу. Формула, указанная альтернативной самой себе, держит себя: переключите «Исп. альтерн. формулу» на другой вариант и уберите код рядом — тогда она удалится.

Справочник полей

Поле Описание
Код, Комментарий Имя формулы; кодом она вписывается в матрицу прейскуранта
% корректировки Сколько процентов от базы составит результат (90 = минус 10 %)
Доб. сумму 1 Добавляется к базе перед округлением
Округление Количество знаков после запятой; отрицательное — до десятков, сотен
Доб. сумму 2 Добавляется после округления (типичное применение — −0,01 для цен на ,99)
Основывать значение на База: себестоимость, отпускная цена, цена последней покупки или другой прейскурант
Поле возле «из прейскуранта» Код базового прейскуранта
Если цена по прейскуранту не найдена Не добавлять цену / добавить нулевую / использовать альтернативную формулу
Поле возле «Исп. альтерн. формулу» Код запасной формулы для товаров, которых нет в базовом прейскуранте