Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Card
defaulttrue
idFerramentas de Suporte
labelExecautos


Este exemplo de pedido de venda foi elaborado pela própria equipe de desenvolvimento de produto, através da documentação:  MATA410 - Geração automática de Pedido de Vendas ExecAuto


Expandir
titleExemplo 1- Pedido de venda

#INCLUDE "PROTHEUS.CH"
#INCLUDE "TBICONN.CH"
 
User Function MyMata410()
 
Local cDoc       := ""                                                                 // Número do Pedido de Vendas
Local cA1Cod     := "000001"                                                           // Código do Cliente
Local cA1Loja    := "01"                                                               // Loja do Cliente
Local cB1Cod     := "000000000000000000000000000061"                                   // Código do Produto
Local cF4TES     := "501"                                                              // Código do TES
Local cE4Codigo  := "001"                                                              // Código da Condição de Pagamento
Local cMsgLog    := ""
Local cLogErro   := ""
Local cFilSA1    := ""
Local cFilSB1    := ""
Local cFilSE4    := ""
Local cFilSF4    := ""
Local nOpcX      := 0
Local nX         := 0
Local nCount     := 0
Local aCabec     := {}
Local aItens     := {}
Local aLinha     := {}
Local aErroAuto  := {}
Local lOk        := .T.
 
Private lMsErroAuto    := .F.
Private lAutoErrNoFile := .F.
 
//****************************************************************
//* Abertura do ambiente
//****************************************************************
ConOut("Inicio: " + Time())
 
ConOut(Repl("-",80))
ConOut(PadC("Teste de inclusao / alteração / exclusão de 01 pedido de venda com 02 itens", 80))
 
PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" MODULO "FAT" TABLES "SC5","SC6","SA1","SA2","SB1","SB2","SF4"
 
SA1->(dbSetOrder(1))
SB1->(dbSetOrder(1))
SE4->(dbSetOrder(1))
SF4->(dbSetOrder(1))
 
cFilAGG := xFilial("AGG")
cFilSA1 := xFilial("SA1")
cFilSB1 := xFilial("SB1")
cFilSE4 := xFilial("SE4")
cFilSF4 := xFilial("SF4")
 
//****************************************************************
//* Verificacao do ambiente para teste
//****************************************************************
If SB1->(! MsSeek(cFilSB1 + cB1Cod))
   cMsgLog += "Cadastrar o Produto: " + cB1Cod + CRLF
   lOk     := .F.
EndIf
 
If SF4->(! MsSeek(cFilSF4 + cF4TES))
   cMsgLog += "Cadastrar o TES: " + cF4TES + CRLF
   lOk     := .F.
EndIf
 
If SE4->(! MsSeek(cFilSE4 + cE4Codigo))
   cMsgLog += "Cadastrar a Condição de Pagamento: " + cE4Codigo + CRLF
   lOk     := .F.
EndIf
 
If SA1->(! MsSeek(cFilSA1 + cA1Cod + cA1Loja))
   cMsgLog += "Cadastrar o Cliente: " + cA1Cod + " Loja: " + cA1Loja + CRLF
   lOk     := .F.
EndIf
 
If lOk
 
   // Neste RDMAKE (Exemplo), o mesmo número do Pedido de Venda é utilizado para a Rotina Automática (Modelos INCLUSÃO / ALTERAÇÃO e EXCLUSÃO).
   cDoc := GetSxeNum("SC5", "C5_NUM")
 
   //****************************************************************
   //* Inclusao - INÍCIO
   //****************************************************************
   aCabec   := {}
   aItens   := {}
   aLinha   := {}
   aadd(aCabec, {"C5_NUM",     cDoc,      Nil})
   aadd(aCabec, {"C5_TIPO",    "N",       Nil})
   aadd(aCabec, {"C5_CLIENTE", cA1Cod,    Nil})
   aadd(aCabec, {"C5_LOJACLI", cA1Loja,   Nil})
   aadd(aCabec, {"C5_LOJAENT", cA1Loja,   Nil})
   aadd(aCabec, {"C5_CONDPAG", cE4Codigo, Nil})
 
   If cPaisLoc == "PTG"
      aadd(aCabec, {"C5_DECLEXP", "TESTE", Nil})
   Endif
 
   For nX := 1 To 02
      //--- Informando os dados do item do Pedido de Venda
      aLinha := {}
      aadd(aLinha,{"C6_ITEM",    StrZero(nX,2), Nil})
      aadd(aLinha,{"C6_PRODUTO", cB1Cod,        Nil})
      aadd(aLinha,{"C6_QTDVEN",  1,             Nil})
      aadd(aLinha,{"C6_PRCVEN",  1000,          Nil})
      aadd(aLinha,{"C6_PRUNIT",  1000,          Nil})
      aadd(aLinha,{"C6_VALOR",   1000,          Nil})
      aadd(aLinha,{"C6_TES",     cF4TES,        Nil})
      aadd(aItens, aLinha)
   Next nX
 
   nOpcX := 3
   MSExecAuto({|a, b, c, d| MATA410(a, b, c, d)}, aCabec, aItens, nOpcX, .F.)
   If !lMsErroAuto
      ConOut("Incluido com sucesso! " + cDoc)
   Else
      ConOut("Erro na inclusao!")
      aErroAuto := GetAutoGRLog()
      For nCount := 1 To Len(aErroAuto)
         cLogErro += StrTran(StrTran(aErroAuto[nCount], "<", ""), "-", "") + " "
         ConOut(cLogErro)
      Next nCount
   EndIf
   //****************************************************************
   //* Inclusao - FIM
   //****************************************************************
 
   //****************************************************************
   //* Alteração - INÍCIO
   //****************************************************************
   aCabec         := {}
   aItens         := {}
   aLinha         := {}
   lMsErroAuto    := .F.
   lAutoErrNoFile := .F.
 
   aadd(aCabec, {"C5_NUM",     cDoc,      Nil})
   aadd(aCabec, {"C5_TIPO",    "N",       Nil})
   aadd(aCabec, {"C5_CLIENTE", cA1Cod,    Nil})
   aadd(aCabec, {"C5_LOJACLI", cA1Loja,   Nil})
   aadd(aCabec, {"C5_LOJAENT", cA1Loja,   Nil})
   aadd(aCabec, {"C5_CONDPAG", cE4Codigo, Nil})
 
   If cPaisLoc == "PTG"
      aadd(aCabec, {"C5_DECLEXP", "TESTE", Nil})
   Endif
 
   For nX := 1 To 02
      //--- Informando os dados do item do Pedido de Venda
      aLinha := {}
      aadd(aLinha,{"LINPOS",     "C6_ITEM",     StrZero(nX,2)})
      aadd(aLinha,{"AUTDELETA",  "N",           Nil})
      aadd(aLinha,{"C6_PRODUTO", cB1Cod,        Nil})
      aadd(aLinha,{"C6_QTDVEN",  2,             Nil})
      aadd(aLinha,{"C6_PRCVEN",  2000,          Nil})
      aadd(aLinha,{"C6_PRUNIT",  2000,          Nil})
      aadd(aLinha,{"C6_VALOR",   4000,          Nil})
      aadd(aLinha,{"C6_TES",     cF4TES,        Nil})
      aadd(aItens, aLinha)
   Next nX
 
   nOpcX := 4
   MSExecAuto({|a, b, c, d| MATA410(a, b, c, d)}, aCabec, aItens, nOpcX, .F.)
   If !lMsErroAuto
      ConOut("Alterado com sucesso! " + cDoc)
   Else
      ConOut("Erro na alteração!")
      aErroAuto := GetAutoGRLog()
      For nCount := 1 To Len(aErroAuto)
         cLogErro += StrTran(StrTran(aErroAuto[nCount], "<", ""), "-", "") + " "
         ConOut(cLogErro)
      Next nCount
   EndIf
   //****************************************************************
   //* Alteração - FIM
   //****************************************************************
 
   //****************************************************************
   //* Exclusão - INÍCIO
   //****************************************************************
   ConOut(PadC("Teste de exclusão",80))
 
   aCabec         := {}
   aItens         := {}
   aLinha         := {}
   lMsErroAuto    := .F.
   lAutoErrNoFile := .F.
 
   aadd(aCabec, {"C5_NUM",     cDoc,      Nil})
   aadd(aCabec, {"C5_TIPO",    "N",       Nil})
   aadd(aCabec, {"C5_CLIENTE", cA1Cod,    Nil})
   aadd(aCabec, {"C5_LOJACLI", cA1Loja,   Nil})
   aadd(aCabec, {"C5_LOJAENT", cA1Loja,   Nil})
   aadd(aCabec, {"C5_CONDPAG", cE4Codigo, Nil})
 
   If cPaisLoc == "PTG"
      aadd(aCabec, {"C5_DECLEXP", "TESTE", Nil})
   Endif
 
   For nX := 1 To 02
      //--- Informando os dados do item do Pedido de Venda
      aLinha := {}
      aadd(aLinha,{"C6_ITEM",    StrZero(nX,2), Nil})
      aadd(aLinha,{"C6_PRODUTO", cB1Cod,        Nil})
      aadd(aLinha,{"C6_QTDVEN",  2,             Nil})
      aadd(aLinha,{"C6_PRCVEN",  2000,          Nil})
      aadd(aLinha,{"C6_PRUNIT",  2000,          Nil})
      aadd(aLinha,{"C6_VALOR",   4000,          Nil})
      aadd(aLinha,{"C6_TES",     cF4TES,        Nil})
      aadd(aItens, aLinha)
   Next nX
 
   MSExecAuto({|a, b, c| MATA410(a, b, c)}, aCabec, aItens, 5)
   If !lMsErroAuto
      ConOut("Excluído com sucesso! " + cDoc)
   Else
      ConOut("Erro na exclusão!")
   EndIf
   //****************************************************************
   //* Exclusão - FIM
   //****************************************************************
 
Else
 
   ConOut(cMsgLog)
 
EndIf
 
ConOut("Fim: " + Time())
 
RESET ENVIRONMENT
Return(.T.)

Expandir
titleExemplo 2- Pedido de venda (com rateio)

#INCLUDE "PROTHEUS.CH"
#INCLUDE "TBICONN.CH"
 
User Function MyMata410()
 
Local cDoc       := ""                                                                 // Número do Pedido de Vendas
Local cA1Cod     := "000001"                                                           // Código do Cliente
Local cA1Loja    := "01"                                                               // Loja do Cliente
Local cB1Cod     := "000000000000000000000000000061"                                   // Código do Produto
Local cF4TES     := "501"                                                              // Código do TES
Local cE4Codigo  := "001"                                                              // Código da Condição de Pagamento
Local aAGGCC     := {"FAT000001", "FAT000002", "FAT000003", "FAT000004", "FAT000005"}  // Códigos dos Centros de Custo
Local cMsgLog    := ""
Local cLogErro   := ""
Local cFilAGG    := ""
Local cFilSA1    := ""
Local cFilSB1    := ""
Local cFilSE4    := ""
Local cFilSF4    := ""
Local nTmAGGItPd := TamSx3("AGG_ITEMPD")[1]
Local nTmAGGItem := TamSx3("AGG_ITEM")[1]
Local nOpcX      := 0
Local nX         := 0
Local nY         := 0
Local nCount     := 0
Local aCabec     := {}
Local aItens     := {}
Local aLinha     := {}
Local aRatAGG    := {}
Local aItemRat   := {}
Local aAuxRat    := {}
Local aErroAuto  := {}
Local lOk        := .T.
 
Private lMsErroAuto    := .F.
Private lAutoErrNoFile := .F.
 
//****************************************************************
//* Abertura do ambiente
//****************************************************************
ConOut("Inicio: " + Time())
 
ConOut(Repl("-",80))
ConOut(PadC("Teste de inclusao / alteração / exclusão de 01 pedido de venda com 02 itens e com rateios por Centros de Custo", 80))
 
PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" MODULO "FAT" TABLES "SC5","SC6","SA1","SA2","SB1","SB2","SF4"
 
SA1->(dbSetOrder(1))
SB1->(dbSetOrder(1))
SE4->(dbSetOrder(1))
SF4->(dbSetOrder(1))
 
cFilAGG := xFilial("AGG")
cFilSA1 := xFilial("SA1")
cFilSB1 := xFilial("SB1")
cFilSE4 := xFilial("SE4")
cFilSF4 := xFilial("SF4")
 
//****************************************************************
//* Verificacao do ambiente para teste
//****************************************************************
If SB1->(! MsSeek(cFilSB1 + cB1Cod))
   cMsgLog += "Cadastrar o Produto: " + cB1Cod + CRLF
   lOk     := .F.
EndIf
 
If SF4->(! MsSeek(cFilSF4 + cF4TES))
   cMsgLog += "Cadastrar o TES: " + cF4TES + CRLF
   lOk     := .F.
EndIf
 
If SE4->(! MsSeek(cFilSE4 + cE4Codigo))
   cMsgLog += "Cadastrar a Condição de Pagamento: " + cE4Codigo + CRLF
   lOk     := .F.
EndIf
 
If SA1->(! MsSeek(cFilSA1 + cA1Cod + cA1Loja))
   cMsgLog += "Cadastrar o Cliente: " + cA1Cod + " Loja: " + cA1Loja + CRLF
   lOk     := .F.
EndIf
 
If lOk
 
   // Neste RDMAKE (Exemplo), o mesmo número do Pedido de Venda é utilizado para a Rotina Automática (Modelos INCLUSÃO / ALTERAÇÃO e EXCLUSÃO).
   cDoc := GetSxeNum("SC5", "C5_NUM")
 
   //****************************************************************
   //* Inclusao - INÍCIO
   //****************************************************************
   aCabec   := {}
   aItens   := {}
   aLinha   := {}
   aRatAGG  := {}
   aItemRat := {}
   aAuxRat  := {}
   aadd(aCabec, {"C5_NUM",     cDoc,      Nil})
   aadd(aCabec, {"C5_TIPO",    "N",       Nil})
   aadd(aCabec, {"C5_CLIENTE", cA1Cod,    Nil})
   aadd(aCabec, {"C5_LOJACLI", cA1Loja,   Nil})
   aadd(aCabec, {"C5_LOJAENT", cA1Loja,   Nil})
   aadd(aCabec, {"C5_CONDPAG", cE4Codigo, Nil})
 
   If cPaisLoc == "PTG"
      aadd(aCabec, {"C5_DECLEXP", "TESTE", Nil})
   Endif
 
   For nX := 1 To 02
      //--- Informando os dados do item do Pedido de Venda
      aLinha := {}
      aadd(aLinha,{"C6_ITEM",    StrZero(nX,2), Nil})
      aadd(aLinha,{"C6_PRODUTO", cB1Cod,        Nil})
      aadd(aLinha,{"C6_QTDVEN",  1,             Nil})
      aadd(aLinha,{"C6_PRCVEN",  1000,          Nil})
      aadd(aLinha,{"C6_PRUNIT",  1000,          Nil})
      aadd(aLinha,{"C6_VALOR",   1000,          Nil})
      aadd(aLinha,{"C6_TES",     cF4TES,        Nil})
      aadd(aLinha,{"C6_RATEIO",  "1",           Nil})
      aadd(aItens, aLinha)
 
      //--- Informando os dados do rateio por Centro de Custo do item do Pedido de Venda
      //    Montando o Array do Rateio (AGG) conforme o XML MATI410, TOP x PROTHEUS
      //    No exemplo abaixo, os itens estão sendo rateados em 04 Centros de Custos, assumindo 25% para cada
      aAuxRat     := {}
      For nY := 1 to 04
         aRatAGG := {}
         aAdd(aRatAGG, {"AGG_FILIAL",  cFilAGG,                Nil})
         aAdd(aRatAGG, {"AGG_PEDIDO",  cDoc,                   Nil})
         aAdd(aRatAGG, {"AGG_FORNECE", cA1Cod,                 Nil})
         aAdd(aRatAGG, {"AGG_LOJA",    cA1Loja,                Nil})
         aAdd(aRatAGG, {"AGG_ITEMPD",  StrZero(nX,nTmAGGItPd), Nil})
         aAdd(aRatAGG, {"AGG_ITEM",    Strzero(nY,nTmAGGItem), Nil})
         aAdd(aRatAGG, {"AGG_PERC",    25,                     Nil})
         aAdd(aRatAGG, {"AGG_CC",      aAGGCC[nY],             Nil})
         aAdd(aRatAGG, {"AGG_CONTA",   "",                     Nil})
         aAdd(aRatAGG, {"AGG_ITEMCT",  "",                     Nil})
         aAdd(aRatAGG, {"AGG_CLVL",    "",                     Nil})
         aAdd(aAuxRat, aRatAGG)
      Next nY
      aAdd(aItemRat, {StrZero(nX,2), aAuxRat})
 
   Next nX
 
   nOpcX := 3
   MSExecAuto({|a, b, c, d, e, f| MATA410(a, b, c, d, , , , e, )}, aCabec, aItens, nOpcX, .F., aItemRat)
   If !lMsErroAuto
      ConOut("Incluido com sucesso! " + cDoc)
   Else
      ConOut("Erro na inclusao!")
      aErroAuto := GetAutoGRLog()
      For nCount := 1 To Len(aErroAuto)
         cLogErro += StrTran(StrTran(aErroAuto[nCount], "<", ""), "-", "") + " "
         ConOut(cLogErro)
      Next nCount
   EndIf
   //****************************************************************
   //* Inclusao - FIM
   //****************************************************************
 
   //****************************************************************
   //* Alteração - INÍCIO
   //****************************************************************
   aCabec         := {}
   aItens         := {}
   aLinha         := {}
   aRatAGG        := {}
   aItemRat       := {}
   aAuxRat        := {}
   lMsErroAuto    := .F.
   lAutoErrNoFile := .F.
 
   aadd(aCabec, {"C5_NUM",     cDoc,      Nil})
   aadd(aCabec, {"C5_TIPO",    "N",       Nil})
   aadd(aCabec, {"C5_CLIENTE", cA1Cod,    Nil})
   aadd(aCabec, {"C5_LOJACLI", cA1Loja,   Nil})
   aadd(aCabec, {"C5_LOJAENT", cA1Loja,   Nil})
   aadd(aCabec, {"C5_CONDPAG", cE4Codigo, Nil})
 
   If cPaisLoc == "PTG"
      aadd(aCabec, {"C5_DECLEXP", "TESTE", Nil})
   Endif
 
   For nX := 1 To 02
      //--- Informando os dados do item do Pedido de Venda
      aLinha := {}
      aadd(aLinha,{"LINPOS",     "C6_ITEM",     StrZero(nX,2)})
      aadd(aLinha,{"AUTDELETA",  "N",           Nil})
      aadd(aLinha,{"C6_PRODUTO", cB1Cod,        Nil})
      aadd(aLinha,{"C6_QTDVEN",  2,             Nil})
      aadd(aLinha,{"C6_PRCVEN",  2000,          Nil})
      aadd(aLinha,{"C6_PRUNIT",  2000,          Nil})
      aadd(aLinha,{"C6_VALOR",   4000,          Nil})
      aadd(aLinha,{"C6_TES",     cF4TES,        Nil})
      aadd(aLinha,{"C6_RATEIO",  "1",           Nil})
      aadd(aItens, aLinha)
 
      //--- Informando os dados do rateio por Centro de Custo do item do Pedido de Venda
      //    Montando o Array do Rateio (AGG) conforme o XML MATI410, TOP x PROTHEUS
      //    No exemplo abaixo, os itens estão sendo rateados em 05 Centros de Custos, assumindo 25% para cada
      aAuxRat     := {}
      For nY := 1 to 05
         aRatAGG := {}
         aAdd(aRatAGG, {"AGG_FILIAL",  cFilAGG,                Nil})
         aAdd(aRatAGG, {"AGG_PEDIDO",  cDoc,                   Nil})
         aAdd(aRatAGG, {"AGG_FORNECE", cA1Cod,                 Nil})
         aAdd(aRatAGG, {"AGG_LOJA",    cA1Loja,                Nil})
         aAdd(aRatAGG, {"AGG_ITEMPD",  StrZero(nX,nTmAGGItPd), Nil})
         aAdd(aRatAGG, {"AGG_ITEM",    Strzero(nY,nTmAGGItem), Nil})
         aAdd(aRatAGG, {"AGG_PERC",    20,                     Nil})
         aAdd(aRatAGG, {"AGG_CC",      aAGGCC[nY],             Nil})
         aAdd(aRatAGG, {"AGG_CONTA",   "",                     Nil})
         aAdd(aRatAGG, {"AGG_ITEMCT",  "",                     Nil})
         aAdd(aRatAGG, {"AGG_CLVL",    "",                     Nil})
         aAdd(aAuxRat, aRatAGG)
      Next nY
      aAdd(aItemRat, {StrZero(nX,2), aAuxRat})
   Next nX
 
   nOpcX := 4
   MSExecAuto({|a, b, c, d, e, f| MATA410(a, b, c, d, , , , e, )}, aCabec, aItens, nOpcX, .F., aItemRat)
   If !lMsErroAuto
      ConOut("Alterado com sucesso! " + cDoc)
   Else
      ConOut("Erro na alteração!")
      aErroAuto := GetAutoGRLog()
      For nCount := 1 To Len(aErroAuto)
         cLogErro += StrTran(StrTran(aErroAuto[nCount], "<", ""), "-", "") + " "
         ConOut(cLogErro)
      Next nCount
   EndIf
   //****************************************************************
   //* Alteração - FIM
   //****************************************************************
 
   //****************************************************************
   //* Exclusão - INÍCIO
   //****************************************************************
   ConOut(PadC("Teste de exclusão",80))
 
   aCabec         := {}
   aItens         := {}
   aLinha         := {}
   aRatAGG        := {}
   aItemRat       := {}
   aAuxRat        := {}
   lMsErroAuto    := .F.
   lAutoErrNoFile := .F.
 
   aadd(aCabec, {"C5_NUM",     cDoc,      Nil})
   aadd(aCabec, {"C5_TIPO",    "N",       Nil})
   aadd(aCabec, {"C5_CLIENTE", cA1Cod,    Nil})
   aadd(aCabec, {"C5_LOJACLI", cA1Loja,   Nil})
   aadd(aCabec, {"C5_LOJAENT", cA1Loja,   Nil})
   aadd(aCabec, {"C5_CONDPAG", cE4Codigo, Nil})
 
   If cPaisLoc == "PTG"
      aadd(aCabec, {"C5_DECLEXP", "TESTE", Nil})
   Endif
 
   For nX := 1 To 02
      //--- Informando os dados do item do Pedido de Venda
      aLinha := {}
      aadd(aLinha,{"C6_ITEM",    StrZero(nX,2), Nil})
      aadd(aLinha,{"C6_PRODUTO", cB1Cod,        Nil})
      aadd(aLinha,{"C6_QTDVEN",  2,             Nil})
      aadd(aLinha,{"C6_PRCVEN",  2000,          Nil})
      aadd(aLinha,{"C6_PRUNIT",  2000,          Nil})
      aadd(aLinha,{"C6_VALOR",   4000,          Nil})
      aadd(aLinha,{"C6_TES",     cF4TES,        Nil})
      aadd(aLinha,{"C6_RATEIO",  "1",           Nil})
      aadd(aItens, aLinha)
   Next nX
 
   MSExecAuto({|a, b, c| MATA410(a, b, c)}, aCabec, aItens, 5)
   If !lMsErroAuto
      ConOut("Excluído com sucesso! " + cDoc)
   Else
      ConOut("Erro na exclusão!")
   EndIf
   //****************************************************************
   //* Exclusão - FIM
   //****************************************************************
 
Else
 
   ConOut(cMsgLog)
 
EndIf
 
ConOut("Fim: " + Time())
 
RESET ENVIRONMENT
Return(.T.)


  

Expandir
titleExemplo 3- Pedido de venda (Base Grande)

#INCLUDE "RWMAKE.CH"
#INCLUDE "PROTHEUS.CH"
#INCLUDE "TBICONN.CH"

User Function GeraPV()

Local aCabec := {}
Local aItens := {}
Local aLinha := {}
Local nX := 0
Local nY := 0
Local cDoc := ""
Local lOk := .T.
PRIVATE lMsErroAuto := .F.
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Abertura do ambiente |
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
ConOut(Repl("-",80))
ConOut(PadC("Teste de Inclusao de 10.000 pedidos de venda com 2 itens cada",80))

//PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" MODULO "FAT" TABLES "SC5","SC6","SA1","SA2","SB1","SB2","SF4"

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Verificacao do ambiente para teste |
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
dbSelectArea("SB1")
dbSetOrder(1)
If !SB1->(MsSeek(xFilial("SB1")+"PA001"))
lOk := .F.
ConOut("Cadastrar produto: PA001")
EndIf
dbSelectArea("SF4")
dbSetOrder(1)
If !SF4->(MsSeek(xFilial("SF4")+"502"))
lOk := .F.
ConOut("Cadastrar TES: 502")
EndIf
dbSelectArea("SE4")
dbSetOrder(1)
If !SE4->(MsSeek(xFilial("SE4")+"001"))
lOk := .F.
ConOut("Cadastrar condicao de pagamento: 001")
EndIf
If !SB1->(MsSeek(xFilial("SB1")+"PA002"))
lOk := .F.
ConOut("Cadastrar produto: PA002")
EndIf
dbSelectArea("SA1")
dbSetOrder(1)
If !SA1->(MsSeek(xFilial("SA1")+"CL000101"))
lOk := .F.
ConOut("Cadastrar cliente: CL000101")
EndIf
If lOk
ConOut("Inicio: "+Time())
For nY := 1 To 10000
cDoc := GetSxeNum("SC5","C5_NUM")
RollBAckSx8()
aCabec := {}
aItens := {}
aadd(aCabec,{"C5_NUM" ,cDoc ,Nil})
aadd(aCabec,{"C5_TIPO" ,"N" ,Nil})
aadd(aCabec,{"C5_CLIENTE" ,SA1->A1_COD ,Nil})
aadd(aCabec,{"C5_LOJACLI" ,SA1->A1_LOJA ,Nil})
aadd(aCabec,{"C5_LOJAENT" ,SA1->A1_LOJA ,Nil})
aadd(aCabec,{"C5_CONDPAG" ,SE4->E4_CODIGO ,Nil})

For nX := 1 To 2
aLinha := {}
aadd(aLinha,{"C6_ITEM" ,StrZero(nX,2) ,Nil})
aadd(aLinha,{"C6_PRODUTO" ,SB1->B1_COD ,Nil})
aadd(aLinha,{"C6_QTDVEN" ,1 ,Nil})
aadd(aLinha,{"C6_PRCVEN" ,100 ,Nil})
aadd(aLinha,{"C6_PRUNIT" ,100 ,Nil})
aadd(aLinha,{"C6_VALOR" ,100 ,Nil})
aadd(aLinha,{"C6_TES" ,"502" ,Nil})
aadd(aItens,aLinha)
Next nX
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Teste de Inclusao |
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
MATA410(aCabec,aItens,3)
If !lMsErroAuto
ConOut("Incluido com sucesso! "+cDoc)
Else
ConOut("Erro na inclusao!")
EndIf
Next nY
ConOut("Fim : "+Time())
ConOut(Repl("-",80))
EndIf
Return(.T.)  


Exemplo para popular pedido de compras

Expandir
titleExemplo 1- Pedido de Compra

#Include "Protheus.ch"
#Include "RwMake.ch"
#Include "TbiConn.ch"

User FUnction EXEC121()

Local aCabec := {}
Local aItens := {}
Local aLinha := {}
Local aRatCC := {}
Local aRatPrj := {}
Local aItemPrj := {{"01","02"},{"02","01"}} //Projeto, Tarefa
Local aCCusto := {{40,"01","101010","333330","CL0001"},{60,"02","101011","333330","CL0001"}} //Porcentagem,Centro de Custo, Conta Contabil, Item Conta, CLVL
Local nX := 0
Local cDoc := ""
Local nOpc := 3

PRIVATE lMsErroAuto := .F.

PREPARE ENVIRONMENT EMPRESA "01" FILIAL "1001" MODULO "COM"

dbSelectArea("SC7")

//Teste de Inclusão
cDoc := GetSXENum("SC7","C7_NUM")
SC7->(dbSetOrder(1))
While SC7->(dbSeek(xFilial("SC7")+cDoc))
ConfirmSX8()
cDoc := GetSXENum("SC7","C7_NUM")
EndDo

aadd(aCabec,{"C7_NUM" ,cDoc})
aadd(aCabec,{"C7_EMISSAO" ,dDataBase})
aadd(aCabec,{"C7_FORNECE" ,"001 "})
aadd(aCabec,{"C7_LOJA" ,"01"})
aadd(aCabec,{"C7_COND" ,"001"})
aadd(aCabec,{"C7_CONTATO" ,"AUTO"})
aadd(aCabec,{"C7_FILENT" ,cFilAnt})

For nX := 1 To 1
aLinha := {}
aadd(aLinha,{"C7_PRODUTO" ,"0001",Nil})
aadd(aLinha,{"C7_QUANT" ,1 ,Nil})
aadd(aLinha,{"C7_PRECO" ,100 ,Nil})
aadd(aLinha,{"C7_TOTAL" ,100 ,Nil})
aadd(aItens,aLinha)
Next nX

//Rateio Centro de Custo
aAdd(aRatCC, Array(2))
aRatCC[1][1] := "0001"
aRatCC[1][2] := {}

For nX := 1 To Len(aCCusto)
aLinha := {}
aAdd(aLinha, {"CH_FILIAL" , xFilial("SCH"), Nil})
aAdd(aLinha, {"CH_ITEM" , PadL(nX, TamSx3("CH_ITEM")[1], "0"), Nil})
aAdd(aLinha, {"CH_PERC" , aCCusto[nX][1], Nil})
aAdd(aLinha, {"CH_CC" , aCCusto[nX][2], Nil})
aAdd(aLinha, {"CH_CONTA" , aCCusto[nX][3], Nil})
aAdd(aLinha, {"CH_ITEMCTA" , aCCusto[nX][4], Nil})
aAdd(aLinha, {"CH_CLVL" , aCCusto[nX][5], Nil})

aAdd(aRatCC[1][2], aClone(aLinha))
Next nX

//Rateio Projeto
aAdd(aRatPrj, Array(2))
aRatPrj[1][1] := "0001"
aRatPrj[1][2] := {}

For nX := 1 To Len(aItemPrj)
aLinha := {}
aAdd(aLinha, {"AJ7_FILIAL" , xFilial("AJ7") , Nil})
aAdd(aLinha, {"AJ7_PROJET" , aItemPrj[nX][1], Nil})
aAdd(aLinha, {"AJ7_TAREFA" , PadR(aItemPrj[nX][2],TamSX3("AF9_TAREFA")[1]), Nil})
aAdd(aLinha, {"AJ7_NUMPC" , cDoc , Nil})
aAdd(aLinha, {"AJ7_ITEMPC" , "0001" , Nil})
aAdd(aLinha, {"AJ7_COD" , "0001" , Nil})
aAdd(aLinha, {"AJ7_QUANT" , 1 , Nil})
aAdd(aLinha, {"AJ7_REVISA" , "0001" , Nil})
aAdd(aRatPrj[1][2], aClone(aLinha))
Next nX

MSExecAuto({|a,b,c,d,e,f,g| MATA120(a,b,c,d,e,f,,g)},1,aCabec,aItens,nOpc,.F.,aRatCC,aRatPrj)

If !lMsErroAuto
ConOut("Incluido PC: "+cDoc)
Else
ConOut("Erro na inclusao!")
MostraErro()
EndIf

RESET ENVIRONMENT

PREPARE ENVIRONMENT EMPRESA "01" FILIAL "1001" MODULO "COM"

dbSelectArea("SC7")

//Teste de alteração
nOpc := 4
cDoc := "000054" //Informar PC ou AE (Alteração / Exclusão)

aadd(aCabec,{"C7_NUM" ,cDoc})
aadd(aCabec,{"C7_EMISSAO" ,dDataBase})
aadd(aCabec,{"C7_FORNECE" ,"001 "})
aadd(aCabec,{"C7_LOJA" ,"01"})
aadd(aCabec,{"C7_COND" ,"001"})
aadd(aCabec,{"C7_CONTATO" ,"AUTO"})
aadd(aCabec,{"C7_FILENT" ,cFilAnt})

For nX := 1 To 2
aLinha := {}

If nX == 1 //Alteração do 0001
aadd(aLinha,{"C7_ITEM" ,"0001" ,Nil})
aadd(aLinha,{"C7_PRODUTO" ,StrZero(nX,4),Nil})
aadd(aLinha,{"C7_QUANT" ,1 ,Nil})
aadd(aLinha,{"C7_PRECO" ,150 ,Nil})
aadd(aLinha,{"C7_TOTAL" ,150 ,Nil})
aAdd(aLinha,{"LINPOS","C7_ITEM" ,"0001"})
aAdd(aLinha,{"AUTDELETA","N" ,Nil})
Else //Adicionando um novo item no PC/AE
aadd(aLinha,{"C7_ITEM" ,"0002" ,Nil})
aadd(aLinha,{"C7_PRODUTO" ,StrZero(nX,4),Nil})
aadd(aLinha,{"C7_QUANT" ,1 ,Nil})
aadd(aLinha,{"C7_PRECO" ,200 ,Nil})
aadd(aLinha,{"C7_TOTAL" ,200 ,Nil})
Endif
aadd(aItens,aLinha)
Next nX

MSExecAuto({|a,b,c,d,e| MATA120(a,b,c,d,e)},1,aCabec,aItens,nOpc,.F.)

If !lMsErroAuto
ConOut("Alterado PC: "+cDoc)
Else
ConOut("Erro na alteracao!")
MostraErro()
EndIf

RESET ENVIRONMENT

PREPARE ENVIRONMENT EMPRESA "01" FILIAL "1001" MODULO "COM"

dbSelectArea("SC7")

//Teste de exclusão
nOpc := 5
cDoc := "000054" //Informar PC ou AE (Alteração / Exclusão)

aadd(aCabec,{"C7_NUM" ,cDoc})
aadd(aCabec,{"C7_EMISSAO" ,dDataBase})
aadd(aCabec,{"C7_FORNECE" ,"001 "})
aadd(aCabec,{"C7_LOJA" ,"01"})
aadd(aCabec,{"C7_COND" ,"001"})
aadd(aCabec,{"C7_CONTATO" ,"AUTO"})
aadd(aCabec,{"C7_FILENT" ,cFilAnt})

For nX := 1 To 2
aLinha := {}

aadd(aLinha,{"C7_ITEM" ,StrZero(nX,4) ,Nil})
aadd(aLinha,{"C7_PRODUTO" ,StrZero(nX,4),Nil})
aadd(aLinha,{"C7_QUANT" ,1 ,Nil})
aadd(aLinha,{"C7_PRECO" ,150 ,Nil})
aadd(aLinha,{"C7_TOTAL" ,150 ,Nil})
aadd(aItens,aLinha)
Next nX

MSExecAuto({|a,b,c,d,e| MATA120(a,b,c,d,e)},1,aCabec,aItens,nOpc,.F.)

If !lMsErroAuto
ConOut("Exclusao PC: "+cDoc)
Else
ConOut("Erro na exclusao!")
MostraErro()
EndIf

RESET ENVIRONMENT

Return


 
 
         


Exemplo para popular documento de entrada - Base Grande.

Expandir
titleExemplo de Documento de Entrada (Base Grande)

#Include "Protheus.ch"
User Function GERANOTAS()
BatchProcess("Geracao de dados","Criacao de base de dados para testes de performance","",{ || Processa({|lEnd| ProcBase(@lEnd)},"Gerando dados","Gerando dados",.F.)})

Static Function ProcBase()
Local aCabec := {}
Local aItens := {}
Local aLinha := {}
Local aNotas := {}
Local aPvlNfs := {}
Local aBloqueio := {}
Local nX := 0
Local nz := 0
Local nw := 0
Local lOk := .T.
Local cDoc := "E00000"
Local nCount := 0
Local nItemNf := 10 // Numero de itens por NF
Local nNumProd := 10 // Numero de produtos a serem gerados
Local nNumDoc := 2000 // Numero de notas geradas
Local nNumDocOri:= 2000 // Numero de NFs a serem geradas
Local nItensNota:= 10 // Numero de itens por NF
Local cSerie := "UNI"

// Array com os parametros do programa
Local aParam460:=Array(30)

PRIVATE lMsErroAuto := .F.
PRIVATE lHelpAuto := .T.

ProcRegua(nNumProd+nNumDocOri+nNumDocOri)

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Verificacao do ambiente para inclusao |
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
DbSelectArea("SB1")
DbSetOrder(1)
If !SB1->(dbSeek(xFilial("SB1")))
lOk := .F.
ConOut(OemToAnsi("Nao foram encontrados produtos"))
EndIf

DbSelectArea("SF4")
DbSetOrder(1)
If !SF4->(dbSeek(xFilial("SF4")+"001"))
lOk := .F.
ConOut(OemToAnsi("Nao foi encontrada a TES 001"))
EndIf

DbSelectArea("SE4")
DbSetOrder(1)
If !SE4->(dbSeek(xFilial("SE4")+"001"))
lOk := .F.
ConOut(OemToAnsi("Nao foi encontrada a condicao de pagamento 001"))
EndIf

DbSelectArea("SA2")
DbSetOrder(1)
If !SA2->(dbSeek(xFilial("SA2")+"F0000101"))
lOk := .F.
ConOut(OemToAnsi("Nao foi encontrado fornecedor F00001 01"))
EndIf

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Criacao das notas fiscais de entrada variando produtos |
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
dbSelectArea("SB1")
nX := 0
nNumDoc:=nNumDocOri
If lOk
While nx <= nNumDoc
While nx <= nNumDoc .And. !SB1->(Eof()) .And. SB1->B1_FILIAL == xFilial("SB1")
IncProc()
aCabec := {}
aItens := {}
nCount := 0
cDoc := Soma1(cDoc)
aadd(aCabec,{"F1_TIPO" ,"N"})
aadd(aCabec,{"F1_FORMUL" ,"N"})
aadd(aCabec,{"F1_DOC" ,(cDoc)})
aadd(aCabec,{"F1_SERIE" ,"UNI"})
aadd(aCabec,{"F1_EMISSAO",dDataBase})
aadd(aCabec,{"F1_FORNECE","F00001"})
aadd(aCabec,{"F1_LOJA" ,"01"})
aadd(aCabec,{"F1_ESPECIE","CTE"})
aadd(aCabec,{"F1_COND","001"})
While nCount <= nItensNota .And. !SB1->(Eof()) .And. SB1->B1_FILIAL == xFilial("SB1")
aLinha := {}
aadd(aLinha,{"D1_COD" ,SB1->B1_COD,Nil})
aadd(aLinha,{"D1_QUANT",10000,Nil})
aadd(aLinha,{"D1_VUNIT",1,Nil})
aadd(aLinha,{"D1_TOTAL",10000,Nil})
aadd(aLinha,{"D1_TES","001",Nil})
aadd(aItens,aLinha)
SB1->(dbSkip())
nCount ++
If SB1->(Eof())
// Recomeca lista de produtos
SB1->(dbSetOrder(1))
SB1->(dbSeek(xFilial("SB1")))
EndIf
End
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Teste de Inclusao |
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
MATA103(aCabec,aItens,3)
If !lMsErroAuto
ConOut("Documento Entrada Incluido com sucesso "+cDoc+" !")
Else
ConOut("Erro na inclusao "+cDoc+" !")
EndIf
nx++
End
End
EndIf

RETURN




Exemplo para inclusão de Produtos (MATA010):

Expandir
titleExemplo de Cadastro de Produtos (MATA010)

#Include 'TOTVS.ch'
#INCLUDE 'RWMAKE.CH'
#INCLUDE 'TBICONN.CH'
#INCLUDE 'FWMVCDef.ch'
#include 'protheus.ch'


User Function M010RAut()
Local PARAMIXB1 := {}
Local PARAMIXB2 := 3
Local aDados := {}
Local aDadosIte := {}
Local aItens := {}
Local ncont := 0
Local nQtdIni := 100
Local nVIni1 := 1000
Local aCabec := {}
Local aItem := {}
Local aLinha := {}
Local ddatabase := Date()
Local nOpc := 3 // 3) INCLUSÃO | 4) ALTERAÇÃO
Local nPos := 0
Private oModel := Nil
Private lMsErroAuto := .F.
Private aRotina := {}


For ncont := 1 To 5000
aDados := {}
aCabec := {}
aLinha := {}
aItem := {}


PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" USER 'Admin' PASSWORD '' TABLES "SB1" MODULO "EST"
AADD(aDados, "A" + cValtoChar( ncont) ) // Código do Produto (B1_COD)
AADD(aDados, "Produto " + cValtoChar(ncont) ) // Descrição do Produto (B1_DESC)
AADD(aDados, "PA" ) // Tipo do Produto (B1_TIPO)
AADD(aDados, "UN" ) // Unidade do Produto (B1_UM)
AADD(aDados, "00" ) // Armazém do Produto (B1_LOCPAD)
//AADD(aDados, "N" )
//AADD(aDados, "1" )
//AADD(aDados, "1" )
//PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "D MG 01 " MODULO "EST" TABLES "SD3"
AADD(aItens, aDados )

//PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "D MG 02" USER 'Admin' PASSWORD '' TABLES "SB9" MODULO "EST"

ConOut("Inicio mata010 gravacao")
oModel := FwLoadModel ("MATA010")
oModel:SetOperation(MODEL_OPERATION_INSERT)
oModel:Activate()
oModel:SetValue("SB1MASTER","B1_COD" ,aItens[ncont][1])
oModel:SetValue("SB1MASTER","B1_DESC" ,aItens[ncont][2])
oModel:SetValue("SB1MASTER","B1_TIPO" ,aItens[ncont][3])
oModel:SetValue("SB1MASTER","B1_UM" ,aItens[ncont][4])
oModel:SetValue("SB1MASTER","B1_LOCPAD" ,aItens[ncont][5])
// oModel:SetValue("SB1MASTER","B1_GRUPO" ,aItens[ncont][6])
//oModel:SetValue("SB1MASTER","B1_LOCALIZ" ,aItens[ncont][6])
//oModel:SetValue("SB1MASTER","B1_GRUPO" ,aItens[ncont][7])

If oModel:VldData()
oModel:CommitData()
CONOUT("Gravacao Ok")
Else
CONOUT("Erro na gravacao")
EndIf

oModel:DeActivate()
oModel:Destroy()

oModel := NIL
ConOut("Fim mata010 gravacao")

NEXT

Return Nil


Exemplo para inclusão de Clientes(MATA030):

Expandir
titleExemplo de Cadastro de Clientes(MATA030)
#Include "Protheus.ch"
#include "TBICONN.CH"
//-------------------------------------------------------------------
/*/{Protheus.doc} MyCRMA980
Função de exemplo para utilização da rotina automática de Clientes.
/*/
//-------------------------------------------------------------------
User Function MyCRMA980()

Local aSA1Auto := {}
Local aAI0Auto := {}
Local nOpcAuto := 3//MODEL_OPERATION_INSERT
Local lRet := .T.

Private lMsErroAuto := .F.

lRet := RpcSetEnv("T1","D MG 01","Admin")

If lRet

//----------------------------------
// Dados do Cliente
//----------------------------------
aAdd(aSA1Auto,{"A1_COD" ,"XBX141" ,Nil})
aAdd(aSA1Auto,{"A1_LOJA" ,"01" ,Nil})
aAdd(aSA1Auto,{"A1_NOME" ,"ROTINA AUTOMATICA" ,Nil})
aAdd(aSA1Auto,{"A1_NREDUZ" ,"ROTAUTO" ,Nil})
aAdd(aSA1Auto,{"A1_TIPO" ,"F" ,Nil})
aAdd(aSA1Auto,{"A1_END" ,"BRAZ LEME" ,Nil})
aAdd(aSA1Auto,{"A1_BAIRRO" ,"CASA VERDE" ,Nil})
aAdd(aSA1Auto,{"A1_EST" ,"SP" ,Nil})
aAdd(aSA1Auto,{"A1_MUN" ,"SAO PAULO" ,Nil})
aAdd(aSA1Auto,{"A1_INCISS" ,"N" ,Nil})
aAdd(aSA1Auto,{"A1_GRPVEN" ,"000001" ,Nil})

//---------------------------------------------------------
// Dados do Complemento do Cliente
//---------------------------------------------------------
aAdd(aAI0Auto,{"AI0_SALDO" ,30 ,Nil})

//------------------------------------
// Chamada para cadastrar o cliente.
//------------------------------------
MSExecAuto({|a,b,c| CRMA980(a,b,c)}, aSA1Auto, nOpcAuto, aAI0Auto)

If lMsErroAuto
lRet := lMsErroAuto
MostraErro()// não usar via JOB
Else
Conout("Cliente incluído com sucesso!")
EndIf

EndIf

RpcClearEnv()

Return lRet




Exemplo para inclusão de Reserva(MATA430):

Expandir
titleExemplo de Cadastro de Reserva (Mata430)
#Include 'Protheus.ch'

User Function EXEC_A430RESERV()

Local nOpc    := 3//PARAMIXB[1]
Local aOperacao  := {}
Local cNumero      := ""
Local cLocal      := ""
Local cProduto  := ""
Local nQuant      := 0
Local aLote      := {}
Local cUser      := ""
Local lRet

lRet := MsgYesNo("SIM OU NAO")
cUser:= Substr(cUsuario,7,15)

 IF Empty(M->C5_NUM)
  cNumero:= SC5->C5_NUM
 Else
  cNumero:= M->C5_NUM
 Endif

 IF nOpc == 3
  For n:= 1 to len(aCols)
      //montando o array aOperacao  ele deve ter apenas uma dimensao por isso tem que ser passado assim
      AADD(aOperacao,nOpc)
      AADD(aOperacao,"PD")
      AADD(aOperacao,cNumero)
      AADD(aOperacao,cUser)
      AADD(aOperacao,xFilial("SC5"))
      AADD(aOperacao,"")//deve ser montado um array com 1 dimensao desta fo
      AADD(aLote,aCols[1][37])
      AADD(aLote,""      )
      AADD(aLote,aCols[1][41] )
      AADD(aLote, aCols[1][42])

      cProduto := aCols[n][2]
      cLocal := aCols[n][14]
      nQuant := aCols[n][5]

      A430Reserv(aOperacao,cNumero,cProduto,cLocal,nQuant,aLote,,,)

      aOpercacao:= {}
  Next
 Endif

Return




...