empenhos excluídos.
aCab := {{"D4_OP","00130301001",NIL},;
{"INDEX",2,Nil}}
//Executa o MATA381 para exclusão dos empenhos.
MSExecAuto({|x,y,z| mata381(x,y,z)},aCab,aItens,5)
If lMsErroAuto
//Se ocorrer erro.
MostraErro()
Else
//Processamento realizado com sucesso
Alert("Excluído com sucesso.")
EndIf
Return |
5 - Exemplo para inclusão de empenhos com integração com o PIMS: No array com as informações do cabeçalho, é necessário enviar apenas o número da ordem de produção. No array de itens, é necessário informar todas as informações do empenho que será incluído. Informações de Endereços podem ser enviadas através da opção AUT_D4_END conforme exemplo. No array de itens, é necessário informar todas as informações do empenho que será incluído. Informações referente a integração com o PIMS podem ser enviadas através da opção AUT_D4_AGR conforme exemplo. Quando o empenho possui controle de lote e o lote é enviado para geração do empenho, não é necessário enviar a data de validade do lote. O programa MATA381 preenche a validade do lote automaticamente. Para inclusão dos empenhos, enviar o 3° parâmetro do MATA381 com o valor 3.
Bloco de código |
---|
language | cpp |
---|
firstline | 1 |
---|
title | Exemplo de Inclusão de empenhos com integração com o PIMS |
---|
linenumbers | true |
---|
| User Function Inc381Auto()
Local aCab := {}
Local aLine := {}
Local aItens := {}
Local aEnder := {}
Local aLineEnder := {}
PRIVATE lMsErroAuto := .F.
//Monta o cabeçalho com o número da OP que será utilizada para inclusão dos empenhos.
aCab := {{"D4_OP","00130301001",NIL}}
//Adiciona novo empenho
aLine := {}
aAdd(aLine,{"D4_OP" ,"00130301001" ,NIL})
aAdd(aLine,{"D4_COD" ,"MP01" ,NIL})
aAdd(aLine,{"D4_LOCAL" ,"01" ,NIL})
aAdd(aLine,{"D4_DATA" ,CtoD("18/09/2018"),NIL})
aAdd(aLine,{"D4_QTDEORI",10 ,NIL})
aAdd(aLine,{"D4_QUANT" ,10 ,NIL})
aAdd(aLine,{"D4_TRT" ,"001" ,NIL})
//Adiciona informações referente a integração com o PIMS
aLineNLI := {}
aAdd( aLineNLI, { "NLI_CLVAL", "02", Nil } )
aAdd( aLineNLI, { "NLI_FAZ", "001", NIL } )
aAdd( aLineNLI, { "NLI_QTCOMP", 20, NIL } )
aAdd( aLineNLI, { "NLI_PMSQTD", 15, NIL } )
aAdd( aLineNLI, { "NLI_PGQTD", 25, NIL } )
aAdd( aLineNLI, { "NLI_POPQTD", 35, NIL } )
aAdd( aLineNLI, { "NLI_NUMPEN", 01, NIL } )
aAdd( aLineNLI, { "NLI_QTDPAR", 5000, NIL } )
aAdd( aLineNLI, { "NLI_CULTRA", "01", NIL } )
aAdd( aLineNLI, { "NLI_CC", "0010" , NIL } )
aAdd( aLineNLI, { "NLI_FITSSA", "10", NIL } )
aAdd( aLineNLI, { "NLI_REQCOD", "admin", NIL } )
aAdd( aLineNLI, { "NLI_REQNOM", "admin", NIL } )
aAdd(aLine,{"AUT_D4_AGR",aLineNLI,NIL})
//Adiciona a linha do empenho no array de itens.
aAdd(aItens,aLine)
//Adiciona novo empenho com utilização de Lote.
//A data de validade do lote é preenchida automaticamente pelo programa e não precisa ser enviada no array.
aLine := {}
aAdd(aLine,{"D4_OP" ,"00130301001" ,NIL})
aAdd(aLine,{"D4_COD" ,"MP02" ,NIL})
aAdd(aLine,{"D4_LOCAL" ,"01" ,NIL})
aAdd(aLine,{"D4_DATA" ,CtoD("18/09/2018"),NIL})
aAdd(aLine,{"D4_QTDEORI",3 ,NIL})
aAdd(aLine,{"D4_QUANT" ,3 ,NIL})
aAdd(aLine,{"D4_LOTECTL","L1" ,NIL})
aAdd(aLine,{"D4_TRT" ,"002" ,NIL})
//Adiciona informações referente a integração com o PIMS
aLineNLI := {}
aAdd( aLineNLI, { "NLI_CLVAL", "02", Nil } )
aAdd( aLineNLI, { "NLI_FAZ", "001", NIL } )
aAdd( aLineNLI, { "NLI_QTCOMP", 20, NIL } )
aAdd( aLineNLI, { "NLI_PMSQTD", 15, NIL } )
aAdd( aLineNLI, { "NLI_PGQTD", 41, NIL } )
aAdd( aLineNLI, { "NLI_POPQTD", 60, NIL } )
aAdd( aLineNLI, { "NLI_NUMPEN", 01, NIL } )
aAdd( aLineNLI, { "NLI_QTDPAR", 7000, NIL } )
aAdd( aLineNLI, { "NLI_CULTRA", "01", NIL } )
aAdd( aLineNLI, { "NLI_CC", "0010" , NIL } )
aAdd( aLineNLI, { "NLI_FITSSA", "10", NIL } )
aAdd( aLineNLI, { "NLI_REQCOD", "admin", NIL } )
aAdd( aLineNLI, { "NLI_REQNOM", "admin", NIL } )
aAdd(aLine,{"AUT_D4_AGR",aLineNLI,NIL})
//Adiciona a linha do empenho no array de itens.
aAdd(aItens,aLine)
//Adiciona novo empenho com endereço e lote
aLine := {}
aAdd(aLine,{"D4_OP" ,"00130301001" ,NIL})
aAdd(aLine,{"D4_COD" ,"MP03" ,NIL})
aAdd(aLine,{"D4_LOCAL" ,"01" ,NIL})
aAdd(aLine,{"D4_DATA" ,CtoD("17/09/2018"),NIL})
aAdd(aLine,{"D4_QTDEORI",10 ,NIL})
aAdd(aLine,{"D4_QUANT" ,10 ,NIL})
aAdd(aLine,{"D4_LOTECTL","L1" ,NIL})
aAdd(aLine,{"D4_TRT" ,"003" ,NIL})
aAdd(aLine,{"D4_ROTEIRO","01" ,NIL})
//Informações do endereço
aEnder := {}
aLineEnder := {}
aAdd(aLineEnder,{"DC_LOCALIZ","END01",Nil})
aAdd(aLineEnder,{"DC_QUANT" ,5 ,Nil})
//Primeiro endereço que será utilizado
aAdd(aEnder,aLineEnder)
aLineEnder := {}
aAdd(aLineEnder,{"DC_LOCALIZ","END02",Nil})
aAdd(aLineEnder,{"DC_QUANT" ,5 ,Nil})
//Segundo endereço que será utilizado
aAdd(aEnder,aLineEnder)
//Adiciona os endereços na linha do empenho
aAdd(aLine,{"AUT_D4_END",aEnder,Nil})
//Adiciona informações referente a integração com o PIMS
aLineNLI := {}
aAdd( aLineNLI, { "NLI_CLVAL", "02", Nil } )
aAdd( aLineNLI, { "NLI_FAZ", "001", NIL } )
aAdd( aLineNLI, { "NLI_QTCOMP", 20, NIL } )
aAdd( aLineNLI, { "NLI_PMSQTD", 15, NIL } )
aAdd( aLineNLI, { "NLI_PGQTD", 25, NIL } )
aAdd( aLineNLI, { "NLI_POPQTD", 40, NIL } )
aAdd( aLineNLI, { "NLI_NUMPEN", 01, NIL } )
aAdd( aLineNLI, { "NLI_QTDPAR", 900, NIL } )
aAdd( aLineNLI, { "NLI_CULTRA", "01", NIL } )
aAdd( aLineNLI, { "NLI_CC", "0010" , NIL } )
aAdd( aLineNLI, { "NLI_FITSSA", "10", NIL } )
aAdd( aLineNLI, { "NLI_REQCOD", "admin", NIL } )
aAdd( aLineNLI, { "NLI_REQNOM", "admin", NIL } )
aAdd(aLine,{"AUT_D4_AGR",aLineNLI,NIL})
//Adiciona a linha do empenho no array de itens.
aAdd(aItens,aLine)
//Executa o MATA381, com a operação de Inclusão.
MSExecAuto({|x,y,z| mata381(x,y,z)},aCab,aItens,3)
If lMsErroAuto
//Se ocorrer erro.
MostraErro()
Else
Alert("Incluído com sucesso.")
EndIf
Return |
6. Exemplo para Alteração de empenhos. No array do cabeçalho, é necessário enviar o número da ordem de produção e a chave INDEX com o valor 2, como ultimo item do array, para que o sistema altere a ordem de produção correta. No array de itens, pode-se enviar apenas as informações dos empenhos que estão sendo modificados. Empenhos que já estão cadastrados na tabela SD4 e não irão sofrer nenhuma alteração não precisam ser carregados no array. Informações de Endereços podem ser enviadas através da opção AUT_D4_END conforme exemplo. Quando o empenho possui controle de lote e o lote é enviado para geração do empenho, não é necessário enviar a data de validade do lote. O programa MATA381 preenche a validade do lote automaticamente. Para alterar um empenho que está cadastrado na SD4, é necessário utilizar o identificador LINPOS. A chave utilizada no LINPOS deverá ser a seguinte concatenação: - D4_COD+D4_TRT+D4_LOTECTL+D4_NUMLOTE+D4_LOCAL+D4_OPORIG+D4_SEQ. Verificar a utilização correta no exemplo.
Para excluir um empenho que está cadastrado na SD4, é necessário utilizar o identificador LINPOS em conjunto com a chave AUTDELETA. A chave utilizada no LINPOS deverá ser a seguinte concatenação: - D4_COD+D4_TRT+D4_LOTECTL+D4_NUMLOTE+D4_LOCAL+D4_OPORIG+D4_SEQ. Verificar a utilização correta no exemplo.
Para alteração das informações da tabela SDC que estão ligadas ao empenho, deve-se utilizar os identificadores LINPOS e AUTDELETA da mesma forma que é utilizado para os registros da tabela SD4.
Para alteração das informações da tabela NLI que estão ligadas ao empenho, deve-se utilizar os identificadores LINPOS e AUTDELETA da mesma forma que é utilizado para os registros da tabela SD4. Para adicionar um novo empenho, basta adicionar as informações deste novo empenho no array de itens. Para alteração dos empenhos, enviar o 3° parâmetro do MATA381 com o valor 4.
Bloco de código |
---|
language | cpp |
---|
firstline | 1 |
---|
title | Exemplo de alteração com integração com o PIMS |
---|
linenumbers | true |
---|
| User Function Alt381Auto()
Local nX := 0
Local aCab := {}
Local aLine := {}
Local aItens := {}
Local aLineEnder := {}
Local aEnder := {}
PRIVATE lMsErroAuto := .F.
//Monta o cabeçalho com o número da OP que será alterada.
//Necessário utilizar o índice 2 para efetuar a alteração.
aCab := {{"D4_OP","00130301001",NIL},;
{"INDEX",2,Nil}}
//Seta o índice da SDC
SDC->(dbSetOrder(2))
//Busca os empenhos da SD4 para alterar/excluir.
SD4->(dbSetOrder(2))
SD4->(dbSeek(xFilial("SD4")+PadR("00130301001",Len(SD4->D4_OP))))
While SD4->(!Eof()) .And. SD4->(D4_FILIAL+D4_OP) == xFilial("SD4")+PadR("00130301001",Len(SD4->D4_OP))
//Adiciona as informações do empenho, conforme estão na tabela SD4.
aLine := {}
For nX := 1 To SD4->(FCount())
aAdd(aLine,{SD4->(Field(nX)),SD4->(FieldGet(nX)),Nil})
Next nX
//Adiciona as informações da lista de compras (NLI)do empenho, conforme estão na tabela SD4.
aLineNLI := {}
For nX := 1 To SD4->(FCount())
aAdd(aLineNLI,{SD4->(Field(nX)),SD4->(FieldGet(nX)),Nil})
Next nX
If len(aLineNLI) > 0
aAdd(aLine,{"AUT_D4_AGR",aLineNLI,NIL})
Endif
//Adiciona o identificador LINPOS para identificar que o registro já existe na SD4
aAdd(aLine,{"LINPOS","D4_COD+D4_TRT+D4_LOTECTL+D4_NUMLOTE+D4_LOCAL+D4_OPORIG+D4_SEQ",;
SD4->D4_COD,;
SD4->D4_TRT,;
SD4->D4_LOTECTL,;
SD4->D4_NUMLOTE,;
SD4->D4_LOCAL,;
SD4->D4_OPORIG,;
SD4->D4_SEQ})
//Marca o empenho do produto "MP" como Excluído.
If AllTrim(SD4->D4_COD) == "MP01"
aAdd(aLine,{"AUTDELETA","S",Nil})
ElseIf AllTrim(SD4->D4_COD) == "MP02"
//Altera a quantidade do empenho do produto "9617-MP1"
//Busca a informação da quantidade (D4_QTDEORI) no array aLine.
nX := aScan(aLine,{|x| x[1] == "D4_QTDEORI"})
If nX > 0
//Encontrou o valor da quantidade. Faz a alteração do valor.
aLine[nX,2] := 10
EndIf
//Altera também o saldo do empenho
nX := aScan(aLine,{|x| x[1] == "D4_QUANT"})
If nX > 0
//Encontrou o valor da quantidade. Faz a alteração do valor.
aLine[nX,2] := 10
EndIf
ElseIf AllTrim(SD4->D4_COD) == "MP03"
//Altera os endereços utilizado no empenho do produto "9617-MP2"
//Primeiro carrega os endereços utilizados.
If SDC->(dbSeek(xFilial("SDC")+SD4->(D4_COD+D4_LOCAL+D4_OP+D4_TRT+D4_LOTECTL+D4_NUMLOTE)))
//Inicializa o array aEnder
aEnder := {}
//Busca os registros da tabela SDC
While SDC->(!Eof()) .And. ;
xFilial("SDC")+SD4->(D4_COD+D4_LOCAL+D4_OP+D4_TRT+D4_LOTECTL+D4_NUMLOTE) == ;
SDC->(DC_FILIAL+DC_PRODUTO+DC_LOCAL+DC_OP+DC_TRT+DC_LOTECTL+DC_NUMLOTE)
//Inicializa o array aLineEnder
aLineEnder := {}
//Carrega as informações da tabela SDC no array aLineEnder
For nX := 1 To SDC->(FCount())
aAdd(aLineEnder,{SDC->(Field(nX)),SDC->(FieldGet(nX)),Nil})
Next nX
//Adiciona o identificador LINPOS para identificar que o registro já existe na tabela SDC
aAdd(aLineEnder,{"LINPOS","DC_LOCALIZ+DC_NUMSERI",;
SDC->DC_LOCALIZ,;
SDC->DC_NUMSERI})
//Verifica se é o endereço "END". Se for, marca a linha para exclusão.
If AllTrim(SDC->DC_LOCALIZ) == "END01"
aAdd(aLineEnder,{"AUTDELETA","S",NIL})
ElseIf AllTrim(SDC->DC_LOCALIZ) == "END02"
//Verifica se é o endereço "END02". Se for, altera a quantidade.
//Busca a posição em que a quantidade está no array aLineEnder.
nX := aScan(aLineEnder,{|x| x[1] == "DC_QUANT"})
If nX > 0
//Encontrou a quantidade no array aLineEnder. Faz a alteração da quantidade.
aLineEnder[nX,2] := 8
EndIf
EndIf
//Adiciona o endereço no array de endereços.
aAdd(aEnder,aLineEnder)
//Próximo registro da SDC
SDC->(dbSkip())
End
//Adiciona um novo endereço para ser incluído na tabela SDC.
//Inicializa o array aLineEnder
aLineEnder := {}
//Adiciona as informações do novo endereço.
aAdd(aLineEnder,{"DC_LOCALIZ","END03",Nil})
aAdd(aLineEnder,{"DC_QUANT" ,2 ,Nil})
//Adiciona o novo endereço no array de endereços.
aAdd(aEnder,aLineEnder)
//Adiciona as informações de alteração de endereço no array do Empenho.
aAdd(aLine,{"AUT_D4_END",aEnder,Nil})
EndIf
EndIf
//Adiciona as informações do empenho no array de itens.
aAdd(aItens,aLine)
//Próximo registro da SD4.
SD4->(dbSkip())
End
//Adiciona um novo empenho
aLine := {}
aAdd(aLine,{"D4_OP" ,"00130301001" ,NIL})
aAdd(aLine,{"D4_COD" ,"MP04" ,NIL})
aAdd(aLine,{"D4_LOCAL" ,"01" ,NIL})
aAdd(aLine,{"D4_DATA" ,CtoD("17/09/2018"),NIL})
aAdd(aLine,{"D4_QTDEORI",5 ,NIL})
aAdd(aLine,{"D4_QUANT" ,5 ,NIL})
aAdd(aLine,{"D4_LOTECTL","L1" ,NIL})
aAdd(aLine,{"D4_TRT" ,"004" ,NIL})
aAdd(aLine,{"D4_ROTEIRO","01" ,NIL})
//Adiciona informações referente a integração com o PIMS
aLineNLI := {}
aAdd( aLineNLI, { "NLI_CLVAL", "02", Nil } )
aAdd( aLineNLI, { "NLI_FAZ", "001", NIL } )
aAdd( aLineNLI, { "NLI_QTCOMP", 20, NIL } )
aAdd( aLineNLI, { "NLI_PMSQTD", 15, NIL } )
aAdd( aLineNLI, { "NLI_PGQTD", 25, NIL } )
aAdd( aLineNLI, { "NLI_POPQTD", 35, NIL } )
aAdd( aLineNLI, { "NLI_NUMPEN", 01, NIL } )
aAdd( aLineNLI, { "NLI_QTDPAR", 5000, NIL } )
aAdd( aLineNLI, { "NLI_CULTRA", "01", NIL } )
aAdd( aLineNLI, { "NLI_CC", "0010" , NIL } )
aAdd( aLineNLI, { "NLI_FITSSA", "10", NIL } )
aAdd( aLineNLI, { "NLI_REQCOD", "admin", NIL } )
aAdd( aLineNLI, { "NLI_REQNOM", "admin", NIL } )
aAdd(aLine,{"AUT_D4_AGR",aLineNLI,NIL})
aAdd(aItens,aLine)
//Executa o MATA381, |
|