Inicio > Uncategorized > Advance Business Application Programming Código Ejemplo

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.

 

Categorías:Uncategorized
  1. Aún no hay comentarios.
  1. Aún no hay trackbacks

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s

Seguir

Get every new post delivered to your Inbox.