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,