01. DADOS GERAIS
Linha de Produto: | Microsiga Protheus® |
---|---|
Segmento: | Serviços |
Módulo: | SIGAFAT - Faturamento |
Função: | MATA410 - Pedido de Venda |
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
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
---|---|---|---|---|---|
aCabec | Array de registros | Array contendo os campos do cabeçalho (SC5) | Sim | ||
aItens | Array de registros | Array contendo os campos dos itens (SC6) | Sim | ||
nOpcX | Numérico (opção de execução) | 3 = Inclusão; 4 = Alteração; 5 = Exclusão | Sim | ||
aItemRat | Array de registros | Array 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:
Este é o exemplo básico para a execução da Rotina Automática do 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.)
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:
#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
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".
Regras 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á.