Формули для полів прайс-листа постачальника

21 хв

Розмова з підтримкою — замість читати: навіщо це потрібно, що налаштувати і що ви отримаєте.

Постачальник надіслав файл, а потрібного значення в ньому немає. Рекомендованої ціни немає, зате є закупівельна. Повної назви немає, зате окремими колонками лежать бренд, модель і об’єм. Артикул є, але з нулями попереду. Формули для полів прайс-листа — це спосіб не заповнювати таке руками: ви один раз описуєте, з чого складається значення, а далі поле рахує програма при кожному завантаженні файла.

Вікно
«Формули для полів»
Право доступу
окреме право на вікно є в списку прав груп; фактично вікно відкриється кожному, хто може відкрити прайс-листи
Підготувати
заведений прайс, який хоча б раз завантажився, і налаштовані адреси колонок — формула бере значення з уже розібраних полів, а не з сирого файла

З чого починати читання, залежить від того, звідки братиметься значення.

Де це у програмі

Пункту меню у цього вікна немає, ярлика на робочому столі теж. «Формули для полів» відкриваються тільки кнопкою з іншого вікна, і таких кнопок п’ять. Усі вони ведуть в одне й те саме вікно, різниця лише в тому, для якого прайсу воно відкриється.

З переліку прайс-листів
оберіть джерело в переліку ліворуч → бургер у шапці джерела → група «Ціни та націнки» → «Формули для полів»
З картки прайс-листа
секція «Додатково» → кнопка «Формули для полів»
Із секції «Колонки» картки
кнопка «Формули» в панелі над сіткою полів
З вкладки товарів прайсу
бургер над сіткою, підказка «Додаткові операції» → «Формули для полів». Це ж єдиний вхід у формули для всіх прайсів одразу
З вікна «Завантаження з аркушів»
меню операцій аркуша → «Формули для полів». Створені звідси формули прив’язані до цього аркуша
Розгорнуте бургер-меню джерела прайс-листа з групою «Ціни та націнки»
1Пункт «Формули для полів»
  1. «Формули для полів» — пункт у групі «Ціни та націнки», що відкриває редактор формул для полів прайс-листа.

Вікно ділиться навпіл: ліворуч список формул цього прайсу, праворуч редактор обраної формули. Межу між ними можна пересунути мишкою — ширина запам’ятається до наступного разу.

Вікно «Формули для полів» цілком
1Кнопка «Додати формулу»
2Кнопка «Застосувати формули»
3Список формул зліва
4Межа між списком і редактором
  1. «Додати формулу» відкриває пошук поля для нової формули.
  2. «Застосувати формули» перераховує значення в усіх рядках прайсу — застосовується обережно, без відкату.
  3. Список формул зліва показує поля, для яких уже задані формули.
  4. Межу між списком і редактором можна тягнути мишею, змінюючи ширину панелей.

Перша формула за три кроки

Доки жодна формула не вибрана, права частина вікна показує три кроки під заголовком «Як налаштувати формули». Ось вони докладніше.

Крок перший: обрати поле

Кнопка «Додати формулу» відкриває список полів із пошуком («Пошук поля...»). Обираєте те поле, значення якого треба обчислювати, — воно й стане полем-приймачем формули.

У списку два різновиди рядків: усі поля товару прайсу, включно з тими, які ви завели самі, і всі активні характеристики товару. Характеристик зазвичай на порядок більше, ніж полів, тому пошуком тут користуються частіше, ніж прокруткою.

Поповер вибору поля для нової формули
1Поле пошуку «Пошук поля...»
2Рядок списку полів
  1. Поле пошуку звужує список полів за назвою чи кодом.
  2. Клік по рядку списку одразу створює формулу для обраного поля.

Поле-приймач задається один раз. У списку формул його колонка «Назва поля» не редагується: щоб рахувати інше поле, додайте нову формулу, а стару вимкніть або видаліть.

Обмежень за типом поля немає: приймачем може бути і текст, і число, і ціна. Від типу залежить тільки округлення результату — про нього окремий розділ.

Крок другий: скласти вираз

Праворуч відкривається редактор під заголовком «Формула поля», поруч — назва обраного поля. Редактор із нумерацією рядків і підсвіткою: назви полів у фігурних дужках видно окремим кольором, і одразу помітно, якщо дужка не закрилася.

Операнди не набирають руками. Кнопка «Поля для формул» відкриває довідник усіх доступних полів; подвійний клік по рядку вставляє його у позицію курсора. Другий спосіб — Ctrl+Space просто в редакторі: спливе список полів, які підходять до вже набраних літер.

Іконка «?» біля редактора показує коротку довідку із синтаксису: поле прайсу — {Прайс: Цена}, вираз — {Прайс: Цена} * 1.18, умова — CASE WHEN … THEN … ELSE … END.

Редактор формули для поля «Ціна РРЦ»
1Чіп із назвою поля-приймача
2Кнопка «Поля для формул»
3Текст формули в редакторі
4Кнопка «Застосувати цю формулу»
  1. Чіп показує, до якого поля належить поточна формула.
  2. «Поля для формул» відкриває довідник полів і макросів для вставки у формулу.
  3. Формула написана мовою CASE WHEN і посилається на поля прайсу через макроси у фігурних дужках.
  4. «Застосувати цю формулу» перераховує значення лише цього поля в усіх рядках прайсу — застосовується обережно, без відкату.

Кнопки «Зберегти» у формули немає. Текст формули їде на сервер приблизно за секунду після того, як ви перестали друкувати; перемикачі й примітка зберігаються одразу. Над редактором стоїть відмітка «Збережено ·» з часом останнього збереження — за нею й перевіряють, що правка дійшла.

Крок третій: порахувати

Нова формула створюється вже активною — вмикати нічого не треба, хоча підказка в самому вікні радить це зробити. Перемикач «Активність» (він є і в редакторі, і колонкою в списку) потрібен для зворотного: щоб формулу вимкнути, не видаляючи її.

Поки поле формули порожнє, вона пропускається. Але щойно ви допечатали вираз, через секунду він збережеться — і формула вже боєва: наступне завантаження прайсу порахує її без жодного вашого підтвердження. Якщо вираз ще недописаний, а прайс от-от завантажиться, зніміть «Активність».

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

Поки триває перерахунок, висить повідомлення «Виконується перерахунок...». Наприкінці — «Формули застосовано». Якщо вкладка товарів прайсу відкрита поруч, її сітка оновиться сама, і нові значення видно без додаткових натискань; якщо ні — відкрийте її, щоб перевірити результат.

Що ще є в списку формул

Крім назви поля, у списку є колонки, які варто знати:

  • «Примітка» — текст для себе, на розрахунок не впливає. Через півроку саме він пояснить, навіщо ця формула.
  • «Порядок» — число, яке вирішує, котра формула порахується раніше.
  • «Активність» — прапорець, вимикає формулу, не видаляючи її.
  • «Назва листа» — заповнена тільки у формул, створених із вікна «Завантаження з аркушів».
  • «ID поля» — код поля-приймача; знадобиться, коли шукатимете формулу за повідомленням про помилку.
  • «Оновлювати ключ унікальності товару» — прапорець, який має сенс лише для поля найменування; про нього в розділі про характеристики й фото.

«Примітка», «Порядок» і обидва прапорці правляться подвійним кліком просто у списку; «Назва поля» і «Назва листа» — ні. Рядки, у яких приймач це характеристика, підсвічені синім: їх видно, не читаючи назв. Видаляє формулу кошик у панелі, зі звичайним підтвердженням, після якого показується «Формулу видалено».

Макроси: звідки формула бере значення

Макрос виглядає як назва поля у фігурних дужках із префіксом: {Прайс: Ціна}. Префікс — це відповідь на питання «звідки брати».

ПрефіксЩо підставляєСкільки полів доступно
{Прайс: …}поле цього ж товару з прайсу102
{Товар БК: …}поле зіставленого товару вашого каталогу171
{Контрагент: …}поле картки постачальника, чий це прайс156
{Атрибут прайс: …}значення характеристики, яка прийшла в прайсіза переліком характеристик
{ПрайсКонкурентівТП: …}поле товару на сайті торгового майданчикатільки всередині блокового макроса

Довідник полів відкривається кнопкою «Поля для формул». У ньому чотири колонки — «Поле», «Група», «Макрос» і «Код», — а рядки згруповані за колонкою «Група», щоб не шукати ціну серед характеристик. Клік по рядку показує опис поля внизу, подвійний клік вставляє макрос у формулу.

Довідник полів для формул із колонками «Поле», «Група», «Макрос», «Код»
1Стовпець «Макрос» зі значенням у фігурних дужках
2Підказка про подвійний клік для вставки макросу
  1. У колонці «Макрос» вказано код підстановки в фігурних дужках, який вставляється у формулу.
  2. Підказка над списком пояснює: клік по рядку показує опис поля внизу, подвійний клік вставляє макрос у редактор формули.

Старі формули з російськими назвами полів — {Прайс: Цена} замість {Прайс: Ціна} — працюють і далі: програма розпізнає назву будь-якою з увімкнених мов. Переписувати їх не треба. Подвійний клік у довіднику вставляє назву тією мовою, якою у вас інтерфейс.

Поля самого прайсу і картки постачальника

Найчастіший випадок: усе потрібне вже є в рядку, просто не в тому полі. Ціна є, а рекомендованої немає — рахуємо її від ціни. Назви немає, а бренд і модель є — склеюємо. Артикул є, але з нулями попереду — обрізаємо.

Поля картки постачальника доступні тим самим способом, з префіксом {Контрагент: …}. Це стає в пригоді, коли значення однакове для всього прайсу й уже записане в картці контрагента, — тоді його не треба дублювати в кожній формулі.

Поля товару вашого каталогу

Макрос {Товар БК: …} бере значення з картки товару вашого каталогу — того, з яким зіставлено рядок прайсу. Так, наприклад, підставляють у прайс ваш власний артикул виробника замість того, що надіслав постачальник.

Це працює тільки для тих рядків, у яких з каталогом уже зроблено. У незіставленого товару поля каталогу порожні, і формула запише в приймач порожнє значення — не залишить старе, а саме перезапише. Як цього уникнути, показано в розділі про порожнє значення; як зіставити товари — у статті про зіставлення товарів прайсу з каталогом.

Курс валюти

Курс підставляється окремим макросом виду {CURRENCY_RATE_USD}, де останні три літери — код валюти з довідника валют. У формулі це звичайне число, на яке можна множити або ділити.

Якщо у валюти в довіднику заповнено націнку до курсу, підставиться курс уже з нею — не той, що показує банк.

Значення з прайсу іншого постачальника

Для цього є блокові макроси — вони пишуться у подвійних квадратних дужках і всередині містять звичайний макрос поля.

  • [[FromContractor_N{Прайс: Ціна}]] — бере значення того самого товару з прайсу контрагента з номером N.
  • [[ОтГруппыКонтрагента_1 MIN(IF({Прайс: Цена}=0, NULL, {Прайс: Цена}))]] — бере значення від цілої групи контрагентів. Усередині такого блока дозволені підсумкові функції: у цьому прикладі береться найменша ненульова ціна по групі.
  • [[ОтКонкурентаТПСтрока_N{ПрайсКонкурентовТП: Цена}]] — значення з N-ї за зростанням пропозиції на торговому майданчику.

Перший із них є в довіднику полів під назвою «Взяти значення від зазначеного контрагента». Двох інших у довіднику немає, хоча програма їх розуміє, — набирати їх доводиться руками.

Що можна писати у формулі

Формула — це один вираз, який дає одне значення. Не послідовність кроків, не «спочатку зроби те, потім те». Якщо потрібні два кроки, робіть дві формули й розставляйте їм порядок.

Гарантований набір функцій зібраний у довіднику полів, і подвійний клік вставляє готовий шаблон.

Назва в довідникуЩо вставляєтьсяЩо робить
Логічна умова CASECASE {поле} WHEN 'books' THEN 'New Books' … ELSE '' ENDкілька варіантів значення на вибір
Логічна умова IFIF(умова, значення_якщо_так, значення_якщо_ні)розвилка на два варіанти
Об’єднання рядків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. Формула рахується для кожного товару окремо, підсумовувати їй нема чого, і такий вираз не виконається. Підсумки дозволені лише всередині блокового макроса від групи контрагентів.

Кілька слів у формулі спрацьовують як захист і тихо її вимикають. Це SELECT, INSERT, UPDATE, UNION, DELETE FROM і ще близько чотирьох десятків схожих. Знайшовши таке слово, програма підміняє формулу на «поле отримує саме себе»: нічого не рахується і жодного повідомлення не показується. Для полів-цін навіть така порожня підміна не зовсім безслідна — до неї все одно застосується округлення, тож ціна 100,129 стане 100,13, а з увімкненим «Округляти вгору» округлиться вгору. Найнеприємніше, що перевірка не розрізняє код і текст: формула CONCAT({Прайс: Найменування}, " (update)") потрапляє під заборону через слово в дужках. Якщо формула виглядає правильно, а поле не змінюється — перечитайте її на такі слова.

Готові приклади

Це формули з довідки продукту й із живих налаштувань. Їх можна вставляти як є, замінивши назви полів на свої.

Що потрібноФормула
Зменшити ціну на 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)
Скопіювати артикул із картки каталогу{Товар БК: Артикул виробника}

Зверніть увагу на перевірку > 1 у прикладах із рекомендованою ціною. Вона потрібна саме тому, що товарів без РРЦ у прайсі зазвичай більшість, і без перевірки їхня ціна перетворилася б на нуль.

Умова застосування: звузити формулу

Під редактором є згортний блок «Умова застосування (необов’язково)». У ньому конструктор умов по полях товару прайсу: «назва містить», «ціна більше», «артикул починається з» і так далі. Формула рахуватиметься тільки для тих рядків, які під умову підпадають.

Кілька рядків умови за замовчуванням об’єднуються словом «АБО» — тобто досить, щоб виконався будь-який із них. Перемикається це в самому конструкторі. Під умовою програма переказує її звичайними словами: перш ніж зберігати, варто прочитати цей переказ і переконатися, що вийшло те, що ви мали на увазі.

Блок «Умова застосування (необов'язково)» формули поля
1Конструктор умов застосування формули
2Кнопка «Зберегти» умови
  1. Конструктор дозволяє додати правило або групу правил і обрати поле, оператор та значення умови.
  2. Кнопка «Зберегти» записує умову застосування формули; поруч — «Очистити все» для скидання побудованих правил.

Унизу блока — «Очистити умову» і «Зберегти умову»; після збереження показується «Успішно оновлено». Умова зберігається окремо від тексту формули — і «Очистити умову» саме по собі її не знімає: кнопка тільки очищає конструктор на екрані, а до формули порожня умова доїде лише після «Зберегти умову». У списку формул умови не видно ніяк: щоб дізнатися, чи вона є, треба стати на формулу й розкрити цей блок.

Умова — найдешевший спосіб випробувати нову формулу без ризику. Обмежте її одним артикулом, натисніть «Застосувати цю формулу», подивіться результат у сітці товарів, і тільки потім знімайте обмеження.

Коли формула рахується

Жоден із цих моментів не настає тоді, коли ви дописали формулу: сама по собі правка значень у товарах не змінює.

  1. Під час кожного завантаження прайсу — доки крок «Застосування формул для полів» стоїть у переліку операцій цього прайсу. Новий прайс отримує його одразу, але з переліку крок можна прибрати; тоді формули при завантаженні рахуватися не будуть (порядок операцій).
  2. Кнопкою в цьому вікні. «Застосувати формули» — за всіма активними формулами прайсу, «Застосувати цю формулу» — тільки за обраною.
  3. Разом із ручним застосуванням націнки. Кнопка «Застосувати націнку для товарів» після перерахунку цін проганяє й формули — але лише ті, приймач яких є ціною або числом. Текстові формули в цьому прогоні не виконуються.

Порядок застосування

Усередині одного прогону формули йдуть за колонкою «Порядок». Це важливо, коли одна формула користується результатом іншої: щоб зібрана назва потрапила у формулу, яка потім рахує з неї артикул, у першої порядок має бути меншим.

Загальна черга така:

  1. формули цього прайсу — за колонкою «Порядок»;
  2. формули, прив’язані до аркуша Excel, якщо в прайсу увімкнено налаштування за аркушами;
  3. формули для всіх прайс-листів — завжди останніми.

Перед першою формулою прогону програма оновлює службові значення рядка — назву категорії, постачальника і його групу, статус наявності. Тому макроси на кшталт {Прайс: Категорія} бачать уже свіжі значення.

Друге натискання «Застосувати формули» рахує від уже порахованого. Формула {Прайс: Ціна} * 1.1, записана в поле «Ціна», підніме ціну на 10 % при кожному натисканні: 100 → 110 → 121 → 133. Захисту «застосувати один раз» у формул немає, на відміну від націнки. Якщо формула читає й пише те саме поле, натискайте кнопку один раз і перевіряйте результат, а не тисніть її повторно «про всяк випадок».

І окремо про кому: десяткова частина числа пишеться через крапку. З комою — * 1,1 — програма прочитає її як два різні числа, формула не виконається жодного разу й потрапить до вікна «Помилки у формулах».

Формула і націнка: хто останній

Місце формул у ланцюгу операцій завантаження налаштовується: вони можуть стояти до переоцінки товару або після неї. По всіх базах розподіл майже порівну — приблизно в половини джерел формули йдуть раніше, у половини пізніше. Якщо і формула, і правило ціноутворення пишуть в одне поле, переможе те, що виконується останнім, тож у спірному випадку подивіться, як стоять ці два кроки саме у вашого прайсу — це видно у вікні «Перелік операцій». Порядок операцій розібраний у статті про порядок операцій під час завантаження прайсу, самі правила — у статті про правила ціноутворення.

«Історія націнки товару» показує, як склалася ціна за правилами ціноутворення. Роботи формули там не видно — це окремий механізм, і власної історії він не веде.

Формули для всіх прайс-листів одразу

Якщо однакову формулу треба застосувати до всіх постачальників, заводити її в кожному прайсі не потрібно. Вхід один: у вікні прайс-листів оберіть ліворуч «Усі джерела», відкрийте вкладку «Усі товари» і викличте «Формули для полів» з бургера над сіткою (підказка «Додаткові операції»).

Ознака того, що ви саме в цьому режимі, — червоний рядок під панеллю кнопок: «Використовуються налаштування для всіх прайс-листів.» Це не помилка й не попередження про поломку; це нагадування, що правки тут стосуються всіх джерел.

Панель кнопок і попередження про формули для всіх прайс-листів у режимі «Усі джерела»
1Попередження про застосування формул до всіх прайс-листів
2Кнопка «Застосувати формули»
  1. Червоний рядок попереджає, що у режимі «Усі джерела» формули застосовуються одразу до всіх прайс-листів.
  2. У цьому режимі кнопка «Застосувати формули» перераховує значення в усіх прайс-листах одночасно — тому вона тільки показана, не натискаємо.

Такі формули рахуються після формул конкретного прайсу. Якщо вони пишуть в одне поле, переможе загальна: результат формули прайсу буде перезаписаний. Це найчастіша причина «формула правильна, а значення чуже».

Кнопка «Застосувати формули» в цьому режимі обходить усі активні прайси всіх активних контрагентів. На великому наборі джерел це надовго, і повідомлення «Виконується перерахунок...» висітиме відповідно довго — перерахунок не завис.

Характеристики й фото: окрема механіка

Два поля-приймачі поводяться не так, як решта, і про це варто знати до того, як формула виконається. Сюди ж належить прапорець у списку формул, який має сенс лише для одного поля.

Характеристика товару

Коли приймачем обрана характеристика, значення записується в характеристику товару, а не в його рядок. Якщо у товару такої характеристики ще не було, програма створює її сама — тобто формула не тільки заповнює значення, а й додає товарам характеристику, якої постачальник не надсилав.

Посилання на фото

Поле «Посилання на фото товару» обробляється двічі: результат потрапляє і в саме поле, і до переліку фотографій товару. Після цього однакові посилання прибираються, тож повторний прогін не наплодить дублів одного знімка.

Прапорець «Оновлювати ключ унікальності товару»

Цей прапорець стоїть у кожному рядку списку, але працює тільки для поля найменування. Для решти полів він не робить нічого.

Навіщо він потрібен: за назвою товару програма впізнає, що це той самий товар, який приходив минулого разу. Якщо формула переписує найменування, ключ упізнавання «поїде», і при наступному завантаженні той самий товар вважатиметься новим. Прапорець змушує програму перерахувати ключ одразу після формули — і впізнавання не ламається.

Округлення результату

Результат округлюється тільки в полів-цін. Керують цим два перемикачі в налаштуваннях системи: Кабінет → Налаштування системи → розділ «Оновлення каталогу» → підрозділ «Ціни та націнки».

Стан налаштуваньЩо вийде в полі
«Округляти вгору» увімкненоціна округлюється до цілого в більший бік
«Округляти вниз» увімкненоціна округлюється до цілого в менший бік
обидва вимкненіціна округлюється до копійок — це стан за замовчуванням

Ці ж перемикачі керують округленням після націнки, і докладний розбір із прикладами є в статті про правила ціноутворення, розділ «Округлення і кратність ціни». Налаштування спільні: змінивши їх заради формули, ви зміните й підсумкові ціни всіх прайсів.

Текстові поля й поля з дробовими числами, які не є цінами, не округлюються взагалі — там результат лягає таким, як порахувався. Потрібне округлення в такому полі — робіть його самі функцією ROUND усередині формули.

Порожнє значення і ділення на нуль

Порожнє порожньому не рівня, і різниця тут коштує даних. Порожня колонка прайсу — це порожній рядок або нуль: склейка з нею виживе, і CONCAT({Прайс: Виробник}, ' ', {Прайс: Артикул виробника}) у товара без виробника дасть просто артикул із пробілом попереду. А от коли значення немає фізично — товар не зіставлений із каталогом, ділення пішло на нуль, блоковий макрос нічого не знайшов, — порожнім стає весь вираз, скільки б у ньому не було інших операндів.

Такий результат не залишає поле як було, а обнуляє його. У числове поле й у поле ціни ляже нуль, у текстове — порожній рядок. Ділення на нуль поводиться так само: жодної помилки, просто нуль у полі.

Найчастіше на це наражаються з формулою {Товар БК: …} на прайсі, де зіставлено не всі товари. Зіставлені отримають значення з каталогу, а всі інші — нуль або порожній рядок замість того, що в них було. Причому «того, що було» вже ніде немає: відкату у формул не передбачено.

Захист — перевірка всередині формули, але писати її треба уважно. Напрошується варіант «якщо порожньо, то взяти з прайсу»:

IF({Товар БК: Артикул виробника} = "", {Прайс: Артикул виробника}, {Товар БК: Артикул виробника})

Так робити не можна. Ця перевірка рятує тільки зіставлений товар, у якого поле каталогу порожнє. На незіставленому вона не спрацьовує: там значення не порожнє, а відсутнє, і порівняння «відсутнє дорівнює порожньому» не дає ні «так», ні «ні» — формула йде в другу гілку й знову бере з каталогу. Тобто рецепт мовчки обнуляє рівно ті рядки, заради яких його й писали.

Робочий варіант відрізняється однією обгорткою — IFNULL, яка підставляє порожній рядок замість відсутнього значення:

IF(IFNULL({Товар БК: Артикул виробника}, "") = "", {Прайс: Артикул виробника}, {Товар БК: Артикул виробника})

Читається так: якщо артикула в каталозі немає або він порожній — залишити артикул із прайсу, інакше взяти з каталогу. Прогін на прайсі зі 160 позицій, де зіставлено 64: перший варіант обнулив 96 рядків, другий — жодного.

Для цін обгортка не потрібна — там ловлять інше: перевірка > 1 або > 0 перед тим, як щось на це число ділити.

Як перевірити формулу

Окремого попереднього перегляду у вікні немає: кнопки «Перевірити» й тестової сітки з результатом ви тут не знайдете. Замість них є ось що.

Перевірка синтаксису при застосуванні. Перед тим як щось рахувати, програма перевіряє формулу на правильність запису. Формула з помилкою просто пропускається — решта формул при цьому застосовується, а ви отримуєте вікно «Помилки у формулах» з переліком того, що не спрацювало.

Розбір у ШІ-помічника. Іконка з паличкою в панелі вікна відкриває помічника з питанням про формулу для обраного поля. У вікні помилок є кнопка «Запитати ШІ-помічника» — вона передає всі зламані формули одним питанням і просить пояснити, що не так, і дати виправлені варіанти.

Обмеження області. Умова застосування (розділ вище) дозволяє прогнати формулу спочатку на одному товарі.

Звіряння результату. Якщо вкладка товарів прайсу відкрита поруч, після застосування її сітка оновиться сама.

Перевіряється тільки правильність запису, а не сенс. Формула, у якій ви переплутали ціну із собівартістю, пройде перевірку й порахується — і ви побачите це лише в цінах товарів. Тому перший прогін завжди варто робити на обмеженій області.

Перевірка нової формули на одному товарі

Чого формули не роблять

  • Не зберігають попереднє значення. Формула перезаписує поле, і того, що було до неї, не залишається ніде. Відкату немає; повернути вихідні дані можна лише повторним завантаженням прайсу.
  • Не показують результат до застосування. Попереднього перегляду у вікні немає — тільки перевірка правильності запису в момент розрахунку.
  • Не ловлять помилку в задумі. Формула, записана без помилок, але з не тим полем, виконається й зіпсує значення мовчки.
  • Не рахують формули аркушів, доки не увімкнено налаштування за аркушами. Формула з назвою аркуша просто не потрапляє в прогін, і повідомлення про це немає.
  • Не ведуть історії. Ні історії правок самої формули, ні сліду в «Історії націнки товару»: там видно тільки роботу правил ціноутворення.

Що робити, коли значення не порахувалося

Розбір частих проблем
Що ви бачитеЧому такЩо зробити
«Формули застосовано», а значення в товарах те саме Найчастіше: товари не підпали під «Умову застосування»; у формулі є заборонене слово; результат перезаписала формула для всіх прайс-листів; формула прив’язана до аркуша, а налаштування за аркушами вимкнене. Рідше — комусь вимкнули «Активність»: нова формула створюється увімкненою Перевірте саме в такому порядку (коли формула рахується)
Поле стало нулем або порожнім У виразі не було значення: товар не зіставлений із каталогом, ділення на нуль або блоковий макрос нічого не знайшов Оберніть поле каталогу в IFNULL — просто IF(поле = "") тут не рятує; попереднє значення не відновлюється, потрібне повторне завантаження прайсу (порожнє значення)
Вікно «Помилки у формулах» зі списком полів Хоча б одна формула не пройшла перевірку правильності запису Виправте перелічені — решта вже застосована; за розбором натисніть «Запитати ШІ-помічника» (перевірка формули)
У журналі: «Формулу пропущено: поле «…», правило №… (…). Перевірте синтаксис формули — решту формул застосовано.» Та сама помилка запису, але спіймана під час завантаження прайсу Відкрийте «Формули для полів» цього прайсу й знайдіть правило за номером із повідомлення
У повідомленні про помилку: «глобальна формула, застосована до прайсу» Зламана — вона перевіряється на кожному прайсі, тому й помилка повторюється в кожному Правте її в режимі для всіх прайс-листів, а не у вікні цього джерела (формули для всіх прайс-листів)
У повідомленні про помилку: «формула прайсу» Зламана формула саме цього джерела Відкрийте «Формули для полів» цього прайсу й виправте правило за номером
У повідомленні про помилку дописано «аркуш «…»» Формула прив’язана до аркуша Excel і у звичайному вікні формул її не видно Відкрийте формули з вікна «Завантаження з аркушів», обравши потрібний аркуш (точки входу)
Ціна росте з кожним натисканням «Застосувати формули» Формула читає й пише те саме поле, тому рахує від уже порахованого Рахуйте в інше поле або натискайте кнопку один раз за прогін (порядок застосування)
Формула з {Товар БК: …} спрацювала лише на частині товарів Решта рядків прайсу не зіставлена з каталогом, і полів каталогу в них немає Зіставте товари й повторіть; до того захистіть формулу обгорткою IFNULL (порожнє значення, зіставлення товарів)
«Виконується перерахунок...» висить довго Перерахунок іде по всіх товарах прайсу, а в режимі для всіх прайс-листів — по всіх активних джерелах Дочекайтеся; наступного разу обмежте область умовою застосування (умова застосування)
Червоний рядок «Використовуються налаштування для всіх прайс-листів.» Вікно відкрите в режимі для всіх прайсів — із вкладки «Усі товари» Щоб правити формули одного прайсу, відкрийте вікно з його картки (формули для всіх прайс-листів)
Червоне повідомлення «Error:» із текстом Правка не збереглася — обірвався зв’язок або закінчилася сесія Оновіть список кнопкою «Оновити» і повторіть правку; звіряйтеся з відміткою «Збережено ·»
Формула була, а в списку її немає Формули аркушів видно тільки при вході з вікна «Завантаження з аркушів»; формули для всіх прайсів — тільки в режимі для всіх прайсів Відкрийте вікно з того самого входу, з якого створювали формулу (точки входу)

Хто має доступ

Право «Формули для полів» є в списку прав груп користувачів, і зняти його можна — але покладатися на нього як на замок не варто: фактично вікно відкриється кожному, хто може відкрити прайс-листи, бо саме звідти стоять кнопки, які його викликають. Щоб закрити людині доступ до формул, закривати треба доступ до роботи з прайс-листами загалом.

Дрібнішого поділу прав усередині вікна немає: або людина бачить формули цілком і може їх правити й застосовувати, або не бачить вікна. Прапорця модуля у функції теж немає — формули доступні на будь-якому тарифі.

Часті запитання

Де кнопка «Зберегти» у формули?

Її немає. Текст формули зберігається сам приблизно за секунду після того, як ви перестали друкувати, а перемикачі й примітка — одразу. Що правка дійшла, показує відмітка «Збережено ·» з часом над редактором.

Я змінив формулу — чому значення в товарах ті самі?

Формула й значення живуть окремо. Перерахунок відбувається при завантаженні прайсу або по кнопці: «Застосувати формули» — за всіма активними формулами, «Застосувати цю формулу» — за однією.

Чи можна порахувати поле для товарів однієї категорії?

Так, для цього є блок «Умова застосування (необов’язково)» під редактором. У конструкторі задається умова по полях товару прайсу, і формула рахується тільки для рядків, які під неї підпадають.

Що буде, якщо в потрібній колонці прайсу порожньо?

Порожня колонка самого прайсу нічого не ламає: у виразі вона поводиться як порожній рядок або нуль, і склейка тексту з нею виживе. Небезпечний інший випадок — коли значення немає зовсім: незіставлений товар каталогу, ділення на нуль. Тоді порожнім стає весь вираз, і поле обнулиться без можливості повернути. Поля каталогу для цього обгортають в IFNULL; просто IF(поле = "") від цього не рятує.

Як зробити формулу однаковою для всіх постачальників?

У вікні прайс-листів оберіть ліворуч «Усі джерела», відкрийте вкладку «Усі товари» і викличте «Формули для полів» з бургера над сіткою. Ознака режиму — червоний рядок «Використовуються налаштування для всіх прайс-листів.». Такі формули рахуються останніми й перезаписують результат формул конкретного прайсу.

Чи можна формулою заповнити характеристику товару?

Так, характеристики є в списку полів-приймачів нарівні зі звичайними полями. Якщо у товару такої характеристики не було, програма створить її сама.

Суміжні теми

Чи була стаття корисною?