Формула поля прайсу збирає значення з інших полів: колонок прайсу, вашого каталогу, картки постачальника, курсу валют. Тут — що можна підставити у вираз, які функції працюють, готові приклади і що буде з результатом у полі.
Коли це знадобиться:
- Не знаєте, як звернутися до поля — макрос із довідника «Поля для формул» вставляється подвійним кліком.
- Ціна в доларах — макрос курсу підставляє курс разом із націнкою до курсу з довідника валют.
- Значення береться з каталогу — обгортка
IFNULLне дасть обнулити незіставлені товари. - Потрібна знайома задача — готові формули для РРЦ, назви, артикула й «дев'яток» вставляються як є.
З чого почати: звідки формула бере значення.
Що є в довіднику
- Макроси полів — прайсу, картки постачальника й характеристик, з довідником «Поля для формул».
- Значення з інших джерел — з вашого каталогу, курсу валюти, прайсу іншого постачальника.
- Дозволені функції — умови, текст, округлення, дата, і що вимикає формулу.
- Готові приклади — РРЦ, назва, артикул, ціни на «9».
- Особливі приймачі — характеристика, фото й найменування з ключем унікальності.
- Захист від порожнього значення — щоб формула не обнулила поле.
Де це і хто має доступ
- Вікно
- «Формули для полів» → кнопка «Поля для формул» над редактором
- Як відкрити вікно
- п'ять входів із вікон прайс-листів
- Право доступу
- право «Формули для полів» у правах груп
Як створити формулу, запустити її й перевірити на одному товарі — Як заповнювати поля прайс-листа формулою.
Звідки формула бере значення
З чого почати, залежить від того, звідки братиметься значення.
- Значення можна зібрати з колонок самого прайсуЦіна, назва, артикул, залишок і будь-яке інше поле того самого рядка, а також поля картки постачальника
- Значення треба взяти з картки товару вашого каталогуПрацює тільки для товарів, зіставлених із каталогом; решта отримає порожнє значення
- Ціна приходить у валютіКурс підставляється макросом, разом із націнкою до курсу з довідника валют
- Значення треба взяти з прайсу іншого постачальникаБлокові макроси: значення від конкретного контрагента або мінімум по групі контрагентів
Макрос виглядає як назва поля у фігурних дужках із префіксом: {Прайс: Ціна}. Префікс — це відповідь на питання «звідки брати».
| Префікс | Що підставляє | Скільки полів доступно |
|---|---|---|
{Прайс: …} | поле цього ж товару з прайсу | 102 |
{Товар БК: …} | поле зіставленого товару вашого каталогу | 171 |
{Контрагент: …} | поле картки постачальника, чий це прайс | 156 |
{Атрибут прайс: …} | значення характеристики, яка прийшла в прайсі | за переліком характеристик |
{ПрайсКонкурентівТП: …} | поле товару на сайті торгового майданчика | тільки всередині блокового макроса |
Довідник полів відкривається кнопкою «Поля для формул». У ньому чотири колонки — «Поле», «Група», «Макрос» і «Код», — а рядки згруповані за колонкою «Група», щоб не шукати ціну серед характеристик. Клік по рядку показує опис поля внизу, подвійний клік вставляє макрос у формулу.
1
Стовпець «Макрос» зі значенням у фігурних дужках2
Підказка про подвійний клік для вставки макросу- У колонці «Макрос» вказано код підстановки в фігурних дужках, який вставляється у формулу.
- Підказка над списком пояснює: клік по рядку показує опис поля внизу, подвійний клік вставляє макрос у редактор формули.
Старі формули з російськими назвами полів — {Прайс: Цена} замість {Прайс: Ціна} — працюють і далі: програма розпізнає назву будь-якою з увімкнених мов. Переписувати їх не треба. Подвійний клік у довіднику вставляє назву тією мовою, якою у вас інтерфейс.
Поля самого прайсу і картки постачальника
Найчастіший випадок: усе потрібне вже є в рядку, просто не в тому полі. Ціна є, а рекомендованої немає — рахуємо її від ціни. Назви немає, а бренд і модель є — склеюємо. Артикул є, але з нулями попереду — обрізаємо.
Поля картки постачальника доступні тим самим способом, з префіксом {Контрагент: …}. Це стає в пригоді, коли значення однакове для всього прайсу й уже записане в картці контрагента, — тоді його не треба дублювати в кожній формулі.
Як узяти значення з каталогу, курсу валюти чи чужого прайсу
Поля товару вашого каталогу
Макрос {Товар БК: …} бере значення з картки товару вашого каталогу — того, з яким зіставлено рядок прайсу. Так, наприклад, підставляють у прайс ваш власний артикул виробника замість того, що надіслав постачальник.
Це працює тільки для тих рядків, у яких з каталогом уже зроблено.
У незіставленого товару поля каталогу порожні, і формула перезапише приймач порожнім значенням.
Як цього уникнути — у розділі про порожнє значення; як зіставити товари — Зіставлення товарів прайсу з каталогом.
Є і друга умова, про яку згадують рідше: формули мають рахуватися після зіставлення, а не до нього. Порядок дій усередині одного завантаження задається окремо — у порядку операцій. Якщо формули стоять там раніше за зіставлення товарів, макрос {Товар БК: …} відпрацює на ще не зіставлених рядках і запише порожнє значення, хоча зіставлення через крок таки відбудеться.
Курс валюти
Курс підставляється окремим макросом виду {CURRENCY_RATE_USD}, де останні три літери — код валюти з довідника валют. У формулі це звичайне число, на яке можна множити або ділити.
Якщо у валюти в довіднику заповнено націнку до курсу, підставиться курс уже з нею — не той, що показує банк.
Значення з прайсу іншого постачальника
Для цього є блокові макроси — вони пишуться у подвійних квадратних дужках і всередині містять звичайний макрос поля.
[[FromContractor_N{Прайс: Ціна}]]— бере значення того самого товару з прайсу контрагента з номером N.[[ОтГруппыКонтрагента_1 MIN(IF({Прайс: Цена}=0, NULL, {Прайс: Цена}))]]— бере значення від цілої групи контрагентів. Усередині такого блока дозволені підсумкові функції: у цьому прикладі береться найменша ненульова ціна по групі.[[ОтКонкурентаТПСтрока_N{ПрайсКонкурентовТП: Цена}]]— значення з N-ї за зростанням пропозиції на торговому майданчику.
Усі три є в довіднику полів: «Взяти значення від зазначеного контрагента», «Взяти значення від групи контрагентів» і «Взяти значення з рядка прайсу конкурента». Довідник вставляє їх латиницею — FromGroupContractor_N, RowFromCompetitorTP_N; обидва написання працюють однаково.
Що можна писати у формулі
Формула — це один вираз, який дає одне значення. Не послідовність кроків, не «спочатку зроби те, потім те». Якщо потрібні два кроки, робіть дві формули й розставляйте їм порядок.
Гарантований набір функцій зібраний у довіднику полів, і подвійний клік вставляє готовий шаблон.
| Назва в довіднику | Що вставляється | Що робить |
|---|---|---|
| Логічна умова CASE | CASE {поле} WHEN 'books' THEN 'New Books' … ELSE '' END | кілька варіантів значення на вибір |
| Логічна умова IF | IF(умова, значення_якщо_так, значення_якщо_ні) | розвилка на два варіанти |
| Об’єднання рядків | CONCAT_WS(" ", "Рядок1", "Рядок2", …) | склеює значення, перший параметр — роздільник між ними |
| Округлення числа у велику сторону | CEIL(число) | CEIL(1.23) дає 2 |
| Округлення числа в меншу сторону | FLOOR(число) | FLOOR(1.23) дає 1 |
| Округлення числа з десятковими знаками | ROUND(число, 1) | ROUND(1.298, 1) дає 1.3 |
| Відсікання від кількості десяткових знаків | TRUNCATE(число, 2) | TRUNCATE(1.2100743, 2) дає 1.21 |
Крім них, працюють і інші функції роботи з текстом і числами — у живих базах зустрічаються заміна фрагмента тексту, обрізання пробілів і нулів, пошук підрядка. Але це вже на свій ризик: у довіднику їх немає, і помилка в написанні означає, що формула не виконається зовсім.
Чого писати не можна
Підсумкові функції прямо у виразі — MIN, MAX, SUM, AVG, COUNT. Формула рахується для кожного товару окремо, підсумовувати їй нема чого, і такий вираз не виконається. Підсумки дозволені лише всередині блокового макроса від групи контрагентів.
Формула приймає лише дозволені функції:
- математика —
ROUND,CEIL,FLOOR,GREATEST…; - умови —
IF,CASE,IFNULL; - текст —
CONCAT,REPLACE,SUBSTRING,TRIM,REGEXP_REPLACE…; - дата —
CURDATE,NOW,DAYOFWEEK,DATE_ADD….
Будь-яка інша функція, а також слова SELECT, UNION, INTO, VALUES, TABLE, WITH вимикають формулу: програма її пропускає, поле не змінюється, решта формул застосовується. Пропущена формула потрапляє до вікна «Помилки у формулах», а під час завантаження прайсу — рядком «Формулу пропущено…» в «Журнал операцій».
Текст у лапках не перевіряється, тож CONCAT({Прайс: Найменування}, " (select)") працює.
Готові приклади
Це формули з довідки продукту й із живих налаштувань. Їх можна вставляти як є, замінивши назви полів на свої.
| Що потрібно | Формула |
|---|---|
| Зменшити ціну на 12 % | {Прайс: Ціна} - ({Прайс: Ціна} * 12) / 100 |
| Порахувати відсоток прибутку | (({Прайс: Ціна} - {Прайс: Ціна собівартість}) / {Прайс: Ціна}) * 100 |
| Не продавати дорожче за рекомендовану ціну | IF({Прайс: Ціна} > {Прайс: Ціна РРЦ} AND {Прайс: Ціна РРЦ} > 0, {Прайс: Ціна РРЦ}, {Прайс: Ціна}) |
| Прибрати нулі на початку артикула | TRIM(LEADING '0' FROM {Прайс: Артикул виробника}) |
| Прибрати назву бренда з категорії постачальника | TRIM(REPLACE({Прайс: Категорія з прайсу}, CONCAT('/ ', {Прайс: Виробник}), '')) |
| Рекомендована ціна мінус 5 %, а якщо її немає — звичайна ціна | CASE WHEN {Прайс: Ціна РРЦ} > 1 THEN {Прайс: Ціна РРЦ} - ({Прайс: Ціна РРЦ} * 5) / 100 ELSE {Прайс: Ціна} END |
| Зібрати назву з виробника й артикула | CONCAT({Прайс: Виробник}, ' ', {Прайс: Артикул виробника}) |
| Собівартість плюс 4 %, округлити до цілого | ROUND({Прайс: Ціна собівартість} * 1.04, 0) |
| Зробити, щоб ціна закінчувалася на 9 (у копійках) | CEIL({Прайс: Ціна}) - 0.01 |
| Зробити, щоб ціна закінчувалася на 9 (у цілих) | FLOOR({Прайс: Ціна} / 10) * 10 + 9 |
| Скопіювати артикул із картки каталогу | {Товар БК: Артикул виробника} |
Два приклади з дев'ятками роблять різне. Перший піднімає ціну до найближчого цілого й забирає копійку: 248,30 стає 248,99. Другий округлює до десятків і ставить дев'ятку в кінець: 248 стає 249, а 251 — теж 249, тобто ціна може й впасти.
На дешевих товарах друга формула здатна з'їсти помітну частину націнки, тож перевіряйте результат на найдешевшій позиції прайсу, а не на середній.
Зверніть увагу на перевірку > 1 у прикладах із рекомендованою ціною. Вона потрібна саме тому, що товарів без РРЦ у прайсі зазвичай більшість, і без перевірки їхня ціна перетворилася б на нуль.
Як формула заповнює характеристики, фото й назву
Два поля-приймачі поводяться не так, як решта, і про це варто знати до того, як формула виконається. Сюди ж належить прапорець у списку формул, який має сенс лише для одного поля.
Характеристика товару
Коли приймачем обрана характеристика, значення записується в характеристику товару, а не в його рядок. Якщо у товару такої характеристики ще не було, програма створює її сама — тобто формула не тільки заповнює значення, а й додає товарам характеристику, якої постачальник не надсилав.
Нової характеристики в довіднику формула не створює: приймачем можна обрати тільки наявну. Ще дві умови:
- якщо в характеристики немає назви мовою інтерфейсу, формула заповнить її лише в тих товарах прайсу, де вона вже була;
- характеристика додається тільки товарам, що проходять умову застосування формули.
Це дані прайсу: у картки вашого каталогу вони потрапляють, як інші поля прайсу, — через оновлення базового каталогу.
Посилання на фото
Поле «Посилання на фото товару» обробляється двічі: результат потрапляє і в саме поле, і до переліку фотографій товару. Після цього однакові посилання прибираються, тож повторний прогін не наплодить дублів одного знімка.
Прапорець «Оновлювати ключ унікальності товару»
Цей прапорець стоїть у кожному рядку списку, але працює тільки для поля найменування. Для решти полів він не робить нічого.
Навіщо він потрібен: за назвою товару програма впізнає, що це той самий товар, який приходив минулого разу. Якщо формула переписує найменування, ключ упізнавання «поїде», і при наступному завантаженні той самий товар вважатиметься новим. Прапорець змушує програму перерахувати ключ одразу після формули — і впізнавання не ламається.
Підказка у вікні каже прямо: «Ключ унікальності товару перераховується лише за формулою поля «Найменування» — на інших полях ця галочка нічого не змінює.» Без прапорця ключ лишається порахованим із назви з файла. Вмикайте прапорець одразу разом із формулою і не перемикайте його в робочого прайсу. Той самий прапорець є у вікні формул полів каталогу.
Як округлюється результат
Результат округлюється тільки в полів-цін — тими самими перемикачами «Округляти вгору» й «Округляти вниз», що й ціна після націнки; коли обидва вимкнені, ціна округлюється до копійок. Налаштування спільні: змінивши їх заради формули, ви зміните й підсумкові ціни всіх прайсів. Детальніше: Округлення і кратність ціни.
Текстові поля й поля з дробовими числами, які не є цінами, не округлюються взагалі. Потрібне округлення в такому полі — робіть його функцією ROUND усередині формули.
Як не обнулити поле порожнім значенням
Порожнє порожньому не рівня, і різниця тут коштує даних.
- Порожня колонка прайсу — це порожній рядок або нуль. Склейка з нею виживе:
CONCAT({Прайс: Виробник}, ' ', {Прайс: Артикул виробника})у товара без виробника дасть артикул із пробілом попереду. - Значення немає зовсім — товар не зіставлений із каталогом, ділення пішло на нуль, блоковий макрос нічого не знайшов. Тоді порожнім стає весь вираз, скільки б у ньому не було інших операндів.
Такий результат не залишає поле як було, а обнуляє його. У числове поле й у поле ціни ляже нуль, у текстове — порожній рядок. Ділення на нуль поводиться так само: жодної помилки, просто нуль у полі.
Найчастіше на це наражаються з формулою {Товар БК: …} на прайсі, де зіставлено не всі товари. Зіставлені отримають значення з каталогу, а всі інші — нуль або порожній рядок замість того, що в них було. Причому «того, що було» вже ніде немає: відкату у формул не передбачено.
Захист — перевірка всередині формули, але писати її треба уважно. Напрошується варіант «якщо порожньо, то взяти з прайсу»:
IF({Товар БК: Артикул виробника} = "", {Прайс: Артикул виробника}, {Товар БК: Артикул виробника})
Так робити не можна. Ця перевірка рятує тільки зіставлений товар, у якого поле каталогу порожнє. На незіставленому значення не порожнє, а відсутнє, і порівняння не дає ні «так», ні «ні»: формула йде в другу гілку й знову бере з каталогу. Рецепт мовчки обнуляє рівно ті рядки, заради яких його писали.
Робочий варіант відрізняється однією обгорткою — IFNULL, яка підставляє порожній рядок замість відсутнього значення:
IF(IFNULL({Товар БК: Артикул виробника}, "") = "", {Прайс: Артикул виробника}, {Товар БК: Артикул виробника})
Читається так: якщо артикула в каталозі немає або він порожній — залишити артикул із прайсу, інакше взяти з каталогу. Прогін на прайсі зі 160 позицій, де зіставлено 64: перший варіант обнулив 96 рядків, другий — жодного.
Для цін обгортка не потрібна — там ловлять інше: перевірка > 1 або > 0 перед тим, як щось на це число ділити.
Часті запитання
Старі формули з російськими назвами полів треба переписувати?
Ні. {Прайс: Цена} і {Прайс: Ціна} працюють однаково: програма розпізнає назву будь-якою з увімкнених мов (макроси).
Чи можна писати десяткове число через кому?
Ні, лише через крапку: * 1.1. З комою програма прочитає два різні числа, формула не виконається й потрапить до вікна «Помилки у формулах».
Як узяти найменшу ціну серед кількох постачальників?
Блоковим макросом від групи контрагентів: усередині нього дозволені MIN та інші підсумкові функції (значення з прайсу іншого постачальника).
Чому в незіставлених товарів поле стало порожнім?
Формула брала значення з каталогу, а в незіставленого товару його немає — і порожнім став увесь вираз. Оберніть макрос каталогу в IFNULL (робочий варіант).
Чи можна формулою заповнити характеристику товару?
Так, характеристики є в списку полів-приймачів нарівні зі звичайними полями. Якщо у товару такої характеристики не було, програма створить її сама (характеристики й фото).
Якщо я змінюю найменування формулою, ключ унікальності товару перераховується?
Так, якщо в цій формулі увімкнено прапорець «Оновлювати ключ унікальності товару». Без нього ключ лишається порахованим із назви з файла, і товар при наступному завантаженні вважатиметься новим (прапорець).
Суміжні теми
- Якщо формулу ще треба створити, запустити й перевірити — Як заповнювати поля прайс-листа формулою.
- Якщо ціну треба порахувати від ціни постачальника відсотком чи коефіцієнтом — Правила ціноутворення для прайс-листа.
- Якщо макроси
{Товар БК: …}порожні в багатьох товарів — Зіставлення товарів прайсу з товарами каталогу.

