Wiki

Clone wiki

iPriceSE / Ценообразование

Ценообразование

Главная -> Ценообразование

В программе реализована поддержка формул с элементарными функциями сравнения и округления, а так же минимальным набором математических и логических действий. Не смотря на свою простоту - это мощный инструмент, который позволит сформировать практически любую цену с неограниченной логикой на основании 32 1 переменных, индивидуальных для каждой позиции каталога.

Редактор формул

Окно редактирования формулы можно вызвать из главного меню приложения выбрав "Справочники"->"Цены".

Интерфейс.Главное окно.Справочники.Цены

Цены.Редактор

Окно редактора формул состоит из следующих элементов: 1. список ценовых колонок; 2. наименование редактируемой колонки; 3. приоритет (местоположение в списке); 4. формула расчета цены; 5. справка по переменным, функциям и операторам; 6. панель проверки введенной формулы (позволяет проверить корректность формулы путем ввода некоторых значений переменных); 7. поле результат вычисления (отображает результат вычисления по формуле с учетом введенных выше значений, а так же служит для вывода ошибок парсинга формулы).

Инструменты

Переменные

P - минимальная цена (базовая) поставщика (в наличии) (использование: P)

P2 - цена поставщика 2 (использование: P2)

P3 - цена поставщика 3 (использование: P3)

P4 - цена поставщика 4 (использование: P4)

P5 - цена поставщика 5 (использование: P5)

P6 - цена поставщика 6 (использование: P6)

P7 - цена поставщика 7 (использование: P7)

P8 - цена поставщика 8 (использование: P8)

P9 - цена поставщика 9 (использование: P9)

P10 - цена поставщика 10 (использование: P10)

N - наценка от базовой цены поставщика (%, пересчитанный в рубли) (использование: P+N)

D - скидка от базовой цены поставщика (%, пересчитанный в рубли) (использование: P-D)

P0 - наша цена (базовая) (берется из основного прайс-листа) (использование: P0)

P02 - наша цена 2 (берется из основного прайс-листа) (использование: P02)

P03 - наша цена 3 (берется из основного прайс-листа) (использование: P03)

P04 - наша цена 4 (берется из основного прайс-листа) (использование: P04)

P05 - наша цена 5 (берется из основного прайс-листа) (использование: P05)

P06 - наша цена 6 (берется из основного прайс-листа) (использование: P06)

P07 - наша цена 7 (берется из основного прайс-листа) (использование: P07)

P08 - наша цена 8 (берется из основного прайс-листа) (использование: P08)

P09 - наша цена 9 (берется из основного прайс-листа) (использование: P09)

P010 - наша цена 10 (берется из основного прайс-листа) (использование: P010)

P1 - цена, указанная в карточке позиции каталога (использование: P1)

M - минимальная цена продажи (использование: M)

C - дополнительный процент скидки/наценки (использование: P+P*C)

K - дополнительный коэффициент скидки/наценки (использование: P+K)

S - остаток товара, сумма по всем отделам, согласно данным основного прайс-листа

S1 - остаток товара, отдел 1, согласно данным основного прайс-листа

S2 - остаток товара, отдел 2, согласно данным основного прайс-листа

S3 - остаток товара, отдел 3, согласно данным основного прайс-листа

S4 - остаток товара, отдел 4, согласно данным основного прайс-листа

S5 - остаток товара, отдел 5, согласно данным основного прайс-листа

Функции

KURS - возвращает курс выбранной валюты (из БД). Синтаксис: KURS('Валюта')

KURS('RUR') = вернет курс рубля по отношению к RUR
KURS('USD') = вернет курс доллара по отношению к RUR
KURS('EUR') = вернет курс евро по отношению к RUR
KURS('KZT') = вернет курс тенге по отношению к RUR
KURS('UAH') = вернет курс гривны по отношению к RUR
IF - условие. Синтаксис: IF(выражение, истина, ложно) Доступен псевдоним CHOOSE.

IF( 5>3 , M , D ) => M
CHOOSE( 5>3 , M , D ) => M
IF( 1>3 , M , D ) => D
IF( 5>3 , M+P ,  D) => M+P

ВАЖНО!!! Действия "истина" или "ложно" могут быть другими формулами, переменными и вещественными числами, но не могут быть целыми числами. Например: IF( 5>3 , 3 , 1) => 0 Для корректного решения необходимо формулу записать так: IF( 5>3 , 3.0 , 1.0 ) => 3.0. Обратите внимание - разделитель десятичной части - . (точка).

RNDUP - округление вверх с заданной точностью. Синтаксис: RNDUP(число, точность). Допустимые значения точности: 0.0001 .. 1 .. 1000000 (н-р 0.05 | 0.01 | 0.2 | 10 | 50 ...)

RNDUP(100.18, 0.5) => 100.5 
RNDUP(12.13, 5) => 15 
RNDUP(12.13, 1) => 13 
RNDUP(12.13, 0.5) => 12.5
RNDUP(1000.01, 10) => 1010 
RNDUP(1231.56,50) => 1250 
RN - нормализация цены без потери наценки. Синтаксис: RN(число, граница). Внимание! Граница - целое число!

  • число меньше 1 - без изменений.
  • число меньше 10 - увеличение вверх с точностью 0.5.
  • число меньше ГРАНИЦЫ - увеличение вверх до 1.
  • число больше ГРАНИЦЫ - увеличение вверх до 10.
  • число равно 1 - без изменений.
  • число равно 10 - без изменений.
  • число равно ГРАНИЦЕ - без изменений.
    RN(0.67,  700) =>   0.67; 
    RN(4.27,  700) => 4.50; 
    RN(6.82,  700) =>  7;
    RN(680.42, 700) => 681;
    RN(1382.52, 700) => 1390;
    

INT - арифметическое округление до целого. Синтаксис: INT(число).

INT(102.50) => 103 
INT(103.50)  => 104
INT(100.51) => 101
INT(100.80) => 101
INT(100.23) => 100
BINT - банковское округление до целого. Синтаксис: BINT(число).

BINT(102.50) => 102 
BINT(103.50)  => 104
BINT(100.51) => 101
BINT(100.80) => 101
BINT(100.23) => 100
RNDTO - арифметическое округление до заданной точности. Синтаксис: RNDTO(число, точность). Доступен псевдоним ROUND. Допустимые значения точности: 0.0001,0.001,0.01,0.1,1,10,100,1000 и тд.

RNDTO(2.5, 1) => 3
RNDTO(3.5, 1) => 4
RNDTO(12.547, 1) => 13
RNDTO(12.545, 0.01) => 12.55
RNDTO(12.567, 10) => 10
Для предотвращения потери наценки (округления всегда в большую сторону) используйте RNDUP или RN.

BRNDTO - банковское округление до заданной точности. Синтаксис: BRNDTO(число, точность). Допустимые значения точности: 0.0001,0.001,0.01,0.1,1,10,100,1000 и тд.

BRNDTO(2.5, 1) => 2
BRNDTO(3.5, 1) => 4
BRNDTO(12.547, 1) => 13
BRNDTO(12.545, 0.01) => 12.54
BRNDTO(12.567, 10) => 10
Для предотвращения потери наценки (округления всегда в большую сторону) используйте RNDUP или RN.

ABS - возвращает абсолютное значение числа. Синтаксис: ABS(число).

ABS(102.50) => 102.50 
ABS(-34) => 34
INRANGE - проверка на попадания ЧИСЛА в указанный диапазон. Возвращает логическое выражение "истино "или "ложно". Синтаксис: INRANGE(число, НижняяГраница, ВерхняяГраница). Внимание! Границы диапазона - целые числа!

INRANGE(100.0, 50, 150) => ИСТИНО
INRANGE(100.0, 500, 1500) => ЛОЖНО
DATE - возвращает целое число, в зависимости от режима. Синтаксис: DATE(режим).

DATE(0) => текущий день (D)
DATE(1) => текущий месяц (M)
DATE(2) => текущий год (YYYY)
DATE(3) => текущая неделя с начала года
DATE(4) => текущий день недели (1-7 => пнд.-вск.)
DATE(5) => текущий день с начала года
TIME - возвращает целое число, в зависимости от режима. Синтаксис: TIME(режим).

TIME(0) => текущий час (H)
TIME(1) => текущая минута(M)
TIME(2) => текущая секунда (S)

Математические операторы

+   сложение
-   вычитание
*   умножение
/   деление

Логические операторы

>   больше
<   меньше
>=  больше или равно
<=  меньше или равно
=   равно

Союзы

And И
or  ИЛИ

Примеры формул.

Формула может быть любой вложенности и длинной до 1024 символов. Допускается использование пробелов и переноса строк.

Допускается использование произвольных вещественных чисел. Разделитель десятичной части - . (точка). Однако, использование произвольных чисел не желательно, так как ведет к ухудшению читаемости формулы. Но порой неизбежно, например, когда необходимо сделать скидку на цену независимо от товара.

P = 100 руб.
N = 10 % => 10 руб.
5 - необходимый % скидки
(P+N)*(1-5/100) => 100 руб+10 руб= 110 руб [минус] 5% = 104,5 руб.
обратите внимание, что с таким подходом стоит строго контролировать результат, так как возможна ситуация, когда результат будет меньше P - закупочной цены:
(P+N)*(1-10/100) => 100руб+10 руб= 110 руб [минус] 10% = 99 руб.
для избежания подобной ситуации необходимо ввести в формулу проверку:
IF( (P+N)*(1-10/100)<P , P , (P+N)*(1-10/100) ) => 
ЕСЛИ (цена_поставщика плюс наценка) минус 10% МЕНЬШЕ цена_поставщика ТОГДА цена_поставщика ИНАЧЕ (цена_поставщика плюс наценка) минус 10%
Так же возможно привязать расчет цены к наличию:
IF ( S>0 , P0 , P+N ) => 
ЕСЛИ есть на нашем складе (по основному прайс-листу), ТО наша_цена ИНАЧЕ цена_поставщика+наценка
IF (S>0 or P=0,P0,RN(P+N,1000)) => 
ЕСЛИ есть на нашем складе (по основному прайс-листу) ИЛИ цена_поставщика=0 , ТО наша_цена ИНАЧЕ Нормализовано(цена_поставщика+наценка)
В случае ошибки составления формулы в поле "Результат" будет подробное описание ошибки.


  1. (в версии 0.0.3.88) 

Updated