Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

EXECAUTO MATA103 - Documento de Entrada

Produto:

Microsiga 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-Alteraçã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:

User Function ExecAu103()

Local aCabec := {}
Local aItens := {}
Local aLinha := {}
Local aColsCC := {}
Local aCodRet := {}
Local nX := 0
Local nY := 0
Local cDoc := ""
Local lOk := .T.
Private lMsErroAuto := .F.
Private lMsHelpAuto := .T.

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Abertura do ambiente |
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
ConOut(Repl("-",80))
ConOut(PadC("Teste de Inclusao de 1000 documentos de entrada com 20 itens cada",80))

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Verificacao do ambiente para teste |
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
dbSelectArea("SB1")
dbSetOrder(1)
If !SB1->(MsSeek(xFilial("SB1")+"001 ")) //Verificar a existência do produto
lOk := .F.
ConOut("Cadastrar produto: 001")
EndIf

dbSelectArea("SF4")
dbSetOrder(1)
If !SF4->(MsSeek(xFilial("SF4")+"001")) //Verificar a existência do tes
lOk := .F.
ConOut("Cadastrar TES: 001")
EndIf

dbSelectArea("SE4")
dbSetOrder(1)
If !SE4->(MsSeek(xFilial("SE4")+"001")) //Verificar a existência do condição de pagamento 
lOk := .F.
ConOut("Cadastrar condicao de pagamento: 001")
EndIf

dbSelectArea("SA2")
dbSetOrder(1)
If !SA2->(MsSeek(xFilial("SA2")+"001 ")) //Verificar a existência do fornecedor 
lOk := .F.
ConOut("Cadastrar fornecedor: 001 ")
EndIf

If lOk
ConOut("Inicio: "+Time())
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Verifica o último documento valido para um fornecedor |
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
dbSelectArea("SF1")
dbSetOrder(2)
MsSeek(xFilial("SF1")+"000001z",.T.)
dbSkip(-1)
cDoc := SF1->F1_DOC

For nY := 1 To 1000  //Altere  para a quantidade desejada
aCabec := {}
aItens := {}

If Empty(cDoc)
cDoc := StrZero(1,Len(SD1->D1_DOC))
Else
cDoc := Soma1(cDoc)
EndIf 

//ExpA1 - Array contendo os dados do cabeçalho da Nota Fiscal de Entrada.
aadd(aCabec,{"F1_TIPO" , "N" , Nil})
aadd(aCabec,{"F1_FORMUL" , "N" , Nil})
aadd(aCabec,{"F1_DOC" , cDoc , Nil})
aadd(aCabec,{"F1_SERIE" , "UNI" , Nil})
aadd(aCabec,{"F1_EMISSAO" , dDataBase , Nil})
aadd(aCabec,{"F1_DESPESA" , 12 , Nil})
aadd(aCabec,{"F1_FORNECE" , "001 " , Nil})
aadd(aCabec,{"F1_LOJA" , SA2->A2_LOJA, Nil})
aadd(aCabec,{"F1_ESPECIE" , "NFE " , Nil})
aadd(aCabec,{"F1_COND" , "001" , Nil})
aadd(aCabec,{"F1_DESCONT" , 0 , Nil})
aadd(aCabec,{"F1_SEGURO" , 0 , Nil})
aadd(aCabec,{"F1_FRETE" , 0 , Nil})
aadd(aCabec,{"F1_VALMERC" , 100 , Nil})
aadd(aCabec,{"F1_VALBRUT" , 100 , Nil}) 
aadd(aCabec,{"F1_MOEDA" , 2 , Nil}) 
aadd(aCabec,{"F1_TXMOEDA" , 3 , Nil}) 
aadd(aCabec,{"F1_STATUS" , "A" , Nil})

//ExpA2- Array contendo os itens da Nota Fiscal de Entrada.
For nX := 1 To 20  //Altere  para a quantidade desejada
aLinha := {}
aadd(aLinha,{"D1_COD" , "001" , Nil})
aadd(aLinha,{"D1_QUANT" , 1 , Nil})
aadd(aLinha,{"D1_VUNIT" , 100 , Nil})
aadd(aLinha,{"D1_TOTAL" , 100 , Nil})
aadd(aLinha,{"D1_TES" , "001" , Nil})
aadd(aLinha,{"D1_SEGURO" , 0 , Nil})
aadd(aLinha,{"D1_VALFRE" , 0 , Nil})
aadd(aLinha,{"D1_DESPESA" , 4 , Nil})
aadd(aLinha,{"AUTDELETA" , "N" , Nil}) // Incluir sempre no último elemento do array de cada item

aadd(aItens,aLinha)
Next nX

//ExpA6 - Array contendo os dados do rateio por centro de custo

If Empty(aColsCC)
   dbSelectArea("SDE")
   AADD(aColsCC,{SDE->DE_ITEMNF,{}})
   For nX := 1 To 5
    AADD(aColsCC[1][2],    {{"DE_ITEM"    ,"0"+Alltrim(STR(nX))}    ,;
                                 {"DE_PERC"    ,20}                        ,;
                                 {"DE_CC"        ,"CC00"+Alltrim(STR(nX))},;
                                 {"DE_CONTA"    ,""}                        ,;
                                 {"DE_ITEMCTA",""}                        ,;
                                 {"DE_CLVL"    ,""}})
    Next nX
EndIf

//ExpA7 - 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"} )


MATA103(aCabec,aItens,3,,,,,aColsCC,,,aCodRet) //ExpN1 - Opção desejada: 3-Inclusão; 4-Alteração ; 5-Exclusão
If !lMsErroAuto
ConOut("Incluido com sucesso! "+cDoc)
Else
MostraErro()
ConOut("Erro na inclusao!")
EndIf
Next nY
ConOut("Fim : "+Time())

EndIf


Return

Observações:

Execauto para realizar a inclusão de documento de entrada em grande quantidade. No exemplo acima serão inclusos 1000 documentos com 20 itens cada.

O comando "For" pode ser alterado para determinar a quantidade de inclusão nas tabelas  SF1 (Cabeçalho) e SD1 (Itens).

O parâmetro ExpA7 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. 

Informações
titleImportante:

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.