Příklad 10 - Založení kusovníku a technologického postupu

Následující příklady popisují práci s objekty kusovníku a technologického postupu modulu výroba. Konkrétně jejich zakládání z externího zdroje. Uvedena je také ukázka podpůrné procedury pro kontrolu a případné zakládání použitých skladových karet. Příklady jsou koncipovány jako vzor a je nutné je doplnit o příkazy k získání vstupních dat. Místa pro příkazy se vstupními daty jsou v textu označeny znakem "%". Například takto: %Název kusovníku%. Takto naimportované kusovníky a Technologické postupy jsou zakládány jako neschválené. Použitá syntaxe odpovídá prostředí FoxPro.

Příklad založení kusovníku

&& Založení objektu kusovníku
O_PieceList = G3.CreateObject("@PLMPieceList")
D_PieceList = G3.CreateValues("@PLMPieceList")
O_PieceList.PrefillValues(D_PieceList)

D_PieceList.ValueByName("StoreCard_ID")   = %ID skladové karty výrobku%
D_PieceList.ValueByName("QUnit")          = %Název jednotky kusovníku%
D_PieceList.ValueByName("Quantity") 	  = 1
D_PieceList.ValueByName("Unitrate") 	  = %Vztah jednotky kusovníku%

D_PieceList.ValueByName("Name")           = %Název kusovníku%
D_PieceList.ValueByName("PieceListType")  = %Typ kusovníku%

&& Řádky kusovníku, v cyklu je nutné zajistit procházení řádků zdroje dat.
m.PosIndex = 1
do while ...                              && Nutno doplnit podmínku testování konce vstupních dat
                                          
    O_PL_Rows = D_PieceList.ValueByName("Rows")
    D_PL_Rows = G3.CreateValues("@PLMPieceListsRow")
    
    D_PL_Rows.ValueByName("StoreCard_ID") = %ID skladové karty dílu%
    D_PL_Rows.ValueByName("PosIndex")     = m.PosIndex && číslo pozice 
    D_PL_Rows.ValueByName("Issue")        = %Výdej%
    D_PL_Rows.ValueByName("quantity")     = %Množství součásti ve vztahu 1%
    D_PL_Rows.ValueByName("Qunit")        = %Jednotka pro množství součásti%
    D_PL_Rows.ValueByName("UnitRate")     = %Vztah jednotky součásti%
    O_PL_Rows.Add(D_PL_Rows)
    m.PosIndex = m.PosIndex + 1
    skip
enddo
O_PieceList.CreateNewFromValues(D_PieceList)

Popis vstupních údajů kusovníku

%ID skladové karty výrobku% = Nejlépe doplnit pomocí procedury jako níže uvedené CardCheck() nebo podobné.
                              Vyplnění není povinné.
%Název jednotky kusovníku%  = Název jednotky, ke které je postup sestavován.
                              Je nutné zaručit, aby tato jednotka existovala u skladové karty v hlavičce techn. postupu.                            
                              Zapisuje se pouze v případě, pokud je doplněna skladová karta.
%Vztah jednotky kusovníku%  = Vztah jednotky, ke které je kusovník sestavován.
                              Položka musí být vždy vyplněna hodnotou 1.
                              Zapisuje se pouze v případě, pokud je doplněna skladová karta.
%Název kusovníku%           = Libovolný textový popis kusovníku
%ID skladové karty dílu%    = Nejlépe doplnit pomocí procedury CardCheck() nebo podobné.
%Typ kusovníku%             = Typ kusovníku (1 = Prototyp, 2 = Nultá série, 3 = Sériová výroba)
%Výdej%                     = Jak zajistit polotovar (0 = Sklad, 1 = Výroba, 2 = Kooperace)

Příklad vložení nového technologického postupu

&& Založení objektu Technologického postupu
O_Routine = G3.CreateObject("@PLMRoutine")
D_Routine = G3.CreateValues("@PLMRoutine")
O_Routine.PrefillValues(D_Routine)
D_Routine.ValueByName("StoreCard_ID")       = %ID skladové karty výrobku%
D_Routine.ValueByName("QUnit")              = %Název jednotky techn. postupu%
D_Routine.ValueByName("Quantity")           = 1
D_Routine.ValueByName("Unitrate")           = %Vztah jednotky techn. postupu%

D_Routine.ValueByName("RoutineType_ID")     = %ID typu techn. postupu%
D_Routine.ValueByName("Name")               = %Název techn. postupu%
&& Řádky postupu, v cyklu je nutné zajistit procházení řádků zdroje dat.
do while ...                                && Nutno doplnit podmínku testování konce vstupních dat
                                            
    O_R_Rows = D_Routine.ValueByName("Rows")
    D_R_Rows = G3.CreateValues("@PLMRoutinesRow")
    
    D_R_Rows.ValueByName("Batch")           = %Dávková operace% 
    D_R_Rows.ValueByName("Title")           = %Text operace% 
    D_R_Rows.ValueByName("SalaryClass_ID")  = %ID tarifní třídy%
    D_R_Rows.ValueByName("PosIndex")        = %Číslo operace%
    D_R_Rows.ValueByName("SetupTime")       = %Čas TAC%
    D_R_Rows.ValueByName("PartTime")        = %Čas TBC%
    if %Operace je kooperací%
        D_R_Rows.ValueByName("Cooperation") = .t.
    Endif
    D_R_Rows.ValueByName("Workplace_ID")    = %ID pracoviště%
    skip
    && Nastavení ukončující operace.
    if %Poslední řádek zdroje dat%
        D_R_Rows.ValueByName("Finished")    = .t.
    Endif
    O_R_Rows.Add(D_R_Rows)
enddo
O_Routine.CreateNewFromValues(D_Routine)

Popis vstupních údajů technologického postupu

%ID skladové karty výrobku% = Nejlépe doplnit pomocí procedury jako níže uvedené CardCheck() nebo podobné.
                              Vyplnění není povinné.
%Název jednotky techn. postupu% = Název jednotky, ke které je techn. postup sestavován.
                              Je nutné zaručit, aby tato jednotka existovala u skladové karty v hlavičce techn. postupu.
                              Zapisuje se pouze v případě, pokud je doplněna skladová karta.
%Vztah jednotky techn. postupu% = Vztah jednotky, ke které je techn. postup sestavován.
                              Položka musí být vždy vyplněna hodnotou 1.
                              Zapisuje se pouze v případě, pokud je doplněna skladová karta.
%Název techn. postupu%      = Libovolný textový popis kusovníku.
%Dávková operace%           = Vyplňte hodnotu .T. pro skladové karty s třídou jednoduchá karta nebo karta se šaržemi. 
			      Hodnotu .F. vyplňte pro karty s třídou karta se sériovými čísly.
%ID tarifní třídy%          = ID požadovaného záznamu z číselníku Tarifních tříd.
%ID pracoviště%             = ID požadovaného záznamu z číselníku Pracovišť.

Procedura pro kontrolu a zakládání skladových karet

&& Kontrola existence skladové karty a její případné založení.
&& POZOR, tato procedura při zakládání skladových karet vyplňuje pouze základní položky.
&& Vyplnění ostatních je nutné příp. doplnit.
procedure CardCheck

parametrs cCode,cName,lIsProduct,cUnit,nUnitRate 
&& Popis vstupních parametrů procedury:
&&    cCode      = Kód skladové karty
&&    cName      = Název karty
&&    lIsProduct = Karta je výrobkem
&&    cUnit      = Název jednotky
&&    nUnitRate  = Převodní vztah jednotky

private cCode,OldSel,SCard_ID,o_SCard,d_SCard,cName,lIsProduct,;
        cUnit,nUnitRate,cID,CatProduct,o_SC_Unit, d_SC_Unit,Unit_OK

&& Otevřeme číselník skladových karet
mRoll = G3.GetRoll("S3WZQKDB5FDL342M01C0CX3FCC", 0)
m.SCard_ID = "" 
If mRoll.Find("CODE", allt(m.cCode), @m.SCard_ID)
    && Karta existuje. Načtení jejích údajů.
    O_SCard = G3.CreateObject("@StoreCard")
    D_SCard = O_SCard.GetValues(m.SCard_ID)
    m.cName = D_SCard.ValueByName("name")
    if m.lIsProduct
        && Hledáme-li kartu do hlavičky kusovníku/techn. postupu, musíme zabezpečit její označení jako "Výrobek".
        D_SCard.ValueByName("IsProduct") = .t.
    Endif
    D_SCard.ValueByName("AuthorizedAt$DATE") = date()
    D_SCard.ValueByName("AuthorizedBy_id")   = "SUPER00000"
    P_SCard.UpdateValues(m.SCard_ID,d_SCard)
    && Kontrola vkládané jednotky
    O_SC_Unit = d_SCard.ValueByName("StoreUnits")
    m.Unit_OK = .f.
    for m.i = 0 to o_SC_Unit.count -1
        D_SC_Unit = o_SC_Unit.item(m.i)
        if padr(d_SC_Unit.ValueByName("Code"),3) = padr(m.Unit,3) ;
           and d_SC_Unit.ValueByName("Unitrate") = m.nUnitRate
            m.Unit_OK = .t.
        Endif
    next
    if not m.Unit_OK
        =Msg( allt(m.cCode) + ' - Nesouhlasí jednotka ' + m.cUnit + ;
             ' nebo její vztah!')
    endif
else
    && Karta neexistuje, musíme ji založit
    O_SCard = G3.CreateObject("@StoreCard")
    D_SCard = G3.CreateValues("@StoreCard")
    O_SCard.PrefillValues(d_SCard)
    && Třída karty. Zde jako karta typu "jednoduchá".
    D_SCard.ValueByName("Category")             = "0"
    D_SCard.ValueByName("Code")                 = allt(cCode)
    D_SCard.ValueByName("Name")                 = allt(CName)
    D_SCard.ValueByName("StoreCardCategory_ID") = IIF(m.lIsProduct,%ID typu skl. karet pro výrobky%, ;
        %ID typu skl. karet pro materiály%)
    D_SCard.ValueByName("VATRate_ID") = %ID DPH sazby%
    if m.lIsProduct
        D_SCard.ValueByName("IsProduct") = .t.
    Endif
    D_SCard.ValueByName("AuthorizedAt$DATE") = date()
    D_SCard.ValueByName("AuthorizedBy_id")   = "SUPER00000"  && Nutno doplnit uživatele, který bude uveden ve schválení skl. karet
    && Založíme jednotku
    O_SC_Unit = d_SCard.ValueByName("StoreUnits")
    D_SC_Unit = G3.CreateValues("@StoreUnit")
    O_SC_Unit.Remove (0)          && Použít, pokud je nastaveno předvyplňování jednotek
    D_SC_Unit.ValueByName("parent_id")  = d_SCard.ValueByName("ID")
    D_SC_Unit.ValueByName("Code")       = allt(m.cUnit)
    D_SC_Unit.ValueByName("Unitrate")   = m.nUnitRate
    O_SC_Unit.Add(d_SC_Unit)
    D_SCard.ValueByName("MainUnitCode") = ALLTRIM(m.cUnit)
    m.SCard_ID = O_SCard.CreateNewFromValues(d_SCard)
endif
G3.DropRoll("S3WZQKDB5FDL342M01C0CX3FCC", 0)
return