Assunto EXECAUTO MATA103

Produto:

Microsiga Protheus.

Versões:

P11

Ocorrência:

Execauto

Ambiente:

Compras

Passo a passo:

User Function ExecAu103()

Local aCabec := {}
Local aItens := {}
Local aLinha := {}
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 

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})


For nX := 1 To 20  //Altere  para a quantidade desejada
aLinha := {}
aadd(aLinha,{"D1_ITEM" , StrZero(nx,4) , Nil})
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

MATA103(aCabec,aItens,3) // inclusã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 inclusão de documento de entrada em grande quantidade, neste exemplo serão inclusos 1000 documentos com 20 itens cada.

Pode ser alterado o comando "for" para determinar a quantidade de inclusão na SF1 (documento) e SD1 (Itens).