|
|
(не показаны 4 промежуточные версии этого же участника) |
Строка 1: |
Строка 1: |
− | Protocol - это программа из справочника [[R266]]
| + | [[PROTOCOL]] - это программа из справочника [[R266]] |
| + | Протокол изменения реквизита за период |
| + | = Смотрите также = |
| + | [[Полезные функции]] |
| | | |
− | Протокол изменения реквизита за период
| + | [[Функции Delphi]] |
− | | + | |
− | = Текст =
| + | |
− | | + | |
− | 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 - фамилия
| + | |