Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
é para centralizar execautos suporte.Temas abordados neste documento:

Produto:

 Microsiga Protheus®

Ocorrência:

Esta página

possui exemplos de

ExecAuto para popular base no

Ambiente:

Todos

Suporte.

 

#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
Card
defaulttrue
idFerramentas de Suporte
labelExecautos
Deck of Cards
startHiddenfalse
effectDuration0.5
idExecAutos
effectTypehorizontal
loopCardstrue
Card
defaulttrue
id06072020265
labelFaturamento

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 1- Pedido de Compra

inclusão de Clientes(MATA030):

Expandir
titleExemplo
de Cadastro de Clientes(MATA030)
#Include "Protheus.ch"
#Include
#include "
RwMake
TBICONN.
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"
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
Card
defaulttrue
id06072020265
labelCompras

Exemplo para popular pedido de compras:

Expandir
titleExemplo 1- Pedido de Compra

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

User Function GeraPC()

Local aCabec := {}
Local aItens := {}
Local aLinha := {}
Local nY := 0
Local cDoc := ""
Local lOk := .T.
PRIVATE lMsErroAuto := .F.

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Abertura do ambiente |
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
ConOut(Repl("-",80))
ConOut(PadC("Teste de Inclusao de 2.000 pedidos de compra",80))

//PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" MODULO "COM" TABLES "SA3","SB1","SB2","SF4","SC7"

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Verificacao do ambiente para teste |
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
dbSelectArea("SB1")
dbSetOrder(1)
If !SB1->(MsSeek(xFilial("SB1")+"PROD")) // Inserir o código do Produto
lOk := .F.
ConOut("Cadastrar produto: PROD") // Inserir o código do Produto
EndIf

dbSelectArea("SF4")
dbSetOrder(1)
If !SF4->(MsSeek(xFilial("SF4")+"501")) // Inserir o código do TES
lOk := .F.
ConOut("Cadastrar TES: 501") // Inserir o código do TES
EndIf

dbSelectArea("SE4")
dbSetOrder(1)
If !SE4->(MsSeek(xFilial("SE4")+"000")) // Inserir o código da Condição de Pagamento
lOk := .F.
ConOut("Cadastrar condicao de pagamento: 000") // Inserir o código da Condição de Pagamento
EndIf

dbSelectArea("SA2")
dbSetOrder(1)
If !SA1->(MsSeek(xFilial("SA2")+"000000")) // Inserir o código do Fornecedor
lOk := .F.
ConOut("Cadastrar Fornecedor: 000000") // Inserir o código do Fornecedor
EndIf

If lOk
ConOut("Inicio: "+Time())

For nY := 1 To 2000
//cDoc := GetSxeNum("SC7","C7_NUM")
//RollBAckSx8()
cDoc := StrZero(nY, 4) + "PC"
aCabec := {}
aItens := {}
aadd(aCabec,{"C7_NUM" ,cDoc, Nil})
aadd(aCabec,{"C7_EMISSAO" ,dDataBase, Nil})
aadd(aCabec,{"C7_

FILENT

FORNECE" ,"000000",

cFilAnt

Nil})

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

aadd(aCabec,{"C7_LOJA" ,"00", Nil})
aadd(

aLinha

aCabec,{"C7_

ITEM

COND" ,

StrZero(nX,4)

"000", Nil})
aadd(

aLinha

aCabec,{"C7_

PRODUTO

CONTATO" ,

StrZero(nX,4)

"000000", Nil})
aadd(

aLinha

aCabec,{"C7_

QUANT

FILENT" ,

1

"01", Nil})

aLinha := {}
//aadd(aLinha,{"C7_

PRECO

ITEM" ,

150

StrZero(nX,2) ,Nil})
aadd(aLinha,{"C7_

TOTAL

PRODUTO" ,

150

"PROD" ,Nil})
aadd(

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

aLinha,{"C7_QUANT" ,1 ,Nil})
aadd(aLinha,{"C7_PRECO" ,100 ,Nil})
aadd(aLinha,{"C7_TOTAL" ,100 ,Nil})
aadd(aItens,aLinha)

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Teste de Inclusao |
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
MATA121(aCabec,aItens,3)
If !lMsErroAuto
ConOut("

Exclusao PC:

Incluido com sucesso! "+cDoc)
Else
ConOut("Erro na

exclusao

inclusao!")

MostraErro()

EndIf

RESET ENVIRONMENT

Return

 
 
         

Next nY
ConOut("Fim : "+Time())
ConOut(Repl("-",80))
EndIf
Return(.T.)


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):Exemplo de

Card
defaulttrue
id06072020265
labelEstoque
Expandir
title
Cadastro de Produtos (MATA010)

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



UserFunctionM010RAut()
Local

PARAMIXB1 := {}
Local PARAMIXB2 := 3
Local

aDados

:= {}
Local aDadosIte

:= {}
LocalaItens := {}
Localncont := 0


Local nQtdIni := 100
Local nVIni1 := 1000


LocalaCabec := {}
LocalaItem := {}
LocalaLinha := {}

Local ddatabase := Date()
Local nOpc := 3 // 3) INCLUSÃO | 4) ALTERAÇÃO
Local nPos := 0

PrivateoModel := Nil
PrivatelMsErroAuto := .F.
PrivateaRotina := {}

Forncont := 1To

5000

1000//Numero de Produtos que deseja cadastrar
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_OPERATION_INSERT)
oModel:Activate()
oModel:SetValue("SB1MASTER","B1_COD" ,aItens[ncont][1])
oModel:SetValue("SB1MASTER","B1_

aItens,aDados )

ConOut("Inicio mata010 gravacao")

//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

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])

Verifica e indica no AppServer se a gravação ocorreu normalmente para cada item
IfoModel:VldData()
oModel:CommitData()
CONOUT("Gravacao Ok")
Else
CONOUT("Erro na gravacao")
EndIf

oModel:DeActivate()
oModel:Destroy()

oModel := NIL
ConOut("Fim mata010 gravacao") //Fim da gravação

NEXT

ReturnNil

Exemplo para inclusão de Clientes(MATA030):

Expandir
titleExemplo de Cadastro de Clientes(MATA030)



Card
defaulttrue
id06072020265
labelGestão de Serviços

Gerar Atendentes e Orçamentos de Serviços, ao compilar este fonte, acesse a rotina Gestão dos Contratos (TECA870) > Outras Ações > Gerar Registros: 

Expandir
titleGerar Atendentes e Orçamentos

#include 'protheus.ch'

User Function AT870NWMNU()
Local nC
Local aRetMenu := {}

If ValType(PARAMIXB) == "A"
nTam := Len(PARAMIXB)
For nC := 1 to nTam
aAdd(aRetMenu, aClone(PARAMIXB[nC]))
Next nC
EndIf

aAdd( aRetMenu, {"Gerar Registros", { || u_GERREG()} , 2} )
aAdd( aRetMenu, {"TecTrigger", { || TECTrigger()} , 2} )
aAdd( aRetMenu, {"Teste OS", { || U_TESTOS()} , 2} )

Return aRetMenu

User Function GERREG()
Local oDlgEscTela := Nil
Local oExit
Local oOk
Local oGet1
Local oGet2
Local oCheck1
Local cVal := "000000"
Local cVal2 := "000000"
Local lCheck := .T.

If Aviso("GsGenRegs","Escolha que tipo de registro deseja gerar automáticamente:",{"Atendentes","Orçamento"},2) == 1
DEFINE MSDIALOG oDlgEscTela TITLE "Gerar Atendentes" FROM 0,0 TO 120,320 PIXEL
@ 5, 9 SAY "Quantidade: " SIZE 50, 19 PIXEL
oExit := TButton():New( 35, 54, "Sair",oDlgEscTela,{|| oDlgEscTela:End() }, 35,10,,,.F.,.T.,.F.,,.F.,,,.F. )
oOk := TButton():New( 35, 9, "Gerar",oDlgEscTela,{|| AddAtendente(cVal,lCheck), oDlgEscTela:End() }, 35,10,,,.F.,.T.,.F.,,.F.,,,.F. )
oGet1:= TGet():New( 15, 9, { | u | If( PCount() == 0, cVal, cVal := u ) },oDlgEscTela, ;
50, 010, "@E 999999",, 0, 16777215,,.F.,,.T.,,.F.,,.F.,.F.,,.F.,.F. ,,"cVal",,,,.T. )

oCheck1 := TCheckBox():New(15,60,'Gera Funcionário? (SRA)',{|u|if( pcount()==0,lCheck,lCheck := u)},oDlgEscTela,100,210,,,,,,,,.T.,,,)
ACTIVATE MSDIALOG oDlgEscTela CENTERED
Else
DEFINE MSDIALOG oDlgEscTela TITLE "Gerar Orçamento" FROM 0,0 TO 190,320 PIXEL
@ 5, 9 SAY "Quantidade de LOCAIS (TFL): " SIZE 75, 29 PIXEL
@ 37, 9 SAY "Quantidade de RH por Local (TFF): " SIZE 85, 29 PIXEL
oCheck1 := TCheckBox():New(15,100,'Gerar o contrato?',{|u|if( pcount()==0,lCheck,lCheck := u)},oDlgEscTela,100,210,,,,,,,,.T.,,,)

oGet1:= TGet():New( 15, 9, { | u | If( PCount() == 0, cVal, cVal := u ) },oDlgEscTela, ;
50, 010, "@E 999999",, 0, 16777215,,.F.,,.T.,,.F.,,.F.,.F.,,.F.,.F. ,,"cVal",,,,.T. )

oGet2:= TGet():New( 50, 9, { | u | If( PCount() == 0, cVal2, cVal2 := u ) },oDlgEscTela, ;
50, 010, "@E 999999",, 0, 16777215,,.F.,,.T.,,.F.,,.F.,.F.,,.F.,.F. ,,"cVal2",,,,.T. )

oOk := TButton():New( 50, 110, "Gerar",oDlgEscTela,{|| AddORC(cVal,cVal2,lCheck), oDlgEscTela:End() }, 35,10,,,.F.,.T.,.F.,,.F.,,,.F. )
oExit := TButton():New( 70, 110, "Sair",oDlgEscTela,{|| oDlgEscTela:End() }, 35,10,,,.F.,.T.,.F.,,.F.,,,.F. )

ACTIVATE MSDIALOG oDlgEscTela CENTERED
EndIf

Return .T.

Static Function AddAtendente(nQtd,lSRA)
Local oGsGenRegs := GsGenRegs():New()
nQtd := VAL(Alltrim(nQtd))
IF nQtd > 0
oGsGenRegs:addAtendente(nQtd,lSRA)
If lSRA
MsgAlert(cValToChar(nQtd) + " atendentes (AA1) e funcionários (SRA) inseridos !")
Else
MsgAlert(cValToChar(nQtd) + " atendentes inseridos !")
EndIf
Else
MsgAlert("Nenhum atendente inserido")
EndIf
Return

Static Function AddORC(nTFL,nTFF,lGeraGCT)
Local oGsGenRegs := GsGenRegs():New()
Local nX
Local nY
nTFL := VAL(Alltrim(nTFL))
nTFF := VAL(Alltrim(nTFF))

If nTFL > 0 .AND. nTFF > 0
oGsGenRegs:addOrcamento("ORC1")
For nX := 1 TO nTFL
oGsGenRegs:addLocal("ORC1", "LOC" + cValToChar(nX))
For nY := 1 TO nTFF
oGsGenRegs:addRH("ORC1", "LOC" + cValToChar(nX), "RH" + cValToChar(nY))
Next nY
Next nX
If lGeraGCT
oGsGenRegs:gerarContrt("ORC1")
EndIf
TFJ->(DbGoTo(oGsGenRegs:getRec( oGsGenRegs:aORCS[1][2])))
MsgAlert("Processamento concluído! Orçamento: " + TFJ->TFJ_CODIGO + IIF(lGeraGCT,". Contrato: " + TFJ->TFJ_CONTRT,""))
Else
MsgAlert("Nenhum orçamento inserido")
EndIf

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