REVERSE INHERIT

Základní popis funkce modulu a parametrů

Modul se zaktivuje načtením systémového příkazu C0061. Po zaktivování musí operátor načíst SN dílu, který chce převést do scrapu případně zpětně podědit (rozdělení, kdy dojde k zpětnému dědění a kdy pouze k převedení bude vysvětleno v další kapitole). Dále podle nastavení modulu (parametry MustSelectFail a MustSelectPosition) musí případně načíst chybu a její pozici. Po načtení všech potřebných informací dojde ke kontrole daného dílu a převedení do scrapu nebo ke zpětnému dědění. Pozn. - po uživatelské stránce se jedná o stejnou logiku jako u modulu MOVE_TO_REWORK. Po implementátorské stránce je rozdíl pouze v parametru OnReverseGS (hodnota statusu GS po použítí příkazu pro zpětné dědění)

Jádrová část

Jedná se o upravenou logiku modulu MoveToRework.cs. V modulu je nadefinovaný enum InputWaitState (NotActive, Part, Fail, Position a Save). Podle aktuální hodnoty InputWaitState se rozhoduje v HandlePortData, jaké HandlePortData se použije (HandlePortData_Part/Fail/Position). Hodnota InputWaitState m_state se nastavuje metodou GetNextState(SGLMState s, InputWaitState ws). Když je ve stavu Save, tak se volá metoda MovePart, kde je hlavní rozdíl modulů ReverseInherit a MoveToRework.

MovePart

Provede se kontrola, zda byla zadána nějaká chyba k dílu a zda byl načtený díl. Provede se kontrolní metoda ReverseInheritRoutingCheck() a na základě výsledku této metody se provede provede buďto zpětné dědění (procedura x_process_reverseInherit) nebo standardní MoveToRework.

ReverseInheritRoutingCheck()

Natáhne se XPQuery part podle PartID. Zkontroluje se, zda byl poděděn (xpoPart.Parent != null). Určí se, jestli part byl vytvořen podle nových nebo starých procesů (Routing vs JobRouting) a provede se kontrola, jestli je aktualni routingova pozice rovna routingove pozici, kterou dil prosel a jestli je WorkPlaceGroup aktualniho pracoviste rovna WorkPlaceGroup prvni routingove pozici. Druha kontrola je nutna, aby se nedalo zpetne dedit dil na jinem pracovisti, nez na kterem byl podeden. Prvni podminka zajistuje pouze zda se na aktualnim pracovisti provadi dedeni (tj. jedna se o prvni pracoviste v routingu). Pokud jsou splneny vsechny podminky zpetneho dedeni -> logicky metoda vrati hodnotu true a zavolaji se metody jako pri MoveToRework a nakonec se zavola metoda ReverseInheritPart(...).

Databázová SQL část

ReverseInheritPart(long partID, long detailID, int SS, long routingItemID) - v SQL ulozena procedura x_process_reverseInherit

Vytvoří se nová tabulka @parentParts, do které se nasypou data z načteného dílu (teď už vystupuje jako PARENT a ne jako CHILD). Založí se nový part "poděděný" od načteného dílu (pozn. Routing, RoutingItemID atd se doplňuje podle IsJobProcessUsed). Pokud se jedná o panel, tak se podědí také všechny díly na panelu. TODO! - popsat Pavlovu magii - zrušení čárových kódů a pripojenych dilu na "revertovany" dil. V cursoru CR_ReverseInherit se nastartují (x_process_start) všechny připojené díly k dílu, který chceme zpětně podědit. Od původního dílu se natáhnou přiřazené chyby (z tabulky Part_Divergence) a tyto připojené díly se následně ukončí (x_process_start). Po ukončení těchto dílů se zavolá procedura sg_Part_UnjoinItems, která tyto díly odpojí. Nastartují a ukončí se nové díly (opět x_process_start/x_process_end)