Popis procesu importu dat z K2 do xTrace
| Název projektu: | MES xTrace |
|---|---|
| účel dokumentu | Popis procesu importů dat z K2 do xTrace |
| Datum: | 7.12.2022 |
| Autor: | Tomáš Plánka |
| Verze dokumentu: | 1 |
| Poslední změna | |
| Stav dokumentu: | Dokončeno |
Historie změn
| Datum | Task | Popis |
|---|---|---|
Popis procesu importu dat z K2 do xTrace
Nastavení SQL Job agenta Import K2MES
Import výrobků a materiálů z K2DB do K2MES
Struktura tabulky K2MES.dbo.Article
Import výrobků a materiálů z K2MES do xTrace
Import šarží materiálů z K2DB do K2MES
Struktura tabulky K2MES.dbo.Batch
Struktura tabulky K2MES.dbo.StockBatch
Import šarží materiálů z K2MES do xTrace
Nastavení SQL Job agenta Import K2MES JobCards
Popis tabulky K2MES.dbo.JobCard
Zařazení nových nebo změněných JobCard do fronty je zpracování
Zpracování JobCard ve frontě a import do xTrace
Proces importu výrobní objednávky z K2MES do xTrace
Import výrobního postupu pro JobCard
Základní informace
- Přenos dat mezi K2 – xTrace je navržen jako SQL to SQL. Protože oba systémy mají své data uložena na MS SQL je to nejlepší volba, jak si navzájem vyměňovat data.
- Na SQL serveru MIKROMES je vytvořena databáze K2MES, kde jsou tabulky s daty K2, které se přenáší do xTrace.
- Na SQL serveru MIKROMES je dále nalinkovaný SQL server K2DB
- Import dat z K2 do xTrace zajišťují SQL Job agenti, kteří jsou popsaní níže v tomto dokumentu.
Seznam dat, které importujeme
| Typ dat | Zdroj K2DB | Umístění v K2MES | Agent |
|---|---|---|---|
| Výrobky a materiály | [K2_Mikro].[dbo].[Article] | dbo.Article | Import K2MES |
| Šarže materiálů | [K2_Mikro].[dbo].[Batch] | dbo.Batch | Import K2MES |
| Šarže materiálů - Stock | [K2_Mikro].[dbo].[StockBatch] | dbo.StockBatch | Import K2MES |
| Výrobní objednávky | [K2_MIKRO].[dbo].[jobcard] K2_MIKRO.dbo.BusinessYearAndTaxGroup K2_MIKRO.dbo.BOOKCONFIGURATION K2_MIKRO.dbo.Articl |
dbo.JobCard | Import K2MES JobCards |
| Výrobní objednávky – postupy | [K2_Mikro].[dbo].[JobCardOperation] | dbo. jobcardOperation | Import K2MES JobCards |
| Výrobní objednávky – kusovníky | [K2_Mikro].[dbo].[JobCardItem] | jobcardItem_rev1 | Import K2MES JobCards |
Pomocné tabulky / data
| Typ dat | Zdroj K2DB | Umístění v K2MES | Agent |
|---|---|---|---|
| Zdroje pro Výrobní objednávky – postupy | [K2_Mikro].[dbo].[JobCardResource] | dbo.jobcardResource | Importuje se na vyžádání při importu JobCard |
| Routovací tabulka | Slouží pro import postupu, nahrazuje zdroj (pracoviště) K2 za xTrace zdroj, když K2 zdroj neexistuje v xTrace nebo chceme vyrábět jinde. |
Nastavení SQL Job agentů
| Název | Kdy se pouští | Popis |
|---|---|---|
| Import K2MES | Každou hodinu | Import výrobků a materiálů a šarží materiálů z K2 do xTrace |
| Import K2MES JobCards | Každou hodinu | Import výrobních objednávek z K2 do xTrace |
Import výrobků a materiálů
Import výrobků a materiálů zajišťuje SQL Job agent Import K2MES, který má několik úloh

Nastavení SQL Job agenta Import K2MES
Jednotlivé úlohy se spouští v daném pořadí.
| Pořadí | Název úlohy | Popis | Skript |
|---|---|---|---|
| 1. | MERGE Articles FROM K2DB to K2MES | Provede import výrobků a materiálů z K2DB do K2MES | EXEC dbo.sp_Import_K2_Articles |
| 2. | MERGE Articles from K2MES to xTrace | Provede import výrobků a materiálů z K2MES do produkční databáze xTrace | EXEC dbo.sp_Import_XT_Products |
| 3. | MERGE Batches from K2DB to K2MES | Provede import šarží materiálů z K2DB do K2MES | EXEC [dbo].[sp_Import_K2_Batches] |
| 4. | MERGE StockBatches from K2DB to K2MES | Provede import šarží počty(zásoby) materiálů z K2DB do K2MES | EXEC [dbo.][sp_Import_K2_StockBatches] |
| 5. | MERGE Batches from K2MES to xTrace | Provede import šarží materiálů z K2MES do produkční databáze xTarce | EXEC dbo.sp_Import_XT_InputBatches |
Import výrobků a materiálů z K2DB do K2MES
Provádí uložená procedura K2MES.dbo.sp_Import_K2_Articles, kterou spouští SQL Job agent v “Import K2MES” jako první. Uložená procedura pomocí OPENQUERY načte data artiklů z K2DB do pomocné tabulky a pokud něco načetla tak v cílové tabulce K2MES.dbo.Article data smaže a nakopíruje nová načtená z K2.
Struktura tabulky K2MES.dbo.Article

| Název | Typ | Popis | Zdroj v K2DB |
|---|---|---|---|
| Id | INT | ID artiklu v K2 – neimportuje se | K2_Mikro.dbo.Article.Id |
| Group | NVARCHAR (12) | Skupina – neimportuje se | K2_Mirko.dbo.Article.Group |
| Abbr | NVARCHAR (30) | Kód výrobku - unikátní označení. Importuje se do xTrace dbo.Product.ProductCD | K2_Mikro.dbo.Article.Id + „-„ + K2_Mikro.dbo.Article.Abbr |
| Abbr2 | NVARCHAR (30) | Číslo výrobku v K2 – neimportuje se | K2_Mikro.dbo.Article.Abbr2 |
| Name | NVARCHAR (200) | Název výrobku. Importuje se do xTrace dbo.Product.Name | K2_Mikro.dbo.Article.Name |
| ArticleCategoryId | INT | Kategorie. Když je 394 nebo 397 jedná se o výrobek (výrábí se) jinak je to materiál | K2_Mikro.dbo.Article. ArticleCategoryId |
| EX_OrdMult | INT | Počet DPS na panelu. Je-li = 0 pak se nejedná o panel a v xTrace je nastaven dbo.Product.IsPanel=0 jinak se jedná o panel dbo.Product.IsPanel = 1 | K2_Mikro.dbo.Article. EX_OrdMult |
| MSL | NVARCHAR (16) | MSL třída - Importuje se | K2_Mikro.dbo.Article. EX_Odolnost |
| Ex_PanRow | INT | Počet řádků na panelu pro vizualizaci. | K2_Mikro.dbo.Article. EX_PanRow |
| Ex_PanCol | INT | Počet sloupců na panelu pro vizualizaci | K2_Mikro.dbo.Article. EX_PanCol |
SQL dotaz do K2DB
SELECT [Id],[Group],[Abbr],[Abbr2],[Name],[ArticleCategoryId],[EX_OrdMult],[EX_Odolnost] as MSL,[Ex_PanRow],[Ex_PanCol] FROM [K2_Mikro].[dbo].[Article] o WITH(NOLOCK)
Import výrobků a materiálů z K2MES do xTrace
Provádí uložená procedura K2MES.dbo.sp_Import_XT_Products, kterou spouští SQL Job Agent “Import K2MES” jako druhou v pořadí. Uložená procedura z tabulky K2MES.dbo.Article provede import výrobků a materiálů do xTrace v několika krocích
- Provede se MERGE, který zajistí vytvoření nového záznamu nebo aktualizaci stávajícího záznamu o výrobku / materiálu v xTrace. Přenáší se tyto údaje:
- Kód výrobku/materiálu = K2MES.dbo.Article.ID + „-„
- K2MES.dbo.Article.Abbr
- Název = K2MES.dbo.Article.Name
- ShortName = K2MES.dbo.Article.Abbr
- Příznak IsProduct (je výrobek ano/ne) = K2MES. ArticleCategoryId když je 394 nebo 397 jedná se o výrobek, jinak je to materiál
- Příznak IsPanel (je panel) = K2MES.dbo.Article. EX_OrdMult (počet DPS na panelu) když je EX_OrdMult > 0 je nastaven IsPanel=True, jinak IsPanel=False
- Nastaví se MSL třída u materiálů
- Když je parametr MSL vyplněný = není prázdný pak to znamená, že materál má MSL třídu, která podle tabulky tabulky xTrace03_SG_cData.dbo.MSL určuje, jak dlouho může být MSL materiál po rozbalení = první použití na lince mimo sušičku. Parametr se v xTrace jmenuje DryerTimeLeft
- Nastaví se na výrobku penalizace. Penalizace se nastaví pouze jednou při zakládání nového výrobku. Pokud již výrobek v xTrace existuje penalizace se už nenastavuje. Nastavuje se toto:
- Složení panelu
- Typ značení
- Počet DPS na panelu – Nastavuje se vždy MarkingType=3 = Značí se panel i DPS
- Počet řádků a počet sloupců na panelu pro vizualizaci
Tabulka tříd MSL ke dni 7.12.2022

Parametr DryerTimeLeft je hodnota udávaná v minutách, jak dlouho může být materiál mimo sušičku.
Import šarží materiálů z K2DB do K2MES
Provádí uložená procedura K2MES.dbo. sp_Import_K2_Batches, kterou spouští SQL Job agent v “Import K2MES” jako třetí v pořadí. Uložená procedura pomocí OPENQUERY načte data šarží materiál K2DB do pomocné tabulky a pokud něco načetla tak v cílové tabulce K2MES.dbo.Batch data smaže a nakopíruje nová načtená z K2.
Dále se spustí pomocí OPENQUERY dotaz, který načte informace z StockBatch a nakopíruje je do tabulky K2MES.dbo.StockBatch, ten je v pořadí čtvrtý.
Struktura tabulky K2MES.dbo.Batch

| Název | Typ | Popis | Zdroj v K2DB |
|---|---|---|---|
| Id | INT | ID šarže v K2 – neimportuje se | K2_Mikro.dbo.Batch.Id |
| ArticleId | INT | Skupina – neimportuje se | K2_Mirko.dbo.Batch.ArticleId |
| Abbr | NVARCHAR (30) | Kód šarže- unikátní označení k ArticleId. Importuje se do xTrace dbo.InputBatch.BatchCD | K2_Mikro.dbo.Batch.Abbr |
| KindId | NVARCHAR (2) | Neimportuje se | K2_Mikro.dbo.Batch.KindId |
| InputDate | DATETIME | Datum a čas založení / příjem na sklad? | K2_Mikro.dbo.Batch.InputDate |
| OutputDate | DATETIME | K2_Mikro.dbo.Batch.OutputDate | |
| ChangedOn | DATETIME | Datum a čas poslední změny v K2 | K2_Mikro.dbo.Batch.ChangedOn |
| RoutingVariantId | INT | Neimportuje se | K2_Mikro.dbo.Batch.RoutingVariantId |
| Timestamp | DATETIME | Časová značka | Neimportuje se |
SQL dotaz do K2DB
SELECT [Id],[ArticleId],[Abbr],[KindId],[InputDate],[OutPutDate],[ChangedOn],[RoutingVariantId],[TimeStamp] FROM [K2_Mikro].[dbo].[Batch] WITH(NOLOCK)
Struktura tabulky K2MES.dbo.StockBatch

| Název | Typ | Popis | Zdroj v K2DB |
|---|---|---|---|
| ArticleId | INT | ID materiálu v K2. Tabulka K2MES.dbo.Article.Id | K2_Mikro.dbo. StockLevelDetail.ArticleId |
| BatchId | INT | ID šarže materiálu v K2. Tabulka K2MES.dbo.Batch.Id | K2_Mikro.dbo. StockLevelDetail.BatchId |
| Abbr | NVARCHAR (30) | Kód šarže- unikátní označení k ArticleId. Importuje se do xTrace dbo.InputBatch.BatchCD | K2_Mikro.dbo.Batch.Abbr |
| Available | money | Dostupné množství | K2_Mikro.dbo. StockLevelDetail.Available |
| Timestamp | DATETIME | Časová značka | Neimportuje se |
| InputDate | DATETIME | Datum a čas založení / příjem na sklad? | K2_Mikro.dbo.Batch.InputDate |
| OutputDate | DATETIME | K2_Mikro.dbo.Batch.OutputDate | |
| ChangedOn | DATETIME | Datum a čas poslední změny v K2 | K2_Mikro.dbo.Batch.ChangedOn |
SQL dotaz do K2DB
Import šarží materiálů z K2MES do xTrace
Provádí uložená procedura K2MES.dbo.sp_Import_XT_InputBatches, kterou spouští SQL Job Agent “Import K2MES” jako pátou v pořadí. Uložená procedura z tabulky K2MES.dbo.Batch a K2MES.dbo.StockBatch provede import šarží materiálů do xTrace.
Podmínky
- ArticleId musí existovat v tabulce K2MES.dbo.Article
- Materiál šarže musí existovat v xTrace
Uložená procedura provede MERGE, tedy pokud šarže neexistuje tak ji do xTrace založí a vyplní tyto parametry
- BatchCD = Kód šarže = K2MES.dbo.Batch.Abbr
- DT = Datum a čas vytvoření záznamu = GETDATE()
- ProductID = materiál podle K2MES.dbo.Batch.ArticleId -> K2MES.dbo.Article.Abbr -> xTrace03_SG_Data.dbo.Product.ProductCD
- InputBatchTypeID = interní xTrace = Typ šarže = vždy = 1
- Quantity = dostupné množství = K2MES.dbo.StockBatch.Available
- UsedQuantiy = použité mnotství = nový záznam = 0
- ExpirationDT = expirace = K2MES.dbo.StockBatch.outputdate
Když šarže v xTrace existuje tak jen aktualizuje v xTrace tyto parametry:
- Quantity = dostupné množství = K2MES.dbo.StockBatch.Available
- ExpirationDT = expirace = K2MES.dbo.StockBatch.outputdate
Import výrobních objednávek
Import výrobků a materiálů zajišťuje SQL Job agent Import K2MES JobCards.
Nastavení SQL Job agenta Import K2MES JobCards
Jednotlivé úlohy se spouští v daném pořadí.
| Pořadí | Název úlohy | Popis | Skript |
|---|---|---|---|
| 1. | Import new or changed JobCards from K2DB to K2MES | Importuje nové nebo změněné JobCards z K2DB do K2MES | EXEC [dbo].[sp_Import_K2_JobCards] |
| 2. | Import JobCards from K2MES to xTrace | Importuje nové nebo změněné výrobní objednávky z K2MES do xTrace |
Princip importu
Import výrobních objednávek je rozdělen do dvou funkčních na sobě nezávislých celků.
- První úloha importuje samotné JobCard z K2DB a řadí se do fronty ke zpracování.
- Druhá úloha kontroluje frontu a pokud jsou zde JobCard, které nejsou ještě vyřízené tak tyto nové požadavky zpracuje a provede import JobCard do xTrace a zapíše výsledek zpět do „fronty“ – aby se vědělo jak to dopadlo (OK nebo nějaká chyba). V případě chyby umí poslat i alarm (email) adminovi, aby věděl, že něco nedopadlo a mohl se na to podívat a provést nápravu – reimport.
Popis tabulky K2MES.dbo.JobCard
V tabulce je jen popis parametrů, které využíváme pro import do xTrace.
| Název | Popis |
|---|---|
| OID | Klíč záznamu |
| Pruvodka | Číslo výrobní objednávky – viditelní všem. Importuje se bez lomítek „/“ |
| Description | Popis |
| ArticleId | ID výrobku |
| Quanity | Požadované množství vyrobit |
| ChangedOn | Datum a čas změny |
| CreatedOn | Datum a čas vytvoření |
| RID | ID JobCard |
| ImportState | Stav importu do xTrace. 0=nový-čeká ve frontě, 1=import OK, 2=probíhá nebo nedokončený import, jiné číslo=chyba |
| ImportMessage | Zpráva importu. Pokud je nějaká chyba – import neproběhl, je zde zapsán důvod |
Zařazení nových nebo změněných JobCard do fronty je zpracování
První úloha má za úkol z K2DB importovat nové / případně změněné JobCards – výrobní objednávky a uložit je v K2MES.dbo.JobCards do “fronty” k dalšímu zpracování.
Vše provádí uložení procedura sp_Import_K2_JobCards, která má k sobě pomocnou tabulku dbo.ImportState, kde je jeden záznam a parametr LastJobCardImportDT, kde si procedura pamatuje, kdy naposledy prováděla z K2 tento import. Když není parametr nastaven = NULL tak je nastaven poslední import na 1.12.2022 (můžeme změnit dle potřeby s ohledem na spuštění importů na vhodnější datum)
Procedura pomocí OPENQUERY načte z K2 dle podmínek v něm všechny JobCards do pomocné tabulky.
Následně provede INSERT INTO K2MES.dbo.JobCard jen ty záznamy z pomocné tabulky, které vyhovují této podmínce WHERE CreatedOn >= @LastJobCardImportDT OR ChangedOn >= @LastJobCardImportDT
Tedy vloží se jen ty záznamy, které byly vytvořeny nebo změněny od posledního importu.
Každý nový záznam v tabulce K2MES.dbo.JobCard má parametr ImportState=0, což znamená, že výrobní objednávka je zařazena do fronty a bude zpracována jinou úlohou. Když dojde k úspěšnému zpracování – importu výrobní objednávky do xTrace je nastaven ImportState=1, případně neúspěchu je tam vyšší číslo jak 1 a v ImportMessage se pak dozvíme důvod neúspěšného importu.
Uložená procedura K2MES.dbo. sp_Import_K2_JobCards vytváří pouze do K2MES.dbo.JobCard nové záznamy!!
Tímto je také zaručeno, že když už se nějaká výrobní objednávka importovala a dojde k její změně, pak je zařazena “znovu” do fronty a bude zpracována. Historicky, pak pokud by se tabulka K2MES.dbo.JobCard nikdy nemazala uvidíme kolikrát byl požadavek na import jedné VO a kolik jich bylo úspěšných...
Zpracování JobCard ve frontě a import do xTrace
- Tato úloha je ještě jednoduchá a provádí ji uložená procedura K2MES.dbo.sp_Import_XT_JobCards.
- Procedura otevře kurzor a nečte všechny K2MES.dbo.JobCard kde ImportState= 0 nebo 2 (0=nový, 2=probíhá, ale bylo přerušeno z nějakého důvodu)
- Postupně iteruje jednotlivé záznamy a vola robustní uloženou proceduru K2MES.dbo.sp_Import_XT_Job, která má za úkol provést import (vytvoření či aktualizaci) právě jedné konkrétní výrobní objednávky.
- Uložená procedura K2MES.dbo.sp_Import_XT_Job vrací výsledek a zprávu do K2MES.dbo.sp_Import_XT_JobCards a v případě neúspěchu je odeslán alarm A00011.
Proces importu výrobní objednávky z K2MES do xTrace
Uložená procedura dbo.sp_Import_XT_Job zajišťuje import jedné výrobní objednávky a provede tyto úkony
- Načte z K2DB do K2MES.dbo. Výrobní postup – operace pro danou VO. Původní záznamy v tabulce smaže a nakopíruje nové
- Načte stejným způsobem z K2DB kusovník
- Načte stejným způsobem z K2DB zdroje pro operace postupu
- Zkontroluje – jestli výrobek který se má vyrábět existuje v xTrace
- Připraví pomocnou tabulku pro import postupu a zkontroluje, jestli existují všechny pracoviště v xTrace – validuje, jestli lze postup naimportovat
- To samé udělá na kusovníku. Zkontroluje, jestli jsou všechny materiály v kusovníku v xTrace založené – validuje, jestli lze kusovník naimportovat
- Zjistí, jestli už daná VO v xTrace je – jestli bude provádět aktualizaci nebo vytvářet novou
- Když už je VO v xTrace – provede kontrolu jejího stavu a pokud je ještě stav nová nebo odeslaná do výroby povolí import / reimportovat postup a kusovník, když ne tak kusovník a postup není už možné měnit
- Kusovník a postup pro existující VO nelze měnit i v případě (bez ohledu na stav nová nebo odeslaná do výroby), pokud už je v xTrace pro danou VO založen díl – výrobek. Už se provedla nějaká operace
- Když už VO existuje a prošli kontroly, provede update jen některých parametrů
- Množství
- Poznámka
- Když VO neexistuje, vytvoří se nová.
- Pokud je povolen import postupu a kusovníku tak ho provede
- Výsledek odešle do procedury, která volala a ta aktualizuje záznam K2MES.dbo.JobCard.ImportState= 1 v případě že proběhlo všechno OK nebo nastaví jiné číslo a chybovou zprávu ImportMessage
Import výrobního postupu pro JobCard z K2MES
- Zajišťuje uložená procedura K2MES.dbo.sp_Import_K2_operations
Importní routovací tabulka
Při importu operací (postupu) z K2MES do xTrace se vyžívá tzv. routovací tabulka, pomocí které lze nastavit to, aby operace z postupu K2, která má nastavený nějaký zdroj (skupina pracovišť) byla do xTrace naimportována a byl ji přiřazen jiný zdroj (jiná skupina pracovišť). Dále je také možné nastavit, aby se přidala navíc jedna či více operací na různé zdroje. Uvedeme níže na příkladu.
Struktura tabulky
Chyby při importu výrobních objednávek
Když nejde výrobní objednávka z nějakého důvodu naimportovat je nastaven v JobCard ImportState na číselnou hodnotu odpovídající chybě a ImportMessage obsahuje text zprávy, proč JobCard nešel naimportovat.
Níže je uveden seznam všech možných ImportState
| ImportState | ImportMessage | Popis |
|---|---|---|
| 0 | NULL | Nový záznam, který čeká na import do xTrace |
| 1 | NULL nebo OK nebo jiná zpráva | Import proběhl OK, pokud je uveden ImportMessage, tak jeto pouze informativní zpráva – nejedná se o chybu |
| 9000 | JobCard OID= neexistuje! | Pokud o import neexistující JobCard podle hodnoty OID=??? |
| 9001 | Výrobek ??? neexistuje v xTrace. Job nelze vytvořit. | Výrobek (Id+Abbr) neexistuje v xTrace. Pokoušíte se naimportovat JobCard pro výrobek, který není v xTrace zaveden v číselníku produktů |
| 9002 | Některé skupiny pracovišť (?) v postupu neexistují v xTrace. Postup nelze importovat. | Chyba při validaci postupu JobCard. Některé resource v xTrace jsou to skupiny pracovišť neexistují v xTrace. V závorce jsou uvedené, které to jsou. Pokud je tam „?“ tak JobCard nemá pro danou operaci resource |
| 9003 | Některý materiál/výrobek (?) neexistuje v xTrace. Kusovník nelze importovat. | Chyba při validaci kusovníku JobCard. Nělteré položky kusovníku nemají zaveden v xTrace materiál. V závorce jsou uvedené, které to jsou. |
| 9004 | Některé operace (?) v kusovníku nejsou v xTrace. Kusovník nelze importovat. | Chyba při validaci kusovníku JobCard. Některé operace kusovníku nejsou v postupu K2 |
| 9005 | Chyba při vytváření výrobní objednávky! | Blíže nespecifikovaná chyba při vytváření výrobní objednávky. Nutné aby podpora BCZ tento stav prověřila. |
| 9006 | Některé operace (?) v postupu nemají v K2 resource. | Chyba při validaci postupu pro JobCard. Některé operace nemají resource. V závorce je RID operace, která nemá resource |