F11 406 1 27

Материал из Фабиус wiki
Перейти к: навигация, поиск

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

Средний возраст имеющихся на конец года основных фондов

F11_406_1_27( gr, _year )

gr - код группы
_year - год, в формате гг, например, 14
'11' - здания ( при передаче параметра gr = '11' автоматически добавляется анализ группы '13' "Жилища" )
'12' - сооружения
'14' - машины и оборудование
'15' - транспортные средства

Текст

parameters gr, _year

local t, fld, sql, aa

result := 0

if Empty( gr )
  return
endif

// t
// t_GR       - группа
// t_KOD      - код
// t_INDATDOC - дата ввода
// t_YEAR     - год ввода
// t_AGE      - возраст
// t_1        - 1
fld := ' t_GR,C,2; t_KOD,N,5; t_INDATDOC,D,4; t_YEAR,N,4; t_AGE,N,4; t_1,N,1 '

try
  t := CreateTmpFile( fld, 't', ~IsFreeDel := true )

  // состояние на конец года
  sql := [ Select DISTINCT KOD ;
    From MTUN01] + ( _year + 1 ) + [ ;
    Where ( Left( BKACNT, 2 ) = '01' or  Left( BKACNT, 2 ) = '04' ) and ;
      REFL = 'R143' and KOD > 0 and BDSUM > 0 ]
  SimpleSql( [ Insert into ] + TmpFilePath( t ) + [( t_KOD ) ] + sql, OpdataPath )

  // r143
  sql := [ Update t ;
    Set t_GR = Left( CODEGROUP, 2 ), t_INDATDOC = INDATDOC, ;
      t_YEAR = Year( INDATDOC ) ;
    From ] + TmpFilePath( t ) + [ t ;
      left outer join R143 ON t_KOD = KOD ]
  SimpleSql( sql, ReflisPath )

  sql := [ Delete ;
    From ] + TmpFilePath( t ) + [ ;
    Where t_YEAR is null ]
  SimpleSql( sql, TempPath )

  if !Empty( gr )
    if gr = '11'
      sql := [ Delete ;
        From ] + TmpFilePath( t ) + [ ;
        Where t_GR <> '11' and t_GR <> '13' ]
    else
      sql := [ Delete ;
        From ] + TmpFilePath( t ) + [ ;
        Where t_GR <> '] + gr + [']
    endif
    SimpleSql( sql, TempPath )
  endif

  sql := [ Update t ;
    Set t_AGE = 2000 + ] + _year +[ + 1 - t_YEAR, t_1 = 1 ;
    From ] + TmpFilePath( t ) + [ t ]
  SimpleSql( sql, TempPath )

  sql := [ Select Sum( t_AGE ) t_AGE, Sum( t_1 ) t_1 ;
    From ] + TmpFilePath( t )
  aa := SelectSqlToArr( sql, { 't_AGE', 't_1' }, TempPath, false )

  if !IsEmpty( aa )
    result := Div_z( aa[1,1], aa[1,2], 0 )
  endif

finally
  CloseTable( t )
end

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

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

Функции Delphi