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