Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Exemplo de Execução Automática Solicitações

Ejemplo de ejecución automática solicitudes de Compras - MATA110

Linha ProdutoProduto, Centro de Custo, Conta Contábil, Item Contábil, Classe ValorBanco Dados Operacionalis

Línea de

producto:

Protheus

Segmento:

Manufatura

Manufactura

Módulo:

SIGACOM

RotinaRutina:

RotinaNome TécnicoSolicitação Compras

Rutina

Nombre técnico

MATA110

Solicitud de

compras

Registros iniciales

Producto, centro de costo, cuenta contable, ítem contable y clase valor

Cadastros Iniciais:

Tickets relacionados

769289

Requisito:

DMANMAT02-226

País(es):

Todos

Base(s) de

datos:

Todos

Tabelas UtilizadasTablas:

SC1, SB1, SCX, AFG

Sistema(s)

operativo(

s):

Todos


ExecAuto MATA110 

DescriçãoEssa rotina o qualquer Solicitação de Compras de mercadorias na A entrada das solicitações inicia o processo Sintaxe Solicitação RetornoObservaçõesA opção Aprovação) da rotina automática do MATA110 está disponível apenas para quem não utiliza o O aprovação devera conter o no cabeçalho. É necessário informar o valor desejado Rejeitado dessa forma o a liberaçãorejeição/bloqueio será realizada sem problemas.

Descripción:

Esta rutina permite

el registro de

cualquier solicitud de compras de mercaderías en la empresa.

La entrada de las solicitudes inicia el proceso de compras.

Sintaxis:

MATA110 -

Solicitud de Compras ( [ PARAMIXB1 ] [ PARAMIXB2 ] [ PARAMIXB3 ] [ PARAMIXB4 ] [ PARAMIXB5 ]  [ PARAMIXB6 ]  [ PARAMIXB7 ] )

Programa Fontefuente:

MATA110.prw

Devolución:

NIL

ParâmetrosParámetros:

Nome

Nombre

Tipo

Descrição

Descripción

Default

Estándar

PARAMIXB1

Vetor

Vector

Array

contendo o cabeçalho da Solicitação de Compras

que contiene el encabezado de la solicitud de compras { {"C1_NUM", "CONTEUDO"} ...}


PARAMIXB2

Vetor

Vector

Array

contendo os itens da Solicitação de Compras

que contiene los ítems de la Solicitud de compras { {"C1_ITEM",StrZero(nx,len(SC1->C1_ITEM) } ...}


PARAMIXB3

Numérico

Opção desejada

Opción deseada: 3-

Inclusão

Inclusión; 4-

Alteração

Modificación ; 5-

Exclusão

Borrado ; 7-

Aprovação (Somente versão Protheus 10)

Aprobación

3

PARAMIXB4

Lógico

Controle Interno

Control interno - Informa si la rutina se

a rotina é chamada via MRP

llama a través del MRP.

.F.

PARAMIXB5

Lógico

Indica

se apresenta ou não a Dialog da Rotina Automática

si muestra o no la Dialog de la rutina automática.

.F.

PARAMIXB6

Vetor

Vector

Array

contendo Rateio

que contiene el prorrateo SC { {C1_ITEM,{ {"CX_CAMPO","CONTEUDO"},... } }, ...}

{}

PARAMIXB7

Vetor

Vector

Array

contendo Rateio Projeto

que contiene el prorrateo Proyecto { {C1_ITEM,{ {"AFG_CAMPO","CONTEUDO"},... } }, ...}

{}

Observaciones:

La opción 7 (

Aprobación) de la rutina automática del MATA110 está disponible solamente para quien no utiliza el módulo SIGAGSP.

El RDMAKE de

aprobación debe contener el campo C1_APROV

en el encabezado. Es necesario informar el valor deseado:

"L" = Liberado
"R" =

Rechazado
"B" = Bloqueado

Realizando

de esta manera el RDMAKE,

la liberación/

 

Exemplo 1 - Teste de Inclusão, Alteração e Exclusão Simples:

#Include

rechazo/bloqueo se realizará sin problemas.

Observación: Utilice el usuario y contraseña en el Prepare Environment para que se complete el campo C1_NOMAPRO.

 

Bloco de código
languagedelphi
themeMidnight
titleEjemplo - Prueba de Inclusión, Modificación y Borrado simple
linenumberstrue
collapsetrue
#Include 'Protheus.ch'


#include "tbiconn.ch"


User Function MyMata110()


Local aCabSC := {}


Local aItensSC := {}


Local aLinhaC1 := {}


Local nX := 0


Local nY := 0


Local cDoc := ""


Local lOk := .T.


Local nAux := 0



Local lAuxInclui := .T.


Local lAuxAltera := .T.


Local lAuxExclui := .T.



Private lMsHelpAuto := .T.


PRIVATE lMsErroAuto := .F.


//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


//| Abertura do ambiente |


//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ


ConOut(Repl("-",80))



ConOut(PadC(OemToAnsi("
Teste
Prueba de
Inclusao, Alteracao e Exclusao de Solicitacao de Compras
 Inclusión, Modificación y Borrado de solicitud de compras"),80))


PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" MODULO "COM" TABLES "SC1","SB1"



//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


//|
Verificacao do ambiente para teste |
 Verificación del entorno para prueba |
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ


DbSelectArea("SC1")


DbSelectArea("SB1")


DbSetOrder(1)


If !SB1->(MsSeek(xFilial("SB1")+"01"))


lOk := .F.


ConOut(OemToAnsi("
Cadastrar produto
Registro producto: 01"))


EndIf


If !SB1->(MsSeek(xFilial("SB1")+"02"))


lOk := .F.


ConOut(OemToAnsi("
Cadastrar produto
Registrar producto: 02"))


EndIf



//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


//|
Inicia o teste |
 Inicia la prueba |
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ


If lOk


ConOut(OemToAnsi("Inicio: ")+Time())


For nY := 1 To 2


ConOut(PadC(OemToAnsi("Inicio
Repeticao
 repetición " + cValToChar(nY)),80))


aCabSC := {}


aItensSC := {}


If lAuxInclui


//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


//|
Verifica numero da SC |
 Verifica número de la SC |
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ


cDoc := GetSXENum("SC1","C1_NUM")


SC1->(dbSetOrder(1))


While SC1->(dbSeek(xFilial("SC1")+cDoc))


ConfirmSX8()


cDoc := GetSXENum("SC1","C1_NUM")


EndDo



//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


//|
Monta cabecalho |
 Elabora encabezado |
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


aadd(aCabSC,{"C1_NUM" ,cDoc})


aadd(aCabSC,{"C1_SOLICIT","Administrador"})


aadd(aCabSC,{"C1_EMISSAO",dDataBase})



//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


//|
Monta itens |
 Elabora ítems |
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


ConOut(OemToAnsi("
Inclusao
Inclusión de SC
com 2 itens
 con 2 ítems"))


For nX := 1 To 2


aLinhaC1 := {}


aadd(aLinhaC1,{"C1_ITEM" ,StrZero(nx,len(SC1->C1_ITEM)),Nil})


aadd(aLinhaC1,{"C1_PRODUTO","01",Nil})


aadd(aLinhaC1,{"C1_QUANT" ,1 ,Nil})


aadd(aItensSC,aLinhaC1)


Next nX



//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


//|
Teste de Inclusao - Execução Rotina Automática |
 Prueba de inclusión - Ejecución rutina automática |
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ


MSExecAuto({|x,y| mata110(x,y)},aCabSC,aItensSC)


If !lMsErroAuto


ConOut(OemToAnsi("
Incluido com sucesso!
¡Incluido con éxito! ")+cDoc)


Else


ConOut(OemToAnsi("
Erro na inclusao
¡Error en la inclusión!")+cDoc)


aErrPCAuto := GETAUTOGRLOG()


For nAux := 1 to Len(aErrPCAuto)


Conout(aErrPCAuto[nAux])


Next nAux


EndIf


Else


//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


//| Pega Ultima SC |


//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ


SC1->(dbSetOrder(1))


SC1->(DbGoTop())


While SC1->(!Eof())


cDoc := SC1->C1_NUM


SC1->(DbSkip())


EndDo


EndIf



If lAuxAltera


//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


//|
Teste de Alteração - Monta cabecalho |
 Prueba de modificación - Elabora encabezado |
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


aCabSC := {}


aadd(aCabSC,{"C1_NUM" ,cDoc})


aadd(aCabSC,{"C1_SOLICIT","Administrador"})


aadd(aCabSC,{"C1_EMISSAO",dDataBase})



//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


//|
Teste de Alteração - Monta itens |
 Prueba de modificación - Elabora ítems |
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


ConOut(OemToAnsi("
Alteracao
Modificación de SC para 3
itens
 ítems"))


aItensSC := {}


For nX := 1 To 3


aLinhaC1 := {}


aadd(aLinhaC1,{"C1_ITEM" ,StrZero(nx,len(SC1->C1_ITEM)),Nil})


aadd(aLinhaC1,{"C1_PRODUTO","01",Nil})


aadd(aLinhaC1,{"C1_QUANT" ,1+nX ,Nil})


aadd(aItensSC,aLinhaC1)


Next nX



//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


//|
Teste de Alteração - Execução Rotina Automática |
 Prueba de modificación - Ejecución rutina automática |
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ


MSExecAuto({|x,y| mata110(x,y,4)},aCabSC,aItensSC)


If !lMsErroAuto


ConOut(OemToAnsi("
Alterado com sucesso!
¡Modificado con éxito! ")+cDoc)


Else


ConOut(OemToAnsi("
Erro na alteracao
¡Error en la modificación!")+cDoc)


aErrPCAuto := GETAUTOGRLOG()


For nAux := 1 to Len(aErrPCAuto)


Conout(aErrPCAuto[nAux])


Next nAux


EndIf


EndIf



If lAuxExclui


//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


//|
Teste de Exclusão - Monta cabecalho |
 Prueba de borrado - Elabora encabezado |
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


ConOut(OemToAnsi("
Exclusao
Borrado de SC"))


aCabSC := {}


aadd(aCabSC,{"C1_NUM" ,cDoc})


aadd(aCabSC,{"C1_SOLICIT","Administrador"})


aadd(aCabSC,{"C1_EMISSAO",dDataBase})



//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


//|
Teste de Exclusão - Monta itens |
 Prueba de borrado - Elabora ítems |
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


aItensSC := {}



//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


//|
Teste de Exclusão - Execução Rotina Automática |
 Prueba de borrado - Ejecución rutina automática |
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ


MSExecAuto({|x,y| mata110(x,y,5)},aCabSC,aItensSC)


If !lMsErroAuto


ConOut(OemToAnsi("
Excluido com sucesso!
¡Borrado con éxito! ")+cDoc)


Else


ConOut(OemToAnsi("
Erro na exclusao
¡Error al borrar!"+cDoc))


aErrPCAuto := GETAUTOGRLOG()


For nAux := 1 to Len(aErrPCAuto)


Conout(aErrPCAuto[nAux])


Next nAux


EndIf


EndIf



Next nY


ConOut(OemToAnsi("Fim : ")+Time())


EndIf


//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


//| Fechamento do ambiente |


//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ


RESET ENVIRONMENT


Return(.T.)

Exemplo 2 - Teste de Inclusão, Alteração e Exclusão - Com Rateio:

#Include
Bloco de código
languagedelphi
themeMidnight
titleEjemplo - Prueba de Inclusión, Modificación y Borrado simple - Con prorrateo
linenumberstrue
collapsetrue
#Include 'Protheus.ch'


#include "tbiconn.ch"


User Function MyMa110_RAT()


Local aCabSC := {}


Local aItensSC := {}


Local aLinhaC1 := {}


Local nX := 0


Local nY := 0


Local cDoc := ""


Local lOk := .T.


Local aLinhaCX := {}


Local aRateioCX := {}


Local nAux := 0



Local lAuxInclui := .T.


Local lAuxAltera := .T.


Local lAuxExclui := .T.


Private lMsErroAuto := .F.


Private lAutoErrNoFile := .T.


PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" MODULO "COM" TABLES "SC1","SB1","SCX"


//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


//|
Verificacao do ambiente para teste |
 Verificación del entorno pra prueba |
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ


DbSelectArea("SC1")


DbSelectArea("SB1")


DbSetOrder(1)


If !SB1->(MsSeek(xFilial("SB1")+"01"))


lOk := .F.


ConOut(OemToAnsi("
Cadastrar produto
Registrar producto: 01"))


EndIf


If !SB1->(MsSeek(xFilial("SB1")+"02"))


lOk := .F.


ConOut(OemToAnsi("
Cadastrar produto
Registrar producto: 02"))


EndIf



DbSelectArea("CTT")


DbSetOrder(1)


If !CTT->(MsSeek(xFilial("CTT")+"CC01"))


lOk := .F.


ConOut(OemToAnsi("
Cadastrar
Registrar centro de
custo
 costo: CC01 (
Rotina
Rutina CTBA180)"))


EndIf


If !CTT->(MsSeek(xFilial("CTT")+"CC02"))


lOk := .F.


ConOut(OemToAnsi("
Cadastrar
Registrar centro de
custo
 costo: CC02 (
Rotina
Rutina CTBA180)"))


EndIf



DbSelectArea("CT1")


DbSetOrder(1)


If !CT1->(MsSeek(xFilial("CT1")+"CTA01"))


lOk := .F.


ConOut(OemToAnsi("
Cadastrar conta
Registrar cuenta: CTA01 (
Rotina
Rutina CTBA020)"))


EndIf


If !CT1->(MsSeek(xFilial("CT1")+"CTA02"))


lOk := .F.


ConOut(OemToAnsi("
Cadastrar conta
Registrar cuenta: CTA02 (
Rotina
Rutina CTBA020)"))


EndIf



/*DbSelectArea("CTD")


DbSetOrder(1)


If !CTD->(MsSeek(xFilial("CTD")+"IT01"))


lOk := .F.


ConOut(OemToAnsi("
Cadastrar item contabil: IT01 (Rotina
Registrar ítem contable: IT01 (Rutina CTBA180)"))


EndIf


If !CTD->(MsSeek(xFilial("CTD")+"IT02"))


lOk := .F.


ConOut(OemToAnsi("
Cadastrar item contabil: IT02 (Rotina
Registrar ítem contable: IT02 (Rutina CTBA180)"))


EndIf*/



/*DbSelectArea("CTH")


DbSetOrder(1)


If !CTH->(MsSeek(xFilial("CTH")+"CV01"))


lOk := .F.


ConOut(OemToAnsi("
Cadastrar classe
Registrar clase valor: CV01 (
Rotina
Rutina CTBA180)"))


EndIf


If !CTH->(MsSeek(xFilial("CTH")+"CV02"))


lOk := .F.


ConOut(OemToAnsi("
Cadastrar classe
Registrar clase valor: CV02 (
Rotina
Rutina CTBA180)"))


EndIf*/


//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


//| Inicia o teste |


//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ


If lOk


ConOut(OemToAnsi("Inicio: ")+Time())


For nY := 1 To 2


ConOut(PadC(OemToAnsi("Inicio
Repeticao
 repetición " + cValToChar(nY)),80))


aCabSC := {}


aItensSC := {}


If lAuxInclui


//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


//|
Verifica numero da SC |
 Verifica número de la SC |
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ


cDoc := GetSXENum("SC1","C1_NUM")


SC1->(dbSetOrder(1))


While SC1->(dbSeek(xFilial("SC1")+cDoc))


ConfirmSX8()


cDoc := GetSXENum("SC1","C1_NUM")


EndDo




//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


//|
Monta cabecalho |
 Elabora encabezado |
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


aadd(aCabSC,{"C1_NUM" ,cDoc})


aadd(aCabSC,{"C1_SOLICIT","Administrador"})


aadd(aCabSC,{"C1_EMISSAO",dDataBase})



//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


//| Monta itens |


//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


ConOut(OemToAnsi("
Inclusao
Inclusión de SC
com 2 itens - COM RATEIO
 con 2 ítems - CON PRORRATEO SCX"))


aItensSC := {}


aRateioCX := {}


For nX := 1 To 2


aLinhaC1 := {}


aadd(aLinhaC1,{"C1_ITEM" ,StrZero(nX,len(SC1->C1_ITEM)),Nil})


aadd(aLinhaC1,{"C1_PRODUTO","01",Nil})


aadd(aLinhaC1,{"C1_QUANT" ,1 ,Nil})


aadd(aLinhaC1,{"C1_RATEIO" ,1 ,Nil})


aadd(aItensSC,aLinhaC1)



//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


//|
Monta itens rateio |
 Elabora ítems prorrateo |
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


aAdd(aRateioCX,{StrZero(nX,len(SC1->C1_ITEM)),{}}) //Item da SC1

// Primeiro item do rateio
aLinhaCX := {}


// Primer ítem del prorrateo
aLinhaCX := {}
//aAdd(aLinhaCX,{"CX_SOLICIT",cDoc,NIL})


aAdd(aLinhaCX,{"CX_ITEM",StrZero(1,Len(SCX->CX_ITEM)),NIL})


aAdd(aLinhaCX,{"CX_PERC",50,NIL})


aAdd(aLinhaCX,{"CX_CC","CC01",NIL})


aAdd(aLinhaCX,{"CX_CONTA","CTA01",NIL})


//aAdd(aLinhaCX,{"CX_ITEMCTA","IT01",NIL})


//aAdd(aLinhaCX,{"CX_CLVL","CV01",NIL})


aAdd(aRateioCX[nX][2],aLinhaCX)



//
Segundo item do rateio
aLinhaCX
 Segundo ítem del prorrateo
aLinhaCX := {}


//aAdd(aLinhaCX,{"CX_SOLICIT",cDoc,NIL})


aAdd(aLinhaCX,{"CX_ITEM",StrZero(2,Len(SCX->CX_ITEM)),NIL})


aAdd(aLinhaCX,{"CX_PERC",50,NIL})


aAdd(aLinhaCX,{"CX_CC","CC02",NIL})


aAdd(aLinhaCX,{"CX_CONTA","CTA02",NIL})


//aAdd(aLinhaCX,{"CX_ITEMCTA","IT02",NIL})


//aAdd(aLinhaCX,{"CX_CLVL","CV02",NIL})


aAdd(aRateioCX[nX][2],aLinhaCX)


Next nX



//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


//|
Executa rotina automatica |
 Ejecuta rutina automática |
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


MSExecAuto({|w,x,y,z| MATA110(w,x,y,,,z)},aCabSC,aItensSC,3,aRateioCX)



If !lMsErroAuto


ConOut(OemToAnsi("
Incluido com sucesso!
¡Incluido con éxito! ")+cDoc)


Else


ConOut(OemToAnsi("
Erro na inclusao
¡Error en la inclusión!")+cDoc)


aErrPCAuto := GETAUTOGRLOG()


For nAux := 1 to Len(aErrPCAuto)


Conout(aErrPCAuto[nAux])


Next nAux


EndIf


Else


//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


//| Pega Ultima SC |


//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ


SC1->(dbSetOrder(1))


SC1->(DbGoTop())


While SC1->(!Eof())


cDoc := SC1->C1_NUM


SC1->(DbSkip())


EndDo


EndIf



If lAuxAltera


//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


//|
Teste de Alteração - Monta cabecalho |
 Prueba de modificación - Elabora encabezado |
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


aCabSC := {}


aadd(aCabSC,{"C1_NUM" ,cDoc})


aadd(aCabSC,{"C1_SOLICIT","Administrador"})


aadd(aCabSC,{"C1_EMISSAO",dDataBase})



//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


//|
Teste de Alteração - Monta itens |
 Prueba de modificación - Elabora ítems |
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


ConOut(OemToAnsi("
Alteracao
Modificación de SC para 3
itens - COM RATEIO
 ítems - CON PRORRATEO SCX"))


aItensSC := {}


aRateioCX := {}


For nX := 1 To 3


aLinhaC1 := {}


aadd(aLinhaC1,{"C1_ITEM" ,StrZero(nX,len(SC1->C1_ITEM)),Nil})


aadd(aLinhaC1,{"C1_PRODUTO","01",Nil})


aadd(aLinhaC1,{"C1_QUANT" ,1+nX ,Nil})


aadd(aLinhaC1,{"C1_RATEIO" ,1 ,Nil})


aadd(aItensSC,aLinhaC1)



//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


//|
Monta itens rateio |
 Elabora ítems prorrateo |
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


aAdd(aRateioCX,{StrZero(nX,len(SC1->C1_ITEM)),{}}) //Item da SC1

// Primeiro item do rateio
aLinhaCX := {}


// Primer ítem del prorrateo
aLinhaCX := {}
//aAdd(aLinhaCX,{"CX_SOLICIT",cDoc,NIL})


aAdd(aLinhaCX,{"CX_ITEM",StrZero(1,Len(SCX->CX_ITEM)),NIL})


aAdd(aLinhaCX,{"CX_PERC",25,NIL})


aAdd(aLinhaCX,{"CX_CC","CC01",NIL})


aAdd(aLinhaCX,{"CX_CONTA","CTA01",NIL})


//aAdd(aLinhaCX,{"CX_ITEMCTA","IT01",NIL})


//aAdd(aLinhaCX,{"CX_CLVL","CV01",NIL})


aAdd(aRateioCX[nX][2],aLinhaCX)



//
Segundo item do rateio
aLinhaCX
 Segundo ítem del prorrateo
aLinhaCX := {}


//aAdd(aLinhaCX,{"CX_SOLICIT",cDoc,NIL})


aAdd(aLinhaCX,{"CX_ITEM",StrZero(2,Len(SCX->CX_ITEM)),NIL})


aAdd(aLinhaCX,{"CX_PERC",75,NIL})


aAdd(aLinhaCX,{"CX_CC","CC02",NIL})


aAdd(aLinhaCX,{"CX_CONTA","CTA02",NIL})


//aAdd(aLinhaCX,{"CX_ITEMCTA","IT02",NIL})


//aAdd(aLinhaCX,{"CX_CLVL","CV02",NIL})


aAdd(aRateioCX[nX][2],aLinhaCX)


Next nX



//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


//|
Executa rotina automatica |
 Ejecuta rutina automática |
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


MSExecAuto({|w,x,y,z| MATA110(w,x,y,,,z)},aCabSC,aItensSC,4,aRateioCX)



If !lMsErroAuto


ConOut(OemToAnsi("
Alterado com sucesso!
¡Modificado con éxito! ")+cDoc)


Else


ConOut(OemToAnsi("
Erro na alteracao
¡Error en la modificación!")+cDoc)


aErrPCAuto := GETAUTOGRLOG()


For nAux := 1 to Len(aErrPCAuto)


Conout(aErrPCAuto[nAux])


Next nAux


EndIf


EndIf



If lAuxExclui


//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


//|
Teste de Exclusão - Monta cabecalho |
 Prueba de borrado - Elabora encabezado |
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


ConOut(OemToAnsi("
Exclusao
Borrado de SC
- COM RATEIO
 - CON PRORRATEO SCX"))


aCabSC := {}


aadd(aCabSC,{"C1_NUM" ,cDoc})


aadd(aCabSC,{"C1_SOLICIT","Administrador"})


aadd(aCabSC,{"C1_EMISSAO",dDataBase})



//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


//|
Teste de Exclusão - Monta itens |
 Prueba de borrado - Elabora ítems |
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


aItensSC := {}


aRateioCX := {}



//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


//|
Executa rotina automatica |
 Ejecuta rutina automática |
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


MSExecAuto({|w,x,y,z| MATA110(w,x,y,,,z)},aCabSC,aItensSC,5,aRateioCX)



If !lMsErroAuto


ConOut(OemToAnsi("
Excluido com sucesso!
¡Borrado con éxito! ")+cDoc)


Else


ConOut(OemToAnsi("
Erro na exclusao
¡Error al borrar!"+cDoc))


aErrPCAuto := GETAUTOGRLOG()


For nAux := 1 to Len(aErrPCAuto)


Conout(aErrPCAuto[nAux])


Next nAux


EndIf


EndIf



Next nY


ConOut(OemToAnsi("Fim : ")+Time())


EndIf


//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿


//|
Fechamento do ambiente |
 Cierre del entorno |
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ


RESET ENVIRONMENT

Return
Bloco de código
languagedelphi
themeMidnight
titleEjemplo - Prueba de aprobación simple (nOpc := 7)
linenumberstrue
collapsetrue
#Include "Protheus.ch"
#Include "RwMake.ch"
#Include "TbiConn.ch"

User Function EXEC110()

Local aCabec		:= {}
Local aItens		:= {}
Local aLinha		:= {}
Local nOpc			:= 7 //Aprobación
Local nTotItens 	:= 1
Local nY			:= 0
Local nX			:= 0 
Local cDoc			:= ""  
Local nReg			:= 1

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

PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" MODULO "COM" USER "ADMIN" PASSWORD "1234"

cDoc := "SC0001" //Número de la SC que se utilizará en la aprobación
SC1->(dbSeek(xFilial("SC1")+cDoc)) //Debe seleccionarse
	
aadd(aCabec,{"C1_FILIAL"   	,xFilial("SC1")})	 	
aadd(aCabec,{"C1_NUM"    	,cDoc})		
aadd(aCabec,{"C1_EMISSAO"	,dDataBase})  
aadd(aCabec,{"C1_SOLICIT"	,"Administrador"})
aadd(aCabec,{"C1_APROV"		,"B"}) //Informar "L - Liberado" / "R - Rechazado" / "B - Bloqueado"
aadd(aCabec,{"C1_ITEM"		,"0001"}) //Informe si aprobación es por Ítem, si fuera SC entera, no es necesario informar C1_ITEM
	
For nX := 1 To nTotItens			
	aLinha := {}			
	aadd(aLinha,{"C1_FILIAL" ,xFilial("SC1")})
	aadd(aLinha,{"C1_ITEM"   ,StrZero(nx,len(SC1->C1_ITEM)),Nil})
	aadd(aLinha,{"C1_PRODUTO",PadR("01",TamSx3("C1_PRODUTO")[1]),Nil})
	aadd(aLinha,{"C1_LOCAL"  ,"01",Nil}) 
	aadd(aLinha,{"C1_QUANT"  	,nX,Nil})
	aadd(aItens,aLinha)
Next nX

MsExecAuto({|u,v,x,y,z| MATA110(u,v,x)},aCabec,aItens,nOpc)
	
If !lMsErroAuto			
	ConOut(OemToAnsi("	Incluido SC: ")+cDoc)
Else
	MostraErro()	 		
	ConOut(OemToAnsi("¡Error en la inclusión!"))
	EndIf
Next nY

RESET ENVIRONMENT

Return 
Bloco de código
languagedelphi
themeMidnight
titleEjemplo - Modificación (Borrando ítem)
linenumberstrue
collapsetrue
#Include "Protheus.ch"
#Include "RwMake.ch"
#Include "TbiConn.ch"

User Function EXEC110()

Local aCabec		:= {}
Local aItens		:= {}
Local aLinha		:= {}
Local nOpc			:= 4
Local nTotItens 	:= 3
Local nY			:= 0
Local nX			:= 0 
Local cDoc			:= ""  
Local nReg			:= 1
Local cInicio		:= ""
Local cTimeIni		:= "" 

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

PREPARE ENVIRONMENT EMPRESA "T1" SUCURSAL "D MG 01" MÓDULO "COM"  

cInicio := "Inicio: " + Time()
cTimeIni := Time()
Conout(cInicio)

For nY := 1 To nReg
	aCabec := {}		
	aItens := {}
	lMsErroAuto := .F.
	
	If nOpc == 3
		cDoc := "SCTOT1"	
	Elseif nOpc <> 3
		cDoc := "SCTOT1"
		SC1->(dbSeek(xFilial("SC1")+cDoc))
	Endif
	
	aadd(aCabec,{"C1_FILIAL"   	,xFilial("SC1")})	 	
	aadd(aCabec,{"C1_NUM"    	,cDoc})		
	aadd(aCabec,{"C1_EMISSAO"	,dDataBase})  
	aadd(aCabec,{"C1_SOLICIT"	,"Administrador"})
	
	For nX := 1 To nTotItens			
		aLinha := {}			
		aadd(aLinha,{"C1_FILIAL" ,xFilial("SC1")})
		aadd(aLinha,{"C1_ITEM"   ,StrZero(nx,len(SC1->C1_ITEM)),Nil})
		If nX%2 == 0		
			aadd(aLinha,{"C1_PRODUTO",PadR("TT005",TamSx3("C1_PRODUTO")[1]),Nil})
			aadd(aLinha,{"C1_LOCAL"  ,"01",Nil}) 
		Else
			aadd(aLinha,{"C1_PRODUTO",PadR("TT006",TamSx3("C1_PRODUTO")[1]),Nil})
			aadd(aLinha,{"C1_LOCAL"  ,"01",Nil}) 
		Endif
		
		aadd(aLinha,{"C1_QUANT"  	,nX,Nil})
		
		If nOpc == 4
			aAdd(aLinha,{"LINPOS","C1_ITEM" ,StrZero(nx,len(SC1->C1_ITEM))})
			If StrZero(nx,len(SC1->C1_ITEM)) == "0002"
				aAdd(aLinha,{"AUTDELETA","S" ,Nil})
			Else
				aAdd(aLinha,{"AUTDELETA","N" ,Nil})
			Endif
		Endif
		aadd(aItens,aLinha)
	Next nX
		 
	MsExecAuto({|u,v,x,y,z| MATA110(u,v,x)},aCabec,aItens,nOpc)
	
	If !lMsErroAuto			
		ConOut(OemToAnsi("	Modificada SC: ")+cDoc + " - " + AllTrim(Str(nY)) + " de " + AllTrim(Str(nReg)))
	Else
		MostraErro()	 		
		ConOut(OemToAnsi("¡Error en la modificación!"))
		Exit		
	EndIf
Next nY

Conout(cInicio + " - Final: " + Time() + " - Tempo total: " + ElapTime(cTimeIni,Time()))

RESET ENVIRONMENT

Return 
Bloco de código
languagedelphi
themeMidnight
titleEjemplo - Inclusión, Modificación y Borrado ejecutado por otras rutinas o por medio de Puntos de entrada.
linenumberstrue
collapsetrue
#Include 'Protheus.ch'
#include "tbiconn.ch"

User Function MyMata110()
    Local aCabSC        := {}
    Local aItensSC      := {}
    Local aLinhaC1      := {}
    Local aProd         := {"PRODTMKA2710001"}
    Local aHeaderBkp    := {} 
    Local nB1           
    Local nItens           
    Local cDoc          := "" 
    Local lOk           := .T.
    

    Local lAuxInclui    := .T.
    Local lAuxAltera    := .T.
    Local lAuxExclui    := .T.

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

    // Apertura del entorno |
    //PREPARE ENVIRONMENT EMPRESA "T1" SUCURSAL "D MG 01" MÓDULO "COM" TABLES "SC1","SB1"

    //Verificación del entorno para prueba    
    DbSelectArea("SC1")
    DbSelectArea("SB1")
    DbSetOrder(1)
    
    For nB1 := 1 To Len(aProd)
        If !SB1->(MsSeek(xFilial("SB1")+PadR(aProd[nB1],TamSx3("B1_COD")[1])))
            lOk := .F.
            ConOut(OemToAnsi("Registrar producto: "+aProd[nB1]+" " ))
        EndIf
    Next nB1 


    If lOk

        If lAuxInclui
            
            aCabSC   := {}
            aItensSC := {}
            aLinhaC1 := {}

            cDoc := GetSXENum("SC1","C1_NUM")
            SC1->(dbSetOrder(1))
            While SC1->(dbSeek(xFilial("SC1")+cDoc))
                ConfirmSX8()
                cDoc := GetSXENum("SC1","C1_NUM")
            EndDo

            aadd(aCabSC,{"C1_NUM" ,cDoc})
            aadd(aCabSC,{"C1_SOLICIT","Administrador"})
            aadd(aCabSC,{"C1_EMISSAO",dDataBase})

            For nItens := 1 To Len(aProd)
        
                aLinhaC1 := {}
                aadd(aLinhaC1,{"C1_ITEM" ,StrZero(nItens,Len(SC1->C1_ITEM)),Nil})
                aadd(aLinhaC1,{"C1_PRODUTO",PadR(aProd[nItens],TamSx3("B1_COD")[1]),Nil})
                aadd(aLinhaC1,{"C1_QUANT" ,1 ,Nil})
                aadd(aItensSC,aLinhaC1)
            Next nItens
            
            ////ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
            //Grabo el aHeader utilizado en la rutina de origen y lo borro posteriormente
            //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
            aHeaderBkp := aHeader
            aHeader := {} 

            MSExecAuto({|x,y,z| Mata110(x,y,z)},aCabSC,aItensSC,3)

            ////ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
            //| Restauración del aHeader de la rutina de origen después de la ejecución de MsExecAuto 
            //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
            aHeader := aHeaderBkp
            
            If !lMsErroAuto
                ConOut(OemToAnsi("¡Incluido con éxito! ")+cDoc)
            Else
                MostraErro()
                ConOut(OemToAnsi("¡Error en la inclusión!")+cDoc)
            EndIf 
        EndIf 

        If lAuxAltera

            aCabSC   := {}
            aItensSC := {}
            aLinhaC1 := {} 
            cDoc := "ZC0476"
            
            aadd(aCabSC,{"C1_NUM" ,cDoc})
            aadd(aCabSC,{"C1_SOLICIT","Administrador"})
            aadd(aCabSC,{"C1_EMISSAO",dDataBase})

            For nItens := 1 To Len(aProd)

                aLinhaC1 := {}
                aadd(aLinhaC1,{"C1_ITEM" ,StrZero(nItens,Len(SC1->C1_ITEM)),Nil})
                aadd(aLinhaC1,{"C1_PRODUTO",PadR(aProd[nItens],TamSx3("B1_COD")[1]),Nil})
                aadd(aLinhaC1,{"C1_QUANT" ,1 ,Nil})
                aadd(aItensSC,aLinhaC1)
            Next nItens
            
            ////ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
            //Grabo el aHeader utilizado en la rutina de origen y lo borro posteriormente
            //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
            aHeaderBkp := aHeader
            aHeader := {} 

            MSExecAuto({|x,y,z| Mata110(x,y,z)},aCabSC,aItensSC,4)

            ////ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
            //| Restauración del aHeader de la rutina de origen después de la ejecución de MsExecAuto 
            //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
            aHeader := aHeaderBkp

            If !lMsErroAuto
                ConOut(OemToAnsi("¡Modificado con éxito! ")+cDoc)
            Else
                MostraErro()
                ConOut(OemToAnsi("¡Error en la modificación!")+cDoc)
            EndIf 

        EndIf     

        If lAuxExclui
            aCabSC   := {}
            aItensSC := {}
            aLinhaC1 := {} 
            cDoc := "ZC0477"

            aadd(aCabSC,{"C1_NUM" ,cDoc})
            aadd(aCabSC,{"C1_SOLICIT","Administrador"})
            aadd(aCabSC,{"C1_EMISSAO",dDataBase})

            ////ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
            //Grabo el aHeader utilizado en la rutina de origen y lo borro posteriormente
            //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
            aHeaderBkp := aHeader
            aHeader := {} 

            MSExecAuto({|x,y,z| Mata110(x,y,z)},aCabSC,aItensSC,5)

            ////ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
            //| Restauración del aHeader de la rutina de origen después de la ejecución de MsExecAuto 
            //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
            aHeader := aHeaderBkp

            If !lMsErroAuto
                ConOut(OemToAnsi("¡Borrado con éxito! ")+cDoc)
            Else
                MostraErro()
                ConOut(OemToAnsi("¡Error en el borrado!"+cDoc))
            EndIf 
        EndIf

    EndIf


    //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
    //| Cierre del entorno |
    //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
    //RESET ENVIRONMENT
        

Return(.T.)