Skip to main content
Skip table of contents

Stammdatenreorg

CODE
//##############################################################################
//##############################################################################
// Vorlage zur Aenderung von Stammdaten mit Protokollierung (DABPTK)
//
// Benutzung des Programms:
// Man kann entweder die Tabelle ueber MyGetTable oeffnen und einen Index definieren,
//   mittles dem man dann scopen kann.
// Alternativ kann man ueber ein SQL Query die Datens?tze selektieren,
//    die man aenderen will.
// Auf jeden Fall werden die Daten in der mit MyGetTable ge?ffneten Tabelle (und)
//   richtig positionieren Tabelle ge?ndert.
// Bitte zuerst diesn Code kopieren und dann die Kopie anpassen!
// Folgende Konstanten muessen angepasst werden:
//  m_nWorkarea
//  m_cIndexName
//  m_cSQL, Beispiel:
//        m_cSQL   := ' SELECT * '                                                +crlf+
//                ' FROM ' + DbSqlTableName(waDAB010)                             +crlf+
//                ' WHERE ARTGRUPPE > 25 '                   +crlf,
//  Ausserdem muessen noch einige Dinge in der Funktion ReorgTable() angepasst
//     werden. Das wird aber dort erklaert.
//##############################################################################
//##############################################################################

|
m_oDM, m_oTable, m_nWorkarea, m_cIndexName, m_cSQL,
m_tEnde, m_tStart
|


//##############################################################################
//##############################################################################
// Konstanten
//##############################################################################
//##############################################################################

m_nWorkarea  := waDAB010,                                                        // Workarea ggf anpassen
m_cIndexName := 'DAB011',                                                        // Index ggf. anpassen
m_cSQL       := '',
//m_cSQL   := ' SELECT * '                          +crlf+
//        ' FROM ' + DbSqlTableName(waDAB010)       +crlf+
//        ' WHERE ARTGRUPPE > -1 '                   +crlf,

//##############################################################################
//##############################################################################
// Funktionen
//##############################################################################
//##############################################################################


//******************************************************************************
// Tabellen oeffnen
//******************************************************************************
function OpenTable(nWorkarea, cIndex),
   m_oTable := MyGetTable(m_oDM, nWorkarea,),
   m_oTable.CbIndexName   := cIndex,
   m_oTable.WriteProtocol := true,
end,


//******************************************************************************
// Sucheinschraenkung mit SQL
// Geht die Tabelle durch und macht ein Edit/Post
//******************************************************************************
function ReorgTable(oTable, cSQL)
| oQuery, i |
   if not empty(m_cSQL) then
      oQuery := CreateObject('TBeAdsQuery', 'STAMMDATENQUERY'),
      startseq
         oQuery.SQL := cSQL,
         oQuery.Active := true,
         oQuery.CbFirst(),
         progressbarshow('Reorg', 'Inhalt des Reorgs', true),
         i := 1,
         while not oQuery.CbEoF do
            m_oDM.CbTransaction_Begin(),
            startseq
               oTable.CbFindKey({oQuery:ARTNR}),                              //  anpassen: Feldname von oQuery
               oTable.CbEdit(),
               oTable:BEZ1 := 'neuer Inhalt',                                 //  anpassen ( Die zu ?ndernden Felder und Werte )
               oTable.CbPost(),
               if mod(i, 1) = 0 then
                  progressbarupdate(i / oQuery.CbRecordCount* 100, oQuery:ARTNR, true ),
               endif,
               // m_oDM.CbTransaction_Commit(),                              //  anpassen ( Kommentar entfernen )
            always
               m_oDM.CbTransaction_TryRollback(),
            stopseq,
            i++,
            oQuery.CbNext(),
        end,
      always
         progressbarhide(),
         destroyObject(oQuery),
      stopseq,
   else
      // oTable.CbSetRange({},{}),                                              //  anpassen, falls notwendig
      startseq
         oTable.CbFirst(),
         progressbarshow('Reorg', 'Inhalt des Reorgs', false),
         i := 1,
         while not oTable.CbEoF do
            m_oDM.CbTransaction_Begin(),
            startseq
               oTable.CbEdit(),
               oTable:BEZ1 := 'neuer Inhalt',                                         //  anpassen ( Die zu ?ndernden Felder und Werte )
               oTable.CbPost(),
               // m_oDM.CbTransaction_Commit(),                                 //  anpassen ( Kommentar entfernen )
               if mod(i, 1) = 0 then
                  progressbarupdate(0, oTable:ARTNR, true ),
               endif,
           always
               m_oDM.CbTransaction_TryRollback(),
            stopseq,
            i++,
            oTable.CbNext(),
         end,
      always
         oTable.CbCancelRange(),
      stopseq,
   endif,

end,

//##############################################################################
//##############################################################################
// Hauptprogramm
//##############################################################################
//##############################################################################

m_oDM     := createObject('TBeDbGet','STAMMDATENAENDERUNG'),
startseq
   m_tStart := TimeEx(),
   OpenTable(m_nWorkarea, m_cIndexName),
   ReorgTable(m_oTable, m_cSQL),
   m_tEnde := TimeEx(),
   writeln('Durchlaufzeit des Reorgs: | ' + FormatDateTime('hh:nn:ss:ms', (m_tEnde - m_tStart))),
always
   progressbarhide(),
   DestroyObject(m_oDM),
stopseq,

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.