Estou testando a rotina automatica de transferencia entre filiais (mata311), utilizando o exemplo do link abaixo. No meu teste estou utilizando 3 itens para transferencia, mas está sendo gravado apenas o ultimo, o exemplo utiliza o SetValue(), a maneira que estou utilizando está errada ?
https://tdn.totvs.com/pages/releaseview.action?pageId=554642567
User Function M311Inc() // U_M311Inc()
Local oModel
Local aLog
Local cMensLog
Local nX
Local cAlias := GetNextAlias()
// PREPARE ENVIRONMENT EMPRESA '01' FILIAL '01' USER 'admin' PASSWORD 'Hudson20!' MODULO "EST"
// pega o codigo do cliente
cQuery := " SELECT A1_COD, A1_LOJA, A1_COND"+ chr(13)
cQuery += " FROM " + RetSqlName("SA1") + " SA1 with (nolock)"
cQuery += " WHERE SA1.D_E_L_E_T_=''"+ chr(13)
cQuery += " AND A1_FILTRF = '" + xFilial("SF2") + "'"
dbUseArea(.T., "TOPCONN",TCGenQry(,,cQuery),cAlias,.T., .T.)
cCliente := (cAlias)->A1_COD
cLojaCli := (cAlias)->A1_LOJA
cCondPag := (cAlias)->A1_COND
(cAlias)->(DBCLOSEAREA())
// pegar a filial de destino
cFilialDest = '04'
// pega o codigo do fornecedor
cAlias := GetNextAlias()
cQuery := " SELECT A2_COD, A2_LOJA"+ chr(13)
cQuery += " FROM " + RetSqlName("SA2") + " SA2 with (nolock)"
cQuery += " WHERE SA2.D_E_L_E_T_=''"+ chr(13)
cQuery += " AND A2_FILTRF = '" + cFilialDest + "'"
dbUseArea(.T., "TOPCONN",TCGenQry(,,cQuery),cAlias,.T., .T.)
cFornec := (cAlias)->A2_COD
cLojaFor := (cAlias)->A2_LOJA
(cAlias)->(DBCLOSEAREA())
// teste com os itens que irão para transferencia
cAlias := GetNextAlias()
cQuery := " SELECT D2_COD, SUM(D2_QUANT) AS D2_QUANT " + chr(13)
cQuery += " FROM " + RetSqlName("SD2") + " SD2 WITH (NOLOCK) "
cQuery += " WHERE D2_EMISSAO = '20210616' " + chr(13)
cQuery += " AND D2_FILIAL = '01' " + chr(13)
cQuery += " AND D2_DOC = '000038783' "+ chr(13)
cQuery += " AND D2_SERIE = '2' "+ chr(13)
cQuery += " GROUP BY D2_COD " + chr(13)
dbUseArea(.T., "TOPCONN",TCGenQry(,,cQuery),cAlias,.T., .T.)
oModel := FWLoadModel("MATA311") //Carrega o modelo
oModel:SetOperation(MODEL_OPERATION_INSERT) // Seta operação de inclusão
oModel:Activate() // Ativa o Modelo
//Cabeçalho da solicitacao
oModel:SetValue( 'NNSMASTER', 'NNS_CLASS', '1' )
oModel:SetValue( 'NNSMASTER', 'NNS_ESPECI', ' ' )
// itens da transferencia
(cAlias)->(DbGoTop())
Do while .not. (cAlias)->(eof())
cNNT_TS := MaTesInt(2,'25',cCliente,cLojaCli,"C",(cAlias)->D2_COD) // tes de saida
//cNNT_TE := MaTesInt(1,'25',cFornec,cLojaFor,"F",(cAlias)->D2_COD,"C6_TES") // tes de entrada
// produto e local de origem
oModel:SetValue( 'NNTDETAIL', 'NNT_FILORI', '01' )
oModel:SetValue( 'NNTDETAIL', 'NNT_PROD', (cAlias)->D2_COD )
oModel:SetValue( 'NNTDETAIL', 'NNT_LOCAL', '0110' )
oModel:SetValue( 'NNTDETAIL', 'NNT_TS', '633' )
oModel:SetValue( 'NNTDETAIL', 'NNT_UM', 'UN' )
oModel:SetValue( 'NNTDETAIL', 'NNT_QUANT', (cAlias)->D2_QUANT )
// produto e local de destino
oModel:SetValue( 'NNTDETAIL', 'NNT_FILDES', '04' )
oModel:SetValue( 'NNTDETAIL', 'NNT_PRODD', (cAlias)->D2_QUANT )
oModel:SetValue( 'NNTDETAIL', 'NNT_LOCLD', '0300' )
oModel:SetValue( 'NNTDETAIL', 'NNT_TE', '122' )
oModel:SetValue( 'NNTDETAIL', 'NNT_UMD', 'UN' )
(cAlias)->(DbSkip())
enddo
(cAlias)->(DBCLOSEAREA())
If oModel:VldData() //Validação do modelo
oModel:CommitData() // Gravação do Modelo
cCodigo := oModelNNS:GetValue("NNS_COD")
Else
aLog := oModel:GetErrorMessage() //Recupera o erro do model quando nao passou no VldData
cMensLog := ''
//laco para gravar em string cLog conteudo do array aLog
For nX := 1 to Len(aLog)
If !Empty(aLog[nX])
cMensLog += Alltrim(aLog[nX]) + CHR(13)+CHR(10)
EndIf
Next nX
lMsErroAuto := .T. //seta variavel private como erro
AutoGRLog(cMensLog) //grava log para exibir com funcao mostraerro
MostraErro()
EndIf
oModel:DeActivate() //desativa modelo
Return NIL