// ***************************************************************************** // Название: Очистка журналов // Описание: Очистка журналов // Кнопка вызова: 1 // Подпись кнопки: jr // Язык: FuncScript // Вызов по событию: // Без подтверждения: 1 // ***************************************************************************** // EXECUTESCRIPT (INCLUDETRAILINGBACKSLASH (PROGRAMPATH ()) + 'ProcDocs\writelog.prd'); EXECUTESCRIPT (INCLUDETRAILINGBACKSLASH (PROGRAMPATH ()) + 'ProcDocs\Backup_database.prd'); FUNC ('QuoteDateTime', Block( PARAM ('pDate', DateTime, 0); PARAM ('pDbName', String, 1, 'dbJournals'); PARAM ('pIsQuery', Integer, 2, 1); ), Block( DBFORMATDATETIME (pDate, GETDATABASETYPE (pDbName), 1, pIsQuery, 1); ) ); // FUNC - QuoteDateTime FUNC ('DeleteAndPack', Block( PARAM ( 'pTablList', String, 0); PARAM ( 'pDays', Integer, 1, 60); PARAM ( 'pDbName', String, 2, 'dbJournals'); ), Block( VAR ( 'sSQL', String, ''); VAR ( 'sCurrenTable', String, ''); VAR ( 'iJMID', Integer, 0); VAR ( 'iCountTable', Integer, 0); VAR ( 'iTotalTables', Integer, 0); iTotalTables := SPLITSTR ( pTablList, '|', sTemp); iCountTable := 1; iJMID := 0; SHOWPROGRESS ('Обработка ' + EXTRACTSTR ( pTablList, 1, '|') + ' ...'); while ( iCountTable < iTotalTables+1, Block( sCurrenTable := EXTRACTSTR ( pTablList, iCountTable, '|'); IF ( TABLEEXISTS ( sCurrenTable, 'dbJournals' ), IF (iCountTable = 1 , Block( sSQL := 'SELECT JOURNAL_MASTER_ID AS JMID FROM '+ sCurrenTable +' WHERE CREATED_AT <= ' + QuoteDateTime ( ((DATE ()+TIME (1)) - pDays)) + ' ORDER BY JOURNAL_MASTER_ID DESC'; OPENQUERY ('Q_JR', sSQL, pDbName,1); FIRST('Q_JR'); iJMID := Q_JR.JMID; CLOSEDATASET ('Q_JR'); sSQL := 'DELETE FROM '+ sCurrenTable +' WHERE JOURNAL_MASTER_ID <= ' + iJMID; EXECUTESQL (pDbName, sSQL); IF (iMakeBackup, PACKTABLE (sCurrenTable), ); ), Block( sSQL := 'DELETE FROM '+ sCurrenTable +' WHERE JOURNAL_MASTER_ID <= ' + iJMID; EXECUTESQL (pDbName, sSQL); IF (iMakeBackup, PACKTABLE (sCurrenTable), ); ) );//if ,); SETPROGRESS ( ((iCountTable * 100)/ iTotalTables+1) ); iCountTable := iCountTable + 1; if ( CANCELPRESSED (), Block( HIDEPROGRESS (); RAISEEXCEPTION ('Обработка остановлена'); ),//block ); //if )//block );//while HIDEPROGRESS (); ) ); // FUNC - DeletePack IF ( VAREXISTS ('iRunScriptFromLogEps'), , GLOBALVAR ('iRunScriptFromLogEps', Integer, 0) ); VAR ( 'LastCleanDate', DateTime, INIFILE ('Journals', 'LastCleanDate', FDT('DD.MM.YYYY', DATE())) ); VAR ( 'iDateClean' , Integer , 0); VAR ( 'sJRGOODOUT2', String, 'JRGOODOUT2|DTTRANSPDOC2|DTCONT2A|TRANSPORT2A|GOODINFO2|CONTAINER2A|TRANSPORTDOC2A|GOODSGROUP2A|GROUPINFO2A|DTGROUPINFO2A' ); VAR ( 'sEPS_LOG', String, 'EPS_LOG' ); VAR ( 'sINVENTORY', String, 'INVENTORY|DOCS' ); VAR ( 'sJRREQOPER', String, '' ); VAR ( 'mListVars', Memo, 'sJRGOODOUT2|sEPS_LOG|sINVENTORY' ); VAR ( 'sTemp', String, '' ); VAR ( 'sCurrenVar', String, '' ); VAR ( 'iDays', Integer, 180 ); VAR ( 'sDays', String, '180' ); VAR ( 'iTotalVars', Integer, 0 ); VAR ( 'iCount', Integer, 0 ); VAR ( 'sTypeJourBase', String, INIFILE ('JournalsDB', 'Driver Name', '')); VAR ( 'iMakeBackup', Integer, 0); VAR ( 'sPathJourBase', String, ''); VAR ( 'sPathJourBaseBackup', String, ProgramPath () + INIFILE ('JournalsBackup', 'Path', 'JOURNALS\BACKUP')); VAR ( 'mListFilesBackup', Memo, ''); iTotalVars := SPLITSTR ( mListVars, '|', sTemp); iCount := 1; mListFilesBackup := ''; while ( iCount < iTotalVars+1, Block( sCurrenVar := EXTRACTSTR ( mListVars, iCount, '|'); IF (mListFilesBackup = '', mListFilesBackup := VALUE (EXTRACTSTR ( mListVars, iCount, '|')), mListFilesBackup := mListFilesBackup + '|' + VALUE (EXTRACTSTR ( mListVars, iCount, '|')) ); iCount := iCount + 1; )//block );//while IF ( GetDatabaseType ('dbJournals') = 'Paradox', iMakeBackup := 1, iMakeBackup := 0); IF ( GetDatabaseType ('dbJournals') = 'Paradox', IF ( INIFILE ('JournalsDB', 'PATH', '') <> '' , sPathJourBase := INIFILE ( 'JournalsDB', 'PATH', ''), IF ( INIFILE ('JournalsDB', 'Driver Name', '') = '{ ProgramDatabase }' , sPathJourBase := INIFILE ( 'StsDB', 'PATH', ''), ) );//if sPathJourBase := '', );//if paradox IF ( DirectoryExists (sPathJourBase) = 0 , sPathJourBase := IF ( COPY (sPathJourBase,1,1) <> '\', IncludeTrailingBackslash (ProgramPath ()) + sPathJourBase , IncludeTrailingBackslash (ProgramPath ()) + COPY (sPathJourBase,2,LENGTH (sPathJourBase)-1)), );//if sPathJourBase := IncludeTrailingBackslash (sPathJourBase); IF ( DirectoryExists (sPathJourBase) = 0 , RAISEEXCEPTION ('Не удалось определить папку с базой журналов.') , ); // Проверяем, не запущен ли скрипт из ЛогЭПС, если да, то чистим IF (iRunScriptFromLogEps=1 , BLOCK( IF ( YESNO ('Очистить устаревшие данные журналов ?') <> 1, WRITEINIFILE ('Journals', 'CancelCleanDate', FDT('DD.MM.YYYY', DATE())), BLOCK( sDays := INPUTTEXT ('Период очистки журналов', 'Укажите кол-во дней, которые надо оставить :', INIFILE ('Journals', 'iDays', '180')); IF ( Trim(sDays) = '', RAISEEXCEPTION ('Отмена выполнения'), iDays := Convert(sDays, Integer) ); WRITEINIFILE ('Journals', 'iDays', iDays); IF ( iMakeBackup, BackupBase2( sPathJourBaseBackup, sPathJourBase, mListFilesBackup, 0),); iTotalVars := SPLITSTR ( mListVars, '|', sTemp); iCount := 1; while ( iCount < iTotalVars+1, Block( sCurrenVar := EXTRACTSTR ( mListVars, iCount, '|'); DeleteAndPack( VALUE (EXTRACTSTR ( mListVars, iCount, '|')), iDays ); iCount := iCount + 1; )//block );//while WRITEINIFILE ('Journals', 'LastCleanDate', FDT('DD.MM.YYYY', DATE())); showmessage('Очистка журналов завершена.'); )//block YESNO );//IF YESNO ('Очистить устаревшие данные журналов?') ),//block //если установлен параметр не чистить StopClean=1 или тип базы журналов MSSQL, но ничего не делаем иначе по плану IF ( (INIFILE ('Journals', 'StopClean', '0') = '1') | (GetDatabaseType ('dbJournals') = 'MSSQL'),, Block( IF ( INIFILE ('Journals', 'LastCleanDate', '') = '', WRITEINIFILE ('Journals', 'LastCleanDate', FDT('DD.MM.YYYY', DATE())), );//if iDateClean := DATE() - LastCleanDate; IF (( (iDateClean > 6) * ( INIFILE ('Journals', 'CancelCleanDate', '') <> FDT('DD.MM.YYYY', DATE()) )) | (iRunScriptFromLogEps=1), Block ( IF ( YESNO ('Очистить устаревшие данные журналов ?') <> 1, WRITEINIFILE ('Journals', 'CancelCleanDate', FDT('DD.MM.YYYY', DATE())) , BLOCK( IF ( ShiftPressed (), sDays := INPUTTEXT ('Период очистки журналов', 'Укажите кол-во дней, которые надо оставить :', INIFILE ('Journals', 'iDays', '180')), ); IF ( Trim(sDays) = '', RAISEEXCEPTION ('Отмена выполнения'), iDays := Convert(sDays, Integer) ); WRITEINIFILE ('Journals', 'iDays', iDays); IF ( iMakeBackup, BackupBase2( sPathJourBaseBackup, sPathJourBase, mListFilesBackup, 0),); iTotalVars := SPLITSTR ( mListVars, '|', sTemp); iCount := 1; while ( iCount < iTotalVars+1, Block( sCurrenVar := EXTRACTSTR ( mListVars, iCount, '|'); DeleteAndPack( VALUE (EXTRACTSTR ( mListVars, iCount, '|')), iDays ); iCount := iCount + 1; )//block );//while WRITEINIFILE ('Journals', 'LastCleanDate', FDT('DD.MM.YYYY', DATE())); showmessage('Очистка журналов завершена.'); )//block YESNO );//IF YESNO ('Очистить устаревшие данные журналов?') ),// block );// IF iDateClean > 6 )//block );//if INIFILE ('Journals', 'StopClean', '') = '1' );// IF iRunScriptFromLogEps=1