Árvore de páginas

Versões comparadas

Chave

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

Índice

1. Puntos de Entrada en fuente

2. Puntos de entrada en MVC (Estándares)

...

2. Puntos de

...

F998BRFLT

...

Tiene el objetivo de que el usuario pueda agregar más filtros a la consulta (Query) de selección de recibos al momento de dar clic en "Aplicar filtrosen el programa TOTVS Recibos.

PE F998BRFLT Agregar más filtros al momento de buscar recibos TOTVS Recibo

...

F887ROT

Más información: PE F887ROT Agregar opción personalizada en lista opciones en Buscar Recibo

Más información: PE F887ROT Actualización para recibos que no cuenten con registros en la tabla FJT

...

F998BRMCOL

Tiene el objetivo de que el usuario pueda indicar columnas que se desean incluir en el GRID de visualización de los recibos desde la opción de "Buscar recibos".

Más información:  PE F998BRMCOL Incluir columnas a visualizar en el GRID de buscar recibos

...

F998NRDCOB

Más información: DT PE F998NRDCOB Llenar el campo del Cobrador cuando seleccione el código del cliente en Nuevo Recibo

...

F998NRMCOL

Más información:  DT PE F998NRMCOL Agregar más columnas en la lista de títulos por cobrar TOTVS Recibo

...

F998NRIOFLT 

Más información: DT PE F998NRIOFLT Agregar más filtros en el query de Agregar otros títulos TOTVS Recibo

Más información: PE F998NRIOFLT Agregar más filtros en el query Extraer Titulos en Nuevo Recibo

...

F998FLOTIT

Más información: DT PE F998FLOTIT Agregar otros tipos de títulos a los recibos de cobro en TOTVS recibo

...

F998NRG3

Más información: DT PE F998NRG3 Agregar acciones antes de asientos contables y de grabar tabla de impuestos/retenciones

...

F998GSE1

Más información: DT PE F998GSE1 Permite grabar campos creados por el usuario en la tabla de títulos por cobrar

...

F998MAIL

Más información:  DT PE F998MAIL Modificar el Asunto y Cuerpo al enviar el Recibo por Mail TOTVS Recibo

...

F998IMPREC

Más información:  PE F998IMPREC Formato de impresión para los recibos TOTVS Recibo

...

FINCMTC

Más información:  DT PE FINCMTC Personalización de los datos ingresados en la lectora de cheques TOTVS Recibo

...

FINLRCHQ

Más información:  695246_MMI-5510_DT_Punto_de_Entrada_FINLRCHQ_ARG

entrada en MVC (Estándares)

ID DEL PUNTO DE ENTRADA

MOMENTO DE EJECUCIÓN DEL PUNTO DE ENTRADA

MODELPRE

Antes de la alteración de cualquier campo del modelo.

...

F998NATVAZ

Más información: PE F998NATVAZ Validación obligatoriedad de campo Modalidad Totvs Recibos PER

...

F998VISFP

...

F998NROK

...

F998NRG2

...

F998NRG1

...

F998BRANU

...

F998BRBOR

...

F887FPG

Más información: PE F887FPG Agregar filtros al query de titulos en Panel General TOTVS Recibo

...

F998DMAIL

Más información:  PE F998DMAIL Correo por defecto para envío de correos en Totvs Recibo

2. Puntos de entrada en MVC (Estándares)

ID DEL PUNTO DE ENTRADA

MOMENTO DE EJECUCIÓN DEL PUNTO DE ENTRADA

MODELPRE

Antes de la alteración de cualquier campo del modelo.
Parámetros recibidos:

1     O        Objeto del formulario ó del modelo, conforme el caso.
2     C        ID del local de ejecución del punto de entrada.
3     C        ID del formulario.

Retorno:
Requiere un retorno lógico.
 

MODELPOS

En la validación total del modelo
Parámetros recibidos:

1     O        Objeto del formulario o del modelo, conforme el caso.
2     C        ID del local de ejecución del punto de entrada.
3     C        ID del formulario.

Retorno:
Requiere un retorno lógico.

FORMPRE

Antes de la alteración de cualquier campo del formulario.

Parámetros recibidos:

1     O        Objeto del formulario o del modelo, conforme el caso.
2     C        ID del local de ejecución del punto de entrada.
3     C        ID del formulario.
4     C        Acción del FWFORMGRID.
5     C        ID del Campo.


Retorno:
Requiere un retorno lógico.

FORMPOS

En la validación total del formulario.

Parámetros recibidos:

1     O        Objeto del formulario o del modelo, conforme el caso.
2     C        ID del local de ejecución del punto de entrada.
3     C        ID del formulario.

Retorno:
Requiere un retorno lógico.

FORMLINEPRE

Antes de la alteración de la línea del formulario FWFORMGRID.
Parámetros recibidos:

1     O        Objeto del formulario o del modelo, conforme al caso.
2     C        ID del local de ejecución del punto de entrada.
3     C        ID del formulario.
4     N        Numero de linea del FWFORMGRID
5     C        Acción del FWFORMGRID
6     C        Id del campo

Retorno:
Requiere un retorno lógico.

FORMLINEPOS

En la validación total de la línea del formulario  FWFORMGRID.
Parámetros recibidos:

1     O        Objeto do formulário ou do modelo, conforme o caso
2     C        ID do local de execução do ponto de entrada
3     C        ID do formulário
4     N        Número da Linha da FWFORMGRID

Retorno:
Requiere un retorno lógico.

MODELCOMMITTTS

Despúes de la grabación total del modelo y dentro de la transacción.

Parámetros Recibidos:

1     O        Objeto del formulario  del modelo, conforme el caso.
2     C        ID del local de ejecución del punto de entrada.
3     C        ID del formulario.

Retorno:
No espera retorno.

MODELCOMMITNTTS

Después de la grabación total del modelo y fuera de la transacción.

Parámetros recibidos:

1     O        Objeto del formulario o del modelo, conforme el caso.
2     C        ID del local de ejecución del punto de entrada.
3     C        ID del formulario.

Retorno:
No espera retorno

FORMCOMMITTTSPRE

Antes da gravação da tabela do formulário.

Parâmetros Recebidos:

1     O        Objeto del formulario o del modelo, conforme el caso.
2     C        ID del local de ejecución del punto de entrada.
3     C        ID del formulario.
4     L        Si es .T. indica nuevo registro (inclusión) si es .F. registro ya existente (Alteración/ Exclusión)

Retorno:
No espera retorno.

FORMCOMMITTTSPOS

Después de la grabación de la tabla del formulario.

Parâmetros Recebidos:

1     O        Objeto del formulario o del modelo, conforme el caso.
2     C        ID del local de ejecución del punto de entrada.
3     C        ID del formulario.
4     L        Si es .T. indica nuevo registro (inclusión) si es .F. registro ya existente (Alteración/ Exclusión)

Retorno:
No espera retorno.

MODELCANCEL

El botón de cancelar.

Parámetros recibidos:

1     O        Objeto del formulario o del modelo, conforme el caso.
2     C        ID del local de ejecución del punto de entrada.
3     C        ID del formulario.

Retorno:
No espera retorno.

BUTTONBAR

Incluir botones en el  ControlBar.

Para crear los botones se debe retornar un array bidimensional con la siguiente estructura de cada ítem:

1     C        Titulo para el botón.
2     C        Nombre del Bitmap para mostrar.
3     B        CodeBlock a ser ejecutado.
4     C        ToolTip (Opcional)

Parâmetros Recebidos:

1     O        Objeto del formulario o del modelo, conforme el caso.
2     C        ID del local de ejecución del punto de entrada.
3     C        ID del formulario.

Retorno:
Array con la estructura pre-definida.

...

  • EL_CEPCAD = Cadena CEP.
  • EL_CEPCER = Certificado CEP.
  • EL_CEPSEL = Sello CEP.
  • EL_CEPTIP = Tipo CEP.
  • EL_CTABEN = Cuenta beneficiario.
  • EL_CTAORD = Cuenta ord.
  • EL_RFCEMI = RFC Emisor.
  • EL_TPCRED = Tipo de crédito.

...

  • crédito.

Ejemplo:

Bloco de código
languagejava
firstline1
titleEjemplo:
linenumberstrue
collapsetrue
User Function FINA887()

...


Local aParam    := PARAMIXB

...


Local oModel    := Nil

...


Local oModelFJT := Nil

...


Local oModelSEL := Nil

...


Local cIdPonto  := ""

...


Local cIdModel  := ""

...


Local nLineas   := 0

...


Local nX        := 0

...


Local lRet      := .T.

...


 

...


 

...


    If aParam <> NIL

...


        oModel      := aParam[1]

...


        oModelFJT   := oModel:GetModel("FJT_MASTER") //Datos del encabezado

...


        oModelSEL   := oModel:GetModel("SEL_DETAIL") //Datos correspondientes a los registros de la tabla SEL

...


        cIdPonto    := aParam[2]

...


        cIdModel    := aParam[3]

...


 

...


        If cIdPonto == 'MODELPOS'

...


            If Len(AllTrim(oModelFJT:GetValue("FJT_RECIBO"))) < 12

...


                Help(Nil,Nil,'Help',Nil,'Tamaño del número de recibo',1,0,Nil,Nil,Nil,Nil,Nil,{"Debe introducir un numero menor a 12"})                      

...


                lRet:= .F.

...


            EndIf

...


            nLineas := oModelSEL:Length()

...


            For nX := 1 To nLineas

...


                If Empty(oModelSEL:GetValue("EL_NUMERO",nX)) .AND. lRet

...


                    lRet := .F.

...


                    Help(Nil,Nil,'Help',Nil,'Numero no informado',1,0,Nil,Nil,Nil,Nil,Nil,{"Debe introducir un numero"}) 

...


                EndIf

...


            Next nX

...


        ElseIf cIdPonto == 'MODELCOMMITTTS'

...


            //'Llamada después de la grabación total del modelo y dentro de la transacción (MODELCOMMITTTS).'

...


        ElseIf cIdPonto == 'MODELCOMMITNTTS'

...


            //'Llamada después de la grabación total del modelo y fuera de la transacción (MODELCOMMITNTTS).'

...


        ElseIf cIdPonto == 'FORMCOMMITTTSPOS'

...


            //'Llamada después de la grabación de la tabla del formulario (FORMCOMMITTTSPOS).

...


        EndIf

...


    EndIf

...


 

...


Return lRet


2.3 Ejemplo de "Carga Masiva" de formas de pago (SEL) utilizando PE BUTTONBAR:

FINA887.PRX

Bloco de código
languagejava
firstline1
titleEjemplo:
linenumberstrue
collapsetrue
User Function FINA887()

...


Local aParam    := PARAMIXB

...


Local oModel    := Nil

...


Local cIdPonto  := ""

...


Local cIdModel  := ""

...


Local lRet      := .T.

...


 

...


 

...


    If aParam <> NIL

...


        oModel      := aParam[1]

...


        cIdPonto    := aParam[2]

...


        cIdModel    := aParam[3]

...


 

...


        If cIdPonto == 'BUTTONBAR'

...


            lRet := {{'Carga', 'CARGA', {|x| U_FN998CARGA(oModel)}, 'Carga Masiva' }}

...


        EndIf

...


    EndIf

...


 

...


Return lRet


FN998CARGA.PRW

...

.PRW


Bloco de código
languagejava
firstline1
titleEjemplo:
linenumberstrue
collapsetrue
#Include "protheus.ch"

...



//Importación de formas de pago a partir de archivo .CSV al modelo SEL_DETAIL (formas de pago de la tabla SEL)

...


//Ejemplo de registro en el archivo .CSV : NUMTITULO;BANCODESCRIPCION;;;20/09/2024;21/09/2024;01000

...



User Function FN998CARGA(oModel)

...



//Nota: En Totvs Recibo (FINA998), las variables aHeaders y aCols nao existen como private, por lo que la función gdFieldPos no se puede utilizar

...


//Se extrae la variable aHeader del modelo SEL_DETAIL controla los registros de la pantalla de formas de pagos de la tabla SEL

...


//Se construye la variable aCols y después se actualiza al modelo SEL_DETAIL para que aparezcan las formas de pago visualmente en pantalla

...



Local aArea := getArea()

...


Local oModelSEL := oModel:GetModel("SEL_DETAIL")

...


Local aHeader   := oModelSEL:aHeader

...


Local aCols     := {}

...


Local nC := 1

...


Local nH := 1

...


Local nPosNro     := aScan(aHeader,{|x| AllTrim(x[2])=="EL_NUMERO"    })

...



    //Inicializa la variable aCols con valores por defecto a partir del tamaño de aHeader

...


    addLine(aHeader, @aCols)

...



    If MsgYesNo("Deseja importar arquivo .csv ?", "Cheques")    

...


        fLoadCsv(@aCols, aHeader)

...


    EndIf

...



    //Actualización al modelo SEL_DETAIL en grid

...


    for nC:= 1 to Len(aCols)

...


        If !Empty(oModelSEL:GetValue("EL_NUMERO")) // Se agrega una línea nueva al modelo en caso de que el exista el campo EL_NUMERO ya informado en la línea actual

...


            oModelSEL:AddLine()

...


        EndIf

...



        If !Empty(aCols[nC][nPosNro]) // Se verifica que el campo EL_NUMERO no este vacío para identificar que el registro de aCols es válido

...


            for nH := 1 to Len(aHeader)

...


                oModelSEL:loadValue(aHeader[nH][2],aCols[nC][nH]) // Se carga la información de aCols en el modelo SEL_DETAIL de la vista en grid

...


            Next nH

...


            If !oModelSEL:VldData()

...


                Help( ,,"Error de Modelo",,oModel:GetModel():GetErrorMessage()[6], 1, 0) // Mensaje de error en caso de que la línea del modelo no sea válida

...


                Exit

...


            EndIf

...


        EndIf

...


    Next nC

...



restArea(aArea)

...



RETURN 

...



****************************************************

...


Static Function fLoadCsv(aCols, aHeader)

...



Local nLinha   := 0

...


Local aDados := {}

...


Local aColsV := ACLONE(aCols[1])

...


//Se obtiene la posición de cada campo de la tabla SEL para reemplazar el uso de gdFieldPos

...


Local nPosNro     := aScan(aHeader,{|x| AllTrim(x[2])=="EL_NUMERO"    })

...


Local nPosBco     := aScan(aHeader,{|x| AllTrim(x[2])=="EL_BCOCHQ"    })

...


Local nPosAge     := aScan(aHeader,{|x| AllTrim(x[2])=="EL_AGECHQ"    })

...


Local nPosPos     := aScan(aHeader,{|x| AllTrim(x[2])=="EL_POSTAL"    })

...


Local nPosTipo     := aScan(aHeader,{|x| AllTrim(x[2])=="EL_TIPO"      })

...


Local nPosPref    := aScan(aHeader,{|x| AllTrim(x[2])=="EL_PREFIXO"   })

...


Local nPosValor    := aScan(aHeader,{|x| AllTrim(x[2])=="EL_VALOR"     })

...


Local nPosEmiss    := aScan(aHeader,{|x| AllTrim(x[2])=="EL_EMISSAO"   })

...


Local nPosVnto    := aScan(aHeader,{|x| AllTrim(x[2])=="EL_DTVCTO"    })

...


Local nPosBanc    := aScan(aHeader,{|x| AllTrim(x[2])=="EL_BANCO"     })

...


Local nPosAgen    := aScan(aHeader,{|x| AllTrim(x[2])=="EL_AGENCIA"   })

...


Local nPosCont    := aScan(aHeader,{|x| AllTrim(x[2])=="EL_CONTA"     })

...


Local nPosObs    := aScan(aHeader,{|x| AllTrim(x[2])=="EL_OBSBCO"     })

...



//Se lee el archivo .csv

...


cFOpen := cGetFile("Arquivos |*.CSV",OemToAnsi("Selecione o arquivo para Importação: "))

...



If Len(cFOpen) > 0 .And. FILE(cFOpen)

...


    

...


    //Abre o arquivo selecionado

...


    nHandle := FT_FUse(cFOpen)

...


    

...


    If nHandle == -1

...


        MsgAlert("Erro de abertura do arquivo ")

...


        Return

...


    EndIf

...



    nNumReg := FT_FLastRec()

...


    FT_FGoTop()

...


    FT_FSkip()

...


    While !FT_FEof()

...


        

...


        nLinha++

...



        If nLinha+1 == nNumReg

...


            Exit

...


        Endif

...



        aDados := Separa(FT_FReadln(),';')

...



        cValor := StrTran(Substr(aDados[7],2),".","")

...


        cValor := StrTran(cValor,",",".")

...



        aBcoCh := fRetBcoCh(aDados[2])

...


        

...


        If nLinha > 1

...


            AADD(aCols,Aclone(aColsV))

...


        EndIf

...


        

...


        aCols[nLinha][nPosTipo] := "CHD"

...


        aCols[nLinha][nPosNro] := padr(aDados[1],TamSx3("EL_NUMERO")[1])

...


        aCols[nLinha][nPosValor] := Val(cValor)            

...


        aCols[nLinha][nPosEmiss] := ctod(aDados[5])    

...


        aCols[nLinha][nPosVnto] := ctod(aDados[6])    

...


        aCols[nLinha][nPosBanc] := Padr("001",TamSx3("EL_BANCO")[1])

...


        aCols[nLinha][nPosAgen] :=  Padr("00001",TamSx3("EL_AGENCIA")[1])

...


        aCols[nLinha][nPosCont] :=  Padr("0000000001",TamSx3("EL_CONTA")[1])

...


        

...


        aCols[nLinha][nPosBco] := Padr(aBcoCh[1],TamSx3("EL_BCOCHQ")[1])

...


        aCols[nLinha][nPosPref] := Padr(aBcoCh[1],TamSx3("EL_PREFIXO")[1])

...


        aCols[nLinha][nPosAge] := Padr(aBcoCh[2],TamSx3("EL_AGECHQ")[1])

...


        aCols[nLinha][nPosPos] := Padr(aBcoCh[3],TamSx3("EL_POSTAL")[1])

...



        aCols[nLinha][nPosObs] := aDados[2]

...


        

...


        FT_FSkip()

...


    EndDo

...


    FCLose(nHandle)

...


EndIf

...



Return

...



************************************

...


Static Function fRetBcoCh(pDescri)

...



Local cQuery := "", aRet := {"","",""}

...



cQuery := "SELECT FJN_COD, FJN_AGENCI, FJN_POSTAL, FJO_NOME "

...


cQuery += "FROM "+RetSqlName("FJN")+" (NOLOCK) FJN JOIN "+RetSqlName("FJO")+" (NOLOCK) FJO ON FJN_FILIAL=FJO_FILIAL AND FJN_COD=FJO_COD "

...


cQuery += "WHERE FJN.D_E_L_E_T_ = ' ' AND FJO.D_E_L_E_T_ = ' ' "

...


cQuery += "AND FJO_NOME LIKE '%"+Alltrim(pDescri)+"%' "

...



If Select("QRY") <> 0

...


    QRY->(dbCloseArea())

...


End

...



dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),"QRY",.T.,.T.)

...


QRY->(dbGoTop())

...



If !QRY->(Eof())

...


    aRet[1] := QRY->FJN_COD

...


    aRet[2] := QRY->FJN_AGENCI

...


    aRet[3] := QRY->FJN_POSTAL

...


else

...


    aRet[1] := "005"

...


    aRet[2] := "00001"

...


    aRet[3] := "1000"    

...


EndIf

...



QRY->(dbCloseArea())

...



Return(aRet)

...



/*/{Protheus.doc} addLine

...


    Agrega una nueva línea a aCols en base a los campos en aHeader

...


/*/

...


Static function addLine(aHeader, aCols)

...


    Local nX, nY

...



    Aadd(aCols,    Array(Len(aHeader)))

...


                

...


    nX    := Len(aCols)

...


    For nY := 1 to Len(aHeader)

...


        If !(aHeader[nY][2] $ "EL_BANCOS|EL_BCOCHQS") // EL_BANCOS y EL_BCOCHQS son campos virtuales de la forma de pago sin grid, estos se dejan como vacío

...


            aCols[nX][nY] := CriaVar(aHeader[nY][2])

...


        Else

...


            aCols[nX][nY] := ""

...


        EndIf

...


    Next nY

...


Return nX


Nota: 

El cIdPonto igual a BUTTONBAR adiciona un nuevo botón en la pantalla de carga de formas de pago y detona una función, para esto es necesario habilitar el parámetro MV_FPADVPL igual a .T. para utilizar la pantalla ADVPL de carga de formas de pago. Para más información véase el siguiente documento: https://tdn.totvs.com/x/kBNdMg

Image Modified