ORL 170922

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

ORL_170922 - это сведения из справочника R238

Движение по товарам

Магазин - Сведения - Движение товаров с начала месяца по дату

Условие отбора

public aa40, aa70
local r20_kod, id, fld, sql, _, _2, msg, aa, am, i, ii
id := InputDate()
if Empty( id )
  return
endif
r20_kod := GETPARAM( 'TASKANAL' )
M->QwrTitle := ' ( ' + BOM( id ) + ' - ' + id + ' ) ' + RealName( 'R20', r20_kod ) + ' ( ' + r20_kod + ' )'
aa40 := 'Остаток;на утро;' + BOM( id )
aa70 := 'Остаток;на вечер;' + id
try
  WaitMsg( 'Подготовка данных', msg )
  fld := ' _0,C,10; _1,C,4; _2,N,5; _3,C,40; _4,N,14,4; _5,N,14,4; _6,N,14,4; _7,N,14,4; _8,C,40; _9,C,40; '
  _ := CreateTmpFile( fld, '_', ~IsFreeDel := true, ~Own := Self )
  _2 := CreateTmpFile( fld, '_2', ~IsFreeDel := true, ~Own := Self )
  // _4 остаток на начала месяца
  sql := [ Select REFL, KOD, BAMNT From MTUN] + Ret_f_ext( id ) + [ Where BKACNT = '41.2        ' and REFLANAL = 'R20 ' and ;
    ANAL = ] + r20_kod + [ and KOD > 0 and BAMNT <> 0 ]
  SimpleSql( [ Insert into ] + TmpFilePath( _2 ) + [( _1, _2, _4 ) ] + sql, OpdataPath )
  // _5 приход
  sql := [ Select DREFL2, DANAL2, AMNT From PRVS] + Ret_f_ext( id ) + [ Where DEBT = '41.2        ' and DREFL1 = 'R20 ' and ;
    DANAL1 = ] + r20_kod + [ AND DANAL2 > 0 and AMNT <> 0 and DATDOC <= '] + SqlDate( id ) + [' ]
  SimpleSql( [ Insert into ] + TmpFilePath( _2 ) + [( _1, _2, _5 ) ] + sql, OpdataPath )
  // _6 расход
  sql := [ Select KREFL2, KANAL2, AMNT From PRVS] + Ret_f_ext( id ) + [ Where KRED = '41.2        ' and KREFL1 = 'R20 ' and ;
    KANAL1 = ] + r20_kod + [ AND KANAL2 > 0 and AMNT <> 0 and DATDOC <= '] + SqlDate( id ) + [' ]
  SimpleSql( [ Insert into ] + TmpFilePath( _2 ) + [( _1, _2, _6 ) ] + sql, OpdataPath )
  // r08
  sql := [ Delete From ] + TmpFilePath( _2 ) + [ Where _1 = 'R11 ' ]
  SimpleSql( sql, TempPath )
  // _2 -> _
  sql := [ Select _2, Sum( _4 ), Sum( _5 ), Sum( _6 ) From ] + TmpFilePath( _2 ) + [ Group by _2 ]
  SimpleSql( [ Insert into ] + TmpFilePath( _ ) + [( _2, _4, _5, _6 ) ] + sql, TempPath )
  // _7 остаток на дату
  sql := [ Update ] + TmpFilePath( _ ) + [ Set _7 = _4 + _5 - _6 ]
  SimpleSql( sql, TempPath )
  // r08
  sql := [ Update _ Set _0 = CODEGROUP, _3 = Left( PNAME, 40 ) From ] + TmpFilePath( _ ) + [ _ left outer join R08 ON _2 = KOD ]
  SimpleSql( sql, ReflisPath )
  ( _ )->( DbGoTop() )
  while !( _ )->( eof() )
    ( _ )->_8 := Left( FULLNAMEGROUP2( 'R08', ( _ )->_0, 3 ), 40 )
    ( _ )->_9 := Left( FULLNAMEGROUP2( 'R08', ( _ )->_0, 4 ), 40 )
    ( _ )->( DbSkip() )
  end
  ( _ )->( DbGoTop() )
  sql := [ Select DISTINCT _8 From ] + TmpFilePath( _ ) + [ Order by _8 ]
  aa := SqlToArr( sql, { '_8' }  )
  if !Empty( aa )
    aa := PrepareArr( aa )
  endif
finally
  HideMsg( msg )
end
am := {}
AcMenu( 'Выберите группы', aa, ~IsMultiChoice := true, ~ArChoice := am )
if !Empty( am )
  for i := 1 to len( am )
    ii := am[i] + 1
    aa[ii] := 'zz'
  next
  for i := 1 to len( aa )
    sql := [ Delete From ] + TmpFilePath( _ ) + [ Where _8 = '] + aa[i] + [' ]
    SimpleSql( sql, TempPath )
  next
endif
result := _
// _0 группа
// _1 справочник
// _2 код
// _3 наименование
// _4 остаток на начала месяца
// _5 приход
// _6 расход
// _7 остаток на дату
// _8 группа, уровень 3
// _9 группа, уровень 4

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

R238