01. DATOS GENERALES

Línea de producto:Microsiga Protheus®
Segmento:Servicios
Módulo:Financiero


02. SITUACIÓN/REQUISITO

Se implementó la utilización automática de la rutina de compensación entre  carteras. 


FINA450(nPosArotina,aAutoCab,nOpcAuto)

  •  aAutoCab - Array utilizado para enviar datos referentes al proceso.   Estos datos son el equivalente a los datos informados en la pantalla de filtro manual, como:
    • Fecha inicial: Fecha de vencimiento real inicial para filtrar los títulos.
    • Fecha final: Fecha de vencimiento real final para filtrar los títulos.
    • Valor límite: Valor límite para la compensación.   Esta información se utiliza para filtrar, o no, los títulos hasta el valor informado.
    • Código de ciente y tienda: Código del cliente/tienda para filtrar los títulos para la compensación. 
    • Código del proveedor y tienda: Código del proveedor/tienda para filtrar los títulos para la compensación.
    • Moneda: Código de la moneda de los títulos para utilizar en la compensación.
    • Débito o Crédito: Filtra los tipos de débito (Fact, FactCred, BOL, etc.) o crédito (RA, PA, NCC y NDF).
      • Contenido "1" filtra títulos normales y "2" títulos de credito (Ej: RA, PA)
    • Títulos futuros: Filtra títulos emitidos posterior a la fecha base.
    • Clave de títulos por cobrar (Array con clave de los títulos por cobrar que se compensarán):
      • SE1->E1_FILIAL+SE1->E1_PREFIXO+SE1->E1_NUM+SE1->E1_PARCELA+SE1→E1_TIPO
    • Clave de Títulos por pagar (Array con clave de los títulos por pagar que se compensarán):
      • SE2->E2_FILIAL+SE2->E2_PREFIXO+SE2->E2_NUM+SE2->E2_PARCELA+SE2->E2_TIPO+SE2→E2_FORNECE+SE2→E2_LOJA
    • nOpcAuto - Opción del menú que se ejecutará automáticamente.
      • 3 = Compensación

Observación:

  • La compensación automática entre carteras solamente realiza la baja del valor total del título.
  • Si las tiendas del cliente y proveedor se informan sin contenido (vacías), el sistema considerará todas las tiendas del mismo código de cliente y proveedor.  (Disponible a partir del 01/06/2023)


03. EJEMPLO DE UTILIZACIÓN



#include "rwmake.ch"
#include 'tbiconn.ch'

User Function AUTO450()
    Local aAutoCab := {}
    Local aArea    := GetArea()
    Local cTabSe1  := "TMPSE1A"
    Local cTabSe2  := "TMPSE2A"
    Local aSE1450  := {}
    Local aSE2450  := {}
    Local cFilSe2  := xFilial("SE2")
    Local cFilSe1  := xFilial("SE1")

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

    BeginSql Alias cTabSe1
		SELECT R_E_C_N_O_ as RECNO
			FROM %Table:SE1% SE1
			WHERE SE1.E1_FILIAL = %Exp:cFilSe1%
				AND SE1.E1_PREFIXO = 'CPT'
				AND SE1.E1_NUM = 'VT001'
				AND SE1.E1_TIPO = 'NF'
				AND SE1.E1_CLIENTE = 'FIN001'
				AND SE1.E1_LOJA    = '01'
				AND SE1.%NotDel%
	EndSql

    While (cTabSe1)->(!EOF())
        SE1->(DbGoto((cTabSe1)->RECNO))
        AAdd(aSE1450, {SE1->E1_FILIAL+SE1->E1_PREFIXO+SE1->E1_NUM+SE1->E1_PARCELA+SE1->E1_TIPO})
        (cTabSe1)->(DbSkip())  
    Enddo

    (cTabSe1)->(DbCloseArea())

    BeginSql Alias cTabSe2
		SELECT R_E_C_N_O_ as RECNO
			FROM %Table:SE2% SE2
			WHERE SE2.E2_FILIAL = %Exp:cFilSe2%
				AND SE2.E2_PREFIXO = 'CPT'
				AND SE2.E2_NUM = 'VT001'
				AND SE2.E2_TIPO = 'NF'
				AND SE2.E2_FORNECE = 'FIN001'
				AND SE2.E2_LOJA    = '01'
				AND SE2.%NotDel%
	EndSql

    While (cTabSe2)->(!EOF())
        SE2->(DbGoto((cTabSe2)->RECNO))
        AAdd(aSE2450, {SE2->E2_FILIAL+SE2->E2_PREFIXO+SE2->E2_NUM+SE2->E2_PARCELA+SE2->E2_TIPO+SE2->E2_FORNECE+SE2->E2_LOJA})   
        (cTabSe2)->(DbSkip())  
    Enddo
    
    (cTabSe2)->(DbCloseArea())

    aAutoCab := { {"AUTDVENINI450", cTod('27/08/19') , nil},;
    {"AUTDVENFIM450", cTod('27/08/19') , nil},;
    {"AUTNLIM450" , 10000 , nil},;
    {"AUTCCLI450" , "FIN001" , nil},;
    {"AUTCLJCLI" , "01" , nil},;
    {"AUTCFOR450" , "FIN001" , nil},;
    {"AUTCLJFOR" , "01" , nil},;
    {"AUTCMOEDA450" , "01" , nil},; 
    {"AUTNDEBCRED" , 1 , nil},;
    {"AUTLTITFUTURO", .F. , nil},;
    {"AUTARECCHAVE" , aSE1450 , nil},;
    {"AUTAPAGCHAVE" , aSE2450 , nil}}

    MSExecAuto({|x,y,z| Fina450(x,y,z)}, nil , aAutoCab , 3 )

    If !lMsErroAuto
        alert("¡Incluido con éxito! ")
        confirmsx8()
    Else
        alert("¡Error en la inclusión!")
        rollbacksx8()
        MostraErro()
    EndIf
    
    RestArea(aArea)
Return



#include "rwmake.ch"
#include 'tbiconn.ch'
  
User Function Auto450()
    Local aAutoCab := {}
	Local aArea    := GetArea()
    Local cTabSe1  := "TMPSE1A"
    Local cTabSe2  := "TMPSE2A"
    Local aSE1450  := {}
    Local aSE2450  := {}
    Local aFilCmp  := {}

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

    BeginSql Alias cTabSe1
		SELECT R_E_C_N_O_ as RECNO
			FROM %Table:SE1% SE1
			WHERE SE1.E1_FILIAL = 'D MG 01 '
				AND SE1.E1_PREFIXO = 'CPT'
				AND SE1.E1_NUM = 'VT001'
				AND SE1.E1_TIPO = 'NF'
				AND SE1.E1_CLIENTE = 'FIN001'
				AND SE1.E1_LOJA    = '01'
				AND SE1.%NotDel%
	EndSql

    While (cTabSe1)->(!EOF())
        SE1->(DbGoto((cTabSe1)->RECNO))
        AAdd(aSE1450, {SE1->E1_FILIAL+SE1->E1_PREFIXO+SE1->E1_NUM+SE1->E1_PARCELA+SE1->E1_TIPO})
        If ascan(aFilCmp,SE1->E1_FILIAL) == 0
            Aadd(aFilCmp, SE1->E1_FILIAL)
        EndIf    
        (cTabSe1)->(DbSkip())  
    Enddo

    (cTabSe1)->(DbCloseArea())

    BeginSql Alias cTabSe2
		SELECT R_E_C_N_O_ as RECNO
			FROM %Table:SE2% SE2
			WHERE SE2.E2_FILIAL = 'D MG 02 '
				AND SE2.E2_PREFIXO = 'CPT'
				AND SE2.E2_NUM = 'VT001'
				AND SE2.E2_TIPO = 'NF'
				AND SE2.E2_FORNECE = 'FIN001'
				AND SE2.E2_LOJA    = '01'
				AND SE2.%NotDel%
	EndSql

    While (cTabSe2)->(!EOF())
        SE2->(DbGoto((cTabSe2)->RECNO))
        AAdd(aSE2450, {SE2->E2_FILIAL+SE2->E2_PREFIXO+SE2->E2_NUM+SE2->E2_PARCELA+SE2->E2_TIPO+SE2->E2_FORNECE+SE2->E2_LOJA})
        If ascan(aFilCmp,SE2->E2_FILIAL) == 0
            Aadd(aFilCmp, SE2->E2_FILIAL)
        EndIf    
        (cTabSe2)->(DbSkip())  
    Enddo
    
    (cTabSe2)->(DbCloseArea())

    aAutoCab :={  {"AUTDVENINI450", cTod('27/08/19') , nil},;
                {"AUTDVENFIM450", cTod('27/08/19') , nil},;
                {"AUTNLIM450" ,8000, nil},;
                {"AUTCCLI450" , "FIN001" , nil},;
                {"AUTCLJCLI" , "01" , nil},;
                {"AUTCFOR450" , "FIN001" , nil},;
                {"AUTCLJFOR" , "01" , nil},;
                {"AUTCMOEDA450" , "01" , nil},; 
                {"AUTNDEBCRED" , 1 , nil},;
                {"AUTLTITFUTURO", .F. , nil},;
                {"AUTARECCHAVE" ,aSE1450, nil},;
                {"AUTAPAGCHAVE" , aSE2450 , nil},;
                {"AUTAFILCOMP" , aFilCmp , nil}}

    MSExecAuto({|x,y,z| Fina450(x,y,z)}, nil , aAutoCab , 3 )

    If !lMsErroAuto
        ConOut("¡Incluido con éxito! ")
        confirmsx8()
    Else
        ConOut("¡Error en la inclusión!")
        rollbacksx8()
        MostraErro()
    EndIf

	RestArea(aArea)
Return
#INCLUDE "TOTVS.ch"
#Include "PROTHEUS.ch"    
#Include "PRTOPDEF.CH"
#INCLUDE "TBICONN.CH" 


User Function F450Est()


Local cCliForn	:= "000001"
Local cLoja		:= "00"
Local cPref		:= "TST"
Local cNumPag	:= "PAG300000"
Local cParc		:= " "
Local cTipo		:= "NF "
Local cFilTit   := "D MG 01 "
Local aAutoCab := {}


PRIVATE lMsErroAuto := .F.

PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "D MG 01 " MODULO "FIN" 

dbSelectArea("SE2")
dbSetOrder(1)		//E2_FILIAL+E2_PREFIXO+E2_NUM+E2_PARCELA+E2_TIPO+E2_FORNECE+E2_LOJA

//Es necesario marcar en un registro de la SE2 de un título que esté involucrado en la compensación
//No es necesario marcar en todos los títulos involucrados

SE2->(Dbseek(cFilTit+cPref + cNumPag + cParc + cTipo + cCliForn + cLoja))

MSExecAuto({|x,y,z| Fina450(x,y,z)}, nil , aAutoCab , 5 )
   If !lMsErroAuto
        ConOut("¡Reversión realizada con éxito! ")
    Else
        ConOut("Error en la reversión!")
        MostraErro()
    EndIf
RETURN


04. OTRAS INFORMACIONES

No existe.



05. ASUNTOS RELACIONADOS

No existe.




<style>
div.theme-default .ia-splitter #main {
    margin-left: 0px;
}
.ia-fixed-sidebar, .ia-splitter-left {
    display: none;
}
#main {
    padding-left: 10px;
    padding-right: 10px;
    overflow-x: hidden;
}

.aui-header-primary .aui-nav,  .aui-page-panel {
    margin-left: 0px !important;
}
.aui-header-primary .aui-nav {
    margin-left: 0px !important;
}
</style>