JSOTO ELIMINE LOS NOMBRES DEL PROYECTO DUPLICADOS
This commit is contained in:
Binary file not shown.
@@ -59,7 +59,7 @@
|
||||
<Grid gridHeight="22" gridWidth="100" name="Grid1" posX="1" posY="1">
|
||||
<Group gridHeight="15" gridWidth="96" name="Group1" posX="1" posY="1">
|
||||
<Label posX="1" posY="1" text="Tipo de Movimiento"/>
|
||||
<ComboBox aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="cod_mto" comment="1= EMPLEO 2=CAMBIO 3=NOVEDADES 4=TERMINACION o Presione Ctrl-W" defaultValue="1" fieldId="2" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="36" include="1|2|3|4" items="" name="adtb00020.cod_mto" posX="21" posY="1" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="1" table_alias_name="" widget="ComboBox"/>
|
||||
<ComboBox aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="cod_mto" comment="Seleccione el tipo de movimiento de la accion de personal" defaultValue="1" fieldId="2" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="36" items="" name="adtb00020.cod_mto" posX="21" posY="1" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="1" table_alias_name="" widget="ComboBox"/>
|
||||
<Label posX="1" posY="2" text="Numero Documento"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="num_trx" fieldId="5" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="6" name="adtb00020.num_trx" noEntry="true" posX="21" posY="2" sqlTabName="adtb00020" sqlType="INTEGER" tabIndex="2" table_alias_name="" widget="Edit"/>
|
||||
<Label posX="33" posY="2" text="Numero Solicitante"/>
|
||||
@@ -79,7 +79,7 @@
|
||||
<Label posX="39" posY="4" text="-"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" autoNext="true" colName="cod_puesto" comment="Digite el puesto del empleado o Presione Ctrl-W para busqueda" fieldId="12" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="3" name="adtb00020.cod_puesto" posX="41" posY="4" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="10" table_alias_name="" widget="Edit"/>
|
||||
<Label posX="46" posY="4" text="Cedula"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="cedula" fieldId="13" gridHeight="1" gridWidth="14" name="cedula" picture="###-#######-#" posX="55" posY="4" sqlTabName="formonly" tabIndex="11" table_alias_name="" widget="Edit"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="cedula" fieldId="13" gridHeight="1" gridWidth="14" name="cedula" posX="55" posY="4" sqlTabName="formonly" tabIndex="11" table_alias_name="" widget="Edit"/>
|
||||
<Label posX="70" posY="4" text="Cuenta No:"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="cuenta_no" comment="No. de Cuenta para pago automatico" fieldId="1" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="14" name="adtb00003.cuenta_no" posX="81" posY="4" sqlTabName="adtb00003" sqlType="VARCHAR" tabIndex="12" table_alias_name="" widget="Edit"/>
|
||||
<Label posX="1" posY="5" text="Nombre"/>
|
||||
@@ -100,10 +100,12 @@
|
||||
<Item lstrtext="false" name="J" text="JORNAL"/>
|
||||
</ComboBox>
|
||||
<Label gridHeight="1" gridWidth="9" name="Label1" posX="63" posY="8" text="Estado Civil"/>
|
||||
<ComboBox aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" case="upper" colName="estado_civil" comment=" S = Soltero C = Casado " defaultValue="U" fieldId="21" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="18" include="S|C" items="CASADO, SOLTERO, UNION LIBRE" name="adtb00003.estado_civil" posX="75" posY="8" sqlTabName="adtb00003" sqlType="CHAR" tabIndex="19" table_alias_name="" widget="ComboBox">
|
||||
<ComboBox aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" case="upper" colName="estado_civil" comment="Estado civil del colaborador" defaultValue="U" fieldId="21" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="18" items="CASADO, SOLTERO, UNION LIBRE, DIVORCIADO, VIUDO" name="adtb00003.estado_civil" posX="75" posY="8" sqlTabName="adtb00003" sqlType="CHAR" tabIndex="19" table_alias_name="" widget="ComboBox">
|
||||
<Item lstrtext="false" name="C" text="CASADO"/>
|
||||
<Item lstrtext="false" name="S" text="SOLTERO"/>
|
||||
<Item lstrtext="false" name="U" text="UNION LIBRE"/>
|
||||
<Item lstrtext="false" name="D" text="DIVORCIADO"/>
|
||||
<Item lstrtext="false" name="V" text="VIUDO"/>
|
||||
</ComboBox>
|
||||
<Label posX="1" posY="9" text="Sexo"/>
|
||||
<ComboBox aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" case="upper" colName="sexo" comment="Digite M Para Sexo Masculino y F Para el Femenino" defaultValue="F" fieldId="40" gridHeight="1" gridWidth="11" include="M|F" items="FEMENINO, MASCULINO" name="sexo" posX="21" posY="9" sqlTabName="formonly" sqlType="CHAR" tabIndex="20" table_alias_name="" widget="ComboBox">
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
{
|
||||
------------------------------------------------------------------------
|
||||
FORMULARIO : ADFMRP048
|
||||
OBJETIVO : Parametros del reporte de horas de capacitacion por
|
||||
colaborador. Es utilizada por: ADPRRP048
|
||||
FECHA REALIZACION : Octubre 05, 2026
|
||||
------------------------------------------------------------------------
|
||||
}
|
||||
LAYOUT (TEXT="HORAS DE CAPACITACION POR COLABORADOR", STYLE="basic")
|
||||
GRID
|
||||
{
|
||||
<G "PARAMETROS" >
|
||||
Fecha desde [f001 ] Hasta [f002 ]
|
||||
Departamento [f003 ]
|
||||
Ficha (opcional) [f004 ]
|
||||
Filtro [f005]
|
||||
}
|
||||
END
|
||||
ATTRIBUTES
|
||||
DATEEDIT f001 = formonly.fecha_ini TYPE DATE, FORMAT="dd/mm/yyyy", REQUIRED,
|
||||
COMMENT="Fecha de inicio de la capacitacion (plan o ejecucion)";
|
||||
DATEEDIT f002 = formonly.fecha_fin TYPE DATE, FORMAT="dd/mm/yyyy", REQUIRED;
|
||||
COMBOBOX f003 = formonly.departamento TYPE SMALLINT, NOT NULL,
|
||||
COMMENT="Departamento del colaborador (TODOS = toda la empresa)";
|
||||
EDIT f004 = formonly.num_emp TYPE INTEGER,
|
||||
COMMENT="Deje en blanco para todos los colaboradores";
|
||||
CHECKBOX f005 = formonly.solo_pend, VALUECHECKED="S", VALUEUNCHECKED="N",
|
||||
TEXT="Solo colaboradores con horas pendientes",
|
||||
COMMENT="Muestra solo a quienes tienen capacitaciones requeridas sin cubrir en el periodo";
|
||||
END
|
||||
INSTRUCTIONS
|
||||
DELIMITERS " "
|
||||
END
|
||||
@@ -0,0 +1,31 @@
|
||||
{
|
||||
------------------------------------------------------------------------
|
||||
FORMULARIO : ADFMRP049
|
||||
OBJETIVO : Parametros del reporte de rotacion laboral.
|
||||
Es utilizada por: ADPRRP049
|
||||
FECHA REALIZACION : Octubre 05, 2026
|
||||
------------------------------------------------------------------------
|
||||
}
|
||||
LAYOUT (TEXT="ROTACION LABORAL", STYLE="basic")
|
||||
GRID
|
||||
{
|
||||
<G "PARAMETROS" >
|
||||
Ano desde [f001 ] Hasta [f002 ]
|
||||
Departamento [f003 ]
|
||||
Tipo de empleado [f004 ]
|
||||
Formato [f005 ]
|
||||
}
|
||||
END
|
||||
ATTRIBUTES
|
||||
EDIT f001 = formonly.ano_ini TYPE SMALLINT, REQUIRED;
|
||||
EDIT f002 = formonly.ano_fin TYPE SMALLINT, REQUIRED;
|
||||
COMBOBOX f003 = formonly.departamento TYPE SMALLINT, NOT NULL,
|
||||
COMMENT="Departamento (TODOS = toda la empresa)";
|
||||
COMBOBOX f004 = formonly.tipo_emp, NOT NULL,
|
||||
ITEMS=(("TODOS","TODOS"),("NORMAL","NORMAL"),("TEMPORERO","TEMPORERO"));
|
||||
COMBOBOX f005 = formonly.formato, NOT NULL,
|
||||
ITEMS=(("R","RESUMEN MENSUAL"),("D","DETALLE DE SALIDAS POR CAUSA"));
|
||||
END
|
||||
INSTRUCTIONS
|
||||
DELIMITERS " "
|
||||
END
|
||||
@@ -0,0 +1,49 @@
|
||||
{
|
||||
------------------------------------------------------------------------
|
||||
FORMULARIO : ADFMWD017
|
||||
OBJETIVO : Ventana de capacitacion (requerida / tomada) de la
|
||||
Accion de Personal. Es utilizada por: ADPRMT017
|
||||
FECHA REALIZACION : Octubre 05, 2026
|
||||
------------------------------------------------------------------------
|
||||
}
|
||||
LAYOUT (TEXT="CAPACITACION DEL EMPLEADO")
|
||||
GRID
|
||||
{
|
||||
<G "CAPACITACION" >
|
||||
Movimiento [f001 ]
|
||||
Requerida a cubrir [f002 ]
|
||||
Capacitacion [f003 ]
|
||||
[b01 ]
|
||||
Tipo de evento [f004 ]
|
||||
Horas requeridas [f005 ]
|
||||
Fecha inicio [f006 ] Fecha fin [f007 ]
|
||||
Horas tomadas [f008 ]
|
||||
Institucion/Facilitador [f009 ]
|
||||
Costo [f010 ]
|
||||
|
||||
<G "RESUMEN DEL EMPLEADO" >
|
||||
Requeridas [t001 ] Tomadas [t002 ] Pendientes [t003 ]
|
||||
}
|
||||
END
|
||||
ATTRIBUTES
|
||||
EDIT f001 = formonly.tipo_desc, NOENTRY, COLOR=BLUE;
|
||||
COMBOBOX f002 = formonly.id_requerida TYPE INTEGER,
|
||||
COMMENT="Capacitacion requerida pendiente que cubre esta capacitacion tomada";
|
||||
COMBOBOX f003 = formonly.cod_cap TYPE INTEGER,
|
||||
COMMENT="Seleccione la capacitacion. Si no existe use el boton Nuevo curso";
|
||||
BUTTON b01 : nuevo_curso, TEXT="Nuevo curso";
|
||||
COMBOBOX f004 = formonly.evento TYPE SMALLINT, NOENTRY,
|
||||
ITEMS=((1,"SEMINARIO"),(2,"CURSO"),(3,"TALLER"),(4,"CONFERENCIA"));
|
||||
EDIT f005 = formonly.horas_req TYPE DECIMAL(6,2), FORMAT="##&.&&";
|
||||
DATEEDIT f006 = formonly.fecha_ini TYPE DATE, FORMAT="dd/mm/yyyy";
|
||||
DATEEDIT f007 = formonly.fecha_fin TYPE DATE, FORMAT="dd/mm/yyyy";
|
||||
EDIT f008 = formonly.horas_tom TYPE DECIMAL(6,2), FORMAT="##&.&&";
|
||||
EDIT f009 = formonly.institucion, UPSHIFT;
|
||||
EDIT f010 = formonly.costo TYPE DECIMAL(12,2), FORMAT="###,##&.&&";
|
||||
EDIT t001 = formonly.trq TYPE DECIMAL(8,2), NOENTRY, COLOR=BLUE, FORMAT="###&.&&";
|
||||
EDIT t002 = formonly.ttm TYPE DECIMAL(8,2), NOENTRY, COLOR=BLUE, FORMAT="###&.&&";
|
||||
EDIT t003 = formonly.tpd TYPE DECIMAL(8,2), NOENTRY, COLOR=RED, FORMAT="###&.&&";
|
||||
END
|
||||
INSTRUCTIONS
|
||||
DELIMITERS " "
|
||||
END
|
||||
@@ -0,0 +1,32 @@
|
||||
{
|
||||
------------------------------------------------------------------------
|
||||
FORMULARIO : ADFMWD018
|
||||
OBJETIVO : Ventana de desvinculacion (causa de salida) de la
|
||||
Accion de Personal. Es utilizada por: ADPRMT017
|
||||
FECHA REALIZACION : Octubre 05, 2026
|
||||
------------------------------------------------------------------------
|
||||
}
|
||||
LAYOUT (TEXT="DESVINCULACION DEL EMPLEADO")
|
||||
GRID
|
||||
{
|
||||
<G "SALIDA" >
|
||||
Fecha de salida [f001 ]
|
||||
Causa [f002 ]
|
||||
Clasificacion [f003 ]
|
||||
Recontratable [f004]
|
||||
Detalle [f005 ]
|
||||
[f005 ]
|
||||
}
|
||||
END
|
||||
ATTRIBUTES
|
||||
DATEEDIT f001 = formonly.fecha_salida TYPE DATE, FORMAT="dd/mm/yyyy",
|
||||
COMMENT="Ultimo dia laborado";
|
||||
COMBOBOX f002 = formonly.cod_causa TYPE SMALLINT,
|
||||
COMMENT="Causa de la salida (se usa para el indicador de rotacion)";
|
||||
EDIT f003 = formonly.clase_desc, NOENTRY, COLOR=BLUE;
|
||||
COMBOBOX f004 = formonly.recontratable, ITEMS=(("S","SI"),("N","NO"));
|
||||
TEXTEDIT f005 = formonly.detalle, UPSHIFT, SCROLLBARS=NONE, STRETCH=X;
|
||||
END
|
||||
INSTRUCTIONS
|
||||
DELIMITERS " "
|
||||
END
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
------------------------------------------------------------------------
|
||||
FORMULARIO : ADFMWD019
|
||||
OBJETIVO : Alta de una capacitacion en el catalogo (adtb00059)
|
||||
desde la ventana de capacitacion. Es utilizada por:
|
||||
ADPRMT017 (boton Nuevo curso)
|
||||
FECHA REALIZACION : Octubre 05, 2026
|
||||
------------------------------------------------------------------------
|
||||
}
|
||||
LAYOUT (TEXT="NUEVA CAPACITACION")
|
||||
GRID
|
||||
{
|
||||
<G "CATALOGO DE CAPACITACIONES" >
|
||||
Nombre [f001 ]
|
||||
Tipo de evento [f002 ]
|
||||
Horas estandar [f003 ]
|
||||
}
|
||||
END
|
||||
ATTRIBUTES
|
||||
EDIT f001 = formonly.nom_cap, UPSHIFT, REQUIRED,
|
||||
COMMENT="Nombre de la capacitacion (revise antes que no exista en la lista)";
|
||||
COMBOBOX f002 = formonly.evento TYPE SMALLINT, NOT NULL,
|
||||
ITEMS=((1,"SEMINARIO"),(2,"CURSO"),(3,"TALLER"),(4,"CONFERENCIA"));
|
||||
EDIT f003 = formonly.horas TYPE DECIMAL(6,2), FORMAT="##&.&&",
|
||||
COMMENT="Horas que dura normalmente esta capacitacion";
|
||||
END
|
||||
INSTRUCTIONS
|
||||
DELIMITERS " "
|
||||
END
|
||||
+734
-36
@@ -44,6 +44,38 @@ DEFINE vacacion RECORD
|
||||
tipo_sueldo CHAR(20),
|
||||
proporcion_vacaciones,salario_quincenal DEC(12,2)
|
||||
|
||||
#### VARIABLES PARA MODULO DE CAPACITACION (2026-10-05) ##########
|
||||
#### tipo_mov 'CAPACITACION REQUERIDA' / 'CAPACITACION TOMADA'
|
||||
#### detalle en adtb00060, catalogo en adtb00059 (adprmt017_capacitacion.sql)
|
||||
DEFINE capac RECORD
|
||||
tipo_desc VARCHAR(30),
|
||||
id_requerida INTEGER,
|
||||
cod_cap INTEGER,
|
||||
evento SMALLINT,
|
||||
horas_req DEC(6,2),
|
||||
fecha_ini DATE,
|
||||
fecha_fin DATE,
|
||||
horas_tom DEC(6,2),
|
||||
institucion VARCHAR(100),
|
||||
costo DEC(12,2)
|
||||
END RECORD
|
||||
DEFINE cap_tot RECORD
|
||||
trq, ttm, tpd DEC(8,2)
|
||||
END RECORD
|
||||
#### VARIABLES PARA DESVINCULACION (2026-10-05) ##########
|
||||
#### tipo_mov 'CANCELAR' (mov. 4 DESVINCULAR) / 'DESVINCULAR' / 'TERMINO'
|
||||
#### detalle en adtb00062, causas en adtb00061 (adprmt017_desvinculacion.sql)
|
||||
DEFINE desv RECORD
|
||||
fecha_salida DATE,
|
||||
cod_causa SMALLINT,
|
||||
clase_desc VARCHAR(20),
|
||||
recontratable CHAR(1),
|
||||
detalle VARCHAR(200)
|
||||
END RECORD
|
||||
DEFINE realiza_desvinculacion BOOLEAN
|
||||
DEFINE realiza_capacitacion BOOLEAN,
|
||||
cap_sql STRING
|
||||
|
||||
#### MODULO MENU GENERAL DE ACCION DE NOMINA #####
|
||||
|
||||
MAIN
|
||||
@@ -479,6 +511,28 @@ FUNCTION adpcad017()
|
||||
END IF
|
||||
END IF
|
||||
|
||||
## LLAMA LA VENTANA DE CAPACITACION (REQUERIDA / TOMADA)
|
||||
IF xtipo = "CAPACITACION REQUERIDA" OR xtipo = "CAPACITACION TOMADA" THEN
|
||||
CALL capacitacion('A') RETURNING realiza_capacitacion
|
||||
IF NOT realiza_capacitacion THEN
|
||||
RETURN
|
||||
END IF
|
||||
NEXT FIELD observacion
|
||||
END IF
|
||||
|
||||
## LLAMA LA VENTANA DE DESVINCULACION (CAUSA DE SALIDA)
|
||||
IF es_desvinculacion(xtipo) THEN
|
||||
IF empleado_desactivado(acc_per.num_emp) THEN
|
||||
CALL fgl_winmessage("INFO","ESTE EMPLEADO YA ESTA DESACTIVADO","info")
|
||||
NEXT FIELD num_emp
|
||||
END IF
|
||||
CALL desvinculacion('A') RETURNING realiza_desvinculacion
|
||||
IF NOT realiza_desvinculacion THEN
|
||||
RETURN
|
||||
END IF
|
||||
NEXT FIELD observacion
|
||||
END IF
|
||||
|
||||
AFTER FIELD sueldo_ac
|
||||
IF acc_per.sueldo_ac IS NULL OR acc_per.sueldo_ac < 0 THEN
|
||||
LET numero_msg = 16
|
||||
@@ -666,9 +720,18 @@ FUNCTION adpcad017()
|
||||
RETURN
|
||||
END IF
|
||||
|
||||
## SE ASEGURA DE QUE TODA LA INFORMACION ESTE CORRECTA
|
||||
PROMPT "Informacion Correcta? (S/N).." FOR CHAR opt
|
||||
LET opt = UPSHIFT(opt)
|
||||
## SE ASEGURA DE QUE TODA LA INFORMACION ESTE CORRECTA
|
||||
IF fgl_winquestion("ACCION DE PERSONAL","La informacion esta correcta? Desea grabar la accion?",
|
||||
"YES","YES|NO","question",0) = "YES" THEN
|
||||
LET opt = "S"
|
||||
ELSE
|
||||
LET opt = "N"
|
||||
# Antes de 2026-10-05 un "N" seguia de largo: mensaje de grabado,
|
||||
# UPDATE de adtb00028 con num_trx nulo y pregunta de impresion.
|
||||
LET numero_msg = 2
|
||||
CALL msg(numero_msg)
|
||||
RETURN
|
||||
END IF
|
||||
|
||||
## SI NO HA OCURRIDO NINGUN PROBLEMA SE PROCEDE A INSERTAR LA INFORMACION
|
||||
## EN LA TABLA DE ACCION DE PERSONAL
|
||||
@@ -751,8 +814,17 @@ FUNCTION adpcad017()
|
||||
VALUES (vacacion.num_nomi,acc_per.nomina,acc_per.num_emp,acc_per.departamento,acc_per.departamento,acc_per.nivel_emp,
|
||||
acc_per.cod_puesto,vacacion.cod_mov2,salario_quincenal,usuarios,getdate(),
|
||||
acc_per.num_trx,acc_per.cod_mto)
|
||||
END IF
|
||||
|
||||
END IF
|
||||
|
||||
END IF
|
||||
|
||||
IF xtipo = "CAPACITACION REQUERIDA" OR xtipo = "CAPACITACION TOMADA" THEN
|
||||
CALL graba_capacitacion()
|
||||
END IF
|
||||
|
||||
## DESVINCULACION: DESACTIVA AL EMPLEADO (status_t = 'D') Y GUARDA LA CAUSA
|
||||
IF es_desvinculacion(xtipo) THEN
|
||||
CALL graba_desvinculacion()
|
||||
END IF
|
||||
|
||||
################## DATOS PARA INSERTAR O MODIFICAR PETB00003 ############
|
||||
@@ -877,16 +949,9 @@ FUNCTION adpcad017()
|
||||
COMMIT WORK
|
||||
END IF
|
||||
|
||||
## ACTUALIZA LA TABLA DE EMPLEADOS EN CUANTO AL MOVIMIENTO DE LAS TERMINACIONES
|
||||
## DE LA ACCION DE PERSONAL
|
||||
|
||||
IF xtipo = "TERMINO" THEN
|
||||
UPDATE adtb00003 SET status_t = "T"
|
||||
WHERE num_emp = acc_per.num_emp
|
||||
|
||||
UPDATE adtb00021 SET status_t = "T"
|
||||
WHERE num_emp = acc_per.num_emp
|
||||
END IF
|
||||
## LAS TERMINACIONES (TERMINO/CANCELAR/DESVINCULAR) SE GRABAN DENTRO DE LA
|
||||
## TRANSACCION EN graba_desvinculacion() (2026-10-05). Antes ponia status_t='T'
|
||||
## pero el movimiento existente es 'CANCELAR' y nunca entraba aqui.
|
||||
|
||||
## ACTUALIZA LA TABLA DE SECUENCIA NUMERICA
|
||||
UPDATE adtb00028 SET num_trx = acc_per.num_trx
|
||||
@@ -895,19 +960,28 @@ FUNCTION adpcad017()
|
||||
LET numero_msg = 1
|
||||
CALL msg(numero_msg)
|
||||
CLEAR FORM
|
||||
LABEL preg:
|
||||
|
||||
PROMPT "Desea Imprimir Este Documento (S/N)?..." FOR CHAR optt
|
||||
LET optt = UPSHIFT(optt)
|
||||
IF optt IS NULL OR (optt != "S" AND optt != "N") THEN
|
||||
GOTO preg
|
||||
END IF
|
||||
IF fgl_winquestion("ACCION DE PERSONAL","Accion grabada. Desea imprimir el documento?",
|
||||
"NO","YES|NO","question",0) = "YES" THEN
|
||||
LET optt = "S"
|
||||
ELSE
|
||||
LET optt = "N"
|
||||
END IF
|
||||
IF optt = "S" THEN
|
||||
CALL configureoutput("PDF") RETURNING handler
|
||||
START REPORT imp_accion TO XML HANDLER handler
|
||||
OUTPUT TO REPORT imp_accion()
|
||||
FINISH REPORT imp_accion
|
||||
RUN imprime
|
||||
# 2026-10-05: antes usaba configureoutput("PDF"), que carga el motor
|
||||
# SIN diseno (loadCurrentSettings(NULL)) -> PDF en blanco. Ahora usa
|
||||
# el mismo adprmt017.4rp que la consulta.
|
||||
IF fgl_report_loadCurrentSettings("adprmt017.4rp") THEN
|
||||
CALL fgl_report_selectDevice("PDF")
|
||||
CALL fgl_report_selectPreview(TRUE)
|
||||
LET handler = fgl_report_commitCurrentSettings()
|
||||
IF handler IS NOT NULL THEN
|
||||
START REPORT imp_accion TO XML HANDLER handler
|
||||
OUTPUT TO REPORT imp_accion()
|
||||
FINISH REPORT imp_accion
|
||||
END IF
|
||||
ELSE
|
||||
CALL fgl_winmessage("INFO","No se pudo cargar el diseno adprmt017.4rp","stop")
|
||||
END IF
|
||||
END IF
|
||||
|
||||
END FUNCTION
|
||||
@@ -1559,7 +1633,13 @@ FUNCTION adpcmf017()
|
||||
UPDATE notb00007 SET status_t ="E",
|
||||
us_mod = usuarios,
|
||||
fech_mod = getdate()
|
||||
WHERE num_trx = acc_per.num_trx AND cod_mto = acc_per.cod_mto
|
||||
WHERE num_trx = acc_per.num_trx AND cod_mto = acc_per.cod_mto
|
||||
IF xtipo = "CAPACITACION REQUERIDA" OR xtipo = "CAPACITACION TOMADA" THEN
|
||||
CALL anula_capacitacion(acc_per.num_trx)
|
||||
END IF
|
||||
IF es_desvinculacion(xtipo) THEN
|
||||
CALL anula_desvinculacion(acc_per.num_trx, acc_per.num_emp)
|
||||
END IF
|
||||
COMMIT WORK
|
||||
LET numero_msg = 39
|
||||
CALL msg(numero_msg)
|
||||
@@ -1704,8 +1784,19 @@ nombre5 clipped," ",nombre6 clipped," ",apellido5 clipped," ",apellido6 clipped
|
||||
END IF
|
||||
|
||||
CALL vacaciones('C') RETURNING realiza_vacaciones # CUANDO ESTA CONSULTANDO ES 'C' Y ADICIONANDO ES 'A'
|
||||
|
||||
|
||||
|
||||
|
||||
END IF
|
||||
## DATOS CAPACITACION
|
||||
IF xtipo = "CAPACITACION REQUERIDA" OR xtipo = "CAPACITACION TOMADA" THEN
|
||||
CALL carga_capacitacion(acc_per.num_trx)
|
||||
CALL capacitacion('C') RETURNING realiza_capacitacion
|
||||
END IF
|
||||
## DATOS DESVINCULACION
|
||||
IF es_desvinculacion(xtipo) THEN
|
||||
IF carga_desvinculacion(acc_per.num_trx) THEN
|
||||
CALL desvinculacion('C') RETURNING realiza_desvinculacion
|
||||
END IF
|
||||
END IF
|
||||
|
||||
|
||||
@@ -1946,7 +2037,574 @@ FUNCTION vacaciones(operacion)
|
||||
END IF
|
||||
END FUNCTION
|
||||
|
||||
## VENTANA DE LOS NIVELES DEL LOS EMPLEADOS
|
||||
##################################################################
|
||||
## CAPACITACION (2026-10-05)
|
||||
## 'CAPACITACION REQUERIDA' : plan de horas por empleado (tipo_reg 'R')
|
||||
## 'CAPACITACION TOMADA' : horas ejecutadas (tipo_reg 'T'), puede
|
||||
## cubrir una requerida (id_requerida)
|
||||
## Tablas adtb00059/adtb00060 via SQL dinamico (no estan en smarmotech.sch)
|
||||
##################################################################
|
||||
FUNCTION capacitacion(operacion)
|
||||
DEFINE operacion VARCHAR(1),
|
||||
es_requerida BOOLEAN,
|
||||
pend DEC(8,2),
|
||||
xcod INTEGER,
|
||||
xnum INTEGER
|
||||
|
||||
LET int_flag = FALSE
|
||||
LET es_requerida = (xtipo = "CAPACITACION REQUERIDA")
|
||||
|
||||
OPEN WINDOW adwindow17 AT 10,12 WITH FORM "adfmwd017"
|
||||
ATTRIBUTE(BORDER,FORM LINE FIRST + 2)
|
||||
|
||||
CALL combo_capacitaciones()
|
||||
CALL combo_requeridas(acc_per.num_emp, operacion = 'C')
|
||||
CALL totales_capacitacion(acc_per.num_emp)
|
||||
|
||||
IF operacion = 'A' THEN
|
||||
INITIALIZE capac.* TO NULL
|
||||
LET capac.tipo_desc = xtipo
|
||||
LET capac.fecha_ini = acc_per.fech_efec
|
||||
|
||||
INPUT BY NAME capac.* WITHOUT DEFAULTS ATTRIBUTE(UNBUFFERED)
|
||||
BEFORE INPUT
|
||||
DISPLAY BY NAME cap_tot.*
|
||||
IF es_requerida THEN
|
||||
CALL DIALOG.setFieldActive("id_requerida", FALSE)
|
||||
CALL DIALOG.setFieldActive("horas_tom", FALSE)
|
||||
CALL DIALOG.setFieldActive("fecha_fin", FALSE)
|
||||
ELSE
|
||||
CALL DIALOG.setFieldActive("horas_req", FALSE)
|
||||
END IF
|
||||
|
||||
ON CHANGE id_requerida
|
||||
IF capac.id_requerida IS NOT NULL THEN
|
||||
CALL datos_requerida(capac.id_requerida)
|
||||
RETURNING capac.cod_cap, capac.evento, pend
|
||||
LET capac.horas_req = pend
|
||||
IF capac.horas_tom IS NULL THEN
|
||||
LET capac.horas_tom = pend
|
||||
END IF
|
||||
CALL DIALOG.setFieldActive("cod_cap", FALSE)
|
||||
ELSE
|
||||
LET capac.cod_cap = NULL
|
||||
LET capac.evento = NULL
|
||||
LET capac.horas_req = NULL
|
||||
CALL DIALOG.setFieldActive("cod_cap", TRUE)
|
||||
END IF
|
||||
|
||||
ON CHANGE cod_cap
|
||||
IF capac.cod_cap IS NOT NULL THEN
|
||||
CALL datos_curso(capac.cod_cap) RETURNING capac.evento, pend
|
||||
IF es_requerida THEN
|
||||
LET capac.horas_req = pend
|
||||
ELSE
|
||||
IF capac.horas_tom IS NULL THEN
|
||||
LET capac.horas_tom = pend
|
||||
END IF
|
||||
END IF
|
||||
END IF
|
||||
|
||||
ON ACTION nuevo_curso
|
||||
CALL nuevo_curso() RETURNING xcod
|
||||
IF xcod IS NOT NULL THEN
|
||||
CALL combo_capacitaciones()
|
||||
LET capac.cod_cap = xcod
|
||||
CALL datos_curso(capac.cod_cap) RETURNING capac.evento, pend
|
||||
IF es_requerida THEN
|
||||
LET capac.horas_req = pend
|
||||
ELSE
|
||||
LET capac.horas_tom = pend
|
||||
END IF
|
||||
END IF
|
||||
|
||||
AFTER INPUT
|
||||
IF int_flag THEN
|
||||
EXIT INPUT
|
||||
END IF
|
||||
IF capac.cod_cap IS NULL THEN
|
||||
CALL fgl_winmessage("INFO","DEBE SELECCIONAR LA CAPACITACION","info")
|
||||
NEXT FIELD cod_cap
|
||||
END IF
|
||||
IF es_requerida THEN
|
||||
IF capac.horas_req IS NULL OR capac.horas_req <= 0 THEN
|
||||
CALL fgl_winmessage("INFO","DEBE INDICAR LAS HORAS REQUERIDAS","info")
|
||||
NEXT FIELD horas_req
|
||||
END IF
|
||||
# Evita duplicar una requerida que todavia esta pendiente
|
||||
LET xnum = 0
|
||||
LET cap_sql =
|
||||
"SELECT COUNT(*) FROM adtb00060 r WHERE r.num_emp = ? AND r.cod_cap = ? ",
|
||||
" AND r.tipo_reg = 'R' AND r.status_t IS NULL ",
|
||||
" AND r.horas_req > ISNULL((SELECT SUM(t.horas_tom) FROM adtb00060 t ",
|
||||
" WHERE t.id_requerida = r.id_cap AND t.status_t IS NULL),0)"
|
||||
PREPARE p_cap_dup FROM cap_sql
|
||||
EXECUTE p_cap_dup INTO xnum USING acc_per.num_emp, capac.cod_cap
|
||||
IF xnum > 0 THEN
|
||||
IF fgl_winquestion("INFO",
|
||||
"ESTE EMPLEADO YA TIENE ESTA CAPACITACION REQUERIDA PENDIENTE. DESEA REGISTRARLA DE NUEVO?",
|
||||
"NO","YES|NO","QUESTION",0) = "NO" THEN
|
||||
NEXT FIELD cod_cap
|
||||
END IF
|
||||
END IF
|
||||
ELSE
|
||||
IF capac.horas_tom IS NULL OR capac.horas_tom <= 0 THEN
|
||||
CALL fgl_winmessage("INFO","DEBE INDICAR LAS HORAS TOMADAS","info")
|
||||
NEXT FIELD horas_tom
|
||||
END IF
|
||||
IF capac.fecha_ini IS NULL THEN
|
||||
CALL fgl_winmessage("INFO","DEBE INDICAR LA FECHA DE INICIO","info")
|
||||
NEXT FIELD fecha_ini
|
||||
END IF
|
||||
IF capac.fecha_fin IS NOT NULL AND capac.fecha_fin < capac.fecha_ini THEN
|
||||
CALL fgl_winmessage("INFO","LA FECHA FIN NO PUEDE SER MENOR QUE LA FECHA INICIO","info")
|
||||
NEXT FIELD fecha_fin
|
||||
END IF
|
||||
IF capac.id_requerida IS NOT NULL AND capac.horas_tom > capac.horas_req THEN
|
||||
IF fgl_winquestion("INFO",
|
||||
"LAS HORAS TOMADAS EXCEDEN LAS HORAS PENDIENTES DE LA REQUERIDA. CONTINUAR?",
|
||||
"NO","YES|NO","QUESTION",0) = "NO" THEN
|
||||
NEXT FIELD horas_tom
|
||||
END IF
|
||||
END IF
|
||||
END IF
|
||||
END INPUT
|
||||
ELSE
|
||||
LET capac.tipo_desc = xtipo
|
||||
DISPLAY BY NAME capac.*, cap_tot.*
|
||||
MENU "Capacitacion"
|
||||
COMMAND "Cerrar" "Cierra la ventana de capacitacion"
|
||||
EXIT MENU
|
||||
ON ACTION close
|
||||
EXIT MENU
|
||||
END MENU
|
||||
END IF
|
||||
|
||||
CLOSE WINDOW adwindow17
|
||||
IF int_flag THEN
|
||||
LET numero_msg = 2
|
||||
CALL msg(numero_msg)
|
||||
LET int_flag = FALSE
|
||||
INITIALIZE capac.* TO NULL
|
||||
RETURN FALSE
|
||||
END IF
|
||||
RETURN TRUE
|
||||
END FUNCTION
|
||||
|
||||
## LLENA EL COMBO DEL CATALOGO DE CAPACITACIONES
|
||||
FUNCTION combo_capacitaciones()
|
||||
DEFINE cb ui.ComboBox,
|
||||
xcod INTEGER,
|
||||
xnom VARCHAR(100)
|
||||
|
||||
LET cb = ui.ComboBox.forName("formonly.cod_cap")
|
||||
IF cb IS NULL THEN
|
||||
RETURN
|
||||
END IF
|
||||
CALL cb.clear()
|
||||
LET cap_sql =
|
||||
"SELECT cod_cap, nom_cap FROM adtb00059 WHERE status_t IS NULL ORDER BY nom_cap"
|
||||
PREPARE p_cap_cat FROM cap_sql
|
||||
DECLARE c_cap_cat CURSOR FOR p_cap_cat
|
||||
FOREACH c_cap_cat INTO xcod, xnom
|
||||
CALL cb.addItem(xcod, xnom CLIPPED)
|
||||
END FOREACH
|
||||
FREE c_cap_cat
|
||||
END FUNCTION
|
||||
|
||||
## LLENA EL COMBO DE CAPACITACIONES REQUERIDAS DEL EMPLEADO
|
||||
## p_todas = FALSE solo las que tienen horas pendientes (captura)
|
||||
FUNCTION combo_requeridas(p_num_emp, p_todas)
|
||||
DEFINE p_num_emp INTEGER,
|
||||
p_todas BOOLEAN,
|
||||
cb ui.ComboBox,
|
||||
xid INTEGER,
|
||||
xnom VARCHAR(100),
|
||||
pend DEC(8,2)
|
||||
|
||||
LET cb = ui.ComboBox.forName("formonly.id_requerida")
|
||||
IF cb IS NULL THEN
|
||||
RETURN
|
||||
END IF
|
||||
CALL cb.clear()
|
||||
LET cap_sql =
|
||||
"SELECT r.id_cap, c.nom_cap, ",
|
||||
" ISNULL(r.horas_req,0) - ISNULL((SELECT SUM(t.horas_tom) FROM adtb00060 t ",
|
||||
" WHERE t.id_requerida = r.id_cap AND t.status_t IS NULL),0) ",
|
||||
"FROM adtb00060 r JOIN adtb00059 c ON c.cod_cap = r.cod_cap ",
|
||||
"WHERE r.num_emp = ? AND r.tipo_reg = 'R' AND r.status_t IS NULL ",
|
||||
"ORDER BY c.nom_cap"
|
||||
PREPARE p_cap_req FROM cap_sql
|
||||
DECLARE c_cap_req CURSOR FOR p_cap_req
|
||||
FOREACH c_cap_req USING p_num_emp INTO xid, xnom, pend
|
||||
IF NOT p_todas AND pend <= 0 THEN
|
||||
CONTINUE FOREACH
|
||||
END IF
|
||||
CALL cb.addItem(xid, xnom CLIPPED || " (" || (pend USING "<<<&.&&") || " h pend.)")
|
||||
END FOREACH
|
||||
FREE c_cap_req
|
||||
END FUNCTION
|
||||
|
||||
## TOTALES DE HORAS DEL EMPLEADO: REQUERIDAS, TOMADAS Y PENDIENTES
|
||||
FUNCTION totales_capacitacion(p_num_emp)
|
||||
DEFINE p_num_emp INTEGER
|
||||
|
||||
LET cap_tot.trq = 0
|
||||
LET cap_tot.ttm = 0
|
||||
LET cap_sql =
|
||||
"SELECT ISNULL(SUM(CASE WHEN tipo_reg = 'R' THEN horas_req END),0), ",
|
||||
" ISNULL(SUM(CASE WHEN tipo_reg = 'T' THEN horas_tom END),0) ",
|
||||
"FROM adtb00060 WHERE num_emp = ? AND status_t IS NULL"
|
||||
PREPARE p_cap_tot FROM cap_sql
|
||||
EXECUTE p_cap_tot INTO cap_tot.trq, cap_tot.ttm USING p_num_emp
|
||||
# Pendiente = lo requerido que falta por cubrir (las tomadas sin requerida no restan)
|
||||
LET cap_sql =
|
||||
"SELECT ISNULL(SUM(CASE WHEN x.pend > 0 THEN x.pend ELSE 0 END),0) FROM ( ",
|
||||
" SELECT ISNULL(r.horas_req,0) - ISNULL((SELECT SUM(t.horas_tom) FROM adtb00060 t ",
|
||||
" WHERE t.id_requerida = r.id_cap AND t.status_t IS NULL),0) pend ",
|
||||
" FROM adtb00060 r WHERE r.num_emp = ? AND r.tipo_reg = 'R' AND r.status_t IS NULL) x"
|
||||
PREPARE p_cap_pend FROM cap_sql
|
||||
EXECUTE p_cap_pend INTO cap_tot.tpd USING p_num_emp
|
||||
END FUNCTION
|
||||
|
||||
## TIPO DE EVENTO Y HORAS ESTANDAR DE UN CURSO DEL CATALOGO
|
||||
FUNCTION datos_curso(p_cod)
|
||||
DEFINE p_cod INTEGER,
|
||||
xev SMALLINT,
|
||||
xhoras DEC(8,2)
|
||||
|
||||
LET cap_sql = "SELECT evento, horas FROM adtb00059 WHERE cod_cap = ?"
|
||||
PREPARE p_cap_cur FROM cap_sql
|
||||
EXECUTE p_cap_cur INTO xev, xhoras USING p_cod
|
||||
RETURN xev, xhoras
|
||||
END FUNCTION
|
||||
|
||||
## CURSO, EVENTO Y HORAS PENDIENTES DE UNA CAPACITACION REQUERIDA
|
||||
FUNCTION datos_requerida(p_id)
|
||||
DEFINE p_id INTEGER,
|
||||
xcod INTEGER,
|
||||
xev SMALLINT,
|
||||
pend DEC(8,2)
|
||||
|
||||
LET cap_sql =
|
||||
"SELECT r.cod_cap, c.evento, ",
|
||||
" ISNULL(r.horas_req,0) - ISNULL((SELECT SUM(t.horas_tom) FROM adtb00060 t ",
|
||||
" WHERE t.id_requerida = r.id_cap AND t.status_t IS NULL),0) ",
|
||||
"FROM adtb00060 r JOIN adtb00059 c ON c.cod_cap = r.cod_cap WHERE r.id_cap = ?"
|
||||
PREPARE p_cap_dreq FROM cap_sql
|
||||
EXECUTE p_cap_dreq INTO xcod, xev, pend USING p_id
|
||||
RETURN xcod, xev, pend
|
||||
END FUNCTION
|
||||
|
||||
## AGREGA UN CURSO AL CATALOGO adtb00059 Y DEVUELVE SU CODIGO
|
||||
FUNCTION nuevo_curso()
|
||||
DEFINE nc RECORD
|
||||
nom_cap VARCHAR(100),
|
||||
evento SMALLINT,
|
||||
horas DEC(6,2)
|
||||
END RECORD,
|
||||
xnom VARCHAR(100),
|
||||
xev SMALLINT,
|
||||
xhoras DEC(6,2),
|
||||
xcod INTEGER
|
||||
|
||||
# Ventana adfmwd019: nombre, tipo y horas en un solo paso
|
||||
LET int_flag = FALSE
|
||||
LET nc.nom_cap = NULL
|
||||
LET nc.evento = 2
|
||||
LET nc.horas = NULL
|
||||
OPEN WINDOW adwindow19 AT 12,14 WITH FORM "adfmwd019"
|
||||
ATTRIBUTE(BORDER,FORM LINE FIRST + 2)
|
||||
INPUT BY NAME nc.* WITHOUT DEFAULTS ATTRIBUTE(UNBUFFERED)
|
||||
AFTER INPUT
|
||||
IF int_flag THEN
|
||||
EXIT INPUT
|
||||
END IF
|
||||
IF nc.nom_cap IS NULL OR length(nc.nom_cap CLIPPED) = 0 THEN
|
||||
CALL fgl_winmessage("INFO","DEBE INDICAR EL NOMBRE DE LA CAPACITACION","info")
|
||||
NEXT FIELD nom_cap
|
||||
END IF
|
||||
IF nc.horas IS NOT NULL AND nc.horas < 0 THEN
|
||||
CALL fgl_winmessage("INFO","LAS HORAS NO PUEDEN SER NEGATIVAS","info")
|
||||
NEXT FIELD horas
|
||||
END IF
|
||||
END INPUT
|
||||
CLOSE WINDOW adwindow19
|
||||
IF int_flag THEN
|
||||
LET int_flag = FALSE
|
||||
RETURN NULL
|
||||
END IF
|
||||
|
||||
LET xnom = upshift(nc.nom_cap CLIPPED)
|
||||
LET xev = nc.evento
|
||||
IF xev IS NULL OR xev < 1 OR xev > 4 THEN
|
||||
LET xev = 2
|
||||
END IF
|
||||
LET xhoras = nc.horas
|
||||
IF xhoras IS NULL THEN
|
||||
LET xhoras = 0
|
||||
END IF
|
||||
|
||||
LET xcod = NULL
|
||||
LET cap_sql = "SELECT cod_cap FROM adtb00059 WHERE nom_cap = ? AND status_t IS NULL"
|
||||
PREPARE p_cap_bnom FROM cap_sql
|
||||
EXECUTE p_cap_bnom INTO xcod USING xnom
|
||||
IF xcod IS NOT NULL THEN
|
||||
CALL fgl_winmessage("INFO","ESA CAPACITACION YA EXISTE EN EL CATALOGO, SE SELECCIONA","info")
|
||||
RETURN xcod
|
||||
END IF
|
||||
|
||||
LET cap_sql =
|
||||
"INSERT INTO adtb00059 (nom_cap, evento, horas, us_crea, fech_crea) ",
|
||||
"VALUES (?, ?, ?, SUSER_SNAME(), GETDATE())"
|
||||
PREPARE p_cap_ins_cat FROM cap_sql
|
||||
EXECUTE p_cap_ins_cat USING xnom, xev, xhoras
|
||||
EXECUTE p_cap_bnom INTO xcod USING xnom
|
||||
RETURN xcod
|
||||
END FUNCTION
|
||||
|
||||
## GRABA EL DETALLE DE CAPACITACION DE LA ACCION (dentro de la transaccion)
|
||||
FUNCTION graba_capacitacion()
|
||||
DEFINE xtipo_reg CHAR(1)
|
||||
|
||||
IF xtipo = "CAPACITACION REQUERIDA" THEN
|
||||
LET xtipo_reg = "R"
|
||||
LET capac.id_requerida = NULL
|
||||
LET capac.horas_tom = NULL
|
||||
LET capac.fecha_fin = NULL
|
||||
ELSE
|
||||
LET xtipo_reg = "T"
|
||||
LET capac.horas_req = NULL
|
||||
END IF
|
||||
|
||||
LET cap_sql =
|
||||
"INSERT INTO adtb00060 (num_trx, num_emp, tipo_reg, cod_cap, id_requerida, ",
|
||||
" horas_req, horas_tom, fecha_ini, fecha_fin, institucion, costo, us_crea, fech_crea) ",
|
||||
"VALUES (?,?,?,?,?,?,?,?,?,?,?, SUSER_SNAME(), GETDATE())"
|
||||
PREPARE p_cap_ins FROM cap_sql
|
||||
EXECUTE p_cap_ins USING acc_per.num_trx, acc_per.num_emp, xtipo_reg, capac.cod_cap,
|
||||
capac.id_requerida, capac.horas_req, capac.horas_tom,
|
||||
capac.fecha_ini, capac.fecha_fin, capac.institucion, capac.costo
|
||||
END FUNCTION
|
||||
|
||||
## CARGA EL DETALLE DE CAPACITACION DE UNA ACCION PARA CONSULTA
|
||||
FUNCTION carga_capacitacion(p_trx)
|
||||
DEFINE p_trx INTEGER
|
||||
|
||||
INITIALIZE capac.* TO NULL
|
||||
LET cap_sql =
|
||||
"SELECT a.id_requerida, a.cod_cap, c.evento, a.horas_req, a.fecha_ini, a.fecha_fin, ",
|
||||
" a.horas_tom, a.institucion, a.costo ",
|
||||
"FROM adtb00060 a JOIN adtb00059 c ON c.cod_cap = a.cod_cap WHERE a.num_trx = ?"
|
||||
PREPARE p_cap_sel FROM cap_sql
|
||||
EXECUTE p_cap_sel INTO capac.id_requerida, capac.cod_cap, capac.evento, capac.horas_req,
|
||||
capac.fecha_ini, capac.fecha_fin, capac.horas_tom,
|
||||
capac.institucion, capac.costo
|
||||
USING p_trx
|
||||
END FUNCTION
|
||||
|
||||
## ANULA EL DETALLE DE CAPACITACION JUNTO CON LA ACCION
|
||||
FUNCTION anula_capacitacion(p_trx)
|
||||
DEFINE p_trx INTEGER
|
||||
|
||||
LET cap_sql =
|
||||
"UPDATE adtb00060 SET status_t = 'E', us_mod = ?, fech_mod = GETDATE() WHERE num_trx = ?"
|
||||
PREPARE p_cap_anu FROM cap_sql
|
||||
EXECUTE p_cap_anu USING usuarios, p_trx
|
||||
END FUNCTION
|
||||
|
||||
##################################################################
|
||||
## DESVINCULACION (2026-10-05)
|
||||
## La desactivacion del empleado (adtb00003.status_t = 'D') se hace
|
||||
## por la accion de personal; noprmt016 ya no desactiva.
|
||||
## Causa codificada en adtb00062 (catalogo adtb00061) para Rotacion.
|
||||
##################################################################
|
||||
FUNCTION es_desvinculacion(p_tipo)
|
||||
DEFINE p_tipo VARCHAR(25)
|
||||
LET p_tipo = p_tipo CLIPPED
|
||||
RETURN (p_tipo = "CANCELAR" OR p_tipo = "DESVINCULAR" OR p_tipo = "TERMINO")
|
||||
END FUNCTION
|
||||
|
||||
FUNCTION empleado_desactivado(p_num_emp)
|
||||
DEFINE p_num_emp INTEGER,
|
||||
xst CHAR(1)
|
||||
LET xst = NULL
|
||||
SELECT a.status_t INTO xst FROM adtb00003 a WHERE a.num_emp = p_num_emp
|
||||
RETURN (xst = "D")
|
||||
END FUNCTION
|
||||
|
||||
FUNCTION desvinculacion(operacion)
|
||||
DEFINE operacion VARCHAR(1),
|
||||
cb ui.ComboBox,
|
||||
xcod SMALLINT,
|
||||
xdesc VARCHAR(60),
|
||||
xingreso DATE
|
||||
|
||||
LET int_flag = FALSE
|
||||
OPEN WINDOW adwindow18 AT 10,12 WITH FORM "adfmwd018"
|
||||
ATTRIBUTE(BORDER,FORM LINE FIRST + 2)
|
||||
|
||||
LET cb = ui.ComboBox.forName("formonly.cod_causa")
|
||||
CALL cb.clear()
|
||||
LET cap_sql = "SELECT cod_causa, desc_causa FROM adtb00061 WHERE status_t IS NULL ORDER BY cod_causa"
|
||||
PREPARE p_desv_cat FROM cap_sql
|
||||
DECLARE c_desv_cat CURSOR FOR p_desv_cat
|
||||
FOREACH c_desv_cat INTO xcod, xdesc
|
||||
CALL cb.addItem(xcod, xdesc CLIPPED)
|
||||
END FOREACH
|
||||
FREE c_desv_cat
|
||||
|
||||
IF operacion = 'A' THEN
|
||||
INITIALIZE desv.* TO NULL
|
||||
LET desv.fecha_salida = acc_per.fech_efec
|
||||
LET desv.recontratable = "S"
|
||||
|
||||
INPUT BY NAME desv.* WITHOUT DEFAULTS ATTRIBUTE(UNBUFFERED)
|
||||
ON CHANGE cod_causa
|
||||
LET desv.clase_desc = clase_causa(desv.cod_causa)
|
||||
|
||||
AFTER INPUT
|
||||
IF int_flag THEN
|
||||
EXIT INPUT
|
||||
END IF
|
||||
IF desv.fecha_salida IS NULL THEN
|
||||
CALL fgl_winmessage("INFO","DEBE INDICAR LA FECHA DE SALIDA","info")
|
||||
NEXT FIELD fecha_salida
|
||||
END IF
|
||||
LET xingreso = NULL
|
||||
SELECT a.fech_efec INTO xingreso FROM adtb00003 a WHERE a.num_emp = acc_per.num_emp
|
||||
IF xingreso IS NOT NULL AND desv.fecha_salida < xingreso THEN
|
||||
CALL fgl_winmessage("INFO","LA FECHA DE SALIDA ES MENOR QUE LA FECHA DE INGRESO","info")
|
||||
NEXT FIELD fecha_salida
|
||||
END IF
|
||||
IF desv.cod_causa IS NULL THEN
|
||||
CALL fgl_winmessage("INFO","DEBE SELECCIONAR LA CAUSA DE LA SALIDA","info")
|
||||
NEXT FIELD cod_causa
|
||||
END IF
|
||||
IF desv.recontratable IS NULL THEN
|
||||
CALL fgl_winmessage("INFO","INDIQUE SI EL EMPLEADO ES RECONTRATABLE","info")
|
||||
NEXT FIELD recontratable
|
||||
END IF
|
||||
END INPUT
|
||||
ELSE
|
||||
LET desv.clase_desc = clase_causa(desv.cod_causa)
|
||||
DISPLAY BY NAME desv.*
|
||||
MENU "Desvinculacion"
|
||||
COMMAND "Cerrar" "Cierra la ventana de desvinculacion"
|
||||
EXIT MENU
|
||||
ON ACTION close
|
||||
EXIT MENU
|
||||
END MENU
|
||||
END IF
|
||||
|
||||
CLOSE WINDOW adwindow18
|
||||
IF int_flag THEN
|
||||
LET numero_msg = 2
|
||||
CALL msg(numero_msg)
|
||||
LET int_flag = FALSE
|
||||
INITIALIZE desv.* TO NULL
|
||||
RETURN FALSE
|
||||
END IF
|
||||
RETURN TRUE
|
||||
END FUNCTION
|
||||
|
||||
## DESCRIPCION DE LA CLASE DE LA CAUSA (VOLUNTARIA / INVOLUNTARIA / OTRA)
|
||||
FUNCTION clase_causa(p_cod)
|
||||
DEFINE p_cod SMALLINT,
|
||||
xclase CHAR(1)
|
||||
|
||||
LET xclase = NULL
|
||||
LET cap_sql = "SELECT clase FROM adtb00061 WHERE cod_causa = ?"
|
||||
PREPARE p_desv_clase FROM cap_sql
|
||||
EXECUTE p_desv_clase INTO xclase USING p_cod
|
||||
CASE xclase
|
||||
WHEN "V" RETURN "VOLUNTARIA"
|
||||
WHEN "I" RETURN "INVOLUNTARIA"
|
||||
WHEN "O" RETURN "OTRA"
|
||||
END CASE
|
||||
RETURN NULL
|
||||
END FUNCTION
|
||||
|
||||
## GRABA LA DESVINCULACION Y DESACTIVA AL EMPLEADO (dentro de la transaccion)
|
||||
FUNCTION graba_desvinculacion()
|
||||
DEFINE xdep, xpuesto SMALLINT,
|
||||
xtipo_emp VARCHAR(20),
|
||||
xingreso DATE,
|
||||
xdesc VARCHAR(60),
|
||||
xmotivo VARCHAR(255)
|
||||
|
||||
SELECT a.departamento, a.cod_puesto, a.tipo_empleado, a.fech_efec
|
||||
INTO xdep, xpuesto, xtipo_emp, xingreso
|
||||
FROM adtb00003 a
|
||||
WHERE a.num_emp = acc_per.num_emp
|
||||
|
||||
LET cap_sql =
|
||||
"INSERT INTO adtb00062 (num_trx, num_emp, fecha_salida, cod_causa, recontratable, detalle, ",
|
||||
" departamento, cod_puesto, tipo_empleado, fech_ingreso, origen, us_crea, fech_crea) ",
|
||||
"VALUES (?,?,?,?,?,?,?,?,?,?,'A', SUSER_SNAME(), GETDATE())"
|
||||
PREPARE p_desv_ins FROM cap_sql
|
||||
EXECUTE p_desv_ins USING acc_per.num_trx, acc_per.num_emp, desv.fecha_salida, desv.cod_causa,
|
||||
desv.recontratable, desv.detalle, xdep, xpuesto, xtipo_emp, xingreso
|
||||
|
||||
# Motivo al inicio de adtb00003.observacion (lo que ya habia se conserva detras)
|
||||
LET xdesc = NULL
|
||||
LET cap_sql = "SELECT desc_causa FROM adtb00061 WHERE cod_causa = ?"
|
||||
PREPARE p_desv_desc FROM cap_sql
|
||||
EXECUTE p_desv_desc INTO xdesc USING desv.cod_causa
|
||||
LET xmotivo = xdesc CLIPPED, " ", desv.fecha_salida USING "dd/mm/yyyy"
|
||||
IF desv.detalle IS NOT NULL THEN
|
||||
LET xmotivo = xmotivo CLIPPED, " ", desv.detalle CLIPPED
|
||||
END IF
|
||||
IF desv.recontratable = "N" THEN
|
||||
LET xmotivo = xmotivo CLIPPED, " NO REINGRESO"
|
||||
END IF
|
||||
|
||||
LET cap_sql =
|
||||
"UPDATE adtb00003 SET status_t = 'D', fecha_salida = ?, ",
|
||||
" observacion = LEFT(? + CASE WHEN observacion IS NULL OR LTRIM(observacion) = '' ",
|
||||
" THEN '' ELSE ' | ' + observacion END, 255), ",
|
||||
" us_mod = SUSER_SNAME(), fech_mod = GETDATE() ",
|
||||
"WHERE num_emp = ?"
|
||||
PREPARE p_desv_emp FROM cap_sql
|
||||
EXECUTE p_desv_emp USING desv.fecha_salida, xmotivo, acc_per.num_emp
|
||||
END FUNCTION
|
||||
|
||||
## CARGA LA DESVINCULACION DE UNA ACCION PARA CONSULTA
|
||||
FUNCTION carga_desvinculacion(p_trx)
|
||||
DEFINE p_trx INTEGER
|
||||
|
||||
INITIALIZE desv.* TO NULL
|
||||
LET cap_sql =
|
||||
"SELECT fecha_salida, cod_causa, recontratable, detalle FROM adtb00062 WHERE num_trx = ?"
|
||||
PREPARE p_desv_sel FROM cap_sql
|
||||
EXECUTE p_desv_sel INTO desv.fecha_salida, desv.cod_causa, desv.recontratable, desv.detalle
|
||||
USING p_trx
|
||||
# Las desvinculaciones anteriores a 2026-10-05 no tienen detalle
|
||||
RETURN (desv.cod_causa IS NOT NULL)
|
||||
END FUNCTION
|
||||
|
||||
## ANULA LA DESVINCULACION Y REACTIVA AL EMPLEADO SI NO TIENE OTRA SALIDA VIGENTE
|
||||
FUNCTION anula_desvinculacion(p_trx, p_num_emp)
|
||||
DEFINE p_trx, p_num_emp INTEGER
|
||||
|
||||
LET cap_sql =
|
||||
"UPDATE adtb00062 SET status_t = 'E', us_mod = ?, fech_mod = GETDATE() WHERE num_trx = ?"
|
||||
PREPARE p_desv_anu FROM cap_sql
|
||||
EXECUTE p_desv_anu USING usuarios, p_trx
|
||||
# Acciones anteriores a 2026-10-05 no tienen detalle: no se reactiva al empleado
|
||||
IF sqlca.sqlerrd[3] = 0 THEN
|
||||
RETURN
|
||||
END IF
|
||||
|
||||
LET cap_sql =
|
||||
"UPDATE adtb00003 SET status_t = NULL, fecha_salida = NULL, us_mod = ?, fech_mod = GETDATE() ",
|
||||
"WHERE num_emp = ? AND status_t = 'D' ",
|
||||
" AND NOT EXISTS (SELECT 1 FROM adtb00062 d WHERE d.num_emp = ? AND d.status_t IS NULL)"
|
||||
PREPARE p_desv_react FROM cap_sql
|
||||
EXECUTE p_desv_react USING usuarios, p_num_emp, p_num_emp
|
||||
END FUNCTION
|
||||
|
||||
## VENTANA DE LOS NIVELES DEL LOS EMPLEADOS
|
||||
FUNCTION busca_nivel()
|
||||
OPEN WINDOW busqueda AT 10,10 WITH FORM "adfmwd008"
|
||||
ATTRIBUTE (BORDER,FORM LINE FIRST + 2, comment line last)
|
||||
@@ -2036,8 +2694,13 @@ DEFINE doble_of,doble_on,doble_off,negrillas_on,negrillas_off,comp_on,comp_of,
|
||||
depende,codigo_s,cod_provincia,codigo_n,serie SMALLINT,
|
||||
fecha_nac DATE,
|
||||
provincia,nombre_nac CHAR(30),
|
||||
hoy VARCHAR(25)
|
||||
|
||||
hoy VARCHAR(25),
|
||||
# Bloque de detalle para CAPACITACION / DESVINCULACION (2026-10-05).
|
||||
# es_vac = 1 muestra el bloque de vacaciones del .4rp; 0 muestra el detalle.
|
||||
es_vac SMALLINT,
|
||||
det_tit, det1, det2, det3 VARCHAR(150),
|
||||
xnom_det VARCHAR(100)
|
||||
|
||||
OUTPUT
|
||||
TOP MARGIN 4
|
||||
LEFT MARGIN 0
|
||||
@@ -2085,9 +2748,43 @@ ON EVERY ROW
|
||||
|
||||
SELECT @desc_mto INTO mov_emp.desc_mto
|
||||
FROM adtb00009
|
||||
WHERE @cod_mto = acc_per.cod_mto
|
||||
WHERE @cod_mto = acc_per.cod_mto
|
||||
|
||||
## DETALLE SEGUN EL MOVIMIENTO (CAPACITACION / DESVINCULACION)
|
||||
LET es_vac = 1
|
||||
LET det_tit = NULL LET det1 = NULL LET det2 = NULL LET det3 = NULL
|
||||
IF xtipo = "CAPACITACION REQUERIDA" OR xtipo = "CAPACITACION TOMADA" THEN
|
||||
LET es_vac = 0
|
||||
LET xnom_det = NULL
|
||||
LET cap_sql = "SELECT nom_cap FROM adtb00059 WHERE cod_cap = ?"
|
||||
PREPARE p_imp_cap FROM cap_sql
|
||||
EXECUTE p_imp_cap INTO xnom_det USING capac.cod_cap
|
||||
LET det_tit = xtipo CLIPPED
|
||||
LET det1 = "CAPACITACION: ", xnom_det CLIPPED
|
||||
IF xtipo = "CAPACITACION REQUERIDA" THEN
|
||||
LET det2 = "HORAS REQUERIDAS: ", capac.horas_req USING "<<<&.&&",
|
||||
" FECHA INICIO: ", capac.fecha_ini USING "dd/mm/yyyy"
|
||||
ELSE
|
||||
LET det2 = "HORAS TOMADAS: ", capac.horas_tom USING "<<<&.&&",
|
||||
" DEL ", capac.fecha_ini USING "dd/mm/yyyy",
|
||||
" AL ", capac.fecha_fin USING "dd/mm/yyyy"
|
||||
END IF
|
||||
LET det3 = "INSTITUCION/FACILITADOR: ", capac.institucion CLIPPED,
|
||||
" COSTO: ", capac.costo USING "<<<,<<&.&&"
|
||||
END IF
|
||||
IF es_desvinculacion(xtipo) THEN
|
||||
LET es_vac = 0
|
||||
LET xnom_det = NULL
|
||||
LET cap_sql = "SELECT desc_causa FROM adtb00061 WHERE cod_causa = ?"
|
||||
PREPARE p_imp_desv FROM cap_sql
|
||||
EXECUTE p_imp_desv INTO xnom_det USING desv.cod_causa
|
||||
LET det_tit = "DESVINCULACION"
|
||||
LET det1 = "FECHA DE SALIDA: ", desv.fecha_salida USING "dd/mm/yyyy",
|
||||
" CAUSA: ", xnom_det CLIPPED, " (", clase_causa(desv.cod_causa) CLIPPED, ")"
|
||||
LET det2 = "RECONTRATABLE: ", desv.recontratable
|
||||
LET det3 = "DETALLE: ", desv.detalle CLIPPED
|
||||
END IF
|
||||
|
||||
|
||||
PRINTX acc_per.num_trx,mov_emp.desc_mto,
|
||||
acc_per.fecha ,acc_per.fech_efec,apellido9,nombre9 ,
|
||||
direccion,dias2,
|
||||
@@ -2107,5 +2804,6 @@ ON EVERY ROW
|
||||
nombre_dpto,
|
||||
acc_per.cod_mto ,
|
||||
mov_emp.desc_mto,
|
||||
acc_per.observacion,vacacion.*,p_companias.nombre,hoy,descrip3,descrip4,descrip5
|
||||
acc_per.observacion,vacacion.*,p_companias.nombre,hoy,descrip3,descrip4,descrip5,
|
||||
es_vac,det_tit,det1,det2,det3
|
||||
END REPORT
|
||||
|
||||
@@ -0,0 +1,110 @@
|
||||
/* ------------------------------------------------------------------
|
||||
ADPRMT017 - Accion de Personal: movimientos de CAPACITACION
|
||||
Fecha : 2026-10-05
|
||||
Crea : adtb00059 (catalogo de capacitaciones)
|
||||
adtb00060 (capacitacion por empleado: requerida / tomada)
|
||||
movimientos en adtb00009
|
||||
vista vw_capacitacion_empleado (requeridas vs tomadas)
|
||||
Correr en: marmotech (probar primero en .40.9)
|
||||
Idempotente: se puede correr mas de una vez.
|
||||
------------------------------------------------------------------- */
|
||||
SET NOCOUNT ON;
|
||||
|
||||
/* 1. Catalogo de capacitaciones */
|
||||
IF OBJECT_ID('dbo.adtb00059') IS NULL
|
||||
BEGIN
|
||||
CREATE TABLE dbo.adtb00059 (
|
||||
cod_cap INT IDENTITY(1,1) NOT NULL CONSTRAINT pk_adtb00059 PRIMARY KEY,
|
||||
nom_cap VARCHAR(100) NOT NULL,
|
||||
evento SMALLINT NULL, -- 1 Seminario 2 Curso 3 Taller 4 Conferencia (igual que adtb00022)
|
||||
horas DECIMAL(6,2) NULL, -- horas estandar del curso
|
||||
status_t CHAR(1) NULL,
|
||||
us_crea VARCHAR(50) NULL,
|
||||
fech_crea DATETIME NULL,
|
||||
us_mod VARCHAR(50) NULL,
|
||||
fech_mod DATETIME NULL
|
||||
);
|
||||
CREATE UNIQUE INDEX ux_adtb00059_nom ON dbo.adtb00059(nom_cap) WHERE status_t IS NULL;
|
||||
END
|
||||
GO
|
||||
|
||||
/* 2. Capacitacion por empleado
|
||||
tipo_reg 'R' = requerida (plan), 'T' = tomada (ejecutada)
|
||||
Una 'T' puede referenciar la 'R' que cubre (id_requerida). */
|
||||
IF OBJECT_ID('dbo.adtb00060') IS NULL
|
||||
BEGIN
|
||||
CREATE TABLE dbo.adtb00060 (
|
||||
id_cap INT IDENTITY(1,1) NOT NULL CONSTRAINT pk_adtb00060 PRIMARY KEY,
|
||||
num_trx INT NOT NULL, -- adtb00020.num_trx
|
||||
num_emp INT NOT NULL,
|
||||
tipo_reg CHAR(1) NOT NULL CONSTRAINT ck_adtb00060_tipo CHECK (tipo_reg IN ('R','T')),
|
||||
cod_cap INT NOT NULL CONSTRAINT fk_adtb00060_cap REFERENCES dbo.adtb00059(cod_cap),
|
||||
id_requerida INT NULL CONSTRAINT fk_adtb00060_req REFERENCES dbo.adtb00060(id_cap),
|
||||
horas_req DECIMAL(6,2) NULL,
|
||||
horas_tom DECIMAL(6,2) NULL,
|
||||
fecha_ini DATE NULL,
|
||||
fecha_fin DATE NULL,
|
||||
institucion VARCHAR(100) NULL,
|
||||
costo DECIMAL(12,2) NULL,
|
||||
status_t CHAR(1) NULL, -- 'E' = anulado (junto con la accion)
|
||||
us_crea VARCHAR(50) NULL,
|
||||
fech_crea DATETIME NULL,
|
||||
us_mod VARCHAR(50) NULL,
|
||||
fech_mod DATETIME NULL
|
||||
);
|
||||
CREATE INDEX ix_adtb00060_emp ON dbo.adtb00060(num_emp, tipo_reg) INCLUDE (cod_cap, horas_req, horas_tom, status_t);
|
||||
CREATE INDEX ix_adtb00060_trx ON dbo.adtb00060(num_trx);
|
||||
CREATE INDEX ix_adtb00060_req ON dbo.adtb00060(id_requerida);
|
||||
END
|
||||
GO
|
||||
|
||||
/* 3. Movimientos de accion de personal */
|
||||
IF NOT EXISTS (SELECT 1 FROM dbo.adtb00009 WHERE tipo_mov = 'CAPACITACION REQUERIDA')
|
||||
INSERT INTO dbo.adtb00009 (cod_mto, desc_mto, tipo_mov, status_t, us_crea, fech_crea)
|
||||
SELECT ISNULL(MAX(cod_mto),0) + 1, 'CAPACITACION REQUERIDA', 'CAPACITACION REQUERIDA', NULL, SUSER_SNAME(), GETDATE()
|
||||
FROM dbo.adtb00009;
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM dbo.adtb00009 WHERE tipo_mov = 'CAPACITACION TOMADA')
|
||||
INSERT INTO dbo.adtb00009 (cod_mto, desc_mto, tipo_mov, status_t, us_crea, fech_crea)
|
||||
SELECT ISNULL(MAX(cod_mto),0) + 1, 'CAPACITACION TOMADA', 'CAPACITACION TOMADA', NULL, SUSER_SNAME(), GETDATE()
|
||||
FROM dbo.adtb00009;
|
||||
GO
|
||||
|
||||
/* 4. Vista: por empleado, cada capacitacion requerida con lo tomado debajo.
|
||||
Las tomadas sin requerida asociada salen con tipo 'T' y horas_req 0. */
|
||||
IF OBJECT_ID('dbo.vw_capacitacion_empleado') IS NOT NULL
|
||||
DROP VIEW dbo.vw_capacitacion_empleado;
|
||||
GO
|
||||
CREATE VIEW dbo.vw_capacitacion_empleado AS
|
||||
SELECT e.num_emp,
|
||||
RTRIM(e.nom1_emp) + ' ' + RTRIM(e.apell1_emp) AS empleado,
|
||||
e.departamento,
|
||||
d.nom_dpto,
|
||||
r.tipo_reg,
|
||||
r.id_cap,
|
||||
c.cod_cap,
|
||||
c.nom_cap,
|
||||
c.evento,
|
||||
CASE c.evento WHEN 1 THEN 'SEMINARIO' WHEN 2 THEN 'CURSO'
|
||||
WHEN 3 THEN 'TALLER' WHEN 4 THEN 'CONFERENCIA' END AS tipo_evento,
|
||||
CASE WHEN r.tipo_reg = 'R' THEN ISNULL(r.horas_req,0) ELSE 0 END AS horas_requeridas,
|
||||
CASE WHEN r.tipo_reg = 'R'
|
||||
THEN ISNULL((SELECT SUM(t.horas_tom) FROM dbo.adtb00060 t
|
||||
WHERE t.id_requerida = r.id_cap AND t.status_t IS NULL),0)
|
||||
ELSE ISNULL(r.horas_tom,0) END AS horas_tomadas,
|
||||
CASE WHEN r.tipo_reg = 'R'
|
||||
THEN ISNULL(r.horas_req,0) - ISNULL((SELECT SUM(t.horas_tom) FROM dbo.adtb00060 t
|
||||
WHERE t.id_requerida = r.id_cap AND t.status_t IS NULL),0)
|
||||
ELSE 0 END AS horas_pendientes,
|
||||
r.fecha_ini,
|
||||
r.fecha_fin,
|
||||
r.institucion,
|
||||
r.costo,
|
||||
r.num_trx
|
||||
FROM dbo.adtb00060 r
|
||||
JOIN dbo.adtb00059 c ON c.cod_cap = r.cod_cap
|
||||
JOIN dbo.adtb00003 e ON e.num_emp = r.num_emp
|
||||
LEFT JOIN dbo.adtb00001 d ON d.departamento = e.departamento
|
||||
WHERE r.status_t IS NULL
|
||||
AND (r.tipo_reg = 'R' OR r.id_requerida IS NULL);
|
||||
GO
|
||||
@@ -0,0 +1,34 @@
|
||||
# ADPRMT017 – Movimientos de Capacitación (2026-10-05)
|
||||
|
||||
Pedido de RRHH: indicador **Horas de Capacitación**. Por cada colaborador se registran las capacitaciones **requeridas** con sus horas y luego las **tomadas**, que cubren a las requeridas.
|
||||
|
||||
## Backup
|
||||
`addir\backup_adprmt017_20261005\` contiene adprmt017.4gl, .rdd, adfmmt017.4fd/.per y los binarios que estaban en `addir\bin` y `PROYECTO\bin`.
|
||||
Para volver atrás: copiar `adprmt017.4gl` del backup sobre el actual, recompilar y desplegar. Las tablas nuevas no afectan a nadie si no se usan.
|
||||
|
||||
## Qué se agregó
|
||||
| Pieza | Detalle |
|
||||
|---|---|
|
||||
| `adtb00009` | 2 movimientos nuevos: `CAPACITACION REQUERIDA`, `CAPACITACION TOMADA` (cod_mto = MAX+1) |
|
||||
| `adtb00059` | Catálogo de capacitaciones: nombre, tipo de evento (1 Seminario, 2 Curso, 3 Taller, 4 Conferencia, igual que adtb00022) y horas estándar |
|
||||
| `adtb00060` | Detalle por empleado, ligado a `adtb00020.num_trx`. `tipo_reg` R/T; una T apunta a la R que cubre (`id_requerida`) |
|
||||
| `vw_capacitacion_empleado` | Por empleado: requeridas con sus horas tomadas y pendientes, más las tomadas que no tienen requerida (para BI y Excel) |
|
||||
| `adfmwd017.per` | Ventana nueva de capacitación. Se abre igual que la de vacaciones, después del puesto |
|
||||
| `adprmt017.4gl` | Captura (`capacitacion('A')`), consulta (`'C'`), grabado dentro de la misma transacción y anulación junto con la acción |
|
||||
|
||||
## Flujo
|
||||
1. **Nuevo**, elegir el movimiento *CAPACITACION REQUERIDA* y la ficha. Se abre la ventana: escoger la capacitación del catálogo (o usar el botón **Nuevo curso**). Las horas se toman del catálogo y se pueden editar.
|
||||
2. Cuando la persona toma el curso: **Nuevo**, elegir *CAPACITACION TOMADA* y en **Requerida a cubrir** escoger la pendiente. Se llena el curso y las horas pendientes; luego se ponen las fechas, las horas reales, la institución y el costo.
|
||||
3. El recuadro **Resumen del empleado** muestra el total de horas requeridas, tomadas y pendientes.
|
||||
4. **eLiminar** (anular) la acción también anula su detalle de capacitación.
|
||||
|
||||
## Despliegue (pendiente)
|
||||
1. Correr `adprmt017_capacitacion.sql` en marmotech (la sintaxis se validó en .40.8 con NOEXEC; no se ejecutó nada).
|
||||
2. Compilar la forma y el programa. Ambos compilan limpio en 3.20.14 y en fgl602:
|
||||
`fglform adfmwd017.per` → `adfmwd017.42f`; `fglcomp adprmt017.4gl` → `adprmt017.42m`.
|
||||
3. Copiar `adprmt017.42m` y `adfmwd017.42f` a `PROYECTO\bin`.
|
||||
4. No hace falta tocar `adfmmt017.4fd` ni regenerar smarmotech.sch: las tablas nuevas se usan con SQL dinámico.
|
||||
|
||||
## Notas
|
||||
- **adprmt019 (Adiestramientos)** no se tocó. Usa `adtb00022`, que solo tiene 2 registros, no guarda horas ni distingue requerida de tomada, y tiene **usuario y clave en claro** en el MAIN (`kpolanco`). Además las acciones del menú están cruzadas: *nuevo* llama a la búsqueda y *buscar* llama a la captura. Se puede retirar o migrar después.
|
||||
- Para **Rotación**: el movimiento 4 DESVINCULAR tiene `tipo_mov = 'CANCELAR'`, pero adprmt017 marca `status_t='T'` solo si es `'TERMINO'`. Por eso las desvinculaciones no marcan al empleado como terminado y además no guardan la causa. Hay que revisarlo antes de automatizar la rotación.
|
||||
@@ -0,0 +1,139 @@
|
||||
/* ------------------------------------------------------------------
|
||||
ADPRMT017 - Accion de Personal: DESVINCULAR (indicador de Rotacion)
|
||||
Fecha : 2026-10-05
|
||||
Crea : adtb00061 (catalogo de causas de salida)
|
||||
adtb00062 (detalle de desvinculacion por accion)
|
||||
vista vw_rotacion_mensual
|
||||
La desactivacion (adtb00003.status_t = 'D') pasa a hacerse SOLO por
|
||||
la accion de personal; noprmt016 ya no desactiva.
|
||||
Idempotente.
|
||||
------------------------------------------------------------------- */
|
||||
SET NOCOUNT ON;
|
||||
|
||||
/* 1. Catalogo de causas
|
||||
clase: V = voluntaria, I = involuntaria, O = otra
|
||||
cuenta_rotacion: 'N' para traslados dentro del grupo (no es salida real) */
|
||||
IF OBJECT_ID('dbo.adtb00061') IS NULL
|
||||
BEGIN
|
||||
CREATE TABLE dbo.adtb00061 (
|
||||
cod_causa SMALLINT NOT NULL CONSTRAINT pk_adtb00061 PRIMARY KEY,
|
||||
desc_causa VARCHAR(60) NOT NULL,
|
||||
clase CHAR(1) NOT NULL CONSTRAINT ck_adtb00061_clase CHECK (clase IN ('V','I','O')),
|
||||
cuenta_rotacion CHAR(1) NOT NULL CONSTRAINT df_adtb00061_cuenta DEFAULT 'S',
|
||||
status_t CHAR(1) NULL,
|
||||
us_crea VARCHAR(50) NULL,
|
||||
fech_crea DATETIME NULL
|
||||
);
|
||||
|
||||
INSERT INTO dbo.adtb00061 (cod_causa, desc_causa, clase, cuenta_rotacion, us_crea, fech_crea) VALUES
|
||||
( 1, 'RENUNCIA', 'V', 'S', SUSER_SNAME(), GETDATE()),
|
||||
( 2, 'ABANDONO DE TRABAJO', 'V', 'S', SUSER_SNAME(), GETDATE()),
|
||||
( 3, 'DIMISION', 'V', 'S', SUSER_SNAME(), GETDATE()),
|
||||
( 4, 'DESAHUCIO', 'I', 'S', SUSER_SNAME(), GETDATE()),
|
||||
( 5, 'DESPIDO', 'I', 'S', SUSER_SNAME(), GETDATE()),
|
||||
( 6, 'CIERRE DE OPERACION / MINA', 'I', 'S', SUSER_SNAME(), GETDATE()),
|
||||
( 7, 'FIN DE CONTRATO / TEMPORADA', 'I', 'S', SUSER_SNAME(), GETDATE()),
|
||||
( 8, 'NO SUPERO PERIODO DE PRUEBA', 'I', 'S', SUSER_SNAME(), GETDATE()),
|
||||
( 9, 'MUTUO ACUERDO', 'O', 'S', SUSER_SNAME(), GETDATE()),
|
||||
(10, 'PENSION / RETIRO', 'O', 'S', SUSER_SNAME(), GETDATE()),
|
||||
(11, 'FALLECIMIENTO', 'O', 'S', SUSER_SNAME(), GETDATE()),
|
||||
(12, 'TRASLADO A OTRA EMPRESA DEL GRUPO', 'O', 'N', SUSER_SNAME(), GETDATE()),
|
||||
(99, 'OTRA', 'O', 'S', SUSER_SNAME(), GETDATE());
|
||||
END
|
||||
GO
|
||||
|
||||
/* 2. Detalle de desvinculacion (una fila por accion DESVINCULAR) */
|
||||
IF OBJECT_ID('dbo.adtb00062') IS NULL
|
||||
BEGIN
|
||||
CREATE TABLE dbo.adtb00062 (
|
||||
id_desv INT IDENTITY(1,1) NOT NULL CONSTRAINT pk_adtb00062 PRIMARY KEY,
|
||||
num_trx INT NULL, -- adtb00020.num_trx (NULL = historico)
|
||||
num_emp INT NOT NULL,
|
||||
fecha_salida DATE NOT NULL,
|
||||
cod_causa SMALLINT NOT NULL CONSTRAINT fk_adtb00062_causa REFERENCES dbo.adtb00061(cod_causa),
|
||||
recontratable CHAR(1) NULL, -- S / N
|
||||
detalle VARCHAR(200) NULL,
|
||||
departamento SMALLINT NULL, -- foto al momento de la salida
|
||||
cod_puesto SMALLINT NULL,
|
||||
tipo_empleado VARCHAR(20) NULL, -- NORMAL / TEMPORERO
|
||||
fech_ingreso DATE NULL,
|
||||
origen CHAR(1) NOT NULL CONSTRAINT df_adtb00062_origen DEFAULT 'A', -- A accion, H historico
|
||||
status_t CHAR(1) NULL, -- 'E' anulada
|
||||
us_crea VARCHAR(50) NULL,
|
||||
fech_crea DATETIME NULL,
|
||||
us_mod VARCHAR(50) NULL,
|
||||
fech_mod DATETIME NULL
|
||||
);
|
||||
CREATE INDEX ix_adtb00062_fecha ON dbo.adtb00062(fecha_salida) INCLUDE (num_emp, cod_causa, departamento, tipo_empleado, status_t);
|
||||
CREATE INDEX ix_adtb00062_emp ON dbo.adtb00062(num_emp);
|
||||
CREATE INDEX ix_adtb00062_trx ON dbo.adtb00062(num_trx);
|
||||
END
|
||||
GO
|
||||
|
||||
/* 3. El movimiento 4 DESVINCULAR queda con tipo_mov 'CANCELAR'
|
||||
(adprmt017 reconoce CANCELAR, DESVINCULAR y TERMINO). No se cambia. */
|
||||
|
||||
/* 4. Rotacion mensual por departamento y tipo de empleado.
|
||||
salidas_rotacion excluye causas con cuenta_rotacion = 'N'.
|
||||
Plantilla = empleados con ingreso <= inicio de mes y sin salida antes del inicio. */
|
||||
IF OBJECT_ID('dbo.vw_rotacion_mensual') IS NOT NULL
|
||||
DROP VIEW dbo.vw_rotacion_mensual;
|
||||
GO
|
||||
CREATE VIEW dbo.vw_rotacion_mensual AS
|
||||
WITH meses AS (
|
||||
SELECT CAST('2022-01-01' AS DATE) AS ini
|
||||
UNION ALL
|
||||
SELECT DATEADD(MONTH, 1, ini) FROM meses WHERE ini < DATEADD(MONTH, -1, CAST(GETDATE() AS DATE))
|
||||
),
|
||||
emp AS (
|
||||
SELECT a.num_emp, a.departamento, ISNULL(a.tipo_empleado,'NORMAL') AS tipo_empleado,
|
||||
a.fech_efec, a.fecha_salida
|
||||
FROM dbo.adtb00003 a
|
||||
WHERE a.num_emp >= 39 -- fichas < 39 no son empleados reales
|
||||
AND (a.status_t IS NULL OR a.status_t = 'D')
|
||||
),
|
||||
sal AS (
|
||||
SELECT d.num_emp, d.fecha_salida, d.departamento, ISNULL(d.tipo_empleado,'NORMAL') AS tipo_empleado,
|
||||
c.clase, c.cuenta_rotacion
|
||||
FROM dbo.adtb00062 d JOIN dbo.adtb00061 c ON c.cod_causa = d.cod_causa
|
||||
WHERE d.status_t IS NULL
|
||||
)
|
||||
SELECT m.ini AS mes,
|
||||
YEAR(m.ini) AS anio,
|
||||
MONTH(m.ini) AS mes_num,
|
||||
g.departamento,
|
||||
dp.nom_dpto,
|
||||
g.tipo_empleado,
|
||||
g.plantilla_inicio,
|
||||
ISNULL(i.ingresos,0) AS ingresos,
|
||||
ISNULL(s.salidas,0) AS salidas,
|
||||
ISNULL(s.salidas_rotacion,0) AS salidas_rotacion,
|
||||
ISNULL(s.voluntarias,0) AS voluntarias,
|
||||
ISNULL(s.involuntarias,0) AS involuntarias,
|
||||
ISNULL(s.otras,0) AS otras,
|
||||
CASE WHEN g.plantilla_inicio > 0
|
||||
THEN CAST(100.0 * ISNULL(s.salidas_rotacion,0) / g.plantilla_inicio AS DECIMAL(6,2)) END AS rotacion_pct
|
||||
FROM meses m
|
||||
CROSS APPLY (
|
||||
SELECT e.departamento, e.tipo_empleado, COUNT(*) AS plantilla_inicio
|
||||
FROM emp e
|
||||
WHERE e.fech_efec <= m.ini AND (e.fecha_salida IS NULL OR e.fecha_salida >= m.ini)
|
||||
GROUP BY e.departamento, e.tipo_empleado
|
||||
) g
|
||||
OUTER APPLY (
|
||||
SELECT COUNT(*) AS ingresos FROM emp e
|
||||
WHERE e.departamento = g.departamento AND e.tipo_empleado = g.tipo_empleado
|
||||
AND e.fech_efec >= m.ini AND e.fech_efec < DATEADD(MONTH,1,m.ini)
|
||||
) i
|
||||
OUTER APPLY (
|
||||
SELECT COUNT(*) AS salidas,
|
||||
SUM(CASE WHEN x.cuenta_rotacion = 'S' THEN 1 ELSE 0 END) AS salidas_rotacion,
|
||||
SUM(CASE WHEN x.clase = 'V' THEN 1 ELSE 0 END) AS voluntarias,
|
||||
SUM(CASE WHEN x.clase = 'I' THEN 1 ELSE 0 END) AS involuntarias,
|
||||
SUM(CASE WHEN x.clase = 'O' THEN 1 ELSE 0 END) AS otras
|
||||
FROM sal x
|
||||
WHERE x.departamento = g.departamento AND x.tipo_empleado = g.tipo_empleado
|
||||
AND x.fecha_salida >= m.ini AND x.fecha_salida < DATEADD(MONTH,1,m.ini)
|
||||
) s
|
||||
LEFT JOIN dbo.adtb00001 dp ON dp.departamento = g.departamento;
|
||||
GO
|
||||
@@ -0,0 +1,34 @@
|
||||
# ADPRMT017 – Desvinculación por Acción de Personal (2026-10-05)
|
||||
|
||||
Objetivo: el indicador de **Rotación** (mes a mes y por causa). La desactivación del empleado ahora se hace **solo** por la acción de personal.
|
||||
|
||||
## Antes
|
||||
- **noprmt016** ("Activar/Desactivar") ponía `adtb00003.status_t = 'D'` sin fecha ni causa.
|
||||
- En **noprmt003** RRHH escribía a mano la `fecha_salida` y el motivo en `observacion` (texto libre: "DESAHUCIO", "RENUNCIA 30/03/2026"...).
|
||||
- En adprmt017 el movimiento 4 DESVINCULAR (`tipo_mov = 'CANCELAR'`) solo grababa `adtb00020`. El código esperaba `'TERMINO'`, que no existe, y además ese bloque estaba fuera de la transacción.
|
||||
|
||||
## Ahora
|
||||
| Programa | Cambio |
|
||||
|---|---|
|
||||
| adprmt017 | DESVINCULAR (tipo CANCELAR, DESVINCULAR o TERMINO) abre la ventana `adfmwd018`: fecha de salida, causa (catálogo), si es recontratable y un detalle. Dentro de la misma transacción: inserta en `adtb00062` y actualiza `adtb00003` (`status_t='D'`, `fecha_salida`, y el motivo al **inicio** de `observacion`, conservando lo que ya había detrás). Si el empleado ya está en D, no deja continuar. |
|
||||
| adprmt017 (eLiminar) | Anular una desvinculación nueva anula `adtb00062` y **reactiva** al empleado (status NULL, fecha_salida NULL) si no tiene otra salida vigente. Las acciones viejas, sin detalle, no reactivan a nadie. |
|
||||
| noprmt016 | Se quitó la opción **Desactivar**. Se dejó **Activar** (para reingresos). |
|
||||
| noprmt003 | `fecha_salida` salió de las 2 UPDATE activas y en `nofmmt003.4fd` quedó `noEntry` (compilar en GST). `observacion` sigue editable. |
|
||||
|
||||
## Tablas y vista (ya creadas en .40.8 / marmotech)
|
||||
- `adtb00061` causas: 1 Renuncia, 2 Abandono, 3 Dimisión (V); 4 Desahucio, 5 Despido, 6 Cierre de operación, 7 Fin de contrato/temporada, 8 No superó prueba (I); 9 Mutuo acuerdo, 10 Pensión, 11 Fallecimiento, 12 Traslado dentro del grupo (`cuenta_rotacion = 'N'`), 99 Otra (O).
|
||||
- `adtb00062` detalle: guarda una foto del departamento, el puesto, `tipo_empleado` (NORMAL/TEMPORERO) y la fecha de ingreso al momento de la salida.
|
||||
- `vw_rotacion_mensual`: por mes, departamento y tipo de empleado: plantilla al inicio, ingresos, salidas, salidas que cuentan para rotación, voluntarias, involuntarias, otras y % de rotación. Usa un CTE recursivo desde 2022, que llega al límite de 100 meses en 2030.
|
||||
|
||||
## Histórico (pendiente de aprobación)
|
||||
`adprmt017_desvinculacion_historico.sql` clasifica las salidas desde 2022 leyendo `observacion`. Vista previa (con rollback): 686 salidas → Desahucio 342, Renuncia 127, Abandono 31, Cierre 8, Fallecimiento 7, Traslado 3, Fin de contrato 2, Prueba 1, Pensión 1, **Otra 164** (sin texto o sin causa reconocible). Para deshacer: `DELETE FROM adtb00062 WHERE origen='H'`.
|
||||
|
||||
## Temporeros
|
||||
Solo 2 empleados tienen `tipo_empleado = 'TEMPORERO'`. Para medir la entrada y salida de temporeros, RRHH tiene que marcarlos en la maestra (noprmt003). La vista ya los separa.
|
||||
|
||||
## Backups
|
||||
- `addir\backup_adprmt017_20261005\`: original y `adprmt017_con_capacitacion.4gl`, que es la versión intermedia.
|
||||
- `nodir\backup_noprmt003_016_20261005\`: noprmt003, noprmt016, sus formas y binarios.
|
||||
|
||||
## Despliegue
|
||||
Copiar a `PROYECTO\bin` (todo compilado con 3.20): `adprmt017.42m`, `adfmwd017.42f`, `adfmwd018.42f`, `noprmt003.42m`, `noprmt016.42m`, y el `nofmmt003.42f` que se genere en GST.
|
||||
@@ -0,0 +1,44 @@
|
||||
/* ------------------------------------------------------------------
|
||||
Carga historica de salidas (2022 en adelante) en adtb00062
|
||||
desde adtb00003 (status_t = 'D' + fecha_salida + observacion libre).
|
||||
origen = 'H'. Para deshacer: DELETE FROM adtb00062 WHERE origen = 'H'
|
||||
Correr DESPUES de adprmt017_desvinculacion.sql. Idempotente.
|
||||
------------------------------------------------------------------- */
|
||||
SET NOCOUNT ON;
|
||||
|
||||
;WITH h AS (
|
||||
SELECT a.num_emp, a.fecha_salida, a.departamento, a.cod_puesto,
|
||||
ISNULL(a.tipo_empleado,'NORMAL') AS tipo_empleado, a.fech_efec,
|
||||
UPPER(ISNULL(a.observacion,'')) AS obs
|
||||
FROM dbo.adtb00003 a
|
||||
WHERE a.status_t = 'D'
|
||||
AND a.fecha_salida >= '2022-01-01'
|
||||
AND a.num_emp >= 39
|
||||
AND NOT EXISTS (SELECT 1 FROM dbo.adtb00062 d WHERE d.num_emp = a.num_emp AND d.fecha_salida = a.fecha_salida)
|
||||
)
|
||||
INSERT INTO dbo.adtb00062 (num_trx, num_emp, fecha_salida, cod_causa, recontratable, detalle,
|
||||
departamento, cod_puesto, tipo_empleado, fech_ingreso, origen, us_crea, fech_crea)
|
||||
SELECT NULL, h.num_emp, h.fecha_salida,
|
||||
CASE WHEN h.obs LIKE '%CAMBIO DE EMPRESA%' OR h.obs LIKE '%CAMBIO A ORDEL%'
|
||||
OR h.obs LIKE '%CAMBIO A CARIBBEAN%' OR h.obs LIKE '%TRASLAD%' THEN 12
|
||||
WHEN h.obs LIKE '%CIERRE%' THEN 6
|
||||
WHEN h.obs LIKE '%DESAHUCIO%' THEN 4
|
||||
WHEN h.obs LIKE '%DESPID%' THEN 5
|
||||
WHEN h.obs LIKE '%RENUNCIA%' THEN 1
|
||||
WHEN h.obs LIKE '%ABANDONO%' THEN 2
|
||||
WHEN h.obs LIKE '%DIMISION%' THEN 3
|
||||
WHEN h.obs LIKE '%3 MESES%' OR h.obs LIKE '%PRUEBA%' THEN 8
|
||||
WHEN h.obs LIKE '%FIN DE CONTRATO%' OR h.obs LIKE '%TEMPORADA%' THEN 7
|
||||
WHEN h.obs LIKE '%MUTUO%' THEN 9
|
||||
WHEN h.obs LIKE '%PENSION%' OR h.obs LIKE '%RETIRO%' THEN 10
|
||||
WHEN h.obs LIKE '%FALLEC%' THEN 11
|
||||
ELSE 99 END,
|
||||
CASE WHEN h.obs LIKE '%NO REINGRESO%' OR h.obs LIKE '%NO RECONTRAT%' THEN 'N' END,
|
||||
LEFT(NULLIF(LTRIM(RTRIM(h.obs)),''), 200),
|
||||
h.departamento, h.cod_puesto, h.tipo_empleado, h.fech_efec, 'H', SUSER_SNAME(), GETDATE()
|
||||
FROM h;
|
||||
|
||||
SELECT c.desc_causa, COUNT(*) n
|
||||
FROM dbo.adtb00062 d JOIN dbo.adtb00061 c ON c.cod_causa = d.cod_causa
|
||||
WHERE d.origen = 'H'
|
||||
GROUP BY c.desc_causa ORDER BY 2 DESC;
|
||||
@@ -0,0 +1,276 @@
|
||||
{
|
||||
-------------------------------------------------------------------------------
|
||||
PROGRAMA : ADPRRP048
|
||||
OBJETIVO : Horas de capacitacion por colaborador (indicador RRHH).
|
||||
Por colaborador: cada capacitacion REQUERIDA con sus
|
||||
horas y, debajo, las TOMADAS que la cubren; luego las
|
||||
tomadas no planificadas. Totales por colaborador y
|
||||
generales con % de cumplimiento.
|
||||
Datos: adtb00060 (detalle) / adtb00059 (catalogo),
|
||||
registrados por ADPRMT017 (Accion de Personal).
|
||||
FECHA REALIZACION : Octubre 05, 2026
|
||||
-------------------------------------------------------------------------------
|
||||
}
|
||||
GLOBALS "adprgb000.4gl"
|
||||
|
||||
DEFINE p RECORD
|
||||
fecha_ini DATE,
|
||||
fecha_fin DATE,
|
||||
departamento SMALLINT,
|
||||
num_emp INTEGER,
|
||||
solo_pend CHAR(1)
|
||||
END RECORD
|
||||
DEFINE filtros VARCHAR(200)
|
||||
|
||||
MAIN
|
||||
DEFER INTERRUPT
|
||||
CALL ARG_VAL(1) RETURNING usuarios
|
||||
CALL ARG_VAL(2) RETURNING clave
|
||||
CALL ARG_VAL(3) RETURNING impresor
|
||||
|
||||
CONNECT TO "smarmotech" USER usuarios USING clave
|
||||
SELECT a.* INTO p_companias.* FROM companias a
|
||||
CALL adprrp048()
|
||||
END MAIN
|
||||
|
||||
FUNCTION adprrp048()
|
||||
DEFINE x RECORD
|
||||
num_emp INTEGER,
|
||||
empleado VARCHAR(60),
|
||||
nom_dpto VARCHAR(40),
|
||||
nom_puesto VARCHAR(40),
|
||||
fila VARCHAR(20),
|
||||
nom_cap VARCHAR(100),
|
||||
tipo_evento VARCHAR(15),
|
||||
fecha_ini DATE,
|
||||
fecha_fin DATE,
|
||||
h_req DECIMAL(8,2),
|
||||
h_tom DECIMAL(8,2),
|
||||
h_pend DECIMAL(8,2),
|
||||
h_tom_t DECIMAL(8,2),
|
||||
institucion VARCHAR(100)
|
||||
END RECORD
|
||||
DEFINE cb ui.ComboBox,
|
||||
xdep SMALLINT,
|
||||
xnom VARCHAR(40),
|
||||
nfilas INTEGER
|
||||
|
||||
OPTIONS
|
||||
FORM LINE 8,
|
||||
ERROR LINE 23,
|
||||
COMMENT LINE 21
|
||||
|
||||
OPEN FORM adfmrp048 FROM "adfmrp048"
|
||||
DISPLAY FORM adfmrp048
|
||||
|
||||
LET cb = ui.ComboBox.forName("formonly.departamento")
|
||||
CALL cb.clear()
|
||||
CALL cb.addItem(0, "TODOS")
|
||||
DECLARE c_dep48 CURSOR FOR
|
||||
SELECT a.departamento, a.nom_dpto FROM adtb00001 a
|
||||
WHERE a.status_t IS NULL ORDER BY a.nom_dpto
|
||||
FOREACH c_dep48 INTO xdep, xnom
|
||||
CALL cb.addItem(xdep, xnom CLIPPED)
|
||||
END FOREACH
|
||||
|
||||
LET p.fecha_ini = MDY(1, 1, YEAR(TODAY))
|
||||
LET p.fecha_fin = MDY(12, 31, YEAR(TODAY))
|
||||
LET p.departamento = 0
|
||||
LET p.num_emp = NULL -- variable de modulo: arranca en 0, no en NULL
|
||||
LET p.solo_pend = "N"
|
||||
|
||||
INPUT BY NAME p.* WITHOUT DEFAULTS ATTRIBUTE(UNBUFFERED)
|
||||
AFTER INPUT
|
||||
IF int_flag THEN
|
||||
EXIT INPUT
|
||||
END IF
|
||||
IF p.fecha_ini IS NULL OR p.fecha_fin IS NULL OR p.fecha_fin < p.fecha_ini THEN
|
||||
CALL fgl_winmessage("INFO","REVISE EL RANGO DE FECHAS","info")
|
||||
NEXT FIELD fecha_ini
|
||||
END IF
|
||||
END INPUT
|
||||
IF int_flag THEN
|
||||
LET int_flag = FALSE
|
||||
CALL msg(2)
|
||||
RETURN
|
||||
END IF
|
||||
|
||||
----------------------------------------------------------------------
|
||||
-- Filas: R (requerida, con lo tomado acumulado), T ligada (debajo de su
|
||||
-- requerida) y T no planificada (al final). El rango de fechas se mide
|
||||
-- sobre la fecha de inicio de la requerida (o de la tomada si no tiene).
|
||||
----------------------------------------------------------------------
|
||||
LET selec =
|
||||
"SELECT e.num_emp, ",
|
||||
" RTRIM(e.nom1_emp)+' '+RTRIM(e.apell1_emp)+ISNULL(' '+RTRIM(e.apell2_emp),''), ",
|
||||
" ISNULL(d.nom_dpto,''), ISNULL(pu.nom_puesto,''), ",
|
||||
" CASE WHEN r.tipo_reg = 'R' THEN 'REQUERIDA' ",
|
||||
" WHEN r.id_requerida IS NOT NULL THEN ' TOMADA' ",
|
||||
" ELSE 'NO PLANIFICADA' END, ",
|
||||
" c.nom_cap, ",
|
||||
" CASE c.evento WHEN 1 THEN 'SEMINARIO' WHEN 2 THEN 'CURSO' ",
|
||||
" WHEN 3 THEN 'TALLER' WHEN 4 THEN 'CONFERENCIA' ELSE '' END, ",
|
||||
" r.fecha_ini, r.fecha_fin, ",
|
||||
" CASE WHEN r.tipo_reg = 'R' THEN ISNULL(r.horas_req,0) END, ",
|
||||
" CASE WHEN r.tipo_reg = 'R' THEN ISNULL(t.tom,0) ELSE ISNULL(r.horas_tom,0) END, ",
|
||||
" CASE WHEN r.tipo_reg = 'R' THEN ",
|
||||
" CASE WHEN ISNULL(r.horas_req,0) - ISNULL(t.tom,0) > 0 ",
|
||||
" THEN ISNULL(r.horas_req,0) - ISNULL(t.tom,0) ELSE 0 END END, ",
|
||||
" CASE WHEN r.tipo_reg = 'T' THEN ISNULL(r.horas_tom,0) ELSE 0 END, ",
|
||||
" ISNULL(r.institucion,'') ",
|
||||
"FROM adtb00060 r ",
|
||||
" JOIN adtb00059 c ON c.cod_cap = r.cod_cap ",
|
||||
" JOIN adtb00003 e ON e.num_emp = r.num_emp ",
|
||||
" LEFT JOIN adtb00001 d ON d.departamento = e.departamento ",
|
||||
" LEFT JOIN adtb00004 pu ON pu.cod_puesto = e.cod_puesto ",
|
||||
" LEFT JOIN adtb00060 q ON q.id_cap = r.id_requerida ",
|
||||
" LEFT JOIN (SELECT id_requerida, SUM(horas_tom) tom FROM adtb00060 ",
|
||||
" WHERE tipo_reg = 'T' AND status_t IS NULL AND id_requerida IS NOT NULL ",
|
||||
" GROUP BY id_requerida) t ON t.id_requerida = r.id_cap ",
|
||||
"WHERE r.status_t IS NULL ",
|
||||
" AND ISNULL(q.fecha_ini, r.fecha_ini) BETWEEN ? AND ? "
|
||||
|
||||
LET filtros = "Periodo: ", p.fecha_ini USING "dd/mm/yyyy", " al ", p.fecha_fin USING "dd/mm/yyyy"
|
||||
IF p.departamento IS NOT NULL AND p.departamento <> 0 THEN
|
||||
LET selec = selec, " AND e.departamento = ", p.departamento USING "<<<<&"
|
||||
SELECT a.nom_dpto INTO xnom FROM adtb00001 a WHERE a.departamento = p.departamento
|
||||
LET filtros = filtros CLIPPED, " Departamento: ", xnom CLIPPED
|
||||
ELSE
|
||||
LET filtros = filtros CLIPPED, " Departamento: TODOS"
|
||||
END IF
|
||||
IF p.num_emp IS NOT NULL AND p.num_emp <> 0 THEN
|
||||
LET selec = selec, " AND e.num_emp = ", p.num_emp USING "<<<<<<&"
|
||||
LET filtros = filtros CLIPPED, " Ficha: ", p.num_emp USING "<<<<<<&"
|
||||
END IF
|
||||
IF p.solo_pend = "S" THEN
|
||||
LET selec = selec,
|
||||
" AND EXISTS (SELECT 1 FROM adtb00060 r2 ",
|
||||
" LEFT JOIN (SELECT id_requerida, SUM(horas_tom) tom FROM adtb00060 ",
|
||||
" WHERE tipo_reg = 'T' AND status_t IS NULL GROUP BY id_requerida) t2 ",
|
||||
" ON t2.id_requerida = r2.id_cap ",
|
||||
" WHERE r2.num_emp = r.num_emp AND r2.tipo_reg = 'R' AND r2.status_t IS NULL ",
|
||||
" AND r2.fecha_ini BETWEEN ? AND ? ",
|
||||
" AND ISNULL(r2.horas_req,0) - ISNULL(t2.tom,0) > 0) "
|
||||
LET filtros = filtros CLIPPED, " Solo con pendientes"
|
||||
END IF
|
||||
LET selec = selec,
|
||||
" ORDER BY ISNULL(d.nom_dpto,''), 2, e.num_emp, ",
|
||||
" CASE WHEN r.tipo_reg = 'T' AND r.id_requerida IS NULL THEN 1 ELSE 0 END, ",
|
||||
" ISNULL(r.id_requerida, r.id_cap), ",
|
||||
" CASE WHEN r.tipo_reg = 'R' THEN 0 ELSE 1 END, r.fecha_ini"
|
||||
|
||||
PREPARE p_rep48 FROM selec
|
||||
DECLARE c_rep48 CURSOR FOR p_rep48
|
||||
|
||||
-- Configuracion del motor de reportes (.4rp)
|
||||
LET r_filename = "adprrp048.4rp"
|
||||
LET preview = TRUE
|
||||
IF NOT fgl_report_loadCurrentSettings(r_filename) THEN
|
||||
CALL fgl_winmessage("INFO","No se pudo cargar el diseno adprrp048.4rp","stop")
|
||||
RETURN
|
||||
END IF
|
||||
CALL seleccionarSalida() RETURNING r_output
|
||||
CALL fgl_report_selectDevice(r_output)
|
||||
CALL fgl_report_selectPreview(preview)
|
||||
IF r_output = "XLSX" THEN
|
||||
CALL fgl_report_configurexlsxdevice(NULL,NULL,NULL,FALSE,FALSE,NULL,1)
|
||||
END IF
|
||||
LET handler = fgl_report_commitCurrentSettings()
|
||||
IF handler IS NULL THEN
|
||||
RETURN
|
||||
END IF
|
||||
|
||||
LET nfilas = 0
|
||||
START REPORT capacitacion TO XML HANDLER handler
|
||||
IF p.solo_pend = "S" THEN
|
||||
OPEN c_rep48 USING p.fecha_ini, p.fecha_fin, p.fecha_ini, p.fecha_fin
|
||||
ELSE
|
||||
OPEN c_rep48 USING p.fecha_ini, p.fecha_fin
|
||||
END IF
|
||||
WHILE TRUE
|
||||
FETCH c_rep48 INTO x.*
|
||||
IF STATUS = NOTFOUND THEN
|
||||
EXIT WHILE
|
||||
END IF
|
||||
LET nfilas = nfilas + 1
|
||||
OUTPUT TO REPORT capacitacion(x.*)
|
||||
END WHILE
|
||||
CLOSE c_rep48
|
||||
FINISH REPORT capacitacion
|
||||
|
||||
IF nfilas = 0 THEN
|
||||
CALL fgl_winmessage("INFO","No hay capacitaciones registradas con esos parametros","info")
|
||||
END IF
|
||||
END FUNCTION
|
||||
|
||||
FUNCTION pct48(a, b)
|
||||
DEFINE a, b DECIMAL(10,2)
|
||||
IF b IS NULL OR b = 0 THEN
|
||||
RETURN 0
|
||||
END IF
|
||||
RETURN (a / b) * 100
|
||||
END FUNCTION
|
||||
|
||||
REPORT capacitacion(x)
|
||||
DEFINE x RECORD
|
||||
num_emp INTEGER,
|
||||
empleado VARCHAR(60),
|
||||
nom_dpto VARCHAR(40),
|
||||
nom_puesto VARCHAR(40),
|
||||
fila VARCHAR(20),
|
||||
nom_cap VARCHAR(100),
|
||||
tipo_evento VARCHAR(15),
|
||||
fecha_ini DATE,
|
||||
fecha_fin DATE,
|
||||
h_req DECIMAL(8,2),
|
||||
h_tom DECIMAL(8,2),
|
||||
h_pend DECIMAL(8,2),
|
||||
h_tom_t DECIMAL(8,2),
|
||||
institucion VARCHAR(100)
|
||||
END RECORD
|
||||
DEFINE fecha_rep CHAR(10),
|
||||
hora CHAR(8),
|
||||
fini, ffin CHAR(10),
|
||||
g_req, g_tom, g_pend, g_cumpl DECIMAL(10,2),
|
||||
t_req, t_tom, t_pend, t_cumpl DECIMAL(10,2),
|
||||
t_emp INTEGER
|
||||
|
||||
ORDER EXTERNAL BY x.num_emp
|
||||
|
||||
FORMAT
|
||||
FIRST PAGE HEADER
|
||||
LET fecha_rep = TODAY USING "dd/mm/yyyy"
|
||||
LET hora = CURRENT HOUR TO SECOND
|
||||
LET t_emp = 0
|
||||
PRINTX p_companias.nombre, fecha_rep, hora, filtros
|
||||
|
||||
BEFORE GROUP OF x.num_emp
|
||||
LET t_emp = t_emp + 1
|
||||
PRINTX x.num_emp, x.empleado, x.nom_dpto, x.nom_puesto
|
||||
|
||||
ON EVERY ROW
|
||||
LET fini = x.fecha_ini USING "dd/mm/yyyy"
|
||||
LET ffin = x.fecha_fin USING "dd/mm/yyyy"
|
||||
PRINTX x.fila, x.nom_cap, x.tipo_evento, fini, ffin,
|
||||
x.h_req, x.h_tom, x.h_pend, x.institucion
|
||||
|
||||
AFTER GROUP OF x.num_emp
|
||||
LET g_req = GROUP SUM(x.h_req)
|
||||
LET g_tom = GROUP SUM(x.h_tom_t)
|
||||
LET g_pend = GROUP SUM(x.h_pend)
|
||||
IF g_req IS NULL THEN LET g_req = 0 END IF
|
||||
IF g_tom IS NULL THEN LET g_tom = 0 END IF
|
||||
IF g_pend IS NULL THEN LET g_pend = 0 END IF
|
||||
LET g_cumpl = pct48(g_req - g_pend, g_req)
|
||||
PRINTX g_req, g_tom, g_pend, g_cumpl
|
||||
|
||||
ON LAST ROW
|
||||
LET t_req = SUM(x.h_req)
|
||||
LET t_tom = SUM(x.h_tom_t)
|
||||
LET t_pend = SUM(x.h_pend)
|
||||
IF t_req IS NULL THEN LET t_req = 0 END IF
|
||||
IF t_tom IS NULL THEN LET t_tom = 0 END IF
|
||||
IF t_pend IS NULL THEN LET t_pend = 0 END IF
|
||||
LET t_cumpl = pct48(t_req - t_pend, t_req)
|
||||
PRINTX t_emp, t_req, t_tom, t_pend, t_cumpl
|
||||
END REPORT
|
||||
@@ -0,0 +1,354 @@
|
||||
{
|
||||
-------------------------------------------------------------------------------
|
||||
PROGRAMA : ADPRRP049
|
||||
OBJETIVO : Rotacion laboral (indicador RRHH).
|
||||
R = Resumen mensual: plantilla al inicio del mes,
|
||||
ingresos, salidas (voluntarias / involuntarias /
|
||||
otras) y % de rotacion; total y rotacion anual.
|
||||
D = Detalle de salidas agrupado por causa.
|
||||
Datos: vista vw_rotacion_mensual y adtb00062/adtb00061
|
||||
(desvinculaciones registradas por ADPRMT017; historico
|
||||
2022+ cargado con origen 'H').
|
||||
Rotacion % = salidas que cuentan para rotacion /
|
||||
plantilla al inicio (los traslados dentro del grupo
|
||||
no cuentan). Anual = salidas del ano / plantilla
|
||||
promedio de los meses del ano.
|
||||
FECHA REALIZACION : Octubre 05, 2026
|
||||
-------------------------------------------------------------------------------
|
||||
}
|
||||
GLOBALS "adprgb000.4gl"
|
||||
|
||||
DEFINE p RECORD
|
||||
ano_ini SMALLINT,
|
||||
ano_fin SMALLINT,
|
||||
departamento SMALLINT,
|
||||
tipo_emp VARCHAR(10),
|
||||
formato CHAR(1)
|
||||
END RECORD
|
||||
DEFINE filtros VARCHAR(200)
|
||||
|
||||
MAIN
|
||||
DEFER INTERRUPT
|
||||
CALL ARG_VAL(1) RETURNING usuarios
|
||||
CALL ARG_VAL(2) RETURNING clave
|
||||
CALL ARG_VAL(3) RETURNING impresor
|
||||
|
||||
CONNECT TO "smarmotech" USER usuarios USING clave
|
||||
SELECT a.* INTO p_companias.* FROM companias a
|
||||
CALL adprrp049()
|
||||
END MAIN
|
||||
|
||||
FUNCTION adprrp049()
|
||||
DEFINE cb ui.ComboBox,
|
||||
xdep SMALLINT,
|
||||
xnom VARCHAR(40)
|
||||
|
||||
OPTIONS
|
||||
FORM LINE 8,
|
||||
ERROR LINE 23,
|
||||
COMMENT LINE 21
|
||||
|
||||
OPEN FORM adfmrp049 FROM "adfmrp049"
|
||||
DISPLAY FORM adfmrp049
|
||||
|
||||
LET cb = ui.ComboBox.forName("formonly.departamento")
|
||||
CALL cb.clear()
|
||||
CALL cb.addItem(0, "TODOS")
|
||||
DECLARE c_dep49 CURSOR FOR
|
||||
SELECT a.departamento, a.nom_dpto FROM adtb00001 a
|
||||
WHERE a.status_t IS NULL ORDER BY a.nom_dpto
|
||||
FOREACH c_dep49 INTO xdep, xnom
|
||||
CALL cb.addItem(xdep, xnom CLIPPED)
|
||||
END FOREACH
|
||||
|
||||
LET p.ano_ini = YEAR(TODAY) - 1
|
||||
LET p.ano_fin = YEAR(TODAY)
|
||||
LET p.departamento = 0
|
||||
LET p.tipo_emp = "TODOS"
|
||||
LET p.formato = "R"
|
||||
|
||||
INPUT BY NAME p.* WITHOUT DEFAULTS ATTRIBUTE(UNBUFFERED)
|
||||
AFTER INPUT
|
||||
IF int_flag THEN
|
||||
EXIT INPUT
|
||||
END IF
|
||||
IF p.ano_ini IS NULL OR p.ano_fin IS NULL OR p.ano_fin < p.ano_ini
|
||||
OR p.ano_ini < 2022 THEN
|
||||
CALL fgl_winmessage("INFO","REVISE LOS ANOS (EL HISTORICO EMPIEZA EN 2022)","info")
|
||||
NEXT FIELD ano_ini
|
||||
END IF
|
||||
END INPUT
|
||||
IF int_flag THEN
|
||||
LET int_flag = FALSE
|
||||
CALL msg(2)
|
||||
RETURN
|
||||
END IF
|
||||
|
||||
LET filtros = "Anos: ", p.ano_ini USING "<<<<", " a ", p.ano_fin USING "<<<<"
|
||||
IF p.departamento IS NOT NULL AND p.departamento <> 0 THEN
|
||||
SELECT a.nom_dpto INTO xnom FROM adtb00001 a WHERE a.departamento = p.departamento
|
||||
LET filtros = filtros CLIPPED, " Departamento: ", xnom CLIPPED
|
||||
ELSE
|
||||
LET filtros = filtros CLIPPED, " Departamento: TODOS"
|
||||
END IF
|
||||
LET filtros = filtros CLIPPED, " Tipo de empleado: ", p.tipo_emp CLIPPED
|
||||
|
||||
IF p.formato = "D" THEN
|
||||
LET r_filename = "adprrp049d.4rp"
|
||||
ELSE
|
||||
LET r_filename = "adprrp049.4rp"
|
||||
END IF
|
||||
LET preview = TRUE
|
||||
IF NOT fgl_report_loadCurrentSettings(r_filename) THEN
|
||||
CALL fgl_winmessage("INFO","No se pudo cargar el diseno " || r_filename CLIPPED,"stop")
|
||||
RETURN
|
||||
END IF
|
||||
CALL seleccionarSalida() RETURNING r_output
|
||||
CALL fgl_report_selectDevice(r_output)
|
||||
CALL fgl_report_selectPreview(preview)
|
||||
IF r_output = "XLSX" THEN
|
||||
CALL fgl_report_configurexlsxdevice(NULL,NULL,NULL,FALSE,FALSE,NULL,1)
|
||||
END IF
|
||||
LET handler = fgl_report_commitCurrentSettings()
|
||||
IF handler IS NULL THEN
|
||||
RETURN
|
||||
END IF
|
||||
|
||||
IF p.formato = "D" THEN
|
||||
CALL detalle_salidas()
|
||||
ELSE
|
||||
CALL resumen_mensual()
|
||||
END IF
|
||||
END FUNCTION
|
||||
|
||||
## R: UNA FILA POR MES (SUMA DE LOS DEPARTAMENTOS / TIPOS FILTRADOS)
|
||||
FUNCTION resumen_mensual()
|
||||
DEFINE x RECORD
|
||||
anio SMALLINT,
|
||||
mes_num SMALLINT,
|
||||
mes_nom VARCHAR(12),
|
||||
plantilla INTEGER,
|
||||
ingresos INTEGER,
|
||||
salidas INTEGER,
|
||||
salidas_rot INTEGER,
|
||||
voluntarias INTEGER,
|
||||
involuntarias INTEGER,
|
||||
otras INTEGER,
|
||||
rot_pct DECIMAL(8,2)
|
||||
END RECORD
|
||||
DEFINE n INTEGER
|
||||
|
||||
LET selec =
|
||||
"SELECT anio, mes_num, SUM(plantilla_inicio), SUM(ingresos), SUM(salidas), ",
|
||||
" SUM(salidas_rotacion), SUM(voluntarias), SUM(involuntarias), SUM(otras) ",
|
||||
"FROM vw_rotacion_mensual WHERE anio BETWEEN ? AND ? "
|
||||
IF p.departamento IS NOT NULL AND p.departamento <> 0 THEN
|
||||
LET selec = selec, " AND departamento = ", p.departamento USING "<<<<&"
|
||||
END IF
|
||||
IF p.tipo_emp <> "TODOS" THEN
|
||||
LET selec = selec, " AND tipo_empleado = '", p.tipo_emp CLIPPED, "'"
|
||||
END IF
|
||||
LET selec = selec, " GROUP BY anio, mes_num ORDER BY anio, mes_num"
|
||||
|
||||
PREPARE p_res49 FROM selec
|
||||
DECLARE c_res49 CURSOR FOR p_res49
|
||||
|
||||
LET n = 0
|
||||
START REPORT rotacion TO XML HANDLER handler
|
||||
FOREACH c_res49 USING p.ano_ini, p.ano_fin
|
||||
INTO x.anio, x.mes_num, x.plantilla, x.ingresos, x.salidas,
|
||||
x.salidas_rot, x.voluntarias, x.involuntarias, x.otras
|
||||
LET n = n + 1
|
||||
LET x.mes_nom = nombre_mes(x.mes_num)
|
||||
LET x.rot_pct = pct49(x.salidas_rot, x.plantilla)
|
||||
OUTPUT TO REPORT rotacion(x.*)
|
||||
END FOREACH
|
||||
FINISH REPORT rotacion
|
||||
IF n = 0 THEN
|
||||
CALL fgl_winmessage("INFO","No hay datos con esos parametros","info")
|
||||
END IF
|
||||
END FUNCTION
|
||||
|
||||
## D: DETALLE DE SALIDAS AGRUPADO POR CAUSA
|
||||
FUNCTION detalle_salidas()
|
||||
DEFINE y RECORD
|
||||
clase VARCHAR(15),
|
||||
cod_causa SMALLINT,
|
||||
desc_causa VARCHAR(60),
|
||||
fecha_sal DATE,
|
||||
num_emp INTEGER,
|
||||
empleado VARCHAR(60),
|
||||
nom_dpto VARCHAR(40),
|
||||
nom_puesto VARCHAR(40),
|
||||
tipo_emp VARCHAR(20),
|
||||
meses INTEGER,
|
||||
recont VARCHAR(3),
|
||||
detalle VARCHAR(200)
|
||||
END RECORD
|
||||
DEFINE n INTEGER
|
||||
|
||||
LET selec =
|
||||
"SELECT CASE c.clase WHEN 'V' THEN 'VOLUNTARIA' WHEN 'I' THEN 'INVOLUNTARIA' ELSE 'OTRA' END, ",
|
||||
" c.cod_causa, c.desc_causa, d.fecha_salida, d.num_emp, ",
|
||||
" RTRIM(e.nom1_emp)+' '+RTRIM(e.apell1_emp)+ISNULL(' '+RTRIM(e.apell2_emp),''), ",
|
||||
" ISNULL(dp.nom_dpto,''), ISNULL(pu.nom_puesto,''), ISNULL(d.tipo_empleado,'NORMAL'), ",
|
||||
" CASE WHEN d.fech_ingreso IS NULL THEN NULL ELSE DATEDIFF(month, d.fech_ingreso, d.fecha_salida) END, ",
|
||||
" CASE d.recontratable WHEN 'S' THEN 'SI' WHEN 'N' THEN 'NO' ELSE '' END, ",
|
||||
" ISNULL(d.detalle,'') ",
|
||||
"FROM adtb00062 d ",
|
||||
" JOIN adtb00061 c ON c.cod_causa = d.cod_causa ",
|
||||
" JOIN adtb00003 e ON e.num_emp = d.num_emp ",
|
||||
" LEFT JOIN adtb00001 dp ON dp.departamento = d.departamento ",
|
||||
" LEFT JOIN adtb00004 pu ON pu.cod_puesto = d.cod_puesto ",
|
||||
"WHERE d.status_t IS NULL AND YEAR(d.fecha_salida) BETWEEN ? AND ? "
|
||||
IF p.departamento IS NOT NULL AND p.departamento <> 0 THEN
|
||||
LET selec = selec, " AND d.departamento = ", p.departamento USING "<<<<&"
|
||||
END IF
|
||||
IF p.tipo_emp <> "TODOS" THEN
|
||||
LET selec = selec, " AND ISNULL(d.tipo_empleado,'NORMAL') = '", p.tipo_emp CLIPPED, "'"
|
||||
END IF
|
||||
LET selec = selec,
|
||||
" ORDER BY CASE c.clase WHEN 'V' THEN 1 WHEN 'I' THEN 2 ELSE 3 END, c.cod_causa, d.fecha_salida"
|
||||
|
||||
PREPARE p_det49 FROM selec
|
||||
DECLARE c_det49 CURSOR FOR p_det49
|
||||
|
||||
LET n = 0
|
||||
START REPORT salidas TO XML HANDLER handler
|
||||
FOREACH c_det49 USING p.ano_ini, p.ano_fin INTO y.*
|
||||
LET n = n + 1
|
||||
OUTPUT TO REPORT salidas(y.*)
|
||||
END FOREACH
|
||||
FINISH REPORT salidas
|
||||
IF n = 0 THEN
|
||||
CALL fgl_winmessage("INFO","No hay salidas con esos parametros","info")
|
||||
END IF
|
||||
END FUNCTION
|
||||
|
||||
FUNCTION nombre_mes(m)
|
||||
DEFINE m SMALLINT
|
||||
CASE m
|
||||
WHEN 1 RETURN "ENERO"
|
||||
WHEN 2 RETURN "FEBRERO"
|
||||
WHEN 3 RETURN "MARZO"
|
||||
WHEN 4 RETURN "ABRIL"
|
||||
WHEN 5 RETURN "MAYO"
|
||||
WHEN 6 RETURN "JUNIO"
|
||||
WHEN 7 RETURN "JULIO"
|
||||
WHEN 8 RETURN "AGOSTO"
|
||||
WHEN 9 RETURN "SEPTIEMBRE"
|
||||
WHEN 10 RETURN "OCTUBRE"
|
||||
WHEN 11 RETURN "NOVIEMBRE"
|
||||
WHEN 12 RETURN "DICIEMBRE"
|
||||
END CASE
|
||||
RETURN NULL
|
||||
END FUNCTION
|
||||
|
||||
FUNCTION pct49(a, b)
|
||||
DEFINE a, b DECIMAL(12,2)
|
||||
IF b IS NULL OR b = 0 OR a IS NULL THEN
|
||||
RETURN 0
|
||||
END IF
|
||||
RETURN (a / b) * 100
|
||||
END FUNCTION
|
||||
|
||||
REPORT rotacion(x)
|
||||
DEFINE x RECORD
|
||||
anio SMALLINT,
|
||||
mes_num SMALLINT,
|
||||
mes_nom VARCHAR(12),
|
||||
plantilla INTEGER,
|
||||
ingresos INTEGER,
|
||||
salidas INTEGER,
|
||||
salidas_rot INTEGER,
|
||||
voluntarias INTEGER,
|
||||
involuntarias INTEGER,
|
||||
otras INTEGER,
|
||||
rot_pct DECIMAL(8,2)
|
||||
END RECORD
|
||||
DEFINE fecha_rep CHAR(10),
|
||||
hora CHAR(8),
|
||||
a_plant DECIMAL(10,2),
|
||||
a_ing, a_sal, a_rot, a_vol, a_inv, a_otr INTEGER,
|
||||
a_pct DECIMAL(8,2),
|
||||
t_ing, t_sal, t_vol, t_inv, t_otr INTEGER
|
||||
|
||||
ORDER EXTERNAL BY x.anio
|
||||
|
||||
FORMAT
|
||||
FIRST PAGE HEADER
|
||||
LET fecha_rep = TODAY USING "dd/mm/yyyy"
|
||||
LET hora = CURRENT HOUR TO SECOND
|
||||
PRINTX p_companias.nombre, fecha_rep, hora, filtros
|
||||
|
||||
BEFORE GROUP OF x.anio
|
||||
PRINTX x.anio
|
||||
|
||||
ON EVERY ROW
|
||||
PRINTX x.mes_nom, x.plantilla, x.ingresos, x.salidas, x.voluntarias,
|
||||
x.involuntarias, x.otras, x.rot_pct
|
||||
|
||||
AFTER GROUP OF x.anio
|
||||
LET a_plant = GROUP AVG(x.plantilla)
|
||||
LET a_ing = GROUP SUM(x.ingresos)
|
||||
LET a_sal = GROUP SUM(x.salidas)
|
||||
LET a_rot = GROUP SUM(x.salidas_rot)
|
||||
LET a_vol = GROUP SUM(x.voluntarias)
|
||||
LET a_inv = GROUP SUM(x.involuntarias)
|
||||
LET a_otr = GROUP SUM(x.otras)
|
||||
LET a_pct = pct49(a_rot, a_plant)
|
||||
PRINTX a_plant, a_ing, a_sal, a_vol, a_inv, a_otr, a_pct
|
||||
|
||||
ON LAST ROW
|
||||
LET t_ing = SUM(x.ingresos)
|
||||
LET t_sal = SUM(x.salidas)
|
||||
LET t_vol = SUM(x.voluntarias)
|
||||
LET t_inv = SUM(x.involuntarias)
|
||||
LET t_otr = SUM(x.otras)
|
||||
PRINTX t_ing, t_sal, t_vol, t_inv, t_otr
|
||||
END REPORT
|
||||
|
||||
REPORT salidas(y)
|
||||
DEFINE y RECORD
|
||||
clase VARCHAR(15),
|
||||
cod_causa SMALLINT,
|
||||
desc_causa VARCHAR(60),
|
||||
fecha_sal DATE,
|
||||
num_emp INTEGER,
|
||||
empleado VARCHAR(60),
|
||||
nom_dpto VARCHAR(40),
|
||||
nom_puesto VARCHAR(40),
|
||||
tipo_emp VARCHAR(20),
|
||||
meses INTEGER,
|
||||
recont VARCHAR(3),
|
||||
detalle VARCHAR(200)
|
||||
END RECORD
|
||||
DEFINE fecha_rep CHAR(10),
|
||||
hora CHAR(8),
|
||||
fsal CHAR(10),
|
||||
g_cant, t_cant INTEGER
|
||||
|
||||
ORDER EXTERNAL BY y.cod_causa
|
||||
|
||||
FORMAT
|
||||
FIRST PAGE HEADER
|
||||
LET fecha_rep = TODAY USING "dd/mm/yyyy"
|
||||
LET hora = CURRENT HOUR TO SECOND
|
||||
PRINTX p_companias.nombre, fecha_rep, hora, filtros
|
||||
|
||||
BEFORE GROUP OF y.cod_causa
|
||||
PRINTX y.desc_causa, y.clase
|
||||
|
||||
ON EVERY ROW
|
||||
LET fsal = y.fecha_sal USING "dd/mm/yyyy"
|
||||
PRINTX fsal, y.num_emp, y.empleado, y.nom_dpto, y.nom_puesto,
|
||||
y.tipo_emp, y.meses, y.recont, y.detalle
|
||||
|
||||
AFTER GROUP OF y.cod_causa
|
||||
LET g_cant = GROUP COUNT(*)
|
||||
PRINTX g_cant
|
||||
|
||||
ON LAST ROW
|
||||
LET t_cant = COUNT(*)
|
||||
PRINTX t_cant
|
||||
END REPORT
|
||||
@@ -0,0 +1,160 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<ManagedForm databaseName="smarmotech" fileVersion="31400" gstVersion="31408" name="ManagedForm" uid="{a549c11f-213c-4b69-ba25-7ba8e81abe58}">
|
||||
<AGSettings>
|
||||
<DynamicProperties version="2"/>
|
||||
</AGSettings>
|
||||
<Record additionalTables="" joinLeft="" joinOperator="" joinRight="" name="Undefined" order="" uid="{7d471b21-63f0-43b8-a8d9-f13f84ba45e9}" where="">
|
||||
<RecordField colName="cod_mto" defaultValue="1" fieldIdRef="2" fieldType="TABLE_COLUMN" name="adtb00020.cod_mto" sqlTabName="adtb00020" sqlType="SMALLINT" table_alias_name="" uid="{c1910f49-63bc-4f6d-aa7a-a0a56830d12e}"/>
|
||||
<RecordField colName="num_trx" fieldIdRef="5" fieldType="TABLE_COLUMN" name="adtb00020.num_trx" sqlTabName="adtb00020" sqlType="INTEGER" table_alias_name="" uid="{bad78dcd-5ecc-4f0c-903b-9c1f60503f44}"/>
|
||||
<RecordField colName="cod_sol" fieldIdRef="6" fieldType="TABLE_COLUMN" name="adtb00020.cod_sol" sqlTabName="adtb00020" sqlType="SMALLINT" table_alias_name="" uid="{a37cf6ad-6034-41ba-a4ae-b4332f7cb2c5}"/>
|
||||
<RecordField colName="fecha" fieldIdRef="7" fieldType="TABLE_COLUMN" name="adtb00020.fecha" sqlTabName="adtb00020" sqlType="DATE" table_alias_name="" uid="{e6e8db60-eca0-4f4f-a4a2-90b6113426bc}"/>
|
||||
<RecordField colName="fech_efec" fieldIdRef="8" fieldType="TABLE_COLUMN" name="adtb00020.fech_efec" sqlTabName="adtb00020" sqlType="DATE" table_alias_name="" uid="{169afb14-f444-4974-9265-4b473bdbdadd}"/>
|
||||
<RecordField colName="pnis" fieldIdRef="0" name="pnis" sqlTabName="formonly" table_alias_name="" uid="{1aaeb140-d426-4d15-b612-26047d56b5f8}"/>
|
||||
<RecordField colName="num_emp" fieldIdRef="9" fieldType="TABLE_COLUMN" name="adtb00020.num_emp" sqlTabName="adtb00020" sqlType="SMALLINT" table_alias_name="" uid="{cb242072-b73c-4429-8920-3e37e4146e79}"/>
|
||||
<RecordField colName="departamento" fieldIdRef="10" fieldType="TABLE_COLUMN" name="adtb00020.departamento" sqlTabName="adtb00020" sqlType="SMALLINT" table_alias_name="" uid="{52724440-1489-4cb1-9516-57a814edfb29}"/>
|
||||
<RecordField colName="nivel_emp" fieldIdRef="11" fieldType="TABLE_COLUMN" name="adtb00020.nivel_emp" sqlTabName="adtb00020" sqlType="SMALLINT" table_alias_name="" uid="{cd972710-19a7-4371-87c1-689f9968b674}"/>
|
||||
<RecordField colName="cod_puesto" fieldIdRef="12" fieldType="TABLE_COLUMN" name="adtb00020.cod_puesto" sqlTabName="adtb00020" sqlType="SMALLINT" table_alias_name="" uid="{7d817b85-b333-4438-935d-b6f72f34308a}"/>
|
||||
<RecordField colName="cedula" fieldIdRef="13" name="cedula" sqlTabName="formonly" table_alias_name="" uid="{942edd09-4d6c-4266-beb6-a06177c87c4b}"/>
|
||||
<RecordField colName="cuenta_no" fieldIdRef="1" fieldType="TABLE_COLUMN" name="adtb00003.cuenta_no" sqlTabName="adtb00003" sqlType="VARCHAR" table_alias_name="" uid="{f48e2a21-0619-46dd-bb71-71efdf9f5ca5}"/>
|
||||
<RecordField colName="descrip1" fieldIdRef="14" name="descrip1" sqlTabName="formonly" table_alias_name="" uid="{58277d32-b999-4232-bfa3-5c1e29875d75}"/>
|
||||
<RecordField colName="descrip2" fieldIdRef="15" name="descrip2" sqlTabName="formonly" table_alias_name="" uid="{ed02fb7a-54b2-49cb-8f23-c822fbf31ceb}"/>
|
||||
<RecordField colName="nombre_dpto" fieldIdRef="16" name="nombre_dpto" sqlTabName="formonly" table_alias_name="" uid="{7f62e7e2-a2b0-46e2-a69a-c46213a82610}"/>
|
||||
<RecordField colName="nom_puesto" fieldIdRef="17" fieldType="TABLE_COLUMN" name="adtb00004.nom_puesto" sqlTabName="adtb00004" sqlType="CHAR" table_alias_name="" uid="{023d641d-52e3-439a-9fa0-5cbee4d2f579}"/>
|
||||
<RecordField colName="sueldo_ac" fieldIdRef="18" fieldType="TABLE_COLUMN" name="adtb00020.sueldo_ac" precisionDecimal="10" scaleDecimal="2" sqlTabName="adtb00020" sqlType="DECIMAL" table_alias_name="" uid="{9c3607a4-0061-45b5-846a-d2a4a8c5d5f6}"/>
|
||||
<RecordField colName="" fieldIdRef="19" fieldType="NON_DATABASE" name="nomina" sqlTabName="" sqlType="CHAR" table_alias_name="" uid="{40a9f585-d0d3-4743-a0c5-1f1ae112d230}"/>
|
||||
<RecordField colName="estado_civil" defaultValue="U" fieldIdRef="21" fieldType="TABLE_COLUMN" name="adtb00003.estado_civil" sqlTabName="adtb00003" sqlType="CHAR" table_alias_name="" uid="{28c263a5-ee09-4d8b-993d-92d7d84c455a}"/>
|
||||
<RecordField colName="sexo" defaultValue="F" fieldIdRef="40" name="sexo" sqlTabName="formonly" sqlType="CHAR" table_alias_name="" uid="{94e4714a-3064-43a3-9045-c91a7081c93e}"/>
|
||||
<RecordField colName="tipo_sangre" defaultValue="AB+" fieldIdRef="23" fieldType="TABLE_COLUMN" name="adtb00012.tipo_sangre" sqlTabName="adtb00012" sqlType="CHAR" table_alias_name="" uid="{48ededba-cbcb-40c6-9b48-adbbdc5de259}"/>
|
||||
<RecordField colName="sueldo_lq" defaultValue="0" fieldIdRef="42" name="sueldo_lq" precisionDecimal="12" scaleDecimal="2" sqlTabName="formonly" sqlType="DECIMAL" table_alias_name="" uid="{b5e885ec-de5f-4de8-ab56-0f0466d82bb3}"/>
|
||||
<RecordField colName="observacion" fieldIdRef="24" fieldType="TABLE_COLUMN" name="adtb00020.observacion" sqlTabName="adtb00020" sqlType="CHAR" table_alias_name="" uid="{c84f4da4-673b-4935-89dd-170371ee0b6d}"/>
|
||||
<RecordField colName="num1_emp" fieldIdRef="25" fieldType="TABLE_COLUMN" name="adtb00020.num1_emp" sqlTabName="adtb00020" sqlType="SMALLINT" table_alias_name="" uid="{f83c838d-f907-4c8b-abaf-f4eee1eb62ee}"/>
|
||||
<RecordField colName="departamento1" fieldIdRef="26" fieldType="TABLE_COLUMN" name="adtb00020.departamento1" sqlTabName="adtb00020" sqlType="SMALLINT" table_alias_name="" uid="{03c26a0c-5471-48c1-8b6c-fed247129b95}"/>
|
||||
<RecordField colName="nivel1_emp" fieldIdRef="27" fieldType="TABLE_COLUMN" name="adtb00020.nivel1_emp" sqlTabName="adtb00020" sqlType="SMALLINT" table_alias_name="" uid="{ce9714aa-f0ac-45a7-baec-73c070650df6}"/>
|
||||
<RecordField colName="cod1_puesto" fieldIdRef="28" fieldType="TABLE_COLUMN" name="adtb00020.cod1_puesto" sqlTabName="adtb00020" sqlType="SMALLINT" table_alias_name="" uid="{6c3f6861-ca38-4b80-a3ed-01729c29a1e3}"/>
|
||||
<RecordField colName="descrip3" fieldIdRef="29" name="descrip3" sqlTabName="formonly" table_alias_name="" uid="{4898d4f5-1654-47f8-9cdd-718988bbd005}"/>
|
||||
<RecordField colName="num2_emp" fieldIdRef="30" fieldType="TABLE_COLUMN" name="adtb00020.num2_emp" sqlTabName="adtb00020" sqlType="SMALLINT" table_alias_name="" uid="{fd3d592f-dbb2-4343-9827-c36a460ce034}"/>
|
||||
<RecordField colName="departamento2" fieldIdRef="31" fieldType="TABLE_COLUMN" name="adtb00020.departamento2" sqlTabName="adtb00020" sqlType="SMALLINT" table_alias_name="" uid="{b6174a7b-bb09-4886-a1b9-89dca1bcf3a0}"/>
|
||||
<RecordField colName="nivel2_emp" fieldIdRef="32" fieldType="TABLE_COLUMN" name="adtb00020.nivel2_emp" sqlTabName="adtb00020" sqlType="SMALLINT" table_alias_name="" uid="{63ccced3-c219-441e-8647-feb32a8e802f}"/>
|
||||
<RecordField colName="cod2_puesto" fieldIdRef="33" fieldType="TABLE_COLUMN" name="adtb00020.cod2_puesto" sqlTabName="adtb00020" sqlType="SMALLINT" table_alias_name="" uid="{cf9a79bf-f263-408a-b963-a10d2d2f430d}"/>
|
||||
<RecordField colName="descrip4" fieldIdRef="34" name="descrip4" sqlTabName="formonly" table_alias_name="" uid="{379bce2d-2ce5-4f57-9d55-7f3f7b3a67fe}"/>
|
||||
<RecordField colName="num3_emp" fieldIdRef="35" fieldType="TABLE_COLUMN" name="adtb00020.num3_emp" sqlTabName="adtb00020" sqlType="SMALLINT" table_alias_name="" uid="{152d4176-3204-4e6e-a6a3-e4f92787b1bc}"/>
|
||||
<RecordField colName="departamento3" fieldIdRef="36" fieldType="TABLE_COLUMN" name="adtb00020.departamento3" sqlTabName="adtb00020" sqlType="SMALLINT" table_alias_name="" uid="{328a1957-b303-4bde-b913-2cc142eff874}"/>
|
||||
<RecordField colName="nivel3_emp" fieldIdRef="37" fieldType="TABLE_COLUMN" name="adtb00020.nivel3_emp" sqlTabName="adtb00020" sqlType="SMALLINT" table_alias_name="" uid="{44853c93-2b42-407e-8368-50f11cbb316c}"/>
|
||||
<RecordField colName="cod3_puesto" fieldIdRef="38" fieldType="TABLE_COLUMN" name="adtb00020.cod3_puesto" sqlTabName="adtb00020" sqlType="SMALLINT" table_alias_name="" uid="{46b5abec-9a78-4be3-9bda-7b8ec9a57841}"/>
|
||||
<RecordField colName="descrip5" fieldIdRef="39" name="descrip5" sqlTabName="formonly" table_alias_name="" uid="{9c9d8c1b-5031-4cf5-ab44-3dadafdfdf3b}"/>
|
||||
<RecordField colName="us_crea" fieldIdRef="43" fieldType="TABLE_COLUMN" name="adtb00020.us_crea" sqlTabName="adtb00020" sqlType="CHAR" table_alias_name="" uid="{c6163a70-937c-4d17-b991-f427a5139045}"/>
|
||||
<RecordField colName="us_mod" fieldIdRef="45" fieldType="TABLE_COLUMN" name="adtb00020.us_mod" sqlTabName="adtb00020" sqlType="CHAR" table_alias_name="" uid="{eb0bacfe-2dde-40f2-9fb5-9e0548d4882a}"/>
|
||||
<RecordField colName="fech_crea" fieldIdRef="44" fieldType="TABLE_COLUMN" name="adtb00020.fech_crea" qual1="YEAR" qualFraction="FRACTION(3)" sqlTabName="adtb00020" sqlType="DATETIME" table_alias_name="" uid="{69edd8d5-620a-49cf-b77a-6f9166a2e408}"/>
|
||||
<RecordField colName="fech_mod" fieldIdRef="46" fieldType="TABLE_COLUMN" name="adtb00020.fech_mod" qual1="YEAR" qualFraction="FRACTION(3)" sqlTabName="adtb00020" sqlType="DATETIME" table_alias_name="" uid="{7547110d-f3f4-42a6-8b1a-db0b0e04fa54}"/>
|
||||
<RecordField colName="" fieldIdRef="3" name="fecha5" sqlTabName="" table_alias_name="" uid="{1793c072-7959-4c58-a5b1-e7c2fed143b3}"/>
|
||||
<RecordField colName="" fieldIdRef="4" name="estado_accion" sqlTabName="" table_alias_name="" uid="{39f544a6-146d-4da8-a564-811bbfbc65be}"/>
|
||||
</Record>
|
||||
<Form gridHeight="24" gridWidth="103" name="adfmmt017" style="basic" text="FORMULARIO MANTENIMIENTO ACCION DE PERSONAL">
|
||||
<ToolBar name="ToolBar1">
|
||||
<ToolBarItem comment="Adicionar Registos" image="new" name="nuevo" text="Nuevo"/>
|
||||
<ToolBarItem comment="Buscar Regustros" image="find" name="buscar" text="Buscar"/>
|
||||
<ToolBarSeparator name="ToolBarSeparator1"/>
|
||||
<ToolBarItem comment="Salir del Programa" image="quit" name="salir" text="Salir"/>
|
||||
</ToolBar>
|
||||
<Grid gridHeight="22" gridWidth="100" name="Grid1" posX="1" posY="1">
|
||||
<Group gridHeight="15" gridWidth="96" name="Group1" posX="1" posY="1">
|
||||
<Label posX="1" posY="1" text="Tipo de Movimiento"/>
|
||||
<ComboBox aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="cod_mto" comment="1= EMPLEO 2=CAMBIO 3=NOVEDADES 4=TERMINACION o Presione Ctrl-W" defaultValue="1" fieldId="2" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="36" include="1|2|3|4" items="" name="adtb00020.cod_mto" posX="21" posY="1" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="1" table_alias_name="" widget="ComboBox"/>
|
||||
<Label posX="1" posY="2" text="Numero Documento"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="num_trx" fieldId="5" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="6" name="adtb00020.num_trx" noEntry="true" posX="21" posY="2" sqlTabName="adtb00020" sqlType="INTEGER" tabIndex="2" table_alias_name="" widget="Edit"/>
|
||||
<Label posX="33" posY="2" text="Numero Solicitante"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="cod_sol" comment="Digite el Numero del Solicitante" fieldId="6" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="4" name="adtb00020.cod_sol" posX="53" posY="2" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="3" table_alias_name="" widget="Edit"/>
|
||||
<Label posX="1" posY="3" text="Fecha"/>
|
||||
<DateEdit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="fecha" comment="Digite la fecha de elaboracion de la accion" fieldId="7" fieldType="TABLE_COLUMN" format="dd/mm/yyyy" gridHeight="1" gridWidth="10" name="adtb00020.fecha" posX="21" posY="3" sqlTabName="adtb00020" sqlType="DATE" tabIndex="4" table_alias_name="" widget="DateEdit"/>
|
||||
<Label posX="33" posY="3" text="Fecha Efectiva"/>
|
||||
<DateEdit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="fech_efec" comment="Digite la fecha de efectividad de la accion" fieldId="8" fieldType="TABLE_COLUMN" format="dd/mm/yyyy" gridHeight="1" gridWidth="10" name="adtb00020.fech_efec" posX="53" posY="3" sqlTabName="adtb00020" sqlType="DATE" tabIndex="5" table_alias_name="" widget="DateEdit"/>
|
||||
<Label gridHeight="1" gridWidth="10" name="Label5" posX="65" posY="3" text="Fecha Entrada"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="" fieldId="3" gridHeight="1" gridWidth="14" name="fecha5" posX="81" posY="3" sqlTabName="" tabIndex="43" table_alias_name="" title="Edit1" widget="Edit"/>
|
||||
<Label posX="1" posY="4" text="Ficha No."/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" autoNext="true" colName="num_emp" comment="Digite la ficha del empleado o Presione Ctrl-W para busqueda" fieldId="9" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="4" name="adtb00020.num_emp" posX="21" posY="4" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="7" table_alias_name="" widget="Edit"/>
|
||||
<Label posX="26" posY="4" text="-"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" autoNext="true" colName="departamento" comment="Digite el departamento del empleado o Presione Ctrl-W para busqueda" fieldId="10" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="4" name="adtb00020.departamento" posX="28" posY="4" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="8" table_alias_name="" widget="Edit"/>
|
||||
<Label posX="33" posY="4" text="-"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" autoNext="true" colName="nivel_emp" comment="Digite el nivel del empleado o Presione Ctrl-W para busqueda" fieldId="11" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="3" name="adtb00020.nivel_emp" posX="35" posY="4" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="9" table_alias_name="" widget="Edit"/>
|
||||
<Label posX="39" posY="4" text="-"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" autoNext="true" colName="cod_puesto" comment="Digite el puesto del empleado o Presione Ctrl-W para busqueda" fieldId="12" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="3" name="adtb00020.cod_puesto" posX="41" posY="4" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="10" table_alias_name="" widget="Edit"/>
|
||||
<Label posX="46" posY="4" text="Cedula"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="cedula" fieldId="13" gridHeight="1" gridWidth="14" name="cedula" picture="###-#######-#" posX="55" posY="4" sqlTabName="formonly" tabIndex="11" table_alias_name="" widget="Edit"/>
|
||||
<Label posX="70" posY="4" text="Cuenta No:"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="cuenta_no" comment="No. de Cuenta para pago automatico" fieldId="1" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="14" name="adtb00003.cuenta_no" posX="81" posY="4" sqlTabName="adtb00003" sqlType="VARCHAR" tabIndex="12" table_alias_name="" widget="Edit"/>
|
||||
<Label posX="1" posY="5" text="Nombre"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="descrip1" fieldId="14" gridHeight="1" gridWidth="30" name="descrip1" noEntry="true" posX="21" posY="5" sqlTabName="formonly" tabIndex="13" table_alias_name="" widget="Edit"/>
|
||||
<Label posX="53" posY="5" text="Apellido"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="descrip2" fieldId="15" gridHeight="1" gridWidth="30" name="descrip2" noEntry="true" posX="63" posY="5" sqlTabName="formonly" tabIndex="14" table_alias_name="" widget="Edit"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="nombre_dpto" fieldId="16" gridHeight="1" gridWidth="30" name="nombre_dpto" noEntry="true" posX="21" posY="6" sqlTabName="formonly" tabIndex="15" table_alias_name="" widget="Edit"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="nom_puesto" fieldId="17" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="29" name="adtb00004.nom_puesto" noEntry="true" posX="53" posY="6" sqlTabName="adtb00004" sqlType="CHAR" tabIndex="16" table_alias_name="" widget="Edit"/>
|
||||
<Label posX="1" posY="7" text="NIS"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="pnis" comment="CODIGO IDENTIFICACION SEGURIDAD SOCIAL" fieldId="0" gridHeight="1" gridWidth="22" name="pnis" posX="21" posY="7" sqlTabName="formonly" tabIndex="6" table_alias_name="" widget="Edit"/>
|
||||
<Label gridHeight="1" gridWidth="10" name="Label6" posX="53" posY="7" text="Estatus"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="" color="blue" fieldId="4" gridHeight="1" gridWidth="16" name="estado_accion" posX="65" posY="7" sqlTabName="" tabIndex="44" table_alias_name="" title="Edit1" widget="Edit"/>
|
||||
<Label posX="1" posY="8" text="Sueldo/Salario"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="sueldo_ac" comment="Digite el sueldo/salario del empleado" fieldId="18" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="11" name="adtb00020.sueldo_ac" posX="21" posY="8" precisionDecimal="10" scaleDecimal="2" sqlTabName="adtb00020" sqlType="DECIMAL" tabIndex="17" table_alias_name="" widget="Edit"/>
|
||||
<Label gridHeight="1" gridWidth="6" name="Label4" posX="39" posY="8" text="Nomina"/>
|
||||
<ComboBox aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" case="upper" colName="" comment="Digite S = Semanal, Q = Quincenal, V = Vendedor" fieldId="19" fieldType="NON_DATABASE" gridHeight="1" gridWidth="11" items="QUINCENAL, JORNAL" length="1" name="nomina" posX="46" posY="8" sqlTabName="" sqlType="CHAR" tabIndex="18" table_alias_name="" widget="ComboBox">
|
||||
<Item lstrtext="false" name="Q" text="QUINCENAL"/>
|
||||
<Item lstrtext="false" name="J" text="JORNAL"/>
|
||||
</ComboBox>
|
||||
<Label gridHeight="1" gridWidth="9" name="Label1" posX="63" posY="8" text="Estado Civil"/>
|
||||
<ComboBox aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" case="upper" colName="estado_civil" comment=" S = Soltero C = Casado " defaultValue="U" fieldId="21" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="18" include="S|C" items="CASADO, SOLTERO, UNION LIBRE" name="adtb00003.estado_civil" posX="75" posY="8" sqlTabName="adtb00003" sqlType="CHAR" tabIndex="19" table_alias_name="" widget="ComboBox">
|
||||
<Item lstrtext="false" name="C" text="CASADO"/>
|
||||
<Item lstrtext="false" name="S" text="SOLTERO"/>
|
||||
<Item lstrtext="false" name="U" text="UNION LIBRE"/>
|
||||
</ComboBox>
|
||||
<Label posX="1" posY="9" text="Sexo"/>
|
||||
<ComboBox aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" case="upper" colName="sexo" comment="Digite M Para Sexo Masculino y F Para el Femenino" defaultValue="F" fieldId="40" gridHeight="1" gridWidth="11" include="M|F" items="FEMENINO, MASCULINO" name="sexo" posX="21" posY="9" sqlTabName="formonly" sqlType="CHAR" tabIndex="20" table_alias_name="" widget="ComboBox">
|
||||
<Item lstrtext="false" name="F" text="FEMENINO"/>
|
||||
<Item lstrtext="false" name="M" text="MASCULINO"/>
|
||||
</ComboBox>
|
||||
<Label gridHeight="1" gridWidth="12" name="Label2" posX="33" posY="9" text="Tipo de Sangre"/>
|
||||
<ComboBox aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" case="upper" colName="tipo_sangre" defaultValue="AB+" fieldId="23" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="11" items="AB+, B-, O+, O-, A+, A-" name="adtb00012.tipo_sangre" posX="46" posY="9" sqlTabName="adtb00012" sqlType="CHAR" tabIndex="21" table_alias_name="" widget="ComboBox">
|
||||
<Item lstrtext="false" name="AB+" text="AB+"/>
|
||||
<Item lstrtext="false" name="B+" text="B-"/>
|
||||
<Item lstrtext="false" name="O+" text="O+"/>
|
||||
<Item lstrtext="false" name="O-" text="O-"/>
|
||||
<Item lstrtext="false" name="A+" text="A+"/>
|
||||
<Item lstrtext="false" name="A-" text="A-"/>
|
||||
</ComboBox>
|
||||
<Label gridHeight="1" gridWidth="14" name="Label3" posX="58" posY="9" text="Monto Liquidacion"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="sueldo_lq" defaultValue="0" fieldId="42" gridHeight="1" gridWidth="18" name="sueldo_lq" posX="75" posY="9" precisionDecimal="12" scaleDecimal="2" sqlTabName="formonly" sqlType="DECIMAL" tabIndex="22" table_alias_name="" widget="Edit"/>
|
||||
<Label posX="1" posY="10" text="Observaciones"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" case="upper" colName="observacion" fieldId="24" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="74" name="adtb00020.observacion" posX="21" posY="10" sqlTabName="adtb00020" sqlType="CHAR" tabIndex="23" table_alias_name="" widget="Edit"/>
|
||||
<Label posX="1" posY="11" text="Solicitado"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" autoNext="true" colName="num1_emp" comment="Digite la ficha del empleado solicitante o Presione Ctrl-W para busqueda" fieldId="25" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="5" name="adtb00020.num1_emp" posX="21" posY="11" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="24" table_alias_name="" widget="Edit"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="departamento1" fieldId="26" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="5" name="adtb00020.departamento1" noEntry="true" posX="28" posY="11" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="25" table_alias_name="" widget="Edit"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="nivel1_emp" fieldId="27" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="4" name="adtb00020.nivel1_emp" noEntry="true" posX="35" posY="11" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="26" table_alias_name="" widget="Edit"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="cod1_puesto" fieldId="28" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="4" name="adtb00020.cod1_puesto" noEntry="true" posX="40" posY="11" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="27" table_alias_name="" widget="Edit"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="descrip3" fieldId="29" gridHeight="1" gridWidth="49" name="descrip3" noEntry="true" posX="46" posY="11" sqlTabName="formonly" tabIndex="28" table_alias_name="" widget="Edit"/>
|
||||
<Label posX="1" posY="12" text="Autorizado"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" autoNext="true" colName="num2_emp" comment="Digite el numero del empleado que autoriza o Presione Ctrl-W para busqueda" fieldId="30" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="5" name="adtb00020.num2_emp" posX="21" posY="12" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="29" table_alias_name="" widget="Edit"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="departamento2" fieldId="31" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="5" name="adtb00020.departamento2" noEntry="true" posX="28" posY="12" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="30" table_alias_name="" widget="Edit"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="nivel2_emp" fieldId="32" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="4" name="adtb00020.nivel2_emp" noEntry="true" posX="35" posY="12" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="31" table_alias_name="" widget="Edit"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="cod2_puesto" fieldId="33" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="4" name="adtb00020.cod2_puesto" noEntry="true" posX="40" posY="12" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="32" table_alias_name="" widget="Edit"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="descrip4" fieldId="34" gridHeight="1" gridWidth="49" name="descrip4" noEntry="true" posX="46" posY="12" sqlTabName="formonly" tabIndex="33" table_alias_name="" widget="Edit"/>
|
||||
<Label posX="1" posY="13" text="Aprobado"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" autoNext="true" colName="num3_emp" comment="Digite el numero del empleado que aprueba o Presione Ctrl-W para busqueda" fieldId="35" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="5" name="adtb00020.num3_emp" posX="21" posY="13" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="34" table_alias_name="" widget="Edit"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="departamento3" fieldId="36" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="5" name="adtb00020.departamento3" noEntry="true" posX="28" posY="13" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="35" table_alias_name="" widget="Edit"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="nivel3_emp" fieldId="37" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="4" name="adtb00020.nivel3_emp" noEntry="true" posX="35" posY="13" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="36" table_alias_name="" widget="Edit"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="cod3_puesto" fieldId="38" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="4" name="adtb00020.cod3_puesto" noEntry="true" posX="40" posY="13" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="37" table_alias_name="" widget="Edit"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="descrip5" fieldId="39" gridHeight="1" gridWidth="49" name="descrip5" noEntry="true" posX="46" posY="13" sqlTabName="formonly" tabIndex="38" table_alias_name="" widget="Edit"/>
|
||||
</Group>
|
||||
<Group gridHeight="4" gridWidth="97" name="Group2" posX="1" posY="17">
|
||||
<Label posX="1" posY="1" text="Usuario Creador"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="us_crea" fieldId="43" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="17" name="adtb00020.us_crea" noEntry="true" posX="20" posY="1" sqlTabName="adtb00020" sqlType="CHAR" tabIndex="39" table_alias_name="" widget="Edit"/>
|
||||
<Label posX="40" posY="1" text="Usuario Modificador"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="us_mod" fieldId="45" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="16" name="adtb00020.us_mod" noEntry="true" posX="61" posY="1" sqlTabName="adtb00020" sqlType="CHAR" tabIndex="40" table_alias_name="" widget="Edit"/>
|
||||
<Label posX="1" posY="2" text="Fecha Creacion"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="fech_crea" fieldId="44" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="17" name="adtb00020.fech_crea" noEntry="true" posX="20" posY="2" qual1="YEAR" qualFraction="FRACTION(3)" sqlTabName="adtb00020" sqlType="DATETIME" tabIndex="41" table_alias_name="" widget="Edit"/>
|
||||
<Label posX="40" posY="2" text="Fecha Modificacion"/>
|
||||
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="fech_mod" fieldId="46" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="16" name="adtb00020.fech_mod" noEntry="true" posX="61" posY="2" qual1="YEAR" qualFraction="FRACTION(3)" sqlTabName="adtb00020" sqlType="DATETIME" tabIndex="42" table_alias_name="" widget="Edit"/>
|
||||
</Group>
|
||||
</Grid>
|
||||
</Form>
|
||||
<DiagramLayout>
|
||||
<![CDATA[AAAAAgAAAEwAewA3AGQANAA3ADEAYgAyADEALQA2ADMAZgAwAC0ANAAzAGIAOAAtAGEAOABkADkALQBmADEAMwBmADgANABiAGEANAA1AGUAOQB9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ==]]>
|
||||
</DiagramLayout>
|
||||
</ManagedForm>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,93 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<report:Report xmlns:rtl="http://www.4js.com/2004/RTL" xmlns:report="http://www.4js.com/2007/REPORT" xmlns="http://www.4js.com/2004/PXML" gstVersion="31405" version="6.00">
|
||||
<report:Settings RWPageWidth="letterwidth" RWPageLength="letterlength" RWLeftMargin="0.5inch" RWTopMargin="0.5inch" RWRightMargin="0.5inch" RWBottomMargin="0.5inch">
|
||||
<report:FormatList>
|
||||
<report:Format-SVG/>
|
||||
<report:Format-PDF/>
|
||||
<report:Format-image/>
|
||||
</report:FormatList>
|
||||
</report:Settings>
|
||||
<report:Data RWDataLocation="../addir/adprmt017.rdd" RWFglReportName="imp_accion"/>
|
||||
<report:Conflicts/>
|
||||
<rtl:stylesheet>
|
||||
<PXML>
|
||||
<rtl:match name="Report" nameConstraint="Report">
|
||||
<MINIPAGE name="Page Root" width="max" length="max">
|
||||
<LAYOUTNODE name="Header" width="min" length="min" layoutDirection="leftToRight" floatingBehavior="enclosed">
|
||||
<WORDBOX name="WordBox" floatingBehavior="enclosed" text="adprmt017"/>
|
||||
<rtl:input-variable name="p_companias.nombre" type="FGLString" expectedLocation="expectedAhead"/>
|
||||
<WORDBOX name="WordBox3" width="max-3cm" fontSize="14" fontBold="true" floatingBehavior="enclosed" textAlignment="center" text="{{p_companias.nombre.trim()}}"/>
|
||||
</LAYOUTNODE>
|
||||
<LAYOUTNODE name="SubHeader" width="min" length="min" layoutDirection="leftToRight" floatingBehavior="enclosed">
|
||||
<WORDBOX name="WordBox1" width="max-2.5cm" fontSize="10" fontBold="true" floatingBehavior="enclosed" textAlignment="center" text="ACCION NOMINAS"/>
|
||||
<rtl:input-variable name="hoy" type="FGLString" expectedLocation="expectedAhead"/>
|
||||
<WORDBOX name="WordBox2" floatingBehavior="enclosed" text="{{hoy.trim()}}"/>
|
||||
</LAYOUTNODE>
|
||||
<rtl:match name="OnEveryRow" nameConstraint="OnEveryRow" minOccurs="0" maxOccurs="unbounded">
|
||||
<LAYOUTNODE name="Informacion1" width="min" length="min" fontSize="8" layoutDirection="leftToRight" floatingBehavior="enclosed" roundedCorners="true" borderWidth="1" borderStyle="solid">
|
||||
<rtl:input-variable name="mov_emp.desc_mto" type="FGLString" expectedLocation="expectedHere"/>
|
||||
<WORDBOX name="WordBox4" width="2.5inch" floatingBehavior="enclosed" text="{{mov_emp.desc_mto}}" borderWidth="1" borderStyle="none"/>
|
||||
<rtl:input-variable name="acc_per.num_trx" type="FGLNumeric" expectedLocation="expectedHere"/>
|
||||
<WORDBOX name="WordBox5" width="2.5inch" floatingBehavior="enclosed" text="{{"DOCUMENTO: "+acc_per.num_trx.format("&&&&&&")}}" borderWidth="1" borderStyle="none"/>
|
||||
<rtl:input-variable name="acc_per.fecha" type="FGLString" expectedLocation="expectedHere"/>
|
||||
<WORDBOX name="WordBox6" width="2.5inch" floatingBehavior="enclosed" text="{{"FECHA: "+acc_per.fecha}}" borderWidth="1" borderStyle="none"/>
|
||||
</LAYOUTNODE>
|
||||
<LAYOUTNODE name="Informacion2" width="min" length="min" fontSize="8" layoutDirection="leftToRight" floatingBehavior="enclosed">
|
||||
<rtl:input-variable name="nombre9" type="FGLString" expectedLocation="expectedHere"/>
|
||||
<rtl:input-variable name="nombre10" type="FGLString" expectedLocation="expectedHere"/>
|
||||
<WORDWRAPBOX name="WordWrapBox" width="2.5inch" floatingBehavior="enclosed" text="{{"NOMBRES:"+nombre9.trim()+" "+nombre10.trim()}}" borderWidth="1" borderStyle="none"/>
|
||||
<rtl:input-variable name="apellido9" type="FGLString" expectedLocation="expectedHere"/>
|
||||
<rtl:input-variable name="apellido10" type="FGLString" expectedLocation="expectedHere"/>
|
||||
<WORDWRAPBOX name="WordWrapBox1" width="2.5inch" floatingBehavior="enclosed" text="{{"APELLIDOS:"+apellido9.trim()+" "+apellido10}}"/>
|
||||
<rtl:input-variable name="acc_per.fech_efec" type="FGLString" expectedLocation="expectedHere"/>
|
||||
<WORDWRAPBOX name="WordWrapBox2" width="2.5inch" floatingBehavior="enclosed" text="{{"FECHA EFECTIVA:"+acc_per.fech_efec}}"/>
|
||||
</LAYOUTNODE>
|
||||
<LAYOUTNODE name="Informacion3" width="min" length="min" fontSize="8" layoutDirection="leftToRight" floatingBehavior="enclosed" borderWidth="1" borderStyle="solid">
|
||||
<rtl:input-variable name="vacacion.fecha_sal" type="FGLString" expectedLocation="expectedHere"/>
|
||||
<WORDBOX name="WordBox7" width="2.5inch" floatingBehavior="enclosed" text="{{"FECHA SALIDA:"+vacacion.fecha_sal}}"/>
|
||||
<rtl:input-variable name="vacacion.fecha_ent" type="FGLString" expectedLocation="expectedHere"/>
|
||||
<WORDBOX name="WordBox8" width="2.5inch" floatingBehavior="enclosed" text="{{"FECHA ENT:"+vacacion.fecha_ent}}"/>
|
||||
<rtl:input-variable name="vacacion.dias_tomados" type="FGLNumeric" expectedLocation="expectedHere"/>
|
||||
<WORDBOX name="WordBox9" width="2.5inch" floatingBehavior="enclosed" text="{{"DIAS TOMADOS:"+vacacion.dias_tomados.format("&&")}}"/>
|
||||
</LAYOUTNODE>
|
||||
<LAYOUTNODE name="Informacion4" width="min" length="min" fontSize="8" layoutDirection="leftToRight" floatingBehavior="enclosed">
|
||||
<rtl:input-variable name="vacacion.dias_vac" type="FGLNumeric" expectedLocation="expectedHere"/>
|
||||
<WORDBOX name="WordBox10" width="2.5inch" floatingBehavior="enclosed" text="{{"DIAS PAGADOS:"+vacacion.dias_vac.format("&&")}}"/>
|
||||
<rtl:input-variable name="vacacion.num_nomi" type="FGLNumeric" expectedLocation="expectedHere"/>
|
||||
<WORDBOX name="WordBox11" width="2.5inch" floatingBehavior="enclosed" text="{{"NUMERO NOMINA:"+vacacion.num_nomi.format("&&&&")}}"/>
|
||||
<rtl:input-variable name="vacacion.num_nomi" type="FGLNumeric" expectedLocation="expectedHere"/>
|
||||
<WORDBOX name="WordBox12" width="2.5inch" floatingBehavior="enclosed" text="{{"NOMINA NO C:"+vacacion.num_nomi.format("&&&&")}}"/>
|
||||
</LAYOUTNODE>
|
||||
<LAYOUTNODE name="Informacion5" width="min" length="min" fontSize="8" layoutDirection="leftToRight" floatingBehavior="enclosed" borderWidth="1" borderStyle="solid">
|
||||
<rtl:input-variable name="vacacion.pano" type="FGLNumeric" expectedLocation="expectedHere"/>
|
||||
<WORDBOX name="WordBox13" width="2.5inch" floatingBehavior="enclosed" text="{{"PERIODO:"+vacacion.pano}}"/>
|
||||
<rtl:input-variable name="vacacion.dias_tomados" type="FGLNumeric" expectedLocation="expectedHere"/>
|
||||
<WORDBOX name="WordBox14" width="2.5inch" floatingBehavior="enclosed" text="{{"DIAS A TOMAR:"+vacacion.dias_tomados}}"/>
|
||||
<rtl:input-variable name="dias2" type="FGLNumeric" expectedLocation="expectedHere"/>
|
||||
<WORDBOX name="WordBox15" width="2.5inch" floatingBehavior="enclosed" text="{{"DIAS PAGADOS:"+dias2}}"/>
|
||||
</LAYOUTNODE>
|
||||
<LAYOUTNODE name="Informacion6" width="min" length="min" layoutDirection="leftToRight" floatingBehavior="enclosed" borderWidth="1" borderStyle="solid">
|
||||
<rtl:input-variable name="vacacion.valor_vacaciones" type="FGLNumeric" expectedLocation="expectedHere"/>
|
||||
<WORDBOX name="WordBox16" width="2.5inch" fontSize="8" fontBold="true" floatingBehavior="enclosed" text="{{"VALOR VACACIONES:"+vacacion.valor_vacaciones.format("###,###.##")}}"/>
|
||||
</LAYOUTNODE>
|
||||
</rtl:match>
|
||||
<LAYOUTNODE name="Autorizaciones1" width="1.2inch" length="min" layoutDirection="leftToRight" floatingBehavior="enclosed">
|
||||
<WORDBOX name="WordBox17" length="1inch" floatingBehavior="enclosed"/>
|
||||
</LAYOUTNODE>
|
||||
<LAYOUTNODE name="Autorizciones2" width="min" length="min" layoutDirection="leftToRight" floatingBehavior="enclosed" borderWidth="1" borderStyle="solid">
|
||||
<rtl:input-variable name="descrip3" type="FGLString" expectedLocation="expectedBefore"/>
|
||||
<WORDBOX name="WordBox20" width="5inch" floatingBehavior="enclosed" text="{{"SOLICITADO POR: "+descrip3.trim()}}"/>
|
||||
</LAYOUTNODE>
|
||||
<LAYOUTNODE name="Autorizaciones3" width="min" length="min" layoutDirection="leftToRight" floatingBehavior="enclosed">
|
||||
<rtl:input-variable name="descrip4" type="FGLString" expectedLocation="expectedBefore"/>
|
||||
<WORDBOX name="WordBox21" width="5inch" floatingBehavior="enclosed" text="{{"AUTORIZADO: "+descrip4.trim()}}" borderWidth="1" borderStyle="solid"/>
|
||||
</LAYOUTNODE>
|
||||
<LAYOUTNODE name="Autorizaciones4" width="min" length="min" layoutDirection="leftToRight" floatingBehavior="enclosed">
|
||||
<rtl:input-variable name="descrip5" type="FGLString" expectedLocation="expectedBefore"/>
|
||||
<WORDBOX name="WordBox22" width="5inch" floatingBehavior="enclosed" text="{{"APROBADO: "+descrip5.trim()}}" borderWidth="1" borderStyle="solid"/>
|
||||
</LAYOUTNODE>
|
||||
</MINIPAGE>
|
||||
</rtl:match>
|
||||
</PXML>
|
||||
</rtl:stylesheet>
|
||||
</report:Report>
|
||||
Reference in New Issue
Block a user