Page tree

EXECAUTO MATA103 - Documento de Entrada

Produto:

Protheus

Versões:

Todas

Ocorrência:

Rotina Automática - MATA103 (Execauto)

Ambiente:

SIGACOM - Compras

Descrição:Rotina automática que permite a inclusão de documentos entrada em grande quantidade.
Parâmetros:
NomeTipoDescriçãoConteúdo Default
ExpA1ArrayArray contendo os dados do cabeçalho da Nota Fiscal de Entrada.
ExpA2

Array

Array contendo os itens da Nota Fiscal de Entrada.
ExpN1NuméricoOpção desejada: 3-Inclusão; 4-Classificação; 5-Exclusão3
ExpL1LógicoIndica se Apresenta ou não a Dialog da Rotina em Rotina Automática..F.
ExpA3

Array

Parâmetro de uso interno TOTVS.
ExpA4ArrayParâmetro de uso interno TOTVS.
ExpA5ArrayParâmetro de uso interno TOTVS.
ExpA6ArrayArray contendo os dados do rateio por centro de custo
ExpL2LógicoParâmetro de uso interno TOTVS.
ExpC1CaracterCódigo de retorno SEFAZ que será gravado no campo F3_CODRSEF
ExpA7ArrayArray contendo a informação se gera DIRF e os códigos de retenção por imposto

Passo a passo:

//DOCUMENTO TIPO NORMAL

#Include "Protheus.ch"
#Include "RwMake.ch"
#Include "TbiConn.ch"

User Function EXEC103()

Local aCab := {}
Local aItem := {}
Local aItens := {}
Local aItensRat := {}
Local aCodRet := {}
Local nOpc := 3
Local cNum := ""
Local nI := 0
Local nX := 0
Local nReg := 1

Conout("Inicio: " + Time())

Private lMsErroAuto := .F.
Private lMsHelpAuto := .T.

PREPARE ENVIRONMENT EMPRESA "32" FILIAL "6597" MODULO "COM"

cNum := GetSxeNum("SF1","F1_DOC")
SF1->(dbSetOrder(1))
While SF1->(dbSeek(xFilial("SF1")+cNum))
ConfirmSX8()
cNum := GetSxeNum("SF1","F1_DOC")
EndDo

//Cabeçalho
aadd(aCab,{"F1_TIPO" ,"N" ,NIL})
aadd(aCab,{"F1_FORMUL" ,"N" ,NIL})
aadd(aCab,{"F1_DOC" ,cNum ,NIL})
aadd(aCab,{"F1_SERIE" ,"1 " ,NIL})
aadd(aCab,{"F1_EMISSAO" ,DDATABASE ,NIL})
aadd(aCab,{"F1_DTDIGIT" ,DDATABASE ,NIL})
aadd(aCab,{"F1_FORNECE" ,"001 " ,NIL})
aadd(aCab,{"F1_LOJA" ,"01" ,NIL})
aadd(aCab,{"F1_ESPECIE" ,"CTE" ,NIL})
aadd(aCab,{"F1_COND" ,"001" ,NIL})
aadd(aCab,{"F1_DESPESA" ,10 ,NIL})
aadd(aCab,{"F1_DESCONT" , 0 ,Nil})
aadd(aCab,{"F1_SEGURO" , 0 ,Nil})
aadd(aCab,{"F1_FRETE" , 0 ,Nil})
aadd(aCab,{"F1_MOEDA" , 1 ,Nil})
aadd(aCab,{"F1_TXMOEDA" , 1 ,Nil})
aadd(aCab,{"F1_STATUS" , "A" ,Nil})

//Itens
For nX := 1 To 1
aItem := {}
aadd(aItem,{"D1_ITEM" ,StrZero(nX,4) ,NIL})
aadd(aItem,{"D1_COD" ,PadR("0001",TamSx3("D1_COD")[1]) ,NIL})
aadd(aItem,{"D1_UM" ,"UN" ,NIL})
aadd(aItem,{"D1_LOCAL" ,"01" ,NIL})
aadd(aItem,{"D1_QUANT" ,1 ,NIL})
aadd(aItem,{"D1_VUNIT" ,7508.33 ,NIL})
aadd(aItem,{"D1_TOTAL" ,7508.33 ,NIL})
aadd(aItem,{"D1_TES" ,"001" ,NIL})
aadd(aItem,{"D1_RATEIO" ,"1" ,NIL})
aAdd(aItens,aItem)
Next nX

//Rateio de Centro de Custo
aItem := {}
aAdd(aItensRat, Array(2))
aItensRat[Len(aItensRat)][1] := "0001"
aItensRat[Len(aItensRat)][2] := {}

aAdd(aItem, {"DE_FILIAL" , xFilial("SDE") , Nil})
aAdd(aItem, {"DE_ITEM" , StrZero(1,TamSx3("DE_ITEM")[1]) , Nil})
aAdd(aItem, {"DE_DOC" , cNum , Nil})
aAdd(aItem, {"DE_SERIE" , "1" , Nil})
aAdd(aItem, {"DE_FORNECE" , "001 " , Nil})
aAdd(aItem, {"DE_LOJA" , "01" , Nil})
aAdd(aItem, {"DE_ITEMNF" , "0001" , Nil})
aAdd(aItem, {"DE_PERC" , 100 , Nil})
aAdd(aItem, {"DE_CC" , "01" , Nil})
aAdd(aItensRat[Len(aItensRat)][2], aClone(aItem))

//Array contendo a informação se gera DIRF e os códigos de retenção por imposto
aAdd( aCodRet, {01, "0297", 1, "..."} )
aAdd( aCodRet, {02, "0297", 1, "IRR"} )
aAdd( aCodRet, {03, "5979", 1, "PIS"} )
aAdd( aCodRet, {04, "5960", 1, "COF"} )
aAdd( aCodRet, {05, "5987", 1, "CSL"} )

//3-Inclusão / 4-Classificação / 5-Exclusão
MSExecAuto({|x,y,z,a,b| MATA103(x,y,z,,,,,a,,,b)},aCab,aItens,nOpc,aItensRat,aCodRet)

If !lMsErroAuto
ConOut(" Incluido NF: " + cNum)
Else
MostraErro()
ConOut("Erro na inclusao!")
EndIf

ConOut("Fim: " + Time())

RESET ENVIRONMENT

Return


//DOCUMENTO TIPO COMPLEMENTO

#Include "Protheus.ch"
#Include "RwMake.ch"
#Include "TbiConn.ch"

User Function EXEC103()

Local aCab := {}
Local aItem := {}
Local aItens := {}
Local nOpc := 3
Local cNum := ""
Local nI := 0
Local nX := 0

Conout("Inicio: " + Time())

Private lMsErroAuto := .F.
Private lMsHelpAuto := .T.

PREPARE ENVIRONMENT EMPRESA "32" FILIAL "6597" MODULO "COM"

cNum := GetSxeNum("SF1","F1_DOC")
SF1->(dbSetOrder(1))
While SF1->(dbSeek(xFilial("SF1")+cNum))
ConfirmSX8()
cNum := GetSxeNum("SF1","F1_DOC")
EndDo

//Cabeçalho
aadd(aCab,{"F1_TIPO" ,"C" ,NIL})
aadd(aCab,{"F1_TPCOMPL" ,"3" ,NIL})
aadd(aCab,{"F1_DOC" ,cNum ,NIL})
aadd(aCab,{"F1_SERIE" ,"1 " ,NIL})
aadd(aCab,{"F1_FORNECE" ,"001 " ,NIL})
aadd(aCab,{"F1_LOJA" ,"01" ,NIL})
aadd(aCab,{"F1_EMISSAO" ,DDATABASE ,NIL})
aadd(aCab,{"F1_DTDIGIT" ,DDATABASE ,NIL})
aadd(aCab,{"F1_FORMUL" ,"N" ,NIL})
aadd(aCab,{"F1_ESPECIE" ,"CTE" ,NIL})
aadd(aCab,{"F1_COND" ,"001" ,NIL})
aadd(aCab,{"F1_MODAL" ,"01" ,NIL})
aadd(aCab,{"F1_TPFRETE" ,"C" ,NIL})
aadd(aCab,{"F1_TPCTE" ,"N" ,NIL})
aadd(aCab,{"F1_EST" ,"SP" ,NIL})
aadd(aCab,{"F1_DESCONT" , 0 , Nil})
aadd(aCab,{"F1_SEGURO" , 0 , Nil})
aadd(aCab,{"F1_FRETE" , 0 , Nil})
aadd(aCab,{"F1_MOEDA" , 1 , Nil})
aadd(aCab,{"F1_TXMOEDA" , 1 , Nil})
aadd(aCab,{"F1_STATUS" , "A" , Nil})

//Itens
For nX := 1 To 1
aItem := {}
aadd(aItem,{"D1_ITEM" ,StrZero(nX,4) ,NIL})
aadd(aItem,{"D1_COD" ,PadR("0001",TamSx3("D1_COD")[1]) ,NIL})
aadd(aItem,{"D1_UM" ,"UN" ,NIL})
aadd(aItem,{"D1_LOCAL" ,"01" ,NIL})
aadd(aItem,{"D1_VUNIT" ,1000 ,NIL})
aadd(aItem,{"D1_TOTAL" ,1000 ,NIL})
aadd(aItem,{"D1_TES" ,"001" ,NIL})
aadd(aItem,{"D1_NFORI" ,"000009015" ,NIL})
aadd(aItem,{"D1_SERIORI" ,"1 " ,NIL})
aadd(aItem,{"D1_ITEMORI" ,"0001" ,NIL})
aAdd(aItens,aItem)
Next nX

//3-Inclusão / 4-Classificação / 5-Exclusão
MSExecAuto({|x,y,z| MATA103(x,y,z)},aCab,aItens,nOpc)

If !lMsErroAuto
ConOut(" Incluido NF: " + cNum)
Else
MostraErro()
ConOut("Erro na inclusao!")
EndIf

ConOut("Fim: " + Time())

RESET ENVIRONMENT

Return

Observações:

O parâmetro aCodRet contendo o array com os códigos de retenção pode ser referenciado com um ou mais impostos ou com a referencia genérica "..." assim como aparece na aba de impostos da nota fiscal de entrada. 
Para gravar os códigos de retenção é necessário habilitar o parâmetro MV_VISDIRF. 

Importante:

Não deve-se utilizar o campo D1_ITEM no comando "For". O uso desse campo no array que trás as informações dos itens do documento de entrada, impede a execução correta do Excecauto.