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

Формула 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) |
| Основывать значение на | База: себестоимость, отпускная цена, цена последней покупки или другой прейскурант |
| Поле возле «из прейскуранта» | Код базового прейскуранта |
| Если цена по прейскуранту не найдена | Не добавлять цену / добавить нулевую / использовать альтернативную формулу |
| Поле возле «Исп. альтерн. формулу» | Код запасной формулы для товаров, которых нет в базовом прейскуранте |