Shared Top Border

Enterprise Resource
Planning Portal

 

Advertise | Founder BLOG

ERPGenie.COM ABAP Tips and Tricks Database

THE ultimate
ERP website

 

Forums | Vote for us |

Google    Other Search Options

Login

Login to view more content!!!





Lost Password?
No account yet? Register

Registered Access

Poll

What area of ABAP are you interested in?
 
Home arrow Sample Code arrow Games arrow Connect 4
Connect 4 PDF Print E-mail
User Rating: / 1
PoorBest 
Written by Antonio Silva Huertas   
Sunday, 21 January 2007
REPORT ZCONECTA NO STANDARD PAGE HEADING
                 MESSAGE-ID BD
                 LINE-SIZE 132
                 LINE-COUNT 65.
 
 
* Autor: Silva Huertas, Antonio Miguel
 
* E-mail: This e-mail address is being protected from spam bots, you need JavaScript enabled to view it
 
 INCLUDE <ICON>.
 
* Tablas
 
* Variables globales
 DATA: C1(8),                           
"Columnas
       C2(8),
       C3(8),
       C4(8),
       C5(8),
       C6(8),
       C7(8),
       C8(8).
 
 DATA: TFS(20).
 
 DATA: D_RET LIKE SY-SUBRC.
 
 DATA: MAQUINA,
       TURNO,
       LINEA TYPE I,
       OFFS  TYPE I VALUE 20,
       GANA_MAQUINA,
       GANA_USUARIO.
 
 
* Constantes
 CONSTANTS: C_O VALUE 
'O',
            C_X VALUE 
'X'.
 
 
* Tablas internas
 DATABEGIN OF TAB OCCURS 10,
         COL TYPE I,
         LIN TYPE I,
         X   TYPE I,
         O   TYPE I,
         B   TYPE I,
         XA  TYPE I,
         OA  TYPE I,
         BA  TYPE I,
       END   OF TAB.
 
 
 
* Parámetros
 PARAMETER: USUARIO OBLIGATORY DEFAULT C_X,
            ICONOS  AS CHECKBOX DEFAULT C_X.
 
 
*----------------------------------------------------------------------*
 
* AT SELECTION-SCREEN *
 
*----------------------------------------------------------------------*
 AT SELECTION-SCREEN.
   IF USUARIO = C_O.
     MAQUINA = C_X.
   ELSEIF USUARIO = C_X.
     MAQUINA = C_O.
   ELSE.
     MESSAGE E899 WITH 
'Permitted values O y X'.
   ENDIF.
 
 
*----------------------------------------------------------------------*
 
* AT LINE-SELECTION *
 
*----------------------------------------------------------------------*
 AT LINE-SELECTION.
   PERFORM DECIDE_TURNO.
 
 
*----------------------------------------------------------------------*
 
* START-OF-SELECTION *
 
*----------------------------------------------------------------------*
 START-OF-SELECTION.
 
   TURNO = C_O.
   PERFORM DECIDE_TURNO_INICIO.
 
 
*----------------------------------------------------------------------*
 
* TOP-OF-PAGE.
 
*----------------------------------------------------------------------*
 TOP-OF-PAGE.
 
 
*----------------------------------------------------------------------*
 
* FORM DIBUJA_TABLA *
 
*----------------------------------------------------------------------*
 FORM DIBUJA_TABLA.
   DATA
DCOL   TYPE   I.
   WRITE
'TABLA'.
 
   DO 8 TIMES.
     DCOL = 9 - SY-INDEX.
     PERFORM DIBUJA_LINEA USING DCOL.
     PERFORM DIBUJA_INTER.
   ENDDO.
   PERFORM DIBUJA_RAYA.
 
   SY-LSIND = SY-LSIND - 1.
 
   IF GANA_USUARIO = 
'X'.
     WRITE: / 
'HAS GANADO'.
   ELSEIF GANA_MAQUINA = 
'X'.
     WRITE: / 
'GANO YO'.
   ENDIF.
 ENDFORM.
 
 
*----------------------------------------------------------------------*
 
* FORM DIBUJA_RAYA *
 
*----------------------------------------------------------------------*
 FORM DIBUJA_RAYA.
   WRITEAT /OFFS SY-ULINE(41).
 ENDFORM.
 
 
*----------------------------------------------------------------------*
 
* FORM DIBUJA_INTER *
 
*----------------------------------------------------------------------*
 FORM DIBUJA_INTER.
   WRITEAT /OFFS SY-VLINE.
   DO 8 TIMES.
     WRITE
' ' HOTSPOT ON, SY-VLINE.
   ENDDO.
 ENDFORM.
 
 
 
*----------------------------------------------------------------------*
 
* FORM DIBUJA_LINEA *
 
*----------------------------------------------------------------------*
 FORM DIBUJA_LINEA USING VALUE(P_LIN) 
TYPE   I.
   FIELD-SYMBOLS <FS1>.
 
   DATA: TMP_COL(2).
 
   P_LIN = P_LIN - 1.
 
   WRITEAT /OFFS SY-VLINE.
   DO 8 TIMES.
     TMP_COL+0(1) = 
'C'.
     TMP_COL+1(1) = SY-INDEX.
     ASSIGN (TMP_COL) TO <FS1>.
     PERFORM FSOFFSET USING <FS1> P_LIN 1 CHANGING TFS.
     IF TFS IS INITIAL.
       WRITE
' ' HOTSPOT ON.
     ELSE.
       IF ICONOS = C_X.
         IF TFS = C_O.                  
"C_O
           WRITE ICON_LED_GREEN AS ICON HOTSPOT OFF.
         ELSE.                          
"C_X
           WRITE ICON_CANCEL    AS ICON HOTSPOT OFF.
         ENDIF.
       ELSE.                            
"ICONOS = BLANCO
         IF TFS = C_O.                  
"C_O
           WRITE
'O ' HOTSPOT OFF.
         ELSE.                          
"C_X
           WRITE
'X ' HOTSPOT OFF.
         ENDIF.
       ENDIF.
     ENDIF.
     WRITE: SY-VLINE.
   ENDDO.
 
   LINEA = 1.
   HIDE: LINEA.
 ENDFORM.
 
 
*----------------------------------------------------------------------*
 
* FORM DECIDE_TURNO *
 
*----------------------------------------------------------------------*
 FORM DECIDE_TURNO.
   IF TURNO = MAQUINA.
     PERFORM PIENSA_CASILLA.
     TURNO = USUARIO.
     PERFORM DIBUJA_TABLA.
   ELSE.
     PERFORM COMPRUEBA_SELECCION.
     TURNO = MAQUINA.
     PERFORM DECIDE_TURNO.
   ENDIF.
 ENDFORM.
 
 
*----------------------------------------------------------------------*
 
* FORM DECIDE_TURNO_INICIO *
 
*----------------------------------------------------------------------*
 FORM DECIDE_TURNO_INICIO.
   CLEAR GANA_USUARIO.
   CLEAR GANA_MAQUINA.
   IF TURNO = MAQUINA.
     PERFORM PIENSA_CASILLA.
     TURNO = USUARIO.
   ENDIF.
   PERFORM DIBUJA_TABLA.
 ENDFORM.
 
 
*----------------------------------------------------------------------*
 
* FORM PIENSA_CASILLA *
 
*----------------------------------------------------------------------*
 FORM PIENSA_CASILLA.
   FIELD-SYMBOLS <FS1>.
   DATA: TMP_COL(2),
         TMP_O TYPE I,
         TMP_X TYPE I,
         TMP_N TYPE I.
 
   REFRESH TAB.
   DO 8 TIMES.
     TMP_COL+0(1) = 
'C'.
     TMP_COL+1(1) = SY-INDEX.
     ASSIGN (TMP_COL) TO <FS1>.
 
     CLEAR TAB.
     TAB-COL = SY-INDEX.
     IF <FS1> CA 
' '.
       TAB-LIN = SY-FDPOS.
     ELSE.
       CONTINUE.
     ENDIF.
     PERFORM CUENTA_POSIB CHANGING TAB.
     APPEND TAB.
   ENDDO.
 
 
* IF MAQUINA = C_O.
 
* SORT TAB BY O DESCENDING
 
* B DESCENDING
 
* BA DESCENDING
 
* OA DESCENDING
 
* XA X.
 
* ELSE.
 
* SORT TAB BY X DESCENDING
 
* B DESCENDING
 
* BA DESCENDING
 
* XA DESCENDING
 
* OA O.
 
* ENDIF.
 
   SORT TAB BY O DESCENDING
               B DESCENDING
               BA DESCENDING
               OA DESCENDING
               XA X.
   READ TABLE TAB INDEX 1.
   TMP_O = TAB-O.
   SORT TAB BY X DESCENDING
               B DESCENDING
               BA DESCENDING
               XA DESCENDING
               OA O.
   READ TABLE TAB INDEX 1.
   TMP_X = TAB-X.
   DELETE TAB WHERE O < TMP_O AND X < TMP_X.
 
   IF ( TMP_O = 4 AND USUARIO = C_O ) OR
      ( TMP_X = 4 AND USUARIO = C_X ).
     GANA_USUARIO = 
'X'.
   ELSEIF TMP_O <> 3 AND TMP_X <> 3.    
"TOMA UNA DE LAS POSIB. AL AZAR
     DESCRIBE TABLE TAB LINES TMP_N.
     GET TIME.
     TMP_N = ( SY-UZEIT MOD TMP_N ) + 1.
     READ TABLE TAB INDEX TMP_N.
   ELSEIF MAQUINA = C_O.
     IF TMP_O = 3.                      
"GANA MAQUINA
       SORT TAB BY O DESCENDING
                   B DESCENDING
                   BA DESCENDING
                   OA DESCENDING
                   XA X.
       GANA_MAQUINA = 
'X'.
     ELSEIF TMP_X = 3.                  
"PA QUE NO GANE USUARIO
       SORT TAB BY X DESCENDING
                   B DESCENDING
                   BA DESCENDING
                   XA DESCENDING
                   OA O.
     ENDIF.
     READ TABLE TAB INDEX 1.
   ELSE.                                
"C_X
     IF TMP_X = 3.                      
"GANA MAQUINA
       SORT TAB BY X DESCENDING
                   B DESCENDING
                   BA DESCENDING
                   XA DESCENDING
                   OA O.
       GANA_MAQUINA = 
'X'.
     ELSEIF TMP_O = 3.                  
"PA QUE NO GANE USUARIO
       SORT TAB BY O DESCENDING
                   B DESCENDING
                   BA DESCENDING
                   OA DESCENDING
                   XA X.
     ENDIF.
     READ TABLE TAB INDEX 1.
   ENDIF.
 
   CHECK SY-SUBRC = 0.
   CHECK GANA_USUARIO IS INITIAL.
   TMP_COL+0(1) = 
'C'.
   TMP_COL+1(1) = TAB-COL.
   ASSIGN (TMP_COL) TO <FS1>.
   PERFORM FSOFFSET_CAMBIO USING TAB-LIN 1 MAQUINA CHANGING <FS1>.
 ENDFORM.
 
 
*----------------------------------------------------------------------*
 
* FORM COMPRUEBA_SELECCION *
 
*----------------------------------------------------------------------*
 FORM COMPRUEBA_SELECCION.
   DATA: TMP_LIN TYPE I,
         TMP_COL TYPE I,
         TMP_I   TYPE I,
         TMP_CAR(80).
 
   FIELD-SYMBOLS <FS1>.
 
   TMP_LIN = LINEA.
   CLEAR LINEA.
 
   CHECK SY-UCOMM = 
'PICK'.
   TMP_COL = ( SY-CUCOL - OFFS + 3 ).
   TMP_I   = TMP_COL MOD 5.
   IF    TMP_LIN <> 1
      OR TMP_COL < 5 OR TMP_COL > 43
      OR TMP_I > 3.
     MESSAGE E899 WITH 
'Invalid selection'.
   ENDIF.
   TMP_COL = TMP_COL DIV 5.
 
   TMP_CAR(1) = 
'C'. TMP_CAR+1(1) = TMP_COL.
   ASSIGN (TMP_CAR) TO <FS1>.
   PERFORM FSOFFSET USING <FS1> 7 1 CHANGING TFS.
   IF NOT TFS IS INITIAL.
     MESSAGE E899 WITH 
'Selection is not valid'.
   ENDIF.
 
   IF <FS1> CA 
' '.
     PERFORM FSOFFSET_CAMBIO USING SY-FDPOS 1 USUARIO CHANGING <FS1>.
   ELSE.
     PERFORM FSOFFSET_CAMBIO USING 0 1 USUARIO CHANGING <FS1>.
   ENDIF.
 
*** Comprueba 4
   CLEAR TAB.
   TAB-COL = TMP_COL.
   IF <FS1> CA 
' '.
     TAB-LIN = SY-FDPOS - 1.
   ELSE.
     TAB-LIN = 8.
   ENDIF.
   PERFORM CUENTA_POSIB CHANGING TAB.
 
   IF ( TAB-O = 4 AND USUARIO = C_O ) OR
      ( TAB-X = 4 AND USUARIO = C_X ).
     GANA_USUARIO = 
'X'.
   ENDIF.
 
***
   TURNO = MAQUINA.
 ENDFORM.
 
 
*----------------------------------------------------------------------*
 
* FORM CUENTA_POSIB *
 
*----------------------------------------------------------------------*
 FORM CUENTA_POSIB CHANGING PTAB STRUCTURE TAB.
   DATA: TMP_COL  TYPE I,
         TMP_LIN  TYPE I.
 
*
 
*1 2 3
 
*4 5
 
*6 7 8
 
*
 
* Casilla 1
   TMP_COL = TAB-COL - 1.
   TMP_LIN = TAB-LIN + 1.
   PERFORM SUMA_CASILLA USING TMP_COL TMP_LIN CHANGING PTAB.
 
* Casilla 2
   TMP_COL = TAB-COL.
   TMP_LIN = TAB-LIN + 1.
   PERFORM SUMA_CASILLA USING TMP_COL TMP_LIN CHANGING PTAB.
 
* Casilla 3
   TMP_COL = TAB-COL + 1.
   TMP_LIN = TAB-LIN + 1.
   PERFORM SUMA_CASILLA USING TMP_COL TMP_LIN CHANGING PTAB.
 
* Casilla 4
   TMP_COL = TAB-COL - 1.
   TMP_LIN = TAB-LIN.
   PERFORM SUMA_CASILLA USING TMP_COL TMP_LIN CHANGING PTAB.
 
* Casilla 5
   TMP_COL = TAB-COL + 1.
   TMP_LIN = TAB-LIN.
   PERFORM SUMA_CASILLA USING TMP_COL TMP_LIN CHANGING PTAB.
 
* Casilla 6
   TMP_COL = TAB-COL - 1.
   TMP_LIN = TAB-LIN - 1.
   PERFORM SUMA_CASILLA USING TMP_COL TMP_LIN CHANGING PTAB.
 
* Casilla 7
   TMP_COL = TAB-COL.
   TMP_LIN = TAB-LIN - 1.
   PERFORM SUMA_CASILLA USING TMP_COL TMP_LIN CHANGING PTAB.
 
* Casilla 8
   TMP_COL = TAB-COL + 1.
   TMP_LIN = TAB-LIN - 1.
   PERFORM SUMA_CASILLA USING TMP_COL TMP_LIN CHANGING PTAB.
 
*
 
* Horizontal
 
* perform suma_horizontal using tab-col tab-lin changing ptab.
   PERFORM SUMA_LINEA USING TAB-COL TAB-LIN 1 0 CHANGING PTAB.
 
* Vertical
 
* perform suma_vertical using tab-col tab-lin changing ptab.
   PERFORM SUMA_LINEA USING TAB-COL TAB-LIN 0 1 CHANGING PTAB.
 
* Diagonal 1
 
* perform suma_diagonal1 using tab-col tab-lin changing ptab.
   PERFORM SUMA_LINEA USING TAB-COL TAB-LIN 1 1 CHANGING PTAB.
 
* Diagonal 2
 
* perform suma_diagonal2 using tab-col tab-lin changing ptab.
   PERFORM SUMA_LINEA USING TAB-COL TAB-LIN 1 -1 CHANGING PTAB.
 
 
 ENDFORM.
 
 
 
*----------------------------------------------------------------------*
 
* FORM SUMA_CASILLA *
 
*----------------------------------------------------------------------*
 FORM SUMA_CASILLA USING
             VALUE(PCOL)  TYPE I
             VALUE(PLIN)  TYPE I
    CHANGING TAB STRUCTURE TAB.
 
*ORM SUMA_CASILLA USING VALUE(PCOL) VALUE(PLIN)
 
* CHANGING TAB STRUCTURE TAB.
   FIELD-SYMBOLS <FS>.
   DATA: TMP_C(2) TYPE C.
 
*
   TMP_C = 
'C '.
 
   CHECK PCOL >= 1 AND PCOL <= 8 AND PLIN >= 0 AND PLIN <= 7.
 
   TMP_C+1(1) = PCOL.
   ASSIGN (TMP_C) TO <FS>.
   PERFORM FSOFFSET USING <FS> PLIN 1 CHANGING TFS.
   CASE TFS.
     WHEN C_O.
       ADD 1 TO TAB-OA.
     WHEN C_X.
       ADD 1 TO TAB-XA.
     WHEN 
' '.
       ADD 1 TO TAB-BA.
   ENDCASE.
 ENDFORM.
 
 
*---------------------------------------------------------------------*
 
* FORM FSOFFSET *
 
*---------------------------------------------------------------------*
 
* ........ *
 
*---------------------------------------------------------------------*
 
* --> VALUE(P_CHAR) *
 
* --> VALUE(P_OFF) *
 
* --> VALUE(P_TAM) *
 
* --> VALUE(P_RESULT) *
 
*---------------------------------------------------------------------*
 FORM FSOFFSET USING VALUE(P_CHAR)   TYPE C
                     VALUE(P_OFF)    TYPE I
                     VALUE(P_TAM)    TYPE I
            CHANGING VALUE(P_RESULT) TYPE C.
   FIELD-SYMBOLS: <MIFS>.
   DATA:  TMPCAR(80).
   TMPCAR(10)    = 
'p_char+'.
   TMPCAR+10(10) = P_OFF.
   TMPCAR+20(1)  = 
'('.
   TMPCAR+21(10) = P_TAM.
   TMPCAR+31(1)  = 
')'.
   CONDENSE TMPCAR NO-GAPS.
   ASSIGN (TMPCAR) TO <MIFS>.
 
   P_RESULT = <MIFS>.
 ENDFORM.
 
 
*---------------------------------------------------------------------*
 
* FORM FSOFFSET_CAMBIO *
 
*---------------------------------------------------------------------*
 
* ........ *
 
*---------------------------------------------------------------------*
 
* --> VALUE(P_OFF) *
 
* --> VALUE(P_TAM) *
 
* --> VALUE(P_VALOR) *
 
* --> VALUE(P_CHAR) *
 
*---------------------------------------------------------------------*
 FORM FSOFFSET_CAMBIO USING VALUE(P_OFF)    TYPE I
                     VALUE(P_TAM)    TYPE I
                     VALUE(P_VALOR) TYPE C
            CHANGING VALUE(P_CHAR)   TYPE C.
   FIELD-SYMBOLS: <MIFS>.
   DATA:  TMPCAR(80).
   TMPCAR(10)    = 
'p_char+'.
   TMPCAR+10(10) = P_OFF.
   TMPCAR+20(1)  = 
'('.
   TMPCAR+21(10) = P_TAM.
   TMPCAR+31(1)  = 
')'.
   CONDENSE TMPCAR NO-GAPS.
   ASSIGN (TMPCAR) TO <MIFS>.
 
   <MIFS> = P_VALOR.
 ENDFORM.
 
 
*****
 
*----------------------------------------------------------------------*
 
* FORM SUMA_LINEA *
 
*----------------------------------------------------------------------*
 FORM SUMA_LINEA USING VALUE(PCOL)  VALUE(PLIN)
                       VALUE(PINCC) VALUE(PINCL)
                CHANGING TAB STRUCTURE TAB.
   FIELD-SYMBOLS <FS>.
   DATA: TMP_CINI  TYPE I,
         TMP_CFIN  TYPE I,
         TMP_LINI  TYPE I,
         TMP_LFIN  TYPE I,
         TMP_I    TYPE I,
         TMP_N    TYPE I,
         TMP_C(2) TYPE C,
         TMP_LIN(4).
 
*
   TMP_C = 
'C '.
 
   DO 3 TIMES.
     TMP_I = SY-INDEX + 1.
     TMP_CINI = PCOL - PINCC * ( TMP_I - 1 ).
     TMP_CFIN = PCOL.
     TMP_LINI = PLIN - PINCL * ( TMP_I - 1 ).
     TMP_LFIN = PLIN.
     DO TMP_I TIMES.
       IF    TMP_CINI < 1 OR TMP_CINI > 8
          OR TMP_CFIN < 1 OR TMP_CFIN > 8
          OR TMP_LINI > 7 OR TMP_LINI < 0
          OR TMP_LFIN > 7 OR TMP_LFIN < 0.
         TMP_CINI = TMP_CINI + PINCC.
         TMP_CFIN = TMP_CFIN + PINCC.
         TMP_LINI = TMP_LINI + PINCL.
         TMP_LFIN = TMP_LFIN + PINCL.
         CONTINUE.
       ENDIF.
       CLEAR TMP_LIN.
 
       TMP_C+1(1) = TMP_CINI.
       ASSIGN (TMP_C) TO <FS>.
       PERFORM FSOFFSET USING <FS> TMP_LINI 1 CHANGING TMP_LIN+0(1).
 
       TMP_C+1(1) = TMP_CINI + 1 * PINCC.
       ASSIGN (TMP_C) TO <FS>.
       TMP_N = TMP_LINI + 1 * PINCL.
       PERFORM FSOFFSET USING <FS> TMP_N 1 CHANGING TMP_LIN+1(1).
 
       IF TMP_I > 2.
         TMP_C+1(1) = TMP_CINI + 2 * PINCC.
         ASSIGN (TMP_C) TO <FS>.
         TMP_N = TMP_LINI + 2 * PINCL.
         PERFORM FSOFFSET USING <FS> TMP_N 1 CHANGING TMP_LIN+2(1).
       ENDIF.
 
       IF TMP_I > 3.
         TMP_C+1(1) = TMP_CINI + 3 * PINCC.
         ASSIGN (TMP_C) TO <FS>.
         TMP_N = TMP_LINI + 3 * PINCL.
         PERFORM FSOFFSET USING <FS> TMP_N 1 CHANGING TMP_LIN+3(1).
       ENDIF.
 
       IF TMP_LIN CO 
'O '.
         IF TMP_LIN = 
'OOOO'.
           TMP_N = 4.
         ELSEIF TMP_LIN CP 
'*O*O*O*'.
           TMP_N = 3.
         ELSEIF TMP_LIN CP 
'*O*O*'.
           TMP_N = 2.
         ELSEIF TMP_LIN CP 
'*O*'.
           TMP_N = 1.
         ELSE.                          
"BLANCO.
           TMP_N = 0.
         ENDIF.
 
         IF TMP_N > TAB-O.
           TAB-O = TMP_N.
         ELSEIF TMP_N = 0.
           IF TAB-B < TMP_I.
             TAB-B = TMP_I.
           ENDIF.
         ENDIF.
       ELSEIF TMP_LIN CO 
'X '.
         IF TMP_LIN = 
'XXXX'.
           TMP_N = 4.
         ELSEIF TMP_LIN CP 
'*X*X*X*'.
           TMP_N = 3.
         ELSEIF TMP_LIN CP 
'*X*X*'.
           TMP_N = 2.
         ELSEIF TMP_LIN CP 
'*X*'.
           TMP_N = 1.
         ELSE.                          
"BLANCO.
           TMP_N = 0.
         ENDIF.
 
         IF TMP_N > TAB-X.
           TAB-X = TMP_N.
         ELSEIF TMP_N = 0.
           IF TAB-B < TMP_I.
             TAB-B = TMP_I.
           ENDIF.
         ENDIF.
       ELSEIF TMP_LIN CO 
' '.
         IF TAB-B < TMP_I.
           TAB-B = TMP_I.
         ENDIF.
       ENDIF.
 
 
* *****************
       TMP_CINI = TMP_CINI + PINCC.
       TMP_CFIN = TMP_CFIN + PINCC.
       TMP_LINI = TMP_LINI + PINCL.
       TMP_LFIN = TMP_LFIN + PINCL.
     ENDDO.
   ENDDO.
 ENDFORM.

 
< Prev   Next >

Google Search

Statistics

Contribution Activity
Utilities: 38
Tips and Tricks: 332
Sample Code: 164
Total Contributions: 548

Member Activity
Members: 6081 since 2/1/2007!
New: 7 since yesterday!
Visitors: 964854
We have 4 guests online

Newest Members

Welcome our newest members:

Google Ads

Shared Bottom Border

Contact Us | Polls | Add URL | Contribute | Privacy | Terms | Feedback

Discussion Forum | BLOG | Consultants: Post your resume | Companies: Advertise on ERPGenie.COM | Post Job
Financials Consultant | Consultant Review | Gallia Consulting | Supply Chain Project | SAP Financials Forum
GenieHoldings.COM, Inc. | Genie Press | WorkflowGenie | ESAGenie | ERPTopSites | ABAP Tips and Tricks | SAP Solutions Database

EDIGenie | Searching Survivor