PROTOCOL — различия между версиями

Материал из Фабиус wiki
Перейти к: навигация, поиск
м
м (Содержимое страницы заменено на «PROTOCOL - это программа из справочника R266 Протокол изменения реквизит…»)
 
(не показаны 3 промежуточные версии этого же участника)
Строка 1: Строка 1:
Protocol - это программа из справочника [[R266]]
+
[[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 - фамилия
 
 
= Смотрите также =
 
 
[[Функции Delphi]]
 
[[Функции Delphi]]
 
[[Полезные функции]]
 

Текущая версия на 16:28, 9 декабря 2019

PROTOCOL - это программа из справочника R266

Протокол изменения реквизита за период

Смотрите также

Полезные функции

Функции Delphi