Árvore de páginas

Versões comparadas

Chave

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

01. DADOS GERAIS

Linha de Produto:Microsiga Protheus®
Segmento:Serviços
Módulo:SIGAFAT - Faturamento
Função:MATA410 - Pedido de Venda
Composition Setup
import.css=/download/attachments/327912/newLayout.css

...

Abrangências:Microsiga Protheus 12, Protheus 11, Protheus 10
Versões:Microsiga Protheus 12, Protheus 11, Protheus 10
Compatível Países:Todos
Sistemas Operacionais:Todos
Compatível

...

com as Bases de Dados:Todos
Nível de Acesso:Nível 1 (Acesso Clientes)
Idiomas:

...

Todos

02. DESCRIÇÃO

Função

...

utilizada

...

para

...

geração

...

do Pedido de Venda via rotina automática (ExecAuto).

03. SINTAXE

MSExecAuto({|a, b, c, d, e, f| MATA410(a, b, c, d, , , , e, )}, aCabec, aItens, nOpcX, .F., [aItemRat])

04. PARÂMETROS

NomeTipoDescriçãoDefaultObrigatórioReferência
aCabecArray de registrosArray contendo os campos do cabeçalho (SC5)
Sim
aItensArray de registrosArray contendo os campos dos itens (SC6)
Sim
nOpcXNumérico (opção de execução)3 = Inclusão; 4 = Alteração; 5 = Exclusão
Sim
aItemRatArray de registrosArray contendo os rateios dos itens do Pedido de Venda por Centros de Custo (AGG){}Não

05. RETORNO

{}

06. EXEMPLOS

Escolha o modelo desejado abaixo de acordo com a sua necessidade de execução:


Totvs custom tabs box
tabsExemplo 01, Exemplo 02, Exemplo 03, Exemplo 04
idsExemplo01,Exemplo02
Totvs custom tabs box items
defaultyes
referenciaExemplo01

Este é o exemplo básico para a execução da Rotina Automática do Pedido de Venda:

Bloco de código
linenumberstrue
#INCLUDE "PROTHEUS.CH"
#INCLUDE "TBICONN.CH"

User Function MyMata410()

Local cDoc
Programa Fonte:
MATA410.PRX
Sintaxe:

MATA410 - Geração automática de Pedido de Vendas (ExecAuto) ( [ aCabec ] [ aItens ] [ nOpc ] )

Retorno:
    ()
Exemplos #INCLUDE "PROTHEUS.CH"#INCLUDE "TBICONN.CH"/*/±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄ¿±±±±³Fun‡„o ³MyMata410 ³ Autor ³ Eduardo Riera ³ Data ³17.04.2003 ³±±±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄ´±±±±³ ³Rotina de teste da rotina automatica do programa MATA410 ³±±±±³
       := ""  
³
                                                             
³±±±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±±±³Parametros³Nenhum
  // Número do Pedido de Vendas
Local cA1Cod     := "000001"                                         
³±±±±³
          
³
        // Código do Cliente
Local cA1Loja    := "01"                                            
³±±±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±±±³Retorno
   
³Nenhum
                // Loja do Cliente
Local cB1Cod     := "000000000000000000000000000061"                             
³±±±±³
      // Código do Produto
Local 
³
cF4TES     := "501"                                                       
³±±±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±±±³Descri‡„o
 
³Esta
 
rotina
 
tem
 
como
 
objetivo
 
efetuar
 
testes
// 
na
Código 
rotina
do 
de
TES
Local cE4Codigo  := 
³±±±±³
"001"          
³pedido
 
de
 
venda
                                              
³±±±±³
    // 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 
³±±±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±±±³Uso
aCabec     := {}
Local 
³
aItens 
Materiais
    := {}
Local aLinha     := {}
Local aErroAuto  := {}
Local lOk        := .T.

Private lMsErroAuto    := .F.
Private lAutoErrNoFile 
³±±±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß/*/Function MyMata410()Local aCabec := {}Local aItens := {}Local aLinha := {}Local nX := 0Local nY := 0Local cDoc := ""Local lOk := .T.PRIVATE lMsErroAuto := .F.//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿//| Abertura do ambiente |//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙConOut(Repl("-",80))ConOut(PadC("Teste de Inclusao de 10 pedidos de venda com 30 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")EndIfdbSelectArea("SF4")dbSetOrder(1)If !SF4->(MsSeek(xFilial("SF4")+"501")) lOk := .F. ConOut("Cadastrar TES: 501")EndIfdbSelectArea("SE4")dbSetOrder(1)If !SE4->(MsSeek(xFilial("SE4")+"001")) lOk := .F. ConOut("Cadastrar condicao de pagamento: 001")EndIfIf !SB1->(MsSeek(xFilial("SB1")+"PA002")) lOk := .F. ConOut("Cadastrar produto: PA002")EndIfdbSelectArea("SA1")dbSetOrder(1)If !SA1->(MsSeek(xFilial("SA1")+"CL000101")) lOk := .F. ConOut("Cadastrar cliente: CL000101")EndIfIf lOk ConOut("Inicio: "+Time()) For nY := 1 To 10
:= .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")
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}) If cPaisLoc == "PTG" aadd(aCabec,{"C5_DECLEXP","TESTE",Nil}) Endif For nX := 1 To 30 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})


   //****************************************************************
   //* 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_
PRUNIT
ITEM",
100,Nil}) aadd(aLinha,{"C6_VALOR",100,Nil})
    StrZero(nX,2), Nil})
      aadd(aLinha,{"C6_
TES
PRODUTO",
"501",Nil}) aadd(aItens,aLinha) Next nX //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ //| Teste de Inclusao
 cB1Cod,        Nil})
      aadd(aLinha,{"C6_QTDVEN",  1,             Nil})
      
aadd(aLinha,{"C6_PRCVEN",  1000,          
| //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ MATA410(aCabec,aItens,3) If !lMsErroAuto ConOut("Incluido com sucesso! "+cDoc) Else ConOut("Erro na inclusao!") EndIf Next nY ConOut("Fim : "+Time()) //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ //| Teste de alteracao
Nil})
      aadd(aLinha,{"C6_PRUNIT",  1000,          Nil})
      aadd(aLinha,{"C6_VALOR",   1000,          Nil})
      aadd(aLinha,{"C6_TES",     cF4TES,        Nil})
      aadd(aItens, 
| //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ aCabec := {} aItens
aLinha)
   Next nX

   nOpcX := 
{} 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}) If cPaisLoc == "PTG" aadd(aCabec,{"C5_DECLEXP","TESTE",Nil}) Endif For nX := 1 To 30 aLinha := {} aadd(aLinha,{"LINPOS","C6_ITEM",StrZero(nX,2)}) aadd(aLinha,{"AUTDELETA","N",Nil}) aadd(aLinha,{"C6_PRODUTO",SB1->B1_COD,Nil}) aadd(aLinha,{"C6_QTDVEN",2,Nil}) aadd(aLinha,{"C6_PRCVEN",100,Nil}) aadd(aLinha,{"C6_PRUNIT",100,Nil}) aadd(aLinha,{"C6_VALOR",200,Nil}) aadd(aLinha,{"C6_TES","501",Nil}) aadd(aItens,aLinha) Next nX ConOut(PadC("Teste de alteracao",80)) ConOut("Inicio: "+Time()) MATA410(aCabec,aItens,4) ConOut("Fim : "+Time()) ConOut(Repl("-",80)) //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ //| Teste de Exclusao | //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ConOut(PadC("Teste de exclusao",80)) ConOut("Inicio: "+Time()) MATA410(aCabec,aItens,5) If !lMsErroAuto ConOut("Exclusao com sucesso! "+cDoc) Else ConOut("Erro na exclusao!") EndIf ConOut("Fim : "+Time()) ConOut(Repl("-",80))EndIfRESET ENVIRONMENTReturn(.T.)
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.)
Totvs custom tabs box items
defaultno
referenciaExemplo02

Utilize esse exemplo para os Pedidos de Venda que necessitam das informações de rateio dos itens do Pedido de Venda por Centros de Custo:

Bloco de código
linenumberstrue
#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.)

07. DEMAIS INFORMAÇÕES


Aviso

Para utilização de produtos com grade é necessário utilizar os campos C6_GRADE com "S" e o campo C6_ITEMGRD com o item da grade que se utiliza, junto com o item do pedido de venda.

Exemplo: São utilizados dois produtos da grade independente da quantidade, sendo assim, o primeiro receberá o campo C6_ITEMGRD com "001" e o segundo "002".

Informações
titleRegras de desconto

Para que as Regras de Desconto sejam consideradas, não deve ser informado o campo C6_PRCVEN (Preço Unitário) para a variável aItens.

O parâmetro MV_REGDPRI tem como definição Indicar a ordem de busca a ser considerada para avaliação da regra de desconto. Para que seja aplicada a regra de desconto do cabeçalho e item é necessário definir o índice 1 no parâmetro conforme a documentação (FAT0093 Regras de Desconto (FATA080))


08. ASSUNTOS RELACIONADOS

  • Não há.


Templatedocumentos


3- Inclusão
4- Alteração
5- Exclusão
HTML
<style>
div.theme-default .ia-splitter #main {
    margin-left: 0px;
}
.ia-fixed-sidebar, .ia-splitter-left {
    display: none;
}
#main {
    padding-left: 10px;
    padding-right: 10px;
    overflow-x: hidden;
}

.aui-header-primary .aui-nav,  .aui-page-panel {
    margin-left: 0px !important;
}
.aui-header-primary .aui-nav {
    margin-left: 0px !important;
}
</style>
Parâmetros:
NomeTipoDescriçãoDefaultObrigatórioReferênciaaCabecArray of RecordArray contendo os campos do cabeçalho (SC5).aItensArray of RecordArray contendo os campos dos itens (SC6).nOpcArray of Record