Archivo

Archivo para 20 noviembre 2010

Advance Business Application Programming Código Ejemplo

noviembre 20, 2010 Deja un comentario

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.

 

Categorías:Uncategorized
Seguir

Get every new post delivered to your Inbox.