-- CompactId.lua 2018/04/21 -- Non funziona in presenza di lavorazioni -- Intestazioni require( 'EgtBase') _ENV = EgtProtectGlobal() EgtEnableDebug( false) -- funzione per spostare gli Id local function ChangeAllId( nBase, nFirstId, vTab) local nNewId = nFirstId local nId = EgtGetFirstInGroup( nBase) while nId do EgtChangeId( nId, nNewId) vTab[nId] = nNewId nId = nNewId nNewId = nNewId + 1 if EgtGetType( nId) == GDB_TY.GROUP then nNewId = ChangeAllId( nId, nNewId, vTab) end nId = EgtGetNext( nId) end return nNewId end -- funzione per aggiornare un riferimento agli Id local function UpdateRefId( nId, sKey, vTab) local sVal = EgtGetInfo( nId, sKey) if sVal then local sNewVal = '' local vVal = EgtSplitString( sVal, ',') for i = 1, #vVal do local nRefId = tonumber( vVal[i]) local nNewRefId = vTab[nRefId] sNewVal = sNewVal .. EgtIf( i > 1, ',', '') .. tostring( nNewRefId) end EgtSetInfo( nId, sKey, sNewVal) end end -- funzione per aggiornare riferimenti agli Id local function UpdateAllRefId( nBase, vTab) local nId = EgtGetFirstInGroup( nBase) while nId do UpdateRefId( nId, '!SOU', vTab) UpdateRefId( nId, '!BAS', vTab) UpdateRefId( nId, '!LST', vTab) if EgtGetType( nId) == GDB_TY.GROUP then UpdateAllRefId( nId, vTab) end nId = EgtGetNext( nId) end end -- funzione per aggiornare gli identificativi dei grezzi nelle disposizioni -- DA FARE : manca funzione Egt per cambiare id grezzi disposizioni -- funzione per aggiornare i riferimenti geometrici delle lavorazioni -- DA FARE -- devo essere in modalità disegno if EgtGetCurrMachGroup() then EgtOutBox( 'Non è possibile compattare gli Id in LAVORA', 'CompactId', 'WARNING') return end -- per ora richiedo non ci siano gruppi di lavorazione if EgtGetMachGroupCount() > 0 then EgtOutBox( 'Non è possibile compattare gli Id in progetti con Gruppi di Lavoro', 'CompactId', 'WARNING') return end -- elimino l'eventuale gruppo delle macchine EgtErase( EgtGetFirstNameInGroup( GDB_ID.ROOT, 'MachAux') or GDB_ID.NULL) -- recupero Id Max local nNextId = EgtGetNewId() -- sposto tutti gli Id dal Max in su local vTab = {} ChangeAllId( GDB_ID.ROOT, nNextId, vTab) -- sposto gli Id in basso local vTab2 = {} ChangeAllId( GDB_ID.ROOT, 1, vTab2) for k, v in pairs( vTab) do vTab[k] = vTab2[v] end -- aggiorno i riferimenti agli Id nelle Info UpdateAllRefId( GDB_ID.ROOT, vTab) -- aggiorni i roferimenti agli Id nelle disposizioni -- aggiorno i riferimenti agli Id nelle lavorazioni