01. DATOS GENERALES
Producto | TOTVS Backoffice | ||||||
---|---|---|---|---|---|---|---|
Línea de producto: | Línea Protheus | ||||||
Segmento: | Servicios | ||||||
Módulo: | SIGAGPE - Gestión de Personal | ||||||
Función: |
| ||||||
País: | Colombia | ||||||
Ticket: | 10598668 | ||||||
Requisito/Story/Issue (informe el requisito vinculado): | DMINA-11311 |
02. SITUACIÓN/REQUISITO
Cuando se realiza el cálculo de nómina habilitando el trace para obtener el log de cálculo, el sistema visualiza incompleta la información del log, mostrando el siguiente mensaje "ATENCION: Interrupción en la visualización del contenido del archivo, pues este es superior al permitido para visualización."
03. SOLUCIÓN
Se crea el punto de entrada GPM022LOG, el cual será ejecutado cuando se visualice el archivo log de cálculo desde protheus y si este, sobrepase los 500,000 caracteres. De esta forma el usuario programador podrá hacer alguna funcionalidad para copiar el archivo LOG que está ubicado en la carpeta del system/log, para alguna carpeta local y así el usuario final podrá consultar dicho archivo.
En el ejemplo que estamos aportando en esta solución es que a través de un parámetro (el que desee el usuario programador, en nuestro caso usaremos el ES_LOGLOC) , el cual servirá para que se abra una pantalla donde el usuario final pueda elegir la carpeta local donde se copiara el log (para nuestro ejemplo ES_LOGLOC = .T.) , o que no se abra la pantalla y que haga la copia siempre en la carpeta del smartclient sin que abra la pantalla (para nuestro ejemplo ES_LOGLOC = .F.)
- Realizar respaldo del repositorio (RPO).
- Aplicar el parche correspondiente al issue DMINA-11311.
- Validar que las rutinas actualizadas correspondan con las mencionadas en la sección "Función" del encabezado del presente Documento Técnico.
- Crear parámetro ES_LOGLOC (Ver apartado "Información adicional").
Compilar el punto de entrada GPM022LOG en el RPO (Ver apartado "Información adicional").
- Configurar el módulo de Gestión de Personal (SIGAGPE) para el cálculo de nómina ordinaria:
Mnemónicos - SIGAGPE Menú "Actualizaciones | Definic. Cálculo | Mnemónicos (GPEA300)"
Formulas - SIGAGPE Menú "Actualizaciones | Definic. Cálculo | Formulas (GPEA290)"
Definición de Tablas - SIGAGPE Menú "Actualizaciones | Definic. Cálculo | Definición de Tablas (GPEA310)"
- Mantenimiento de Tablas - SIGAGPE Menú "Actualizaciones | Definic. Cálculo | Mantenimiento Tab. (GPEA320)"
- Procesos - SIGAGPE Menú "Actualizaciones | Definic. Cálculo | Procesos (GPEA420)"
- Procedimientos - SIGAGPE Menú "Actualizaciones | Definic. Cálculo | Tipos de procedim. (GPEA162)"
- Procedimiento LIQ con Tipo procedimiento igual a 1 -Planilla de Haberes
- Periodos - SIGAGPE Menú "Actualizaciones | Definic. Cálculo | Periodos (GPEA400)"
- Conceptos - SIGAGPE Menú "Actualizaciones | Definic. Cálculo | Conceptos (GPEA040)"
- Conceptos por proceso - SIGAGPE Menú "Actualizaciones | Definic. Cálculo | Conceptos por proceso (GPEA161)"
- Empleados - SIGAGPE Menú "Actualizaciones | Empleados | Empleados (GPEA010)"
- Dar de alta 2 empleados con un año de antigüedad.
CASO 1 - Visualización de log sin interrupción (No sobrepasa el límite de caracteres permitidos)
Configurar ES_LOGLOC = .T. (parámetro ejemplo)
En el módulo SIGAGPE acceder al menú “Miscelánea | Cálculos | Por Procedimiento (GPEM020)”
- Asignar el proceso y el procedimiento LIQ del periodo activo.
- Habilitar grabación y trace.
- Realizar el cálculo solo para un empleado.
- Verificar que el cálculo se haya ejecutado sin errores.
- En el menú "Otras Acciones" seleccionar la opción "Log"
Se habré una pantalla donde se muestran los archivos de log agrupados por mes. - Seleccionar el log del proceso generado anteriormente.
No se interrumpe la visualización del log ya que el archivo no sobrepasa el límite de caracteres permitidos para la visualización.
CASO 2 - Visualización de log con interrupción (Sobrepasa el límite de caracteres permitidos)
Configurar ES_LOGLOC = .T.
En el módulo SIGAGPE acceder al menú “Miscelánea | Cálculos | Por Procedimiento (GPEM020)”
- Asignar el proceso y el procedimiento LIQ del periodo activo.
- Habilitar grabación y trace.
- Realizar el cálculo para dos empleados.
- Verificar que el cálculo se haya ejecutado sin errores.
- En el menú "Otras Acciones" seleccionar la opción "Log"
Se abre una pantalla donde se muestran los archivos de log agrupados por mes. - Seleccionar el log del proceso generado anteriormente.
Se abre una pantalla que solicita el directorio dónde será guardada la copia del Log. - Seleccionar el directorio.
- Confirmar el guardado del log.
- Se interrumpe la visualización del log ya que el archivo sobrepasa el límite de caracteres permitidos para la visualización, sin embargo, el archivo log se guarda en el directorio indicado.
- Revisar que el archivo se haya almacenado en la ruta indicada.
CASO 3 - Visualización de log sin interrupción (No sobrepasa el límite de caracteres permitidos)
Configurar ES_LOGLOC = .F.
En el módulo SIGAGPE acceder al menú “Miscelánea | Cálculos | Por Procedimiento (GPEM020)”
- Asignar el proceso y el procedimiento LIQ del periodo activo.
- Habilitar grabación y trace.
- Realizar el cálculo solo para un empleado.
- Verificar que el cálculo se haya ejecutado sin errores.
- En el menú "Otras Acciones" seleccionar la opción "Log"
Se habré una pantalla donde se muestran los archivos de log agrupados por mes. - Seleccionar el log del proceso generado anteriormente.
No se interrumpe la visualización del log ya que el archivo no sobrepasa el límite de caracteres permitidos para la visualización.
CASO 4 - Visualización de log con interrupción (Sobrepasa el límite de caracteres permitidos)
Configurar MV_LOGLOC = .F.
En el módulo SIGAGPE acceder al menú “Miscelánea | Cálculos | Por Procedimiento (GPEM020)”
- Asignar el proceso y el procedimiento LIQ del periodo activo.
- Habilitar grabación y trace.
- Realizar el cálculo para dos empleados.
- Verificar que el cálculo se haya ejecutado sin errores.
- En el menú "Otras Acciones" seleccionar la opción "Log"
Se abre una pantalla donde se muestran los archivos de log agrupados por mes. - Seleccionar el log del proceso generado anteriormente.
Se interrumpe la visualización del log ya que el archivo sobrepasa el limite de caracteres permitidos para la visualización, sin embargo, el archivo log se guarda en el directorio donde se está ejecutando el SmartClient. - Revisar que el archivo se haya almacenado en la ruta donde se está ejecutando el SmartClient.
04. INFORMACIÓN ADICIONAL
Ejemplo de configuración de punto de entrada:
Punto de Entrada: | GPM022LOG | ||||||||
---|---|---|---|---|---|---|---|---|---|
Descripción: |
| ||||||||
Ubicación en Menú: | Miscelánea | Cálculos | Por Procedimiento. | ||||||||
Eventos: | Visualización de Log de cálculo. | ||||||||
Programa Fuente: | GPEM022.PRX | ||||||||
Función: | LOADMEMO() | ||||||||
Retorno: |
|
Sugerencia
#INCLUDE "PROTHEUS.CH"
/*
{Protheus.doc} GPM022LOG
Punto de entrada
Muestra una pantalla para elegir el directorio donde será guardada una copia del archivo log
@author Alfredo Medrano
@version 1.0
@since 27/04/2021
@return String
@sample
*/
User Function GPM022LOG()
Local cPath := PARAMIXB[1] //Directorio
Local cArquivo := PARAMIXB[2] //Nombre Archivo
Local cRetorno := PARAMIXB[3] //Texto de log
Local lGerLog := SuperGetMv("ES_LOGLOC",.T.,.F.) //parametro creado por el cliente
Local cDirC := ""
Local cPathAbs := ""
Local lCopy := .F.
Local lOk := .F.
Local lSave := .F.
Local oDlgDir
Local oDirC
Default cPath := ""
Default cArquivo:= ""
Default cRetorno:= ""
cPathRel := GetPvProfString( GetEnvServer() , "StartPath" , "" , GetAdv97() )
cPathRel += "LOG_CALC\" + cArquivo // ruta relativa con archivo
cPathAbs := cPath + cArquivo // ruta absoluta con archivo
If lGerLog
DEFINE MSDIALOG oDlgDir FROM 10,05 TO 15, 40 TITLE " Guardar Archivo " // "Directorio"
@ 6,2 Say "Directorio: " SIZE 31,07 OF oDlgDir PIXEL
@ 5,35 MSGET oDirC VAR cDirC SIZE 100, 08 OF oDlgDir PIXEL HASBUTTON ;
VALID {|| cDirC:= cGetFile(,"Selecione el directorio",,,.F.,GETF_LOCALFLOPPY+GETF_LOCALHARD+GETF_NETWORKDRIVE+GETF_RETDIRECTORY), IIF(cDirC!="", .T., .f.)}
DEFINE SBUTTON FROM 20,76 TYPE 1 ACTION (lOk:=.T.,oDlgDir:End()) ENABLE OF oDlgDir
DEFINE SBUTTON FROM 20, 106 TYPE 2 ACTION oDlgDir:End() ENABLE OF oDlgDir
ACTIVATE MSDIALOG oDlgDir CENTERED
If lOk
//Verifica si el archivo existe en el directorio del server
If File(cPathRel,0 )
//Verifica si el directorio destino existe
If ExistDir( cDirC )
lSave := .T.
If substr(cDirC, len(cDirC),len(cDirC) ) != "\"
cDirC+= "\"
EndIf
//Verifica si el archivo existe en el directorio destino
If File(cDirC+cArquivo)
If !(MsgYesNo("El Archivo " + cArquivo + " ya existe en la ruta especificada. Desea sobrescribirlo ?",;
"Atención" ))
lSave := .F.
EndIf
EndIf
Else
MsgInfo( "El directorio especificado " + cDirC + " no existe. Asigne un directorio valido.", "Atención" )
EndIf
EndIf
EndIf
Else
cDirC := GetClientDir() // obtiene el directorio en donde se esta ejecutando el SmartClient
lSave := .T.
EndIf
If lSave
//Copia el archivo de la carpeta del servidor a la carpeta especificada
lCopy := CpyS2T( cPathRel, cDirC)
If lCopy
cRetorno += "El Archivo " + cArquivo + " se envio a la siguiente ruta " + cDirC
// MsgInfo( "El archivo " + cArquivo + " se guardo correctamente", "Atención" )
Endif
If Ferror() # 0 .And. !lCopy
cRetorno += "Error de grabación de archivo - Codigo DOS: " + STR(Ferror(),3)
//MsgInfo( "Error de grabación de archivo - Codigo DOS: " + STR(Ferror(),3), "Atención" )
EndIf
EndIf
return cRetorno
La solución aplica para todos los países, en las versiones 12.1.17 o posteriores.¡IMPORTANTE!