Advance Business Application Programming Código Ejemplo
En esta entrada colocaré un código con ejemplos de Ciclos, querys con condiciones dinámicas y muchas cosas interesantes que les pueden servir! cualquier cosa que no entiendan estoy a sus órdenes, el código lo puse con muchos comentarios, pero si no entienden algo les puedo dar más detalles al respecto.
function znoel_colonias_adeudos.
*”———————————————————————-
*”*”Interfase local
*” IMPORTING
*” VALUE(ZCYTYNAME) TYPE ADRCITYT-CITY_NAME OPTIONAL
*” VALUE(ZPARTNER) TYPE DPSOB_BP_ACC-PARTNER OPTIONAL
*” TABLES
*” T_OBJETO_UNICO STRUCTURE ZST_NOEL_COL_ADEUDOS
*” T_PERSONAS STRUCTURE ZST_PERSONAS
*” EXCEPTIONS
*” NO_DATA
*”———————————————————————-
*&*********************************************************************
*&
*& AUTOR: JLIRA
*& FECHA MODIFICACIÓN: 28/09/10 - 08/10/10
*&
*&*********************************************************************
“ Datos referente al manejo de los datos
data: it_adeudos1 type table of zst_noel_col_adeudos,
it_adeudos3 type table of zst_noel_col_adeudos,
“Tabla para obtener los BP únicos y poder consultar sus datos
it_adeudos2 type table of zst_noel_col_adeudos,
it_personas type table of zst_personas,
wa_col_adeudo1 like line of it_adeudos1,
wa_col_adeudo3 like line of it_adeudos3,
“WAs para obtener los datos de las personas con adeudos
wa_col_adeudo2 like line of it_adeudos2,
wa_personas like line of it_personas,
indice1 like sy-tabix,
indice3 like sy-tabix,
indice2 like sy-tabix,
annio type c length 4.
“ Datos referente a la condición where del query
data: cond(72) type c, ” variable para determinar nuestra condición
cl_estadistica type c value ’G',”Clave estadística
nodebe(1) type c value 9, ”el 9 espara determinar que no esté
“compensado el pago
fecha type d, ” dato que tendrá la fecha de hoy para
“ comparar las fechas vencidas.
itab like table of cond. ”tabla donde se apendiza la variable
“Limpiamos nuestra variable INDICE e inicializamos el contador
clear: indice1, indice3.
“ Asignamos la fecha de hoy
fecha = sy-datum.
if zpartner ne ”. ” si se busca por Colonia e Interlocutor comercial
concatenate ’city~CITY_NAME = ”’ zcytyname ”” into cond.
append cond to itab.
concatenate ’and df~GPART = ”’ zpartner ”” into cond.
append cond to itab.
concatenate ’and DF~AUGST ne ”’ nodebe ”” into cond.
append cond to itab.
concatenate ’and DF~STAKZ EQ ”’ cl_estadistica ”” into cond.
append cond to itab.
concatenate ’and df~FAEDN < ”’ fecha ”” into cond.
append cond to itab.
else. ” o en caso de que se busque solamente por colonia.
concatenate ’city~CITY_NAME = ”’ zcytyname ”” into cond.
append cond to itab.
concatenate ’and DF~AUGST ne ”’ nodebe ”” into cond.
append cond to itab.
concatenate ’and DF~STAKZ EQ ”’ cl_estadistica ”” into cond.
append cond to itab.
concatenate ’and df~FAEDN < ”’ fecha ”” into cond.
append cond to itab.
endif.
“IC obj_cntr CTA_cntr Unidad_E tipoCta
select distinct df~gpart acc~psobkey df~vkont be~swenr acc~kofiz
“num_doc posición
df~opbel df~opupk
“Op.pral Op.parcl num.Colonia Nom.colonia
df~hvorg df~tvorg city~city_code rc~mc_city1
“persona.nombre apellido1 apellido2
but~name_first but~name_last but~name_lst2
“calle Demarcación Parcela1 Parcela2
rc~street pr~xgemark pr~nflurnr pr~xflurst
“Parcela.fracc Descuento Importe fechaIni fechafin
pr~brflurst df~sktpz df~betrw df~bldat df~faedn
into table it_adeudos1 ” T_COLONIAS_ADEUDOS
from dfkkop as df
“ Join por CTA_Contrato
inner join dpsob_bp_acc as acc on df~vkont = acc~partneracc
“ Join por Interlocutor comercial
inner join but000 as but on acc~partner = but~partner
“ Join por número de persona
inner join adcp as cp on but~persnumber = cp~persnumber
“ Join por número de dirección
inner join adrc as rc on cp~addrnumber = rc~addrnumber
“ Join por Interlocutor Comercial
inner join vibpobjrel as rel on rel~partner = acc~partner
“ Join por Unidad económica
inner join vibdbe as be on rel~intreno = be~intreno
“ Join por Unidad económica
inner join vibdpr as pr on pr~swenr = be~swenr
“ Join por el nombre de la colonia
inner join adrcityt as city on rc~city1 = city~city_name
where (itab). ” Nuestro Where dinámico
“$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
if sy-subrc <> 0. ” Revisamos que tenga datos nuestro query
raise no_data.
else. ” Si tiene datos empezamos las operaciones
“ Empieza el ciclo para obtener el año
loop at it_adeudos1 into wa_col_adeudo1 from indice1.
add 1 to indice1.
“&———- Obtenemos el año en que se generó el adeudo ————
wa_col_adeudo1-annio = wa_col_adeudo1-fecha_ini(4).
“&———–SE REALIZA LA MODIFICACIÓN A LA TABLA——————-
modify it_adeudos1 from wa_col_adeudo1
index indice1 ”obtenemos el registro en el que se encuentra
transporting annio.
endloop. ” Termina Ciclo
clear indice1.
“Primero clonamos la tabla interna para hacer comparaciones
move it_adeudos1 to it_adeudos3.
it_adeudos1 = it_adeudos3.
“Ordenamos por OBJ. Contrato, CTA. Contrato y Año
sort it_adeudos1 by psobkey cta_contrato annio hvorg tvorg.
sort it_adeudos3 by psobkey cta_contrato annio hvorg tvorg.
“Borramos los duplicados de esos mismos campos para la tabla3
delete adjacent duplicates from it_adeudos3 comparing psobkey
cta_contrato
annio
hvorg
tvorg.
“ ciclo para determinar los casos de op. principal y op. parcial
loop at it_adeudos1 into wa_col_adeudo1 from indice1.
add 1 to indice1.
if wa_col_adeudo1-hvorg eq 0001.”Op.principal Obtenemos las CxC
“ Op. Parcial
“ PREDIAL!!!!!!!!
“ Impuesto Predial Corriente
if ( wa_col_adeudo1-tvorg eq 1001 or
wa_col_adeudo1-tvorg eq 1005 ).
wa_col_adeudo1-impuesto_pre = wa_col_adeudo1-importe.
modify it_adeudos1 from wa_col_adeudo1
index indice1
transporting impuesto_pre.
“ Impuesto Predial Rezago
elseif ( wa_col_adeudo1-tvorg eq 1009 or
wa_col_adeudo1-tvorg eq 1012 ).
wa_col_adeudo1-rez_imp_pre = wa_col_adeudo1-importe.
modify it_adeudos1 from wa_col_adeudo1
index indice1
transporting rez_imp_pre.
“ Multas predial
elseif ( wa_col_adeudo1-tvorg eq 4006 ).
wa_col_adeudo1-multas_pre = wa_col_adeudo1-importe.
modify it_adeudos1 from wa_col_adeudo1
index indice1
transporting multas_pre.
“ Gto notificación predial
elseif ( wa_col_adeudo1-tvorg eq 4023 ).
wa_col_adeudo1-gto_not_pre = wa_col_adeudo1-importe.
modify it_adeudos1 from wa_col_adeudo1
index indice1
transporting gto_not_pre.
“LIMPIA!!!!!!!!!!!!!!!1
“ Impuesto Limpia Corriente
elseif ( wa_col_adeudo1-tvorg eq 2485 or
wa_col_adeudo1-tvorg eq 2486 or
wa_col_adeudo1-tvorg eq 2487 ).
wa_col_adeudo1-impuesto_lim = wa_col_adeudo1-importe.
modify it_adeudos1 from wa_col_adeudo1
index indice1
transporting impuesto_lim.
“ Impuesto Limpia Rezago
elseif ( wa_col_adeudo1-tvorg eq 2480 or
wa_col_adeudo1-tvorg eq 2481 or
wa_col_adeudo1-tvorg eq 2482 ).
wa_col_adeudo1-rez_imp_lim = wa_col_adeudo1-importe.
modify it_adeudos1 from wa_col_adeudo1
index indice1
transporting rez_imp_lim.
“ Multas limpia
elseif ( wa_col_adeudo1-tvorg eq 4014 ).
wa_col_adeudo1-multas_lim = wa_col_adeudo1-importe.
modify it_adeudos1 from wa_col_adeudo1
index indice1
transporting multas_lim.
“ Gto notificación limpia
elseif ( wa_col_adeudo1-tvorg eq 4026 ).
wa_col_adeudo1-gto_not_lim = wa_col_adeudo1-importe.
modify it_adeudos1 from wa_col_adeudo1
index indice1
transporting gto_not_lim.
endif.
“RECARGOS!!!!!!!!!!
elseif wa_col_adeudo1-hvorg eq 0002.
if ( wa_col_adeudo1-tvorg eq 0001 or
wa_col_adeudo1-tvorg eq 0002 ).
wa_col_adeudo1-recargos = wa_col_adeudo1-importe.
modify it_adeudos1 from wa_col_adeudo1
index indice1
transporting recargos.
endif.
endif.
endloop. ” Termina Ciclo
clear indice1.
“ Empieza el ciclo para comparar datos
loop at it_adeudos3 into wa_col_adeudo3 from indice3.
add 1 to indice3. clear indice1.
“ Inicia nuestro Loop anidado para comparar registros
loop at it_adeudos1 into wa_col_adeudo1 from indice1.
add 1 to indice1.
“Revisamos que sea la misma cuenta contrato
if wa_col_adeudo1-cta_contrato eq wa_col_adeudo3-cta_contrato and
wa_col_adeudo1-annio eq wa_col_adeudo3-annio and
wa_col_adeudo1-hvorg eq wa_col_adeudo3-hvorg and
wa_col_adeudo1-tvorg eq wa_col_adeudo1-tvorg.
wa_col_adeudo3-multas_pre = wa_col_adeudo3-multas_pre +
wa_col_adeudo1-multas_pre.
modify it_adeudos3 from wa_col_adeudo3
index indice3
transporting multas_pre.
wa_col_adeudo3-rez_imp_pre = wa_col_adeudo3-rez_imp_pre +
wa_col_adeudo1-rez_imp_pre.
modify it_adeudos3 from wa_col_adeudo3
index indice3
transporting rez_imp_pre.
wa_col_adeudo3-impuesto_pre = wa_col_adeudo3-impuesto_pre +
wa_col_adeudo1-impuesto_pre.
modify it_adeudos3 from wa_col_adeudo3
index indice3
transporting impuesto_pre.
wa_col_adeudo3-gto_not_pre = wa_col_adeudo3-gto_not_pre +
wa_col_adeudo1-gto_not_pre.
modify it_adeudos3 from wa_col_adeudo3
index indice3
transporting gto_not_pre.
wa_col_adeudo3-multas_lim = wa_col_adeudo3-multas_lim +
wa_col_adeudo1-multas_lim.
modify it_adeudos3 from wa_col_adeudo3
index indice3
transporting multas_lim.
wa_col_adeudo3-rez_imp_lim = wa_col_adeudo3-rez_imp_lim +
wa_col_adeudo1-rez_imp_lim.
modify it_adeudos3 from wa_col_adeudo3
index indice3
transporting rez_imp_lim.
wa_col_adeudo3-impuesto_lim = wa_col_adeudo3-impuesto_lim +
wa_col_adeudo1-impuesto_lim.
modify it_adeudos3 from wa_col_adeudo3
index indice3
transporting impuesto_lim.
wa_col_adeudo3-gto_not_lim = wa_col_adeudo3-gto_not_lim +
wa_col_adeudo1-gto_not_lim.
modify it_adeudos3 from wa_col_adeudo3
index indice3
transporting gto_not_lim.
wa_col_adeudo3-recargos = wa_col_adeudo3-recargos +
wa_col_adeudo1-recargos.
modify it_adeudos3 from wa_col_adeudo3
index indice3
transporting recargos.
endif.
endloop.
endloop. ” Termina Ciclo para comparar datos
clear: indice1, indice3, it_adeudos1.
“Primero clonamos la tabla interna para hacer comparaciones
move: it_adeudos3 to it_adeudos2,
it_adeudos3 to it_adeudos1.”modificado 18/10/2010
it_adeudos3 = it_adeudos1.”modificado 18/10/2010
it_adeudos3 = it_adeudos2.
“Ordenamos por BusPartner, para poder borrar los repetidos
sort it_adeudos2 by buspartner.
“Borramos los duplicados de esos mismos campos para la tabla2
delete adjacent duplicates from it_adeudos2 comparing buspartner.
“Borramos las cta_contrato duplicadas
delete adjacent duplicates from it_adeudos1 comparing cta_contrato
annio.
“ Formateo de la tabla it_adeudos1, para sumar todos los importes
“ en una sola tupla.
loop at it_adeudos1 into wa_col_adeudo1 from indice1.
add 1 to indice1. ” para cada importe se inicializa a 0.0
“Predial
wa_col_adeudo1-multas_pre = 0.
wa_col_adeudo1-rez_imp_pre = 0.
wa_col_adeudo1-impuesto_pre = 0.
wa_col_adeudo1-gto_not_pre = 0.
“Limpia
wa_col_adeudo1-multas_lim = 0.
wa_col_adeudo1-rez_imp_lim = 0.
wa_col_adeudo1-impuesto_lim = 0.
wa_col_adeudo1-gto_not_lim = 0.
“Recargos aplica para ambos casos
wa_col_adeudo1-recargos = 0.
“Este campo ya no importa, pero tmb lo reseteamos
wa_col_adeudo1-importe = 0.
modify it_adeudos1 from wa_col_adeudo1
index indice1
transporting multas_pre
rez_imp_pre
impuesto_pre
gto_not_pre
multas_lim
rez_imp_lim
impuesto_lim
gto_not_lim
recargos
importe.
endloop.
clear: indice1.
“ Con este query llenamos nuestra tabla interna de personas
“ con personas de la colonia con adeudos
select distinct but~partner acc~psobkey but~persnumber but~name_first
but~name_last but~name_lst2 rc~street
rc~house_num1 city~city_code rc~post_code1
rc~tel_number
into table it_personas
from but000 as but
inner join dpsob_bp_acc as acc on but~partner = acc~partner
inner join adcp as cp on but~persnumber = cp~persnumber
inner join adrc as rc on cp~addrnumber = rc~addrnumber
inner join adrcityt as city on rc~city1 = city~city_name
where city~city_name = zcytyname.
“empieza el ciclo para obtener las personas con adeudos
loop at it_personas into wa_personas.
loop at it_adeudos2 into wa_col_adeudo2.
if wa_personas-buspartner eq wa_col_adeudo2-buspartner.
append wa_personas to t_personas.
endif.
endloop.
endloop.
“ Empieza el ciclo para obtener las cta_contrato únicas con sus
“ Respectivas deudas, esto es solo por formato en Netbeans.
loop at it_adeudos1 into wa_col_adeudo1 from indice1.
add 1 to indice1.
loop at it_adeudos3 into wa_col_adeudo3.
if wa_col_adeudo1-cta_contrato eq wa_col_adeudo3-cta_contrato and
wa_col_adeudo1-annio eq wa_col_adeudo3-annio.
“Predial
wa_col_adeudo1-multas_pre = wa_col_adeudo1-multas_pre +
wa_col_adeudo3-multas_pre.
wa_col_adeudo1-rez_imp_pre = wa_col_adeudo1-rez_imp_pre +
wa_col_adeudo3-rez_imp_pre.
wa_col_adeudo1-impuesto_pre = wa_col_adeudo1-impuesto_pre +
wa_col_adeudo3-impuesto_pre.
wa_col_adeudo1-gto_not_pre = wa_col_adeudo1-gto_not_pre +
wa_col_adeudo3-gto_not_pre.
“Limpia
wa_col_adeudo1-multas_lim = wa_col_adeudo1-multas_lim +
wa_col_adeudo3-multas_lim.
wa_col_adeudo1-rez_imp_lim = wa_col_adeudo1-rez_imp_lim +
wa_col_adeudo3-rez_imp_lim.
wa_col_adeudo1-impuesto_lim = wa_col_adeudo1-impuesto_lim +
wa_col_adeudo3-impuesto_lim.
wa_col_adeudo1-gto_not_lim = wa_col_adeudo1-gto_not_lim +
wa_col_adeudo3-gto_not_lim.
“Recargos aplica para ambos casos
wa_col_adeudo1-recargos = wa_col_adeudo1-recargos +
wa_col_adeudo3-recargos.
modify it_adeudos1 from wa_col_adeudo1
index indice1
transporting multas_pre
rez_imp_pre
impuesto_pre
gto_not_pre
multas_lim
rez_imp_lim
impuesto_lim
gto_not_lim
recargos.
“APPEND wa_personas TO T_PERSONAS.
endif.
endloop.
endloop.
clear: indice1, indice3.
“append lines of it_adeudos1 to T_COLONIAS_ADEUDOS.
append lines of it_adeudos1 to t_objeto_unico. ”esto se debe modify
endif.
“ Borramos contenido de la tabla y liberamos memoria.
free: it_adeudos1,
it_adeudos2,
it_adeudos3,
it_personas,
itab.
endfunction.