Tuesday, April 24, 2007

De SAPFANS - Debugg desde PSA

I have written code in Start Routine and for few characteristics and key figure fields in the update routine. I am getting wrong values in ODS data.

I want to debug Start routine and fields of update routine.
Could any one of you suggest how to debug the Start routine and update routine code ???



Respuestas:

Or have a look at help.sap.com. In short: Go to the monitor, right-click a data package and choose simulate update. The rest should be pretty self-explanatory


Hi there,
try simulate update option with breakpoints in the routines. You can only use it when updating via PSA.

You can insert an endless loop in the beginning of your start routine or update rule routine, for example:

DATA: x(1) type c.

x = 1.
While x = 1.
Endwhile.

Then you execute your load. Go to transaction sm50 in your BW system and when you see that your process keeps hanging, you go to Program/Mode > Program > Debugging. Then you come into your code

De SAPFANS - Debugg query

Hi,
is ther a way to bebug the Bex exit. I tried to set break-point in the code and when tried to debug seems like it doesnt go there.

please let me know if this possible

Set your break point, and then execute the same query into BW, not with the Bex. For that, use transaction RSRT or RSRT1.

Creando Sistemas Externos (creando conexión sistemas fuentes)

You can specify the type of source system in the Administrator Workbench in the source system tree with the Create function.

You can make the settings for the logical system name in the BW Customizing Implementation Guide under Business Information Warehouse à Connections to other Systems à General Connection Settings. In the source system, you will find the settings for the logical system in the Implementation Guide under Cross Application Components à Distribution (ALE) à Basic Settings

Creating External Systems

Prerequisites

  1. You have made the following settings in the BW Customizing Implementation Guide under Business Information Warehouse ® Connections to other Systems.
    • General connection settings,
    • Verify workflow customizing.
  1. As a rule, no system changes are permitted in productive systems at all. Connecting a system as a source system to a BW or connecting a BW to a new source system will, however, mean changes as far as the system change option is concerned. For the clients concerned in the BW system therefore, you have made sure that the following changes are permitted during the source system connection.
      • Cross-client Customizing and Repository changes

In the BW Customizing Implementation Guide, select the relevant client under Business Information Warehouse ® Connections to Other Systems ® General Connection Settings ® Assign Logical System to Client, then choose Goto ® Detail. Choose the entry Changes to Repository and Cross-Client Customizing Permitted in the field Changes to Cross-Client Objects.

      • Changes to the software components local developments and Business Information Warehouse.

You can set up the changeability with Transaction SE03 (Organizer Tools). Choose Organizer Tools ® Administration ® Set Up System Change Option, then Execute. Make the settings in the subsequent screen.

      • Changes in the customer name range

Again, you can set up the changeability for the customer name area with Transaction SE03.

      • Changes to BW namespaces /BIC/ and /BI0/

Again, you can set up the changeability of the BW namespace with Transaction SE03.

Procedure

  1. In the BW Administrator Workbench, choose Source system tree ® Context menu (right mouse button) ® Create, and select the radio button for creating an external system.
  2. Enter a name and a description.
  3. For your extraction tool, maintain the destination that is to be referred to when loading data from BW.

Result

When you use the created destinations, the ALE settings that are necessary for communication between a BW system and an external system, are created in BW in the background. The BW settings in BW are created to a new link.

See also:

Maintaining InfoSources (External System)

Autorización para transporte de Roles

Si desea transportar los roles debe actualizar la autorización para el transporte de roles . El usuario requiere el objeto de autorización S_USER_AGR con la actividad "Transportar" (21) para los roles correspondientes.

1. Llame a la actualización de roles (PFCG)

2. Seleccione el rol deseado

3. Seleccione Modificar

4. Seleccionar en la tarjeta de registro Autorizaciones la función Modificar datos de autorización

5. Seleccione + Manualmente

6. Indique el objeto de autorización S_USER_AGR.

7. Seleccione Basis - Administración -> Autorizaciones: Verificación de roles.

8. Seleccione al bajo Actividad al menos el valor 21 para la actividad Transportar.

9. Indique bajo Nombre de rol el rol (los roles) o "*".

Agunas Notas OSS

Algunas notas:

646883 las PI de CO y PS R/3 no coinciden con las partidas totales en Bw

355432 RRI: incorrect call of report transactions 2

331843 RRI: incorrect call of report transactions

Verifica los días hábiles desde un calendario en BW


PROGRAM UPDATE_ROUTINE.

*$*$ begin of global - insert your declaration only below this line *-*

* TABLES: ...

* Rutina para validar Dias Habiles

*TYPES: BEGIN OF ti_estruc,

* /bic/zfecfin LIKE /bic/cs8z_ss_0025-/bic/zfecfin,

* /bic/zfecini LIKE /bic/cs8z_ss_0025-/bic/zfecini,

* /bic/zfecterm LIKE /bic/cs8z_ss_0025-/bic/zfecterm,

* /bic/zrecmots LIKE /bic/cs8z_ss_0025-/bic/zrecmots,

* /bic/zrecresul LIKE /bic/cs8z_ss_0025-/bic/zrecresul,

* /bic/zrectpo LIKE /bic/cs8z_ss_0025-/bic/zrectpo,

* /bic/zrutemp LIKE /bic/cs8z_ss_0025-/bic/zrutemp,

* /bic/zlocalid LIKE /bic/cs8z_ss_0025-/bic/zlocalid.

*TYPES:

*recno LIKE sy-tabix,

*conta(04) TYPE n,

*END OF ti_estruc.

*

*DATA: ti_entradas TYPE STANDARD TABLE OF ti_estruc WITH HEADER LINE

* WITH NON-UNIQUE DEFAULT KEY INITIAL SIZE 0.

*

*TYPES:

* BEGIN OF data_package_copy.

* INCLUDE STRUCTURE /bic/cs8z_ss_0025.

*TYPES:

* recno LIKE sy-tabix,

* END OF data_package_copy.

*DATA:

* data_package_copy TYPE STANDARD TABLE OF data_package_copy

* WITH HEADER LINE

* WITH NON-UNIQUE DEFAULT KEY INITIAL SIZE 0.

DATA: lc_dias TYPE i, " Numero de dias entre fechas

lc_diash TYPE i, " Numero de dias habiles

lc_fecha LIKE sy-datum, " Fecha para funcion

lc_indic LIKE scal-indicator, " Indicador de dia habil

lc_tabix LIKE sy-tabix.

*$*$ end of global - insert your declaration only before this line *-*

FORM compute_data_field

TABLES MONITOR STRUCTURE RSMONITOR "user defined monitoring

USING COMM_STRUCTURE LIKE /BIC/CS8Z_SS_0025

RECORD_NO LIKE SY-TABIX

RECORD_ALL LIKE SY-TABIX

SOURCE_SYSTEM LIKE RSUPDSIMULH-LOGSYS

CHANGING RESULT LIKE /BIC/VZSSI_CO04T-/BIC/ZDIAS_HAB

RETURNCODE LIKE SY-SUBRC

ABORT LIKE SY-SUBRC. "set ABORT <> 0 to cancel update

*

*$*$ begin of routine - insert your code only below this line *-*

* fill the internal table "MONITOR", to make monitor entries

*++++++++++++++++ Inicio de Rutina

* LOOP AT DATA_PACKAGE.

CLEAR: lc_dias, lc_diash.

* lc_tabix = sy-tabix.

* Restar fechas

lc_dias = COMM_STRUCTURE-/bic/zfecfin - COMM_STRUCTURE-/bic/zfecini.

ADD 1 TO lc_dias.

* Asignar fecha inicial a variable local

lc_fecha = COMM_STRUCTURE-/bic/zfecini.

* Ciclo de búsqueda de Días Habiles dentro del periodo

DO lc_dias TIMES.

CALL FUNCTION 'DATE_CONVERT_TO_FACTORYDATE'

EXPORTING

correct_option = '+'

date = lc_fecha

factory_calendar_id = 'CL'

IMPORTING

workingday_indicator = lc_indic

EXCEPTIONS

calendar_buffer_not_loadable = 1

correct_option_invalid = 2

date_after_range = 3

date_before_range = 4

date_invalid = 5

factory_calendar_not_found = 6

OTHERS = 7.

* Comparación de Día Habil

IF lc_indic IS INITIAL.

ADD 1 TO lc_diash.

ENDIF.

* Incrementar fecha

ADD 1 TO lc_fecha.

ENDDO.

RESULT = lc_diash.

* MODIFY DATA_PACKAGE.

* ENDLOOP.

* result value of the routine

* RESULT = .

* if the returncode is not equal zero, the result will not be updated

RETURNCODE = 0.

* if abort is not equal zero, the update process will be canceled

ABORT = 0.

*$*$ end of routine - insert your code only before this line *-*

*

El calendario se parametriza en SPRO de BW:





Collect a las caraterísiticas de un cubo para agregar los ratios

PROGRAM UPDATE_ROUTINE.

*$*$ begin of global - insert your declaration only below this line *-*

* TABLES:

DATA: BEGIN OF ti_entrada OCCURS 0.

INCLUDE STRUCTURE /bic/cs8zssi_co02.

DATA: END OF ti_entrada.

DATA: lc_pack(03).

*$*$ end of global - insert your declaration only before this line *-*

* The follow definition is new in the BW3.x

TYPES:

BEGIN OF DATA_PACKAGE_STRUCTURE.

INCLUDE STRUCTURE /BIC/CS8ZSSI_CO02.

TYPES:

RECNO LIKE sy-tabix,

END OF DATA_PACKAGE_STRUCTURE.

DATA:

DATA_PACKAGE TYPE STANDARD TABLE OF DATA_PACKAGE_STRUCTURE

WITH HEADER LINE

WITH NON-UNIQUE DEFAULT KEY INITIAL SIZE 0.

FORM startup

TABLES MONITOR STRUCTURE RSMONITOR "user defined monitoring

MONITOR_RECNO STRUCTURE RSMONITORS " monitoring with record n

DATA_PACKAGE STRUCTURE DATA_PACKAGE

USING RECORD_ALL LIKE SY-TABIX

SOURCE_SYSTEM LIKE RSUPDSIMULH-LOGSYS

CHANGING ABORT LIKE SY-SUBRC. "set ABORT <> 0 to cancel update

*

*$*$ begin of routine - insert your code only below this line *-*

* fill the internal tables "MONITOR" and/or "MONITOR_RECNO",

* to make monitor entries

* Rutina para buscar el promedio de Nro.Documentos de Cobro en un

* período

* Lectura de data package para hacer el collect sobre la TI

BREAK-POINT.

LOOP AT DATA_PACKAGE.

MOVE DATA_PACKAGE TO ti_entrada.

COLLECT ti_entrada.

ENDLOOP.

* Calculo del promedio

LOOP AT ti_entrada.

IF NOT ti_entrada-/bic/znumdoc IS INITIAL.

ti_entrada-/bic/zpromedio = ti_entrada-/bic/znumdoct3 /

ti_entrada-/bic/znumdoc.

MODIFY ti_entrada INDEX sy-tabix.

ENDIF.

ENDLOOP.

REFRESH DATA_PACKAGE.

LOOP AT ti_entrada.

MOVE ti_entrada TO DATA_PACKAGE.

APPEND DATA_PACKAGE.

ENDLOOP.

* if abort is not equal zero, the update process will be canceled

ABORT = 0.

*$*$ end of routine - insert your code only before this line *-*

*

ENDFORM.

Tuesday, September 20, 2005

Avance proyectos

Nota: Este código funciona solo si está configurado un solo elemento PEP de primer nivel por proyecto.

*&---------------------------------------------------------------------*
*& Report ZBWR_DET_AVANCE_PROY *
*& *
*&---------------------------------------------------------------------*
REPORT ZBWR_DET_AVANCE_PROY .
*-----------------------------------------------------------------------
* AUTOR :
* FECHA :
* CLIENTE :
* DESCRIPCION : Determina avance de los proyectos ejecutando la
* transacción CNE1 y almacena la información en la tabla
* ZBW_T_AVANCEPS
* SOLICITUD :
*-----------------------------------------------------------------------
* MODIFICACIONES :
*-----------------------------------------------------------------------
INCLUDE ZBWX_BATCH_CNE1T.
INCLUDE ZBWX_BATCH_CNE1F.

*TOP-OF-PAGE.
*START PROGRAM**********************************************************
START-OF-SELECTION.
REFRESH : bdc_tab.
* Busca los proyectos en la tabla PROJ
PERFORM buscar_datos.
* Ejecuta la transacción CNE1 para cada proyecto
PERFORM main_job.
* Graba avance en tabla ZBW_T_AVANCEPS
PERFORM graba_tablaBW.

END-OF-SELECTION.



____________________________________________________________________________

ZBWX_BATCH_CNE1T
==============
*&---------------------------------------------------------------------*
*& Include ZBWX_BATCH_CNE1T *
*&---------------------------------------------------------------------*
*BD=====================================================================
TABLES: t100,
proj, "Tablas de Proyectos
RPSQT, "Avance de Proyectos
PRPS, "Tabla de Elementos PEP
ZBW_T_AVANCEPS, "Tabla Avance Proyectos - BW
ZPS_T_EXTRACTOR. "Tabla Avance Proyectos - BW


DATA: BEGIN OF ti_datain OCCURS 0,
perbl LIKE rkpln-perbl,
gjahr LIKE ccss-gjahr,
aufnr LIKE ccss-aufnr,
stagr LIKE ccss-stagr,
sme(18) TYPE c,
sma(18) TYPE c,
END OF ti_datain.

DATA: BEGIN OF ti_split OCCURS 0,
registro(100) TYPE c.
DATA: END OF ti_split.

DATA: BEGIN OF ti_proj OCCURS 0,
mandt like proj-mandt,
pspid LIKE proj-pspid,
pspnr LIKE proj-pspnr.
DATA: END OF ti_proj.

DATA: BEGIN OF bdc_tab OCCURS 0.
INCLUDE STRUCTURE bdcdata.
DATA: END OF bdc_tab.

DATA: messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.

DATA : w_trnc(4) TYPE c, "transaccion
w_screen(8) TYPE c, "ID screen
w_numscr(4) TYPE c, "numero screen
w_lines TYPE p, "entradas
w_job(12) TYPE c. "job name

DATA: w_datum(08),
w_mes(02),
w_mes1(02),
mesant(06),
objeto like prps-objnr,
avance like RPSQT-MEG001.

FIELD-SYMBOLS : TYPE ANY,
TYPE ANY.

DATA: lc_campo(12),
lc_suma like RPSQT-MEG001,
lc_suma_plan like RPSQT-MEG001,
lc_suma_real like RPSQT-MEG001,
lc_suma_plantot like RPSQT-MEG001,
lc_suma_realtot like RPSQT-MEG001,
contador type I,
contador_act type I,
mandante like rpsqt-mandt,
valoruno(2).


________________________________________________________________________-

ZBWX_BATCH_CNE1F
=============

*&---------------------------------------------------------------------*
*& Include ZBWX_BATCH_CNE1F *
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form buscar_datos
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM buscar_datos .
* Almacena todos los proyectos de la tabla PROJ en una tabla interna
SELECT mandt pspid pspnr
INTO TABLE ti_proj
FROM proj.
ENDFORM. " buscar_datos
*&---------------------------------------------------------------------*
*& Form main_job
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM main_job .
* Ejecuta transacción CNE1 por cada proyecto de la tabla PROJ
CLEAR bdc_tab.
REFRESH bdc_tab.

* Fijar Sociedad CO
w_trnc = 'OKKS'.
PERFORM call_okks.
PERFORM bdc_transaccion USING w_trnc.

* Crear Call Transaction para CNE1
CLEAR bdc_tab.
REFRESH bdc_tab.

w_trnc = 'CNE1'.
LOOP AT ti_proj.
CLEAR bdc_tab.
REFRESH bdc_tab.
PERFORM llenar_bdc_data.
PERFORM bdc_transaccion USING w_trnc.
ENDLOOP.
ENDFORM. " main_job
*&---------------------------------------------------------------------*
*& Form llenar_bdc_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM llenar_bdc_data .
PERFORM move_bdc USING:
'X' 'SAPLKAZB' '1000',
' ' 'BDC_OKCODE' '=RUN',
' ' 'RKAUF-TEST' ' ',
' ' 'BDC_SUBSCR'
'SAPLCNEV_01_MASTER_DATA 0550BLOCK1',
' ' 'LKP74-PSPID' ti_proj-pspid,
' ' 'LKP74-INCL_HIER' 'X',
' ' 'LKP74-INCL_AUF' 'X',
' ' 'BDC_SUBSCR'
'SAPLKAZB 2450BLOCK2',
' ' 'RPSCO_X-VERSN_EV' 'TOT',
' ' 'RKAUF-TO' '12',
' ' 'RKAUF-GJAHR' '9998'.
ENDFORM. " llenar_bdc_data
*&---------------------------------------------------------------------*
*& Form move_bdc
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0027 text
* -->P_0028 text
* -->P_0029 text
*----------------------------------------------------------------------*
FORM move_bdc USING dynbegin prog_or_fnam dynpro_or_fval.
CLEAR bdc_tab.
IF dynbegin = 'X'.
MOVE: prog_or_fnam TO bdc_tab-program,
dynpro_or_fval TO bdc_tab-dynpro,
dynbegin TO bdc_tab-dynbegin.
ELSE.
MOVE: prog_or_fnam TO bdc_tab-fnam,
dynpro_or_fval TO bdc_tab-fval.
ENDIF.
APPEND bdc_tab.
ENDFORM. " move_bdc
*&---------------------------------------------------------------------*
*& Form bdc_transaccion
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM bdc_transaccion USING i_trnc.
REFRESH messtab.
CALL TRANSACTION i_trnc USING bdc_tab
MODE 'N'
MESSAGES INTO messtab.
IF sy-subrc NE 0.
PERFORM imprime_messtab.
ENDIF.
ENDFORM. " bdc_transaccion
*&---------------------------------------------------------------------*
*& Form imprime_messtab
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_I_TRNC text
*----------------------------------------------------------------------*
FORM imprime_messtab.
DATA: lc_mstring(480).

WRITE: / 'CALL_TRANSACTION',
'CNE1',
'returncode:'(i05),
sy-subrc,
'Registro:',
sy-tabix.
LOOP AT messtab.
SELECT SINGLE * FROM t100 WHERE sprsl = messtab-msgspra
AND arbgb = messtab-msgid
AND msgnr = messtab-msgnr.
IF sy-subrc = 0.
lc_mstring = t100-text.
IF lc_mstring CS '&1'.
REPLACE '&1' WITH messtab-msgv1 INTO lc_mstring.
REPLACE '&2' WITH messtab-msgv2 INTO lc_mstring.
REPLACE '&3' WITH messtab-msgv3 INTO lc_mstring.
REPLACE '&4' WITH messtab-msgv4 INTO lc_mstring.
ELSE.
REPLACE '&' WITH messtab-msgv1 INTO lc_mstring.
REPLACE '&' WITH messtab-msgv2 INTO lc_mstring.
REPLACE '&' WITH messtab-msgv3 INTO lc_mstring.
REPLACE '&' WITH messtab-msgv4 INTO lc_mstring.
ENDIF.
CONDENSE lc_mstring.
WRITE: / messtab-msgtyp, lc_mstring(250).
ELSE.
WRITE: / messtab.
ENDIF.
ENDLOOP.
SKIP.
ENDFORM. " imprime_messtab
*&---------------------------------------------------------------------*
*& Form call_okks
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM call_okks.
* Fija Sociedad CO
PERFORM move_bdc USING:
'X' 'SAPLSPO4' '0300',
' ' 'BDC_OKCODE' '=FURT',
' ' 'SVALD-VALUE(01)' 'ENAP'.
ENDFORM. " call_okks

*&---------------------------------------------------------------------*
*& Form graba_tablaBW
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM graba_tablaBW.
* Borra tabla de avance físico
delete from ZBW_T_AVANCEPS.

LOOP AT ti_proj.
mandante = ti_proj-mandt.
avance = 0.
* lc_suma_plan y lc_suma_real almacenan avance al final del mes anterior
* lc_suma_plantot y lc_suma_realtot almacenan avance a la fecha
lc_suma_plan = 0.
lc_suma_real = 0.
lc_suma_plantot = 0.
lc_suma_realtot = 0.
* Busca elemento PEP de primer nivel
select single * from PRPS
where PSPHI = ti_proj-pspnr
AND STUFE = 1.
* Si existe elemento PEP, busca el avance para el proyecto
if sy-subrc = 0.
objeto = prps-objnr.
select * from RPSQT
where OBJNR = prps-objnr
and acpos = 'AGREG'
and versn = 'TOT'
and gjahr <= sy-datum+0(4).

w_mes = sy-datum+4(2).
* Si el año leido es el actual, debe sumar avance hasta el mes actual,
* de lo contrario, suma todos los meses
if rpsqt-gjahr = sy-datum+0(4).
contador = w_mes.
w_mes1 = w_mes.
else.
contador = 12.
w_mes1 = 12.
endif.
DO contador TIMES.
CONCATENATE 'RPSQT-MEG0' w_mes1 INTO lc_campo.
ASSIGN (lc_campo) TO .
if rpsqt-wrttp = 'P1'.
* Tipo de valor plan
lc_suma_plantot = lc_suma_plantot + .
if not ( w_mes1 = w_mes
and rpsqt-gjahr = sy-datum+0(4) ).
lc_suma_plan = lc_suma_plan + .
endif.
elseif rpsqt-wrttp = 'P2'.
* Tipo de valor real
lc_suma_realtot = lc_suma_realtot + .
if not ( w_mes1 = w_mes
and rpsqt-gjahr = sy-datum+0(4) ).
lc_suma_real = lc_suma_real + .
endif.
endif.

w_mes1 = w_mes1 - 1.
if w_mes1 < 10.
concatenate '0' w_mes1 into w_mes1.
endif.
ENDDO.
endselect.
endif.

* Determina mes anterior para agregar el valor a la tabla
w_mes1 = sy-datum+4(2) - 1.
if w_mes1 < 10.
concatenate '0' w_mes1 into w_mes1.
endif.
concatenate sy-datum+0(4) w_mes1 into mesant.

* Agrega avance real al último mes finalizado
ZBW_T_AVANCEPS-MANDT = mandante.
ZBW_T_AVANCEPS-MESANIO = mesant.
ZBW_T_AVANCEPS-PSPID = ti_proj-PSPID.
ZBW_T_AVANCEPS-AVANCEFISICO = lc_suma_real.
ZBW_T_AVANCEPS-TIPOVALOR = 10.
ZBW_T_AVANCEPS-BUDAT = sy-datum.
INSERT ZBW_T_AVANCEPS.
* Agrega avance plan al último mes finalizado
ZBW_T_AVANCEPS-MANDT = mandante.
ZBW_T_AVANCEPS-MESANIO = mesant.
ZBW_T_AVANCEPS-PSPID = ti_proj-PSPID.
ZBW_T_AVANCEPS-AVANCEFISICO = lc_suma_plan.
ZBW_T_AVANCEPS-TIPOVALOR = 20.
ZBW_T_AVANCEPS-BUDAT = sy-datum.
INSERT ZBW_T_AVANCEPS.
* Agrega avance real a la fecha
ZBW_T_AVANCEPS-MANDT = mandante.
ZBW_T_AVANCEPS-MESANIO = sy-datum+0(6).
ZBW_T_AVANCEPS-PSPID = ti_proj-PSPID.
ZBW_T_AVANCEPS-AVANCEFISICO = lc_suma_realtot.
ZBW_T_AVANCEPS-TIPOVALOR = 10.
ZBW_T_AVANCEPS-BUDAT = sy-datum.
INSERT ZBW_T_AVANCEPS.
* Agrega avance plan a la fecha
ZBW_T_AVANCEPS-MANDT = mandante.
ZBW_T_AVANCEPS-MESANIO = sy-datum+0(6).
ZBW_T_AVANCEPS-PSPID = ti_proj-PSPID.
ZBW_T_AVANCEPS-AVANCEFISICO = lc_suma_plantot.
ZBW_T_AVANCEPS-TIPOVALOR = 20.
ZBW_T_AVANCEPS-BUDAT = sy-datum.
INSERT ZBW_T_AVANCEPS.

ENDLOOP.
ENDFORM. " graba_tablaBW

Resta un mes a la fecha

DATA: fecha(06),
mes(02),
year(04),
fecha_new(06).

fecha = '200501'.
mes = fecha+4(2).
year = fecha+0(4).

IF mes = '01'.
year = year - 1.
CONCATENATE year '12' INTO fecha_new.
CONDENSE fecha_new NO-GAPS.
ELSE.
mes = mes - 1.
UNPACK mes TO mes.
CONCATENATE year mes INTO fecha_new.
CONDENSE fecha_new NO-GAPS.
ENDIF.

fecha = fecha_new.

Tuesday, August 16, 2005

Agregar queries y WAD's en Roles

La denominación para agregar queries y WAD's en los roles es la siguiente:

Query:
:///sap/bw/BEx?sap-language=&bsplanguage=ES&cmd=ldoc&INFOCUBE=nombre_cubo&QUERY=nombre_query


WAD:
:///sap/bw/BEx?sap-language=&bsplanguage=ES&cmd=ldoc&TEMPLATE_ID=nombre_WAD

Thursday, July 28, 2005

VKF - INCLUDE ZXRSRTOP

Movido a: SAP BI Tricks & Tips

Proyectos - Asignación Ampliaciones

Variables BW: RSR00001.
VKF: RSR00002.
Extractores R/3: RSAP0001.

Arma inicio y fin mes anterior para cargar

* Calcula el Primer y Ultimo día del mes anterior a la fecha del sistema
WHEN 'ZMESANT'.
IF I_STEP = 0.
L_DATE = sy-datum.
L_YEAR = sy-datum(4).
L_MONTH = sy-datum+4(2).
L_MONTH = L_MONTH - 1.
IF L_MONTH < l_month =" '12'." l_year =" L_YEAR" low =" L_DATE." day_in =" L_DATE" last_day_of_month =" L_DATE" day_in_not_valid =" 1" others =" 2."> 0.
MESSAGE E002(ZENAP).
ENDIF.
L_S_RANGE-SIGN = 'I'.
L_S_RANGE-OPT = 'BT'.
L_S_RANGE-HIGH = L_DATE.
APPEND L_S_RANGE TO E_T_RANGE.
ENDIF.

Thursday, July 07, 2005

Lee ODS - Rutina Inicio

PROGRAM UPDATE_ROUTINE.
*$*$ begin of global - insert your declaration only below this line *-*
************************************************
* Tabla ODS a leer
************************************************
TABLES: /BIC/AODS_VYCP00.
* DATA: ...
CONSTANTS:
C_PLAN type /BI0/OIVTYPE value '020',
C_REAL type /BI0/OIVTYPE value '010'.
*$*$ end of global - insert your declaration only before this line *-*

* The follow definition is new in the BW3.x
TYPES:
BEGIN OF DATA_PACKAGE_STRUCTURE.
INCLUDE STRUCTURE /BIC/CS0EC_PCA_1.
TYPES:
RECNO LIKE sy-tabix,
END OF DATA_PACKAGE_STRUCTURE.
DATA:
DATA_PACKAGE TYPE STANDARD TABLE OF DATA_PACKAGE_STRUCTURE
WITH HEADER LINE
WITH NON-UNIQUE DEFAULT KEY INITIAL SIZE 0.

FORM startup
TABLES MONITOR STRUCTURE RSMONITOR "user defined monitoring
MONITOR_RECNO STRUCTURE RSMONITORS " monitoring with record n
DATA_PACKAGE STRUCTURE DATA_PACKAGE
USING RECORD_ALL LIKE SY-TABIX
SOURCE_SYSTEM LIKE RSUPDSIMULH-LOGSYS
CHANGING ABORT LIKE SY-SUBRC. "set ABORT <> 0 to cancel update
*
*$*$ begin of routine - insert your code only below this line *-*
* fill the internal table "MONITOR", to make monitor entries
data:
CEBEINT type /BIC/OIKCEBEINT,
TIPO_SUBREPARTO type /BIC/OIKTIPOSUB,
TABIX like SY-TABIX,
VER like DATA_PACKAGE-VERSION.

if ( SOURCE_SYSTEM = 'SL300' or SOURCE_SYSTEM = 'ZSLUA1020' ).
VER = 'P02'.
else.
VER = 'P03'.
endif.
loop at DATA_PACKAGE.
TABIX = sy-tabix.
DATA_PACKAGE-/BIC/KTIPOSUB = TIPO_SUBREPARTO.
if ( TIPO_SUBREPARTO = 'DEP' ).
************************************************
* Lectura de la ODS
************************************************
SELECT single * FROM /BIC/AODS_VYCP00
WHERE COORD_TYPE = 'XX'
AND WORKCENTER = 'YY'
AND CO_AREA = 'ZZ'
AND VERSION = 0
AND VTYPE = 10.
if ( sy-subrc = 0 ).
DATA_PACKAGE-/BIC/KTIPOSUB = 'DED'.
else.
DATA_PACKAGE-/BIC/KTIPOSUB = 'DEI'.
endif.
endif.
**********************************************************
* Actualiza DATA_PACKAGE (registros) con campos modificados
**********************************************************
modify DATA_PACKAGE INDEX TABIX.
endloop.
* if abort is not equal zero, the update process will be canceled
ABORT = 0.

*$*$ end of routine - insert your code only before this line *-*
*
ENDFORM.

Thursday, June 02, 2005

Ejemplo Ampliación extractor

FUNCTION ZBW_extractor1.
*"----------------------------------------------------------------------
*"*"Interfase local
*" TABLES
*" C_T_DATA
*"----------------------------------------------------------------------
tables: impr, imzo, prps.
data: zobjnr like prps-objnr,
zposnr like imzo-posnr,
zPSPHI like prps-PSPHI,
zstufe like prps-stufe,
z_data like ICWBSCST.

LOOP AT C_T_DATA.
z_data = C_T_DATA.
select objnr stufe psphi into (zobjnr, zstufe, zpsphi) from prps
where posid = z_data-posid.
exit.
endselect.
if sy-subrc = 0 and zstufe > 1.
select objnr into zobjnr from prps
where psphi = zpsphi and stufe = 1.
exit.
endselect.
endif.
select posnr into zposnr from imzo
where objnr = zobjnr.
select prnam gjahr into (z_data-IP_PRNAM, z_data-IP_GNJHR)
from impr
where posnr = zposnr.
exit.
endselect.
exit.
endselect.

c_t_data = z_data.
MODIFY C_T_DATA.
ENDLOOP.

ENDFUNCTION.

Ejemplo User-Exit Modular

FUNCTION ZZBW_KFECONT.
*"--------------------------------------------------------------------
*"*"Interfase local
*" TABLES
*" I_T_VAR_RANGE STRUCTURE RRRANGEEXIT
*" E_T_RANGE STRUCTURE RRRANGESID
*"--------------------------------------------------------------------
data: range type RRRANGESID,
variable like RRRANGEEXIT.

read table I_T_VAR_RANGE with key VNAM = 'FECHINI'
into variable.

range-sign = 'I'.
range-opt = 'BT'.
RANGE-LOW = VARIABLE-LOW.
RANGE-HIGH = VARIABLE-HIGH.

append range to e_t_range.

ENDFUNCTION.

Modularizar User-Exit - ZXRSRU01

*----------------------------------------------------------------------*
* INCLUDE ZXRSRU01
**---------------------------------------------------------------------
*
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*" IMPORTING
*" VALUE(I_VNAM) LIKE RSZGLOBV-VNAM
*" VALUE(I_VARTYP) LIKE RSZGLOBV-VARTYP
*" VALUE(I_IOBJNM) LIKE RSZGLOBV-IOBJNM
*" VALUE(I_S_COB_PRO) TYPE RSD_S_COB_PRO
*" VALUE(I_S_RKB1D) TYPE RSR_S_RKB1D
*" VALUE(I_PERIV) TYPE RRO01_S_RKB1F-PERIV
*" VALUE(I_T_VAR_RANGE) TYPE RRS0_T_VAR_RANGE
*" VALUE(I_STEP) TYPE I DEFAULT 0
*" EXPORTING
*" VALUE(E_T_RANGE) TYPE RSR_T_RANGESID
*" VALUE(E_MEEHT) LIKE RSZGLOBV-MEEHT
*" VALUE(E_MEFAC) LIKE RSZGLOBV-MEFAC
*" VALUE(E_WAERS) LIKE RSZGLOBV-WAERS
*" VALUE(E_WHFAC) LIKE RSZGLOBV-WHFAC
*" CHANGING
*" VALUE(C_S_CUSTOMER) TYPE RRO04_S_CUSTOMER OPTIONAL
*"----------------------------------------------------------------------
case I_VNAM.
** Variable1 ************************************************************
when 'VARIABLE1'.
if ( i_step <> 1 ).
call function 'Z_BW_variable1'
TABLES
I_T_VAR_RANGE = I_T_VAR_RANGE
E_T_RANGE = E_T_RANGE.
endif.
endcase.

Diversos Tips

- ¿Como se hace para usar una variable OLAP creada como User-exit como selección para la ejecución de un paquete de carga?
R.- Para que las variables OLAP funcionen en la carga de un paquete, el código debe estar escrito para el step=0, para que las variables funcionen en los queries, el código debe estar escrito para el step=2.

- 0MATERIAL está bien creado en Desarrollo, pasa bien el transporte a Producción, pero no se puede visualizar el Infoobjeto.
R.- Para visualizar 0material en BW debe estar definido con la transacción OMSL igual a como está en R/3.

- Los reportes desde Web cuando son guardados en Excel no muestran los valores de las características.
R.- Para poder guardar en excel los reportes Web, los queries NO deben tener en propiedades seleccionada la opción “Suprimir valores clave repetidos”.

- ¿Cómo se sabe en que orden de transporte se encuentra un extractor?
R.- Para buscar un extractor en una orden, usar la transacción SE03, buscar objetos en órdenes y, allí seleccionar Tipo de Objeto RETR OSOA (Fuente datos (vers. activa)).

- R.- Para combinar datos de una fila que los muestre en otra, asignar valores específicos a cada celda, se debe crear una matriz (estructura de características vs. Estructura de ratios) y utilizar la opción “Definir celdas” en el query.

- ¿Cómo se asigna una plantilla por defecto a todos los queries en Web?
R.- Para definir una plantilla Web por defecto para todos los queries, se asigna ésta a un rol, usando la transacción SPRO.

- ¿Con qué transacción se crea la orden BEX?
R.- Para crear la orden BEX se usa la opción Transporte/Orden BEX en el Workbench.

- El resultado de un query sobre un cubo transaccional no trae los últimos datos cargados. La última petición de carga está en amarillo.
R.- Para consultar un cubo transaccional y que el resultado tome en consideración los datos aún cuando la petición esté en amarillo, se debe seleccionar la característica “Datos mas actualizados” dentro de la dimensión “Paquete” como filtro del query.

- Existen grupos de Centros de Coste que no se ven disponibles para la carga en BW.
R.- Los grupos de Centros de Coste se ven reflejados como Jerarquías en BW, solo para los nodos principales.

- Una característica activada no aparece dentro de la lista de características disponibles para agregar a un cubo.
R.- Si una característica no aparece dentro de la lista de características posibles para agregar a un cubo, la razón podría ser que dicha característica está definida como “solo atributo”.

- ¿Cómo saber en que tabla se almacena un dato específico si al consultar la transacción R3 muestra una estructura?
R.- Para consultar las tablas usadas por una transacción X, se puede usar la transacción ST01 y grabar las acciones ejecutadas; luego se revisa el log donde se deben haber grabado los accesos a BD.

- Extractores LIS:
Activar extractor (SBIW), con la misma SBIW, inicializar estructuras de extracción para el área correspondiente (si es necesario borrar antes estructuración), luego por la transacción LBWE programar ejecución de job (Control de Job).

- Para mostrar en los queries los saldos acumulados, se puede utilizar el ratio 0BALANCE, el cual tiene como condición que se muestre el último valor cargado; para ello se debe cargar al cubo la información acumulada cada mes.

- Error al activar estructura de extracción de un LIS. Registros no contabilizados.

- Al tratar de realizar una inicialización de carga delta, el sistema indica que ya existe una inicialización y no permite realizar otra.
R.- Si se había realizado una inicialización delta, ésta debe ser borrada antes de realizar una nueva, para ello se selecciona la opción “Planificador / Selec.inicialización p.sistema fuente” en la Actualización de Infopaquete y allí se borra la inicialización anterior.

- Al tratar de realizar una carga a un cubo, aún cuando existe la regla de actualización creada, el cubo no aparece dentro de la lista de “Destino Datos” en el infopaquete.
R.- Esta situación podría ocurrir si el cubo es transaccional y está configurado para Planificar; en este caso, se debe cambiar la opción patra que el cubo permita carga desde Paquetes, ejecutar la carga y volver a cambiar la opción para que el cubo permita Planificar.

- ¿Cómo se puede leer una variable user-exit (o una variable de entrada manual) desde el programa para VKF?
R.- 1.- Se crea (o se usa) una variable en el query del tipo “entrada manual”, la cual solicitará al usuario el dato necesario para el cálculo (en este caso, Año de Corrección).

2.- Se crea una variable del tipo user-exit. En la función se tomará el valor ingresado por el usuario y se exportará a la memoria. El código a incluir para ello es:

SET PARAMETER ID ‘nombre del parameter ID a usar’ valor.

“nombre del parameter ID a usar”: algún parameter ID existente en el sistema que almacene año, p.ej: /BI0/OCALYEAR.
valor: nombre de la variable donde tenemos almacenado el valor a exportar.

3.- En la función de VKF (mas especificamente en el programa ZXRSRZZZ), se importa el valor de la memoria y se usa dentro de la rutina. El código a incluir para ello es:

GET PARAMETER ID ‘nombre del parameter ID a usar’ variable.

“nombre del parameter ID a usar”: parameter ID usado en el paso 2variable: nombre de la variable donde queremos almacenar el valor importado.

- No funciona la carga de datos desde un servidor BW a otro. La petición queda en amarillo indefinidamente.
R.- Se debe verificar la conexión entre los dos sistemas con la transacción SM59. Allí se selecciona el sistema a probar y se selecciona “Entrada al sistema remota”, si se ingresa al sistema remoto sin que se solicite un usuario, la conexión está funcionando; de lo contrario se debe verificar la cuenta de acceso configurada.

- Al abrir el BEx para tratar cualquier query, aparece un mensaje diciendo "Internal error when generating the history. Use a different view."
R.- Se debe activar historial BEx.
Para ello, ir a la transacción SPRO, Business Information Warehouse, Opciones relevantes para reporting, Parametrizaciones de reporting generales, Activar personalizaciòn en BEx, o bien usar la transacción RS_PERS_ACTIVATE.

- La carga delta de las ODS's de PSM-FM no funciona.
R.- Se debe activar la actualización delta configurando en R/3.
Transacción SPRO, Sector Público, Control presupuestario administración pública, sistema de información, Activar/Desactivar actualizacìón delta p. Business Information Warehouse.

- Al ejecutar un query muestra un mensaje de advertencia diciendo "La jerarquía presentación XXXXX repercute como filtro dinámico".
R.- Para eliminar este o cualquier otro mensaje de advertencia, se debe ir a la transacción rsrt y en la opción "Mensajes" marcar los mensajes que se desean suprimir. Otra opción es, en el caso de Web templates, marcar la opción "No visualizar mensajes de advertencia" en las propiedades generales.

- Al intentar borrar un objetivo de BSC, el sistema no lo permite indicando que está asociado a un balanced.
R.- Para eliminar los objetivos que no estén asociados a ningún bsc, se debe usar la interface web (Tx: umb_launchpad_web) usando Modo Experto.

- ¿Donde se coloca una plantilla Web como modelo a usar para todos los indicadores?
R.- Tx. SPRO -> BIW -> Opciones relevantes para reporting -> Parametrizaciones basadas en la Web.

- Al intentar ejecutar el programa para tipo de cambio (RSIMPCURR), el sistema no trae "sistema fuente".
R.- Ir a Tx. RSA1 -> Sistemas Fuente, pulsando botón derecho, seleccionar "Adoptar tipos de cambio", allí grabar la selección como una variante. Luego, ejecutar el programa desde la Tx. SE38 con la variante creada (ésta contendrá el sistema fuente).

- El mandante está bloqueado y no permite activar una regla de transferencia.
R.- Ejecutar RS_TRANSTRU_ACTIVATE_ALL, eso activa las reglas de transferencia cuando el mandante esta cerrado, luego pide el sistema fuente y la infofuente y se ejecuta.

Tuesday, May 31, 2005

VKF - INCLUDE ZXRSRZZZ

Movido a: SAP BI Tricks & Tips

VKF - INCLUDE ZXRSRU02

Movido a: SAP BI Tricks & Tips

Rutina Inicio - agrega entradas

Movido a: SAP BI Tricks & Tips

Transacciones

R/3
--------------------------------------------
SMOD - Definición Ampliaciones
CMOD - Gestión de Proyectos (Ampliaciones)
SE16 - Browser de Datos
SE11 - Diccionario ABAP
SE38 - Editor ABAP
SE37 - Biblioteca de funciones
SE93 - Transacciones
SM50 - Resumen de procesos
SBIW - Guía de Implementación
LBWE - Activación cargas delta
RSA3 - Verificar extractor
RSO2 - Actualizar fuente de datos
RSA7 - Cola Delta
LBWG - Borrado datos reestructurados
LBWQ - Monitor QRFC (Cola de salida), borrar cola LIS
ST01 - Grabadora de Acciones
SQ01 - Infoset Queries
SQ02 - Infosets
VTBW - Setup tables
VIFBW - Setup tables
OLIIBW - Extensión
LISOLI1BW - Setup tables
OLI2BW - Setup tables
OLI3BW - Setup tables
OLI4BW - Setup tables
OLI7BW - Setup tables
OLI9BW - Setup tables
OLIQBW - Setup tables
ABAP_DOCU_SHOW - ayuda
ABAPSCC1 - Copiar órdenes de otro mandante


BW
-----------------------------------------------
RSA1 - Modelado
SE16 - Browser de datos
SE09 - Transporte
SE11 - Diccionario de datos
SE38 - Editor
ABAPSE37 - Biblioteca de funciones
SE93 - Transacciones
STMS - Manejo de Transporte
SMOD - Definición Ampliaciones
CMOD - Gestión de Proyectos (Ampliaciones)
ST22 - Dumps
RRMX - Business explorer analizer
SM50 - Resumen de procesos
RSZC - Copiar Queries
RSBBS - Enlazar queries
RSZDELETE - Borrar queries
PFCG - Roles
RRC1 - Clase de Conversión
SPRO - Configuración (p.ej.: Caracteres Adicionales)
ST05 - Grabadora
UG00 - Menú SEM
SM12 - Bloqueos
RSDCUBEM - Verifica Cubos
RSD5 - Verifica Infoobjetos
RSSM - Autorizaciones
UG00 - Menú Aplicaciones
UMB_PRES1 - BSC
SM59 - Conexión a otros Sistemas
SE80 - ABAP Development Workbench
AL11 - Directorio de Aplicación
USS_FAS - Copiar archivos a directorio aplicación
RSRT1 - Monitor Query