PROTOCOL
Материал из Фабиус wiki
Protocol - это программа из справочника R266
Протокол изменения реквизита за период
Текст
local r169_kod, r166_lvl, r165_ident, gg, sql, aa, msg, flt, i, xx, fld, _, _2, ii, regs_path, ip, my, end_data, tbl, key, str_blk // путь к логам regs_path := RegsPath if Empty( regs_path ) regs_path := OpdataPath endif // запрос периода ip := InputPeriod( true ) if Empty( ip ) return endif // выбор документа r169_kod := ChoiceRefr( 'R169', 'KOD', { 'KOD', 'PNAME' }, ~Title := 'Выберите один документ' ) if Empty( r169_kod ) return endif // выбор уровня r166_lvl := ChoiceRefr( 'R166', 'LVLNUM', { 'LVLNUM', 'PNAME' }, [ KINDDOC = '] + r169_kod + [' ], ~Title := 'Выберите уровень' ) if Empty( r166_lvl ) return endif // выбор реквизита r165_ident := ChoiceRefr( 'R165', 'IDENT', { 'IDENT', 'PNAME' }, [ KINDDOC = '] + r169_kod + [' and LVLNUM = '] + r166_lvl + [' ], ~Title := 'Выберите один реквизит' ) r165_ident := Atr( r165_ident ) try try WaitMsg( 'Подготовка данных', msg ) // таблица RGNUM-ов fld := 'gg,C,8; ' gg := CreateTmpFile( fld, 'gg' , ~IsFreeDel := true ) // таблица для результата fld := ' _0,D,4; _1,C,10; _2,C,8; _3,D,4; _4,C,12; _5,C,10; _6,C,10; _7,C,30; _8,N,5; _9,C,50; ' _ := CreateTmpFile( fld, '_' , ~IsFreeDel := true ) _2 := CreateTmpFile( fld, '_2', ~IsFreeDel := true ) my := StoD( ip[1] ) end_data := StoD( ip[2] ) + 1 // цикл, который выполняется для каждого дня while my <> end_data WaitMsg( 'Подготовка данных за ' + my, msg ) // очищаем таблицу RGNUM-ов gg sql := [ Delete From ] + TmpFilePath( gg ) SimpleSql( sql, TempPath ) // наполнение таблицы RGNUM-ов gg sql := [ Select RGNUM From ] + RetDbName( r169_kod ) + Ret_f_ext( my ) + [ Where KINDDOC = '] + r169_kod + [' and LVLNUM = '] + r166_lvl + [' and DATDOC = '] + SqlDate( my ) + [' ] SimpleSql( [ Insert into ] + TmpFilePath( gg ) + [( gg ) ] + sql, OpdataPath ) aa := '1' ii := 0 while !Empty( aa ) WaitMsg( 'Подготовка данных за ' + my + ' ( ' + ii + ' ) ', msg ) sql := [ Select TOP 1 START AT ] + ii * 1000 + [ gg From ] + TmpFilePath( gg ) aa := SqlToArr( sql ) sql := [ Select TOP 999 START AT ] + ii * 1000 + [ gg From ] + TmpFilePath( gg ) xx := SelectSqlToArr( sql, { 'gg' }, OpdataPath, false ) if !Empty( xx ) xx := PrepareArr( xx, 1 ) flt := for i := 1 to len( xx ) flt := flt + iif( Empty( flt ), [], [ or ] ) + [KINDDOC = '] + r169_kod + [' and LVLNUM = '] + r166_lvl + [' and RGNUM = '] + xx[i] + [' and FLDNAME = '] + r165_ident + ['] next sql := [ Select RGNUM, DATE, TIME, Left( OLDVALUE, 10 ), Left( NEWVALUE, 10 ), STACK, USERKOD From REGS] + Ret_f_ext( my ) + [ Where ] + flt SimpleSql( [ Insert into ] + TmpFilePath( _2 ) + [( _2, _3, _4, _5, _6, _7, _8 ) ] + sql, regs_path ) endif ii := ii + 1 end sql := [ Update _2 Set _0 = DATDOC, _1 = NUMDOC From ] + TmpFilePath( _2 )+ [ _2 left outer join ] + RetDbName( r169_kod ) + Ret_f_ext( my ) + [ ; ON _2 = RGNUM Where KINDDOC = '] + r169_kod + [' and LVLNUM = '] + r166_lvl + [' ] SimpleSql( sql, OpdataPath ) my := my + 1 end // _2 -> _ sql := [ Select TOP 100 PERCENT * From ] + TmpFilePath( _2 )+ [ Order by _3, _4 ] SimpleSql( [ Insert into ] + TmpFilePath( _ )+ [ ] + sql, TempPath ) // r126 sql := [ Update _ Set _9 = PNAME From ] + TmpFilePath( _ ) + [ _ left outer join R126 ON _8 = KOD ] SimpleSql( sql, ReflisPath ) finally HideMsg( msg ) end ( _ )->( DbGoTop() ) tbl := { { 'Title', 'Протокол изменения реквизита ' + r165_ident + ' документа ' + r169_kod + ' ( уровень ' + r166_lvl + ' ) ' }, { 'ShowType', 2 } } fld := { ; { { 'Fldname', '_0' }, { 'FldTitl', 'Дата;документа' }, { 'PreBlk', false } }, ; { { 'Fldname', '_1' }, { 'FldTitl', 'Номер;документа' }, { 'PreBlk', false } }, ; { { 'Fldname', '_2' }, { 'FldTitl', 'RGNUM;документа' }, { 'PreBlk', false } }, ; { { 'Fldname', '_3' }, { 'FldTitl', 'Дата;изменения' }, { 'PreBlk', false } }, ; { { 'Fldname', '_4' }, { 'FldTitl', 'Время;изменения' }, { 'PreBlk', false } }, ; { { 'Fldname', '_5' }, { 'FldTitl', 'Старое;значение' }, { 'PreBlk', false } }, ; { { 'Fldname', '_6' }, { 'FldTitl', 'Новое;значение' }, { 'PreBlk', false } }, ; { { 'Fldname', '_7' }, { 'FldTitl', 'Тип вызова ( стек )' }, { 'PreBlk', false } }, ; { { 'Fldname', '_8' }, { 'FldTitl', 'Код' }, { 'PreBlk', false } }, ; { { 'Fldname', '_9' }, { 'FldTitl', 'Фамилия пользователя' }, { 'PreBlk', false } } ; } str_blk := [ SeekAndBrowse( '] + r169_kod + [', _2, Year( _0 ), Month( _0 ) ) ] key := { ; { { 'KeyName', 'F6' } }, ; { { 'KeyName', 'F7' }, { 'TEXT', 'Докумт' }, { 'BLK', str_blk } } ; } // вывод таблицы _ на экран MyGrid( _, tbl, fld, key, ~isCloseTbl := true ) finally CloseTable( gg ) // CloseTable( _ ) CloseTable( _2 ) end // _0 - дата документа // _1 - номер документа // _2 - RGNUM // _3 - дата // _4 - время // _5 - старое значение // _6 - новое значение // _7 - тип вызова // _8 - код пользователя // _9 - фамилия