Á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).

Programa Fonte:
MATA410.PRX

...

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:


#INCLUDE "PROTHEUS.CH" #INCLUDE "TBICONN.CH"   Function MyMata410() Local aCabec := {} Local aItens := {} Local aLinha := {} Local nX := 0 Local nY := 0
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()
Retorno:
    ()
Exemplos
Bloco de código
linenumberstrue

Local 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") EndIf dbSelectArea("SF4") dbSetOrder(1) If !SF4->(MsSeek(xFilial("SF4")+"501")) lOk := .F. ConOut("Cadastrar TES: 501") 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 10 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}) aadd(aLinha,{"C6_PRUNIT",100,Nil}) aadd(aLinha,{"C6_VALOR",100,Nil}) aadd(aLinha,{"C6_TES","501",Nil}) aadd(aItens,aLinha) Next nX
// 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.

//****************************************************************
//* 
Teste
Abertura 
de Inclusao
do ambiente
//****************************************************************
MSExecAuto({|x,y,z|mata410(x,y,z)},aCabec,aItens,3) If !lMsErroAuto ConOut("Incluido com sucesso! "+cDoc) Else ConOut("Erro na inclusao!") EndIf Next nY ConOut("Fim : "+Time()) //**************************************************************** //* Teste de alteracao //**************************************************************** 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,{"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()) MSExecAuto({|x,y,z|mata410(x,y,z)},aCabec,aItens,4) ConOut("Fim : "+Time()) ConOut(Repl("-",80)) //*********************************
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")

   //****************************************************************
   //* 
Teste
Inclusao 
de Exclusao //
- INÍCIO
   //***************************************************************
**** ConOut(PadC("Teste de exclusao",80)) ConOut("Inicio: "+Time()) MSExecAuto({|x,y,z|mata410(x,y,z)},aCabec,aItens,5) If !lMsErroAuto ConOut("Exclusao com sucesso! "+cDoc) Else ConOut("Erro na exclusao!") EndIf ConOut("Fim : "+Time()) ConOut(Repl("-",80)) EndIf RESET ENVIRONMENT Return(.T.)
Parâmetros:
NomeTipoDescriçãoDefaultObrigatórioReferênciaaCabecArray of RecordArray contendo os campos do cabeçalho (SC5).
*
   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.)
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>
aItensArray of RecordArray contendo os campos dos itens (SC6).nOpcArray of Record