Histórico da Página
...
Pagetitle | ||||
---|---|---|---|---|
|
Função: MATA120 - Pedido de Compras
...
Versões: | Microsiga Protheus 8.11, Protheus 10, Protheus 11, Protheus 12 |
Compatível Países: | Todos |
Sistemas Operacionais: | Todos |
Compatível às |
...
bases de |
...
dados: | Todos |
...
Nivel de Acesso: |
...
Nivel 1 (Acesso Clientes) |
Idiomas: |
...
Todos |
Descrição: | Essa |
...
rotina |
...
permite |
...
o |
...
registro |
...
de |
...
qualquer |
...
Pedido |
...
de |
...
Compras de |
...
mercadorias |
...
na |
...
empresa. |
...
O |
...
cadastro |
...
do |
...
Pedido |
...
de |
...
Compras |
...
é |
...
o |
...
contrato |
...
formal |
...
entre |
...
empresa |
...
e |
...
o |
...
fornecedor |
...
Programa Fonte: |
...
MATA120. |
...
PRX | |
Sintaxe: | MATA120 - Pedido de Compras ( [ ExpN1 ] [ ExpA1 ] [ ExpA2 ] [ ExpN2 ] [ ExpL1 ] [ |
...
ExpA3] [ |
...
ExpA4 ] [ |
...
ExpA5 ]) |
Quando o campo: C7_MOEDA for informado, o campo: C7_TXMOEDA, também deve ser inofrmado no array.
Se for opção Alteração ou Exclusão, o campo C7_REC_WT tem que estar preenchido com o número do Registro (Recno())
Rateio por Centro de Custo:
O array Rateio por Centro de Custo deve ser passado com todos os campos e seguindo a mesma ordem do exemplo abaixo.
O array Rateio por Projeto deve ser passado com todos os campos e seguindo a mesma ordem do exemplo abaixo. Atenção essa opção está disponível somente a partir da Versão Protheus 11.
#INCLUDE "RWMAKE.CH"
#INCLUDE "PROTHEUS.CH"
#INCLUDE "tbiconn.CH"
User Function MyMata120()
Local aCabec := {}
Local aItens := {}
Local aLinha := {}
Local nX := 0
Local nY := 0
Local cDoc := ""
Local lOk := .T.
PRIVATE lMsErroAuto := .F.
PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" MODULO "FAT" TABLES "SC7"
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Abertura do ambiente |
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
ConOut(Repl("-",80))
ConOut(PadC("Teste de Inclusao de 10 pedidos de compra com 30 itens cada",80))
...
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||
Retorno | L (Logico) = .T. (Apresentou erro) / .F. (OK) | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Observações: | Os campos de cabeçalho do Pedido de Compras (C7_EMISSAO / C7_FORNECE / C7_LOJA / C7_COND / C7_CONTATO / C7_FILENT) deverão ser obrigatoriamente informados nesta rotina. Os campos de itens do Pedido de Compras (C7_PRODUTO / C7_QUANT / C7_PRECO) deverão ser obrigatoriamente informados nesta rotina. Se informar o campo (C7_MOEDA), o campo (C7_TXMOEDA) também devera ser informado nos itens do pedido. Se for alterar ou excluir um pedido de compra, o campo (C7_REC_WT) tem que estar preenchido com o numero do registro (SC7->(Recno()) Alteração de Pedido de Compras: Para alterar/excluir item já existente no Pedido de Compras, deve-se utilizar o LINPOS e AUTODELETA Para incluir um novo item em um pedido já existente, deve-se informar o campo (C7_ITEM) com um registro novo, e NÃO utilizar o LINPOS e AUTODELETA. Atender Solicitações de Compras: Para que seja atendida a SC, deve-se informar os seguintes campos nos itens do PC. C7_NUMSC (Numero da solicitação) = Informar o numero da solicitação de Compras que originou o Pedido de Compras C7_ITEMSC (Item da solicitação) = Informar o item da solicitação de compras que esta vinculada ao Pedido de Compras C7_QTDSOL (Quantidade pedido da SC) = Informar a quantidade da solicitação de compras vinculada ao Pedido de Compras Rateio por Centro de Custo: O array de centro de custo deve ser passado com todos os campos e seguindo a mesma ordem do exemplo abaixo Rateio de Projeto: (Opção disponível a partir da versão 11) O array de projeto deve ser passado com todos os campos e seguindo a mesma ordem do exemplo abaixo. Adiantamento: O array de adiantamento deve ser passado com todos os campos e seguindo a mesma ordem do exemplo abaixo. Na preparação do ambiente deve ser utilizado o usuário e senha, pois o sistema utiliza o usuário do sistema(RetCodUsr()) para realizar a gravação do campo C7_USER. PREPARE ENVIRONMENT EMPRESA "01" FILIAL "1001" USER "usuário" PASSWORD "****" MODULO "COM" |
Exemplos:
#Include "Protheus.ch"
#Include "RwMake.ch"
#Include "TbiConn.ch"
User FUnction EXEC121()
Local aCabec := {}
Local aItens := {}
Local aLinha := {}
Local aRatCC := {}
Local aRatPrj := {}
Local aAdtPC := {}
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
If Empty(cDoc)
cDoc := StrZero(1,Len(SC7->C7_NUM))
Else
cDoc := Soma1(cDoc)
EndIf
...
})
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
//
...
If !lMsErroAuto
ConOut("Incluido com sucesso! "+cDoc)
Else
ConOut("Erro na inclusao!")
MostraErro()
EndIf
Next nY
ConOut("Fim : "+Time())
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Teste de Alteracao |
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
aCabec := {}
aItens := {}
aadd(aCabec,{"C7_NUM" ,cDoc})
aadd(aCabec,{"C7_EMISSAO" ,dDataBase})
aadd(aCabec,{"C7_FORNECE" ,"F00001"})
aadd(aCabec,{"C7_LOJA" ,"01"})
aadd(aCabec,{"C7_COND" ,"001"})
aadd(aCabec,{"C7_CONTATO" ,"AUTO"})
aadd(aCabec,{"C7_FILENT" ,cFilAnt})
...
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(aItens,aLinha)
Next nX
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Teste de alteracao |
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
ConOut(PadC("Teste de alteracao",80))
ConOut("Inicio: "+Time())
MATA120(1,aCabec,aItens,4)
If !lMsErroAuto
ConOut("Alteracao com sucesso! "+cDoc)
Else
ConOut("Erro na Alteracao!")
EndIf
ConOut("Fim : "+Time())
ConOut(Repl("-",80))
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Teste de exclusao |
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
aCabec := {}
aItens := {}
aadd(aCabec,{"C7_NUM" ,cDoc})
aadd(aCabec,{"C7_EMISSAO" ,dDataBase})
aadd(aCabec,{"C7_FORNECE" ,"F00001"})
aadd(aCabec,{"C7_LOJA" ,"01"})
aadd(aCabec,{"C7_COND" ,"001"})
aadd(aCabec,{"C7_CONTATO" ,"AUTO"})
aadd(aCabec,{"C7_FILENT" ,cFilAnt})
For nX := 1 To 10
aLinha := {}
aadd(aLinha,{"C7_ITEM",StrZero(nX,Len(SC7->C7_ITEM)),Nil})
aadd(aLinha,{"C7_PRODUTO","PA001",Nil})
aadd(aLinha,{"C7_QUANT",2,Nil})
aadd(aLinha,{"C7_PRECO",100,Nil})
aadd(aLinha,{"C7_TOTAL",200,Nil})
aadd(aLinha,{"C7_REC_WT" ,SC7->(RECNO()) ,Nil})
aadd(aItens,aLinha)
Next nX
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Teste de Exclusao |
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
ConOut(PadC("Teste de exclusao",80))
ConOut("Inicio: "+Time())
MATA120(1,aCabec,aItens,5)
...
aAdd(aLinha, {"AJ7_QUANT" , 1 , Nil})
aAdd(aLinha, {"AJ7_REVISA" , "0001" , Nil})
aAdd(aRatPrj[1][2], aClone(aLinha))
Next nX
//Adiantamento
aLinha := {}
aAdd(aLinha, {"FIE_FILIAL", xFilial("FIE"), Nil})
aAdd(aLinha, {"FIE_CART", "P", Nil}) // Carteira pagar
aAdd(aLinha, {"FIE_PEDIDO", "" , Nil}) // Não precisa, pois quem trata é a MATA120
aAdd(aLinha, {"FIE_PREFIX", PadR("A", TamSX3("FIE_PREFIX")[1]), Nil}) //Prefixo
aAdd(aLinha, {"FIE_NUM", PadR("PAPC01", TamSX3("FIE_NUM")[1]), Nil}) //Numero Titulo
aAdd(aLinha, {"FIE_PARCEL", PadR("1", TamSX3("FIE_PARCEL")[1]), Nil}) //Parcela
aAdd(aLinha, {"FIE_TIPO", PadR("PA", TamSX3("FIE_TIPO")[1]), Nil}) //Tipo = PA
aAdd(aLinha, {"FIE_FORNEC", PadR("001 ", TamSX3("FIE_FORNEC")[1]), Nil}) // Fornecedor
aAdd(aLinha, {"FIE_LOJA", PadR("01", TamSX3("FIE_LOJA")[1]), Nil}) //Loja
aAdd(aLinha, {"FIE_VALOR", 100, Nil}) // Valor do pa que está vinculado ao pedido
aAdd(aAdtPC, aClone(aLinha))
MSExecAuto({|a,b,c,d,e,f,g,h| MATA120(a,b,c,d,e,f,g,h)},1,aCabec,aItens,nOpc,.F.,aRatCC,aAdtPC,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" ,"006"}) // Condição de pagamento que permite adiantamento
aadd(aCabec,{"C7_CONTATO" ,"AUTO"})
aadd(aCabec,{"C7_FILENT" ,cFilAnt})
aLinha := {}
// Alterar item existente
aadd(aLinha,{"C7_ITEM" ,"0001" ,Nil})
aadd(aLinha,{"C7_PRODUTO" ,"0001",Nil})
aadd(aLinha,{"C7_QUANT" ,10,Nil})
aadd(aLinha,{"C7_PRECO" ,10 ,Nil})
aadd(aLinha,{"C7_TOTAL" ,100 ,Nil})
aAdd(aLinha,{"LINPOS","C7_ITEM" ,"0001"})
aAdd(aLinha,{"AUTDELETA","N" ,Nil})
aadd(aItens,aLinha)
aLinha := {}
// Incluir novo item no pedido
aadd(aLinha,{"C7_ITEM" ,"0002" ,Nil})
aadd(aLinha,{"C7_PRODUTO" ,"0002",Nil})
aadd(aLinha,{"C7_QUANT" ,20,Nil})
aadd(aLinha,{"C7_PRECO" ,10 ,Nil})
aadd(aLinha,{"C7_TOTAL" ,200 ,Nil})
aadd(aItens,aLinha)
//alterado Rateio Centro de Custo do item existente
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(aRatCC[1][2], aClone(aLinha))
Next nX
//Rateio Centro de Custo novo item
aAdd(aRatCC, Array(2))
aRatCC[2][1] := "0002"
aRatCC[2][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(aRatCC[2][2], aClone(aLinha))
Next nX
// pa já existente no financeiro.
aLinha := {}
aAdd(aLinha, {"FIE_FILIAL", xFilial("FIE"), Nil})
aAdd(aLinha, {"FIE_CART", "P", Nil}) // Carteira pagar
aAdd(aLinha, {"FIE_PEDIDO", cDoc, Nil}) // Numero pedido de compras
aAdd(aLinha, {"FIE_PREFIX", PadR("A", TamSX3("FIE_PREFIX")[1]), Nil}) //Prefixo
aAdd(aLinha, {"FIE_NUM", PadR("PAPC01", TamSX3("FIE_NUM")[1]), Nil}) //Numero Titulo
aAdd(aLinha, {"FIE_PARCEL", PadR("1", TamSX3("FIE_PARCEL")[1]), Nil}) //Parcela
aAdd(aLinha, {"FIE_TIPO", PadR("PA", TamSX3("FIE_TIPO")[1]), Nil}) //Tipo = PA
aAdd(aLinha, {"FIE_FORNEC", PadR("001", TamSX3("FIE_FORNEC")[1]), Nil}) // Fornecedor
aAdd(aLinha, {"FIE_LOJA", PadR("01", TamSX3("FIE_LOJA")[1]), Nil}) //Loja
aAdd(aLinha, {"FIE_VALOR", 300, Nil}) // Valor do pa que está vinculado ao pedido
aAdd(aAdtPC, aClone(aLinha))
MSExecAuto({|a,b,c,d,e,f,g,h| MATA120(a,b,c,d,e,f,g,h)},1,aCabec,aItens,nOpc,.F.,aRatCC,aAdtPC)
If !lMsErroAuto
ConOut("Alterado PC: "+cDoc)
Else
ConOut("Erro na alteracao!")
MostraErro()
EndIf
RESET ENVIRONMENT
PREPARE ENVIRONMENT EMPRESA "01" FILIAL "1001" MODULO "COM"
dbSelectArea("SC7")
//Teste de exclusão
nOpc := 5
cDoc := "000054" //Informar PC ou AE (Alteração / Exclusão)
aadd(aCabec,{"C7_NUM" ,cDoc})
aadd(aCabec,{"C7_EMISSAO" ,dDataBase})
aadd(aCabec,{"C7_FORNECE" ,"001 "})
aadd(aCabec,{"C7_LOJA" ,"01"})
aadd(aCabec,{"C7_COND" ,"001"})
aadd(aCabec,{"C7_CONTATO" ,"AUTO"})
aadd(aCabec,{"C7_FILENT" ,cFilAnt})
For nX := 1 To 2
aLinha := {}
aadd(aLinha,{"C7_ITEM" ,StrZero(nX,4) ,Nil})
aadd(aLinha,{"C7_PRODUTO" ,StrZero(nX,4),Nil})
aadd(aLinha,{"C7_QUANT" ,1 ,Nil})
aadd(aLinha,{"C7_PRECO" ,150 ,Nil})
aadd(aLinha,{"C7_TOTAL" ,150 ,Nil})
aadd(aItens,aLinha)
Next nX
MSExecAuto({|a,b,c,d,e| MATA120(a,b,c,d,e)},1,aCabec,aItens,nOpc,.F.)
If !lMsErroAuto
ConOut("Exclusao PC: "+cDoc)
Else
ConOut("Erro na exclusao!")
MostraErro()
EndIf
RESET ENVIRONMENT
Return
RESET ENVIRONMENT
Return(.T.)
Parâmetros:
Nome | Tipo | Descrição | Default | Obrigatório | Referência | ||||||||||||
ExpN1 | Numérico | Pedido de compras ou Autorização de entrega. | |||||||||||||||
ExpA1 | Array of Record | Array Cabeçalho do Pedido de Compras para Rotina Automática. | |||||||||||||||
ExpA2 | Array of Record | Array Itens do Pedido de Compras para Rotina Automática | |||||||||||||||
ExpN2 | Numérico | Opção da Rotina para Rotina Automática. | |||||||||||||||
ExpL1 | Lógico | Apresenta a Dialog da Rotina em Rotina Automática. | |||||||||||||||
ExpA1 | Array of Record | Array com os informações para o rateio do Centro de Custo para Rotina Automática. | |||||||||||||||
ExpA2 | Array of Record | Reservado | |||||||||||||||
ExpA3 | Array of Record | Array com os informações para o rateio de projeto para Rotina Automática. |
...