Cum calculezi coloane personalizate în feed-uri de produse (fără să modifici catalogul)

Construiește coloane calculate în feed-ul Dynamic din easySales — preț minim, preț în altă monedă, stoc disponibil — folosind o caracteristică, o coloană și o regulă cu formulă. Catalogul tău rămâne neatins.

Mai devreme sau mai târziu, orice comerciant care rulează un feed Dynamic se lovește de același obstacol: partenerul cere o coloană care nu există pe produse. Un partener de repricing vrea un min_price ca prag minim. Un distribuitor B2B vrea eur_price alături de prețul în lei. Un 3PL vrea available_stock — stocul fizic minus ce s-a alocat deja pe comenzi. Coloanele nu sunt în catalog. Numerele nu merită stocate pe fiecare produs. Dar partenerul nu acceptă fișierul fără ele.

Pentru asta există coloanele calculate în feed-ul Dynamic din easySales. Definești coloana în feed, scrii o formulă scurtă, iar easySales calculează valoarea la fiecare regenerare. Catalogul de produse rămâne curat. Nimic nu se salvează pe produsele propriu-zise.

De ce comercianții construiesc coloane calculate

O „coloană calculată" e o coloană a cărei valoare e calculată în momentul în care se generează feed-ul — nu e stocată nicăieri. Există pentru fișierul pe care îl publici, și doar pentru el.

Trei tipare apar mereu:

  • Praguri și plafoane. Un partener de repricing vrea cel mai mic preț pe care îl accepți. Nu vrei să stochezi asta ca atribut de produs (se schimbă pe canal, pe campanie, pe politică de marjă). O formulă îl derivează din prețul de achiziție + marjă la fiecare export.
  • Feed-uri cu altă monedă. Un partener din afara pieței tale vrea prețuri în moneda lui. Stocarea unei coloane paralele de preț per piață nu scalează; conversia din mers — da.
  • Disponibilitate calculată. Un partener trebuie să vadă ce e cu adevărat comandabil, nu ce e pe raft. stoc - stoc_rezervat e la o scădere de coloană distanță.

Trăsătura comună: valoarea e o funcție de alte valori ale produsului, recalculată la fiecare regenerare a feed-ului. A o stoca pe fiecare produs ar însemna actualizarea fiecărui produs ori de câte ori se schimbă inputurile — o povară de mentenanță de care nu ai nevoie.

Cum funcționează o coloană calculată în easySales

Trei piese, fiecare durează cinci secunde de muncă:

  1. O caracteristică — locul unde stă valoarea. O creezi o singură dată, îi dai un nume, și o lași goală pe toate produsele.
  2. O coloană în feed-ul Dynamic — conexiunea care duce caracteristica în fișierul exportat.
  3. O regulă de feed cu o acțiune de tip formulă — calculul care umple locul la momentul exportului.
Diagramă cu cele trei piese ale unei coloane calculate de feed în easySales: o caracteristică ce funcționează ca slot, o coloană din feed-ul Dynamic ce conectează slot-ul la export, și o formulă din regula de feed care umple slot-ul în momentul redării.
Trei piese, fiecare cu un rol bine definit: o caracteristică ca slot, o coloană în feed-ul Dynamic ca legătură, o formulă în regula de feed ca valoare.

Locul rămâne gol în catalog. Regula îl umple în timpul exportului. Coloana redă valoarea umplută în fișier. Trei piese mici, fiecare cu un rol bine definit. Adaugi regula, regenerezi, valoarea apare. Scoți regula, regenerezi, valoarea dispare — fără ca vreun produs să se schimbe vreodată.

Pasul 1: Creează caracteristica

Deschide Catalog → Caracteristici și creează o caracteristică nouă. Dă-i un nume clar — cel pe care îl așteaptă partenerul în fișier e o alegere bună.

Exemple: Preț minim, Preț EUR, Stoc disponibil.

Nu trebuie să completezi valori pe niciun produs. Tot scopul este ca această caracteristică să fie o destinație pentru o formulă, nu un atribut real de produs. Salvează și mergi mai departe.

Captură de ecran cu pagina Catalog → Caracteristici din easySales, cu o caracteristică nou creată numită Preț minim, fără valori pe produse.
Creezi caracteristica, îi dai un nume clar, o lași goală. Formula o va umple.

Câteva sfaturi de denumire:

  • Alege nume pe care le vei recunoaște peste șase luni. Preț minim de vânzare (RO) e mai bun decât min_price_ro_v2.
  • Dacă aceeași valoare va fi folosită în mai multe feed-uri, folosește o singură caracteristică pentru toate. Valorile calculate sunt limitate la nivel de feed (regula trăiește pe feed), așa că aceeași caracteristică poate ține valori calculate diferite în feed-uri diferite fără să se ciocnească.
  • Evită caracteristicile care au deja date de produs pe ele. Dacă Voltaj e un câmp real de catalog, nu-l reutiliza ca slot calculat — alege alt nume. Valorile calculate suprascriu pivotul existent în memorie; ai pierde valorile reale pe durata generării feed-ului.

Pasul 2: Adaugă caracteristica în feed-ul Dynamic

Deschide feed-ul Dynamic. În builder-ul de coloane, adaugă un rând nou, alege Caracteristică din lista coloanelor, apoi alege caracteristica creată mai devreme din selectorul secundar.

Coloana se va afișa în fișierul exportat. Valoarea celulei vine din ce calculează regula pentru fiecare produs.

Captură de ecran cu builder-ul de coloane al feed-ului Dynamic în easySales, cu o coloană de tip Caracteristică pentru Preț minim și câmpul Redenumește setat la min_price.
Adaugi caracteristica drept coloană, apoi folosești câmpul Redenumește ca să se potrivească numelui așteptat de partener.

Dacă partenerul așteaptă un nume specific pentru acea coloană — min_price în loc de Preț minim, price_eur în loc de Preț EUR — folosește câmpul Redenumește de lângă coloană. Numele redenumit e cel care apare ca antet CSV / cheie JSON / nume de element XML; restul interfeței păstrează ce ai scris pentru tine. Redenumirea funcționează pe orice coloană din feed-ul Dynamic, calculată sau nu — e același câmp ori de câte ori partenerul așteaptă un alt nume decât cel folosit intern de easySales.

Pasul 3: Scrie regula de feed care calculează valoarea

Treci la tab-ul Reguli feed pe același feed. Adaugă o regulă:

  • Dacă: ÎNTOTDEAUNA (sau o condiție — vezi mai jos).
  • Atunci: alege caracteristica creată ca proprietate, alege formulă ca operator, apoi scrie formula.
Captură de ecran cu editorul de reguli de feed din easySales — proprietatea setată la caracteristica Preț minim, acțiunea formulă, formula round(acquisition_price * 1.15, 2).
O regulă de feed cu o țintă de tip caracteristică și o acțiune formulă. Alegi caracteristica, scrii formula, salvezi.

Editorul de formule are o paletă de chip-uri cu variabilele pe care le poți folosi:

  • ${product.product_sale_price}, ${product.product_full_price} — prețurile listate, fără TVA.
  • ${product.product_acquisition_price} — prețul tău de achiziție.
  • ${product.product_tax_rate} — cota de TVA per produs ca număr întreg (ex. 19, 20, 21). Împarte la 100 pentru a-l converti într-un multiplicator — 1 + ${product.product_tax_rate} / 100 returnează 1.21 pentru o cotă de 21%, exact ce ai înmulți cu un preț net pentru a obține prețul cu TVA.
  • ${product.product_characteristic:<nume>} — citește altă caracteristică după nume (case-sensitive). Util pentru înlănțuire: scrii o caracteristică cu o valoare de bază, o referențiezi din formula altei caracteristici.
  • ${product.product_meta_field:<cheie>} — citește un câmp meta de produs după cheie.
  • ${product.product_price_group:<id>} — citește un preț de grup contractual pentru produs.
  • ${other.currency_rate:FROM:TO} — rata de schimb live între două coduri ISO de monedă (ex. RON:EUR, EUR:USD).
  • round(<expresie>, <zecimale>) — rotunjește rezultatul la o precizie fixă.

Operatori: +, -, *, /, paranteze pentru grupare. Aritmetică standard.

Unele coloane nu sunt expuse ca variabile de formulă în mod intenționat — stoc, stoc rezervat, greutate și alte coloane non-preț. Pentru a calcula o valoare din ele, folosește operatorii de acțiune aritmetici dintr-o regulă (suprascrie, scade, înmulțește, adună) în loc de formulă. Rețeta Stoc disponibil de mai jos arată tiparul.

Salvează regula. Următoarea regenerare o rulează pentru fiecare produs, umple caracteristica în memorie și redă valoarea în fișier. Catalogul de produse nu e niciodată atins — pagina de caracteristici rămâne la fel de goală cum ai lăsat-o.

Dacă vrei ca formula să se aplice doar pe anumite produse (o categorie, produsele cu stoc, produsele unei mărci), adaugă condiții pe partea Dacă: pe caracteristică, pe coloană, pe categorie — orice acceptă builder-ul de reguli.

Rețete din lumea reală

Preț minim de vânzare pentru un partener de repricing

Un partener de repricing are nevoie de un prag — prețul sub care n-ar trebui să coboare. Nu vrei să stochezi asta pe fiecare produs (se schimbă când costurile sau politica de marjă se schimbă), așa că îl calculezi.

  • Nume caracteristică: Preț minim
  • Redenumire coloană: min_price
  • Formulă: round(${product.product_acquisition_price} * 1.15, 2) — preț de achiziție + 15% marjă.

Ajustează multiplicatorul per canal scriind reguli diferite în feed-uri diferite. Aceeași caracteristică, formule diferite, fișiere diferite. Catalogul nu vede nimic din toate astea. Captura din Pasul 3 de mai sus arată exact această regulă configurată.

Preț în altă monedă pentru un partener cross-border

Partenerul tău e într-o altă piață și vrea prețuri în moneda lui. easySales are o funcție integrată de rată de schimb, ca să nu ții o listă paralelă de prețuri.

  • Nume caracteristică: Preț EUR
  • Redenumire coloană: price_eur
  • Formulă: round(${product.product_sale_price} * ${other.currency_rate:RON:EUR}, 2) — înlocuiește RON:EUR cu perechea FROM:TO care ți se potrivește.

Ratele se actualizează automat zilnic — easySales le ia dintr-o sursă centrală, ca să nu ții un tabel paralel. Dacă partenerul are nevoie de o rată stabilă pentru o perioadă contractuală (în loc de cea live), scrie-ne pe suport și vom găsi împreună cea mai bună soluție.

Captură de ecran cu editorul de reguli — proprietatea setată la caracteristica Preț EUR, acțiunea formulă, formula sale_price * currency_rate(RON:EUR) rotunjită la 2 zecimale.
O coloană calculată în altă monedă: formula înmulțește prețul de vânzare cu rata RON-EUR live, rotunjită la 2 zecimale.

Stoc disponibil (fizic minus rezervat)

Partenerul vede stocul pe care îl publici; dacă e numărul de pe raft și ai comenzi deschise, vei vinde mai mult decât ai. Numărul corect de publicat e available-to-promise: stocul fizic minus ce e rezervat pe comenzi deschise.

stoc și stoc rezervat nu sunt expuse ca variabile de formulă, așa că această rețetă nu folosește deloc operatorul formulă. În schimb, înlănțuiești două acțiuni aritmetice pe aceeași caracteristică — prima scrie baza, a doua o ajustează.

  • Nume caracteristică: Stoc disponibil
  • Redenumire coloană: available_stock
  • Acțiune 1: țintă = Stoc disponibil, operator = suprascrie cu, sursă = coloana stoc. (Setează caracteristica la valoarea stocului produsului.)
  • Acțiune 2 (adăugată sub prima, în aceeași regulă): țintă = Stoc disponibil, operator = scade, sursă valoare = câmp, coloana = stoc rezervat. (Scade coloana stoc rezervat din valoarea curentă.)

Două acțiuni, o singură regulă, de sus în jos. Prima scrie baza; a doua o ajustează. Poți înlănțui o a treia acțiune (adună / scade față de un număr literal) dacă matematica ta de fulfillment cere un buffer fix de stoc de siguranță.

Captură de ecran cu editorul de reguli din easySales cu două acțiuni înlănțuite pe caracteristica Stoc disponibil — suprascrie cu coloana stoc, apoi scade coloana stoc rezervat.
Două acțiuni înlănțuite, o singură regulă. Prima scrie baza; a doua scade cantitatea rezervată.

Redenumirea oricărei coloane în export

Câmpul Redenumește apare lângă fiecare coloană din builder-ul feed-ului Dynamic, nu doar pe cele calculate. Folosește-l oricând partenerul așteaptă un alt nume decât cel intern al easySales — price în loc de full_price, cost în loc de sale_price, inventory în loc de stock.

Două note:

  • Redenumirea se aplică în fișierul exportat: antetul CSV, cheia JSON și numele de element XML. Restul interfeței păstrează numele easySales ca să nu te pierzi.
  • Numele de elemente XML au reguli mai stricte decât CSV sau JSON. Dacă redenumirea conține spații sau punctuație, easySales o sanitizează automat pentru XML — Preț min (RON) devine pret_min_ron_ în tag-uri <pret_min_ron_>. Antetele CSV și cheile JSON păstrează ce ai scris exact.

Dacă două coloane se redenumesc în același nume de export, builder-ul de feed blochează salvarea și îți arată care se ciocnesc. Alege un nume unic și se va salva.

Când să NU folosești o coloană calculată

  • Atribute reale de produs. Dacă datele aparțin în mod natural produsului (Culoare, Mărime, Voltaj, EAN), folosește o caracteristică obișnuită și stochează-o. Coloanele calculate sunt pentru valori care nu aparțin catalogului.
  • Mapări de categorii per canal. Dacă partenerul tău are nevoie de un id de categorie Google Shopping, un cod Skroutz sau orice mapare de la categoria ta la a lor, folosește builder-ul specific canalului — e pre-validat și-ți scutește munca de mapare. Feed-ul Dynamic e opțiunea deschisă pentru parteneri pentru care nu avem un builder dedicat. Vezi Ce este un feed de produse? pentru introducerea în feed-uri de canal.
  • Valori statice fixe. Dacă fiecare produs primește aceeași valoare (condition: new, availability: in_stock), folosește acțiunea setează la valoare pe o coloană obișnuită în loc să sintetizezi o caracteristică — cu o piesă mobilă mai puțin.

Dacă nu ești sigur dacă o coloană ar trebui să fie calculată, stocată sau fixă, suportul poate analiza cazul tău. Majoritatea întrebărilor „calculat-sau-stocat?" se rezolvă în două minute odată ce schițezi cazul de utilizare.

Nu necesită card
14 zile gratuit
Poți anula oricând

Construiește coloanele de care au nevoie partenerii tăi

Deschide Feed-uri → Dynamic în easySales și exportă un fișier gata de parteneri cu coloane calculate în câteva minute. Ești nou aici? Încearcă easySales gratuit 14 zile, fără card.

Întrebări frecvente

Nu. Coloanele calculate sunt evaluate în memorie cât timp se generează feed-ul, apoi sunt aruncate. Deschide pagina de produse după regenerare și vei vedea aceleași valori de caracteristici pe care le aveai înainte — goale, în setup-ul tipic. Catalogul nu se schimbă niciodată. E intenționat: îți permite să publici multe coloane calculate diferite în multe feed-uri diferite, fără ca datele tale de produs să devină haotice.

Nu. Caracteristica e doar un slot în care formula scrie la momentul exportului. Cele mai multe setup-uri de coloane calculate creează o caracteristică nouă și nu îi dau niciodată valori pe produse. Dacă caracteristica are deja valori pe unele produse și scrii o regulă care o suprascrie, regula câștigă — pentru acea generare a feed-ului — și valorile originale rămân intacte în catalog.

Câmpuri de produs: sale_price, full_price, acquisition_price, tax_rate. Alte caracteristici după nume: ${product.product_characteristic:&lt;Nume&gt;}. Conversie valutară: ${other.currency_rate:FROM:TO} returnează rata de schimb live între două coduri de monedă. Funcția round() rotunjește o expresie la o precizie zecimală dată. Operatori aritmetici standard (+, -, *, /) și paranteze pentru grupare. Editorul de formule expune toate astea ca chip-uri click-to-insert ca să nu trebuiască să ții minte sintaxa exactă. Notă: tax_rate e număr întreg (ex. 19, 21) — împarte-l la 100 când îl folosești ca multiplicator.

Cadența implicită e orară, iar fișierul se regenerează doar când partenerul îl citește (ca feed-urile dormante să nu consume resurse). La fiecare regenerare, formula se re-evaluează pe datele curente — o schimbare de preț pe un produs ajunge automat în coloana calculată la următoarea redare. Pentru exporturi de catalog ERP poți cere suportului să o coboare la zilnic; pentru sincronizări rapide cu partenerii, suportul o poate urca.

Da. Regula de feed are o parte „Dacă" și una „Atunci". Pune orice condiție pe partea „Dacă" — caracteristica X egală cu Y, categoria conține Z, marca e W, stocul mai mare ca 0 — și formula rulează doar pe produsele care se potrivesc. Celelalte produse sar peste regulă și coloana calculată apare goală în export pentru ele. Combină mai multe reguli pentru grupuri de produse diferite cu formule diferite.

În builder-ul de coloane al feed-ului Dynamic, fiecare rând de coloană are un câmp Redenumește lângă lista coloanelor. Tastează numele așteptat de partener („price", „min_price", „cost", oricare) și acel nume apare ca antet CSV / cheie JSON / nume de element XML în fișierul exportat. Redenumirea funcționează pe orice coloană, calculată sau nu. Numele XML se sanitizează automat dacă redenumirea ta are spații sau punctuație; CSV și JSON păstrează ce ai tastat exact.

Da. Calea cea mai simplă e să adaugi sale_price_including_tax sau full_price_including_tax direct ca o coloană în feed-ul Dynamic — sunt coloane normale în lista coloanelor și conțin deja valoarea cu TVA. Fără formulă. Dacă ai nevoie de o formă custom (preț de vânzare plus TVA plus marjă, sau cu TVA în altă monedă), folosește o formulă: round(${product.product_sale_price} * (1 + ${product.product_tax_rate} / 100), 2) reproduce manual matematica cu TVA. Notă: ${product.product_tax_rate} returnează un număr întreg ca 19 sau 21 — împarte-l la 100 înainte să adaugi 1 pentru a obține multiplicatorul corect.

A fost util acest ghid?