Od verze 2025.6.0 kontroluje import položky dokladu, zda zadané součty odpovídají přepočtu cenaMj (jednotková cena) × mnozMj (množství). Kontrolou prochází i veškeré nastavené slevy — v hlavičce dokladu i na položce — a celkové sumy.
Rozpor se ohlásí ve dvou úrovních, podle toho, jak daleko od sebe zadané a vypočtené hodnoty jsou:
Kód | Úroveň | Kdy nastane |
| Chyba — doklad se neuloží, | Zadanou částku nelze srovnat s tím, co Flexi z ceny a množství spočítá. |
| Varování — doklad se uloží, | Součty dokladu si odpovídají, ale cena po slevách vychází jinak, než jste zadali. |
⚠️ Varování si snadno přehlédnete — odpověď má success true. Chcete-li, aby import v takovém případě neprošel, přidejte do URL parametr ?fail-on-warning=true; požadavek pak skončí 400. Vlastní import si můžete nejprve nasucho ověřit testovacím uložením ?dry-run=true.
Nejjistější je uvádět na položce cenaMj. Pokud ji neznáte, nabízí se řešení popsaná níže.
Jak vypadají chybové odpovědi
Chyba, která uložení zruší:
<error for="sumZkl" path="faktura-vydana[temporary-id=null].sumZkl" value="146.28" code="PROP" messageCode="inputDiffComputed">Zadaná hodnota [146.28] vlastnosti [sumZkl] se liší od vypočtené hodnoty [135.0] [DoklFak -1]</error>
Varování, po kterém se doklad uloží:
<warning for="cenaMj" path="faktura-vydana[temporary-id=null].polozkyFaktury" code="INVALID" messageCode="polDoklNesediSumyPoSleve">Pro položku s jednotkovou cenou [409.8] za Mj, množstvím [1.0], slevou na dokladu [10.0] a slevou na položce [5.0] vychází očekávaná cena [348.33], ale zadaná hodnota byla [348.3]. [VF1-0180/2025]</warning>
Možná řešení
Použití previousValue
Atribut previousValue použijete ve chvíli, kdy neznáte cenaMj a znáte celkovou částku — hodnotu pak Flexi přijme tak, jak ji zadáte, a nepřepočítá ji. Lze jej uvést u těchto polí:
sumZklsumCelkemsumZklMensumCelkemMen
<faktura-vydana-polozka>
<typPolozkyK>typPolozky.obecny</typPolozkyK>
<mnozMj>1.0</mnozMj>
<sumDph>86.78</sumDph>
<sumZkl previousValue="0">413.22</sumZkl>
<text>test</text>
</faktura-vydana-polozka>
Nastavit položku jako účetní
U položky typu typPolozky.ucetni nelze použít ceník (cenik), množství (mnozMj) ani jednotkovou cenu (cenaMj) — kontrola přepočtu se jí proto netýká. Potřebujete-li tyto vlastnosti zachovat, použijte řešení výše nebo parametr níže.
<faktura-vydana-polozka>
<typPolozkyK>typPolozky.ucetni</typPolozkyK>
<sumDph>86.78</sumDph>
<sumZkl>413.22</sumZkl>
</faktura-vydana-polozka>
Nastavit pokročilý parametr paramValidateSumFak
Validaci lze vypnout pokročilým parametrem paramValidateSumFak, který je ve výchozím stavu true.
🚨 Před použitím parametru doporučujeme konzultaci s technickou podporou. Vypnutí validace může vést k neočekávanému chování — vypne totiž kontrolu, která byla přidána právě proto, že je potřebná.
<?xml version="1.0" encoding="utf-8"?>
<winstrom version="1.0">
<parametr>
<paramK>paramValidateSumFak</paramK>
<hodnota>true</hodnota>
</parametr>
</winstrom>
Příklady nevalidních XML
Chybějící cenaMj
<faktura-vydana-polozka>
<sumCelkem>177.00</sumCelkem>
<sumZkl>146.28</sumZkl>
<mnozBaleni>3.00</mnozBaleni>
<baleniId>1</baleniId>
<nazev>Test</nazev>
<cenik>code:TEST</cenik>
</faktura-vydana-polozka>
Bez jednotkové ceny Flexi spočítá základ položky jako nulu a import skončí chybou inputDiffComputed. Pokud cenaMj neznáte, řešením je právě previousValue.
Nesprávná cenaMj k sumZkl
<objednavka-prijata>
<typDokl>code:OBP</typDokl>
<firma>code:Firma</firma>
<bezPolozek>false</bezPolozek>
<polozkyDokladu>
<objednavka-prijata-polozka>
<cenik>code:Polozka</cenik>
<mnozMj>1</mnozMj>
<cenaMj>2000</cenaMj>
<typSzbDphK>typSzbDph.dphZakl</typSzbDphK>
<typCenyDphK>typCeny.bezDph</typCenyDphK>
<sumZkl>3000</sumZkl>
<sumDph>1000</sumDph>
<sumCelkem>4000</sumCelkem>
</objednavka-prijata-polozka>
</polozkyDokladu>
</objednavka-prijata>
Takto zaslaná objednávka dřív prošla bez povšimnutí a projevila se až později:
při realizaci (fakturaci) objednávky došlo k chybnému výpočtu,
při změně firmy na dokladu došlo k přepočtu nebo vynulování zadaných cen.
Řešením je zadat do cenaMj správnou hodnotu.
