Duda
¿Cómo utilizar la rutina automática para Prueba de Inclusión, Modificación y Borrado simple con prorrateo MATA110?
Ambiente
Cross Segmentos - TOTVS Backoffice (Línea Protheus) - MI - Compras (SIGACOM) - Todas las versiones 12
Pais: Todos
Solució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.
Ejemplo de Prueba de Inclusión, Modificación y Borrado simple con prorrateo
#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"
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Verificación del entorno pra prueba |
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
DbSelectArea("SC1")
DbSelectArea("SB1")
DbSetOrder(
1
)
If
!SB1->(MsSeek(xFilial("SB1")+"
01
"))
lOk := .F.
ConOut(OemToAnsi("Registrar producto:
01
"))
EndIf
If
!SB1->(MsSeek(xFilial("SB1")+"
02
"))
lOk := .F.
ConOut(OemToAnsi("Registrar producto:
02
"))
EndIf
DbSelectArea("CTT")
DbSetOrder(
1
)
If
!CTT->(MsSeek(xFilial("CTT")+"CC01"))
lOk := .F.
ConOut(OemToAnsi("Registrar centro de costo: CC01 (Rutina CTBA180)"))
EndIf
If
!CTT->(MsSeek(xFilial("CTT")+"CC02"))
lOk := .F.
ConOut(OemToAnsi("Registrar centro de costo: CC02 (Rutina CTBA180)"))
EndIf
DbSelectArea("CT1")
DbSetOrder(
1
)
If
!CT1->(MsSeek(xFilial("CT1")+"CTA01"))
lOk := .F.
ConOut(OemToAnsi("Registrar cuenta: CTA01 (Rutina CTBA020)"))
EndIf
If
!CT1->(MsSeek(xFilial("CT1")+"CTA02"))
lOk := .F.
ConOut(OemToAnsi("Registrar cuenta: CTA02 (Rutina CTBA020)"))
EndIf
/*DbSelectArea("CTD")
DbSetOrder(
1
)
If
!CTD->(MsSeek(xFilial("CTD")+"IT01"))
lOk := .F.
ConOut(OemToAnsi("Registrar ítem contable: IT01 (Rutina CTBA180)"))
EndIf
If
!CTD->(MsSeek(xFilial("CTD")+"IT02"))
lOk := .F.
ConOut(OemToAnsi("Registrar ítem contable: IT02 (Rutina CTBA180)"))
EndIf*/
/*DbSelectArea("CTH")
DbSetOrder(
1
)
If
!CTH->(MsSeek(xFilial("CTH")+"CV01"))
lOk := .F.
ConOut(OemToAnsi("Registrar clase valor: CV01 (Rutina CTBA180)"))
EndIf
If
!CTH->(MsSeek(xFilial("CTH")+"CV02"))
lOk := .F.
ConOut(OemToAnsi("Registrar clase valor: CV02 (Rutina CTBA180)"))
EndIf*/
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Inicia o teste |
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
If
lOk
ConOut(OemToAnsi("Inicio: ")+Time())
For
nY :=
1
To
2
ConOut(PadC(OemToAnsi("Inicio repetición " + cValToChar(nY)),
80
))
aCabSC :=
{}
aItensSC :=
{}
If
lAuxInclui
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| 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
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Elabora encabezado |
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
aadd(aCabSC,
{"C1_NUM" ,cDoc}
)
aadd(aCabSC,
{"C1_SOLICIT","Administrador"}
)
aadd(aCabSC,
{"C1_EMISSAO",dDataBase}
)
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Monta itens |
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
ConOut(OemToAnsi("Inclusión de SC 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)
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Elabora ítems prorrateo |
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
aAdd(aRateioCX,
{StrZero(nX,len(SC1->C1_ITEM)),{}
})
//Item da SC1
// 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 í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
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Ejecuta rutina automática |
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
MSExecAuto(
{|w,x,y,z| MATA110(w,x,y,,,z)}
,aCabSC,aItensSC,
3
,aRateioCX)
If
!lMsErroAuto
ConOut(OemToAnsi("¡Incluido con éxito! ")+cDoc)
Else
ConOut(OemToAnsi("¡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
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Prueba de modificación - Elabora encabezado |
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
aCabSC :=
{}
aadd(aCabSC,
{"C1_NUM" ,cDoc}
)
aadd(aCabSC,
{"C1_SOLICIT","Administrador"}
)
aadd(aCabSC,
{"C1_EMISSAO",dDataBase}
)
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Prueba de modificación - Elabora ítems |
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
ConOut(OemToAnsi("Modificación de SC para
3
í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)
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Elabora ítems prorrateo |
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
aAdd(aRateioCX,
{StrZero(nX,len(SC1->C1_ITEM)),{}
})
//Item da SC1
// 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 í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
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Ejecuta rutina automática |
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
MSExecAuto(
{|w,x,y,z| MATA110(w,x,y,,,z)}
,aCabSC,aItensSC,
4
,aRateioCX)
If
!lMsErroAuto
ConOut(OemToAnsi("¡Modificado con éxito! ")+cDoc)
Else
ConOut(OemToAnsi("¡Error en la modificación!")+cDoc)
aErrPCAuto := GETAUTOGRLOG()
For
nAux :=
1
to
Len(aErrPCAuto)
Conout(aErrPCAuto[nAux])
Next nAux
EndIf
EndIf
If
lAuxExclui
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Prueba de borrado - Elabora encabezado |
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
ConOut(OemToAnsi("Borrado de SC - CON PRORRATEO SCX"))
aCabSC :=
{}
aadd(aCabSC,
{"C1_NUM" ,cDoc}
)
aadd(aCabSC,
{"C1_SOLICIT","Administrador"}
)
aadd(aCabSC,
{"C1_EMISSAO",dDataBase}
)
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Prueba de borrado - Elabora ítems |
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
aItensSC :=
{}
aRateioCX :=
{}
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Ejecuta rutina automática |
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
MSExecAuto(
{|w,x,y,z| MATA110(w,x,y,,,z)}
,aCabSC,aItensSC,
5
,aRateioCX)
If
!lMsErroAuto
ConOut(OemToAnsi("¡Borrado con éxito! ")+cDoc)
Else
ConOut(OemToAnsi("¡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
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Cierre del entorno |
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
RESET ENVIRONMENT
Return
Conozca más.
PCOM06002 - Solicitudes de compras (MATA110) - Ejemplo de rutina automática
0 Comentarios