Já faz um tempo que resolvemos essa questão, mas esqueci de postar aqui. Não lembro exatamente como chegamos na solução, mas ela ficou da seguinte forma:
Utilizamos o modelo da GFEX010 através da FWLoadModel().
oModelSim := FWLoadModel("GFEX010")
oModelNeg := oModelSim:GetModel("GFEX010_01")
oModelAgr := oModelSim:GetModel("DETAIL_01")
oModelDC := oModelSim:GetModel("DETAIL_02")
oModelIt := oModelSim:GetModel("DETAIL_03")
oModelTr := oModelSim:GetModel("DETAIL_04")
oModelInt := oModelSim:GetModel("SIMULA")
oModelCal1 := oModelSim:GetModel("DETAIL_05")
oModelCal2 := oModelSim:GetModel("DETAIL_06")
oModelSim:SetOperation(3)
O preenchimento dos dados obrigatórios via LoadValue()
oModelNeg:LoadValue('CONSNEG' ,"1" )
//Agrupadores
oModelAgr:LoadValue('GWN_NRROM' ,"01" )
oModelAgr:LoadValue('GWN_CDCLFR','0002')
oModelAgr:LoadValue('GWN_CDTPOP','0000000001')
oModelAgr:LoadValue('GWN_DOC' ,"ROMANEIO")
//Documento de Carga
oModelDC:LoadValue('GW1_EMISDC', '000001215 ')
oModelDC:LoadValue('GW1_NRDC' , "00001")
oModelDC:LoadValue('GW1_CDTPDC', 'NFE ')
oModelDC:LoadValue('GW1_CDREM' , '000001215 ')
oModelDC:LoadValue('GW1_CDDEST', cCodDest)
oModelDC:LoadValue('GW1_TPFRET', "1")
oModelDC:LoadValue('GW1_ICMSDC', "2")
oModelDC:LoadValue('GW1_USO' , "1")
oModelDC:LoadValue('GW1_NRROM' , "01")
oModelDC:LoadValue('GW1_QTUNI' , 1)
//Trechos
oModelTr:LoadValue('GWU_EMISDC' ,'000001215 ')
oModelTr:LoadValue('GWU_NRDC' ,"00001")
oModelTr:LoadValue('GWU_CDTPDC' ,'NFE ')
oModelTr:LoadValue('GWU_NRCIDD' ,alltrim(cCodRedes))
oModelTr:LoadValue('GWU_SEQ' ,"01")
//Itens
oModelIt:LoadValue('GW8_EMISDC','000001215 ')
oModelIt:LoadValue('GW8_NRDC' ,"00001")
oModelIt:LoadValue('GW8_CDTPDC','NFE ')
oModelIt:LoadValue('GW8_ITEM' ,"ItemA" )
oModelIt:LoadValue('GW8_DSITEM',"Item Generico")
oModelIt:LoadValue('GW8_CDCLFR','0002')
oModelIt:LoadValue('GW8_PESOR' ,nPeso)
oModelIt:LoadValue('GW8_VALOR' ,nVal)
oModelIt:LoadValue('GW8_TRIBP' ,"1")
E o disparo da simulação feito atraves de um SetValue
// Dispara a simulação
oModelInt:SetValue("INTEGRA" ,"A")
Na sequencia um for para varrer os resultados da simulação no modelo:
If oModelCal1:GetQtdLine() > 1 .Or. !Empty( oModelCal1:GetValue('C1_NRCALC' ,1) )
For nCont := 1 to oModelCal1:GetQtdLine()
oModelCal1:GoLine(nCont)
aRetAux := {}
aAdd(aRetAux,oModelCal2:GetValue('C2_CDEMIT' ,1))
aAdd(aRetAux,POSICIONE("GU3",1,xFilial("GU3")+oModelCal2:GetValue('C2_CDEMIT' ,1 ),"GU3_NMEMIT"))
aAdd(aRetAux,oModelCal1:GetValue('C1_VALFRT' ,nCont))
aAdd(aRetAux,oModelCal1:GetValue('C1_DTPREN' ,nCont))
aAdd(aRet, aRetAux)
Next nCont
EndIf