fab_rp.md

26.06.2025

RP_00_41_43_GHC

Выравнивание 00-41 и 43

В оборотной ведомости фабиуса, это файл MTUN

существует счёт 43 и его зеркальное отражение, счёт 00-41

Данная программа выравнивает 43 счёт и счёт 00-41

За основу я беру счёт 00-41, а 43 "ломаю"

Таким образом, на конец месяца остатки по этим счетам будут сходится

После выполнения этой программы

Программа запускается из модуля

Главная книга - Бухгалтерские справки - Документы бухг.справок

F6 - нажать на три точки ... и выбрать программу RP_00_41_43_GHC

LOCAL msg, ACNT43, aa, CSP, fld, ACNT90, SQL, _2, _

if TYPE( 'CURDATE' ) = 'U'
  local CURDATE
  CURDATE := date()
endif

SQL := [ SELECT top 1 DISTINCT debt ;
    FROM prvs] + RET_F_EXT( CURDATE ) + [ ;
    WHERE DEBT LIKE '90] + DLM + [2%' AND KRED LIKE '43%' AND ;
        KREFL1 = 'R20 ' AND KANAL1 > 0 AND ;
        KREFL2 = 'R11 ' AND KANAL2 > 0 ]
ACNT90 := sqltoarr( sql )

fld := ' REFLANAL,C,4; ANAL,N,5; REFL,C,4; KOD,N,5; EAMNT,N,14,4; '

try

  WAITMSG( 'Подготовка данных', msg )

  _ := CreateTmpFile( fld, '_', ~IsFreeDel := true )
  _2 := CreateTmpFile( fld, '_2', ~IsFreeDel := true )

  SQL := [ SELECT REFLANAL, ANAL, REFL, KOD, EAMNT ;
    FROM MTUN] + RET_F_EXT( CURDATE ) + [ ;
    WHERE ;
        EAMNT <> 0 AND BKACNT LIKE '00] + DLM + [41%' and ;
        REFLANAL = 'R20 ' and ANAL > 0 and ;
        REFL = 'R11 ' and KOD > 0 ]
  SimpleSql( [ Insert into ] + TmpFilePath( _2 ) + [ ;
      ( REFLANAL, ANAL, REFL, KOD, EAMNT ) ] + sql, OpdataPath )

  SQL := [ SELECT REFLANAL, ANAL, REFL, KOD, -EAMNT ;
    FROM MTUN] + RET_F_EXT( CURDATE ) + [ ;
    WHERE ;
        EAMNT <> 0 AND BKACNT LIKE '43%' and ;
        REFLANAL = 'R20 ' and ANAL > 0 and ;
        REFL = 'R11 ' and KOD > 0 ]
  SimpleSql( [ Insert into ] + TmpFilePath( _2 ) + [ ;
      ( REFLANAL, ANAL, REFL, KOD, EAMNT ) ] + sql, OpdataPath )

  sql := [ select REFLANAL, ANAL, REFL, KOD, ;
      SUM( EAMNT ) ;
      FROM ] + TmpFilePath( _2 ) + [ ;
      group by REFLANAL, ANAL, REFL, KOD ;
      HAVING SUM( EAMNT ) <> 0 ]
  SimpleSql( [ Insert into ] + TmpFilePath( _ ) + [ ;
      ( REFLANAL, ANAL, REFL, KOD, EAMNT ) ] + sql, OpdataPath )

  fld := ' AMNT,N,14,4;;
      DEBT,C,12; DREFL1,C,4; DANAL1,N,5; DREFL2,C,4; DANAL2,N,5; DREFL3,C,4; DANAL3,N,5;;
      KRED,C,12; KREFL1,C,4; KANAL1,N,5; KREFL2,C,4; KANAL2,N,5; KREFL3,C,4; KANAL3,N,5; '

  CSP := CreateTmpFile( fld, 'CSP', ~IsFreeDel := true )
  sql := [ select REFLANAL KREFL1, ANAL KANAL1, REFL KREFL2, KOD KANAL2, EAMNT AMNT ;
      from ] + TmpFilePath( _ )

  SimpleSql( [ Insert into ] + TmpFilePath( CSP ) + [( KREFL1, KANAL1, KREFL2, KANAL2, AMNT ) ] + sql, OpdataPath )

  SQL := [ SELECT top 1 DISTINCT KRED ;
      FROM prvs] + RET_F_EXT( CURDATE ) + [ ;
      WHERE DEBT LIKE '] + ACNT90 + [' AND KRED LIKE '43%' AND ;
          KREFL1 = 'R20 ' AND KANAL1 > 0 AND ;
          KREFL2 = 'R11 ' AND KANAL2 > 0 ]
  ACNT43 := sqltoarr( sql )

  sql := [ update ;
    ] + TmpFilePath( CSP ) + [ ;
    set KRED = '] + ACNT43 + [' ]
  simplesql( sql, temppath )

  ( CSP )->( DBGOTOP() )
  while !( CSP )->( eof() )
    ( CSP )->DEBT := ACNT90
    ( CSP )->DREFL1 := 'R267'
    ( CSP )->DANAL1 := RET_R267_KOD( ( CSP )->KANAL2 )
    ( CSP )->DREFL2 := 'R01'
    ( CSP )->DANAL2 := factorykod
    ( CSP )->DREFL3 := ( CSP )->KREFL2
    ( CSP )->DANAL3 := ( CSP )->KANAL2
    ( CSP )->( dbskip() )
  end

  fld := { 'debt', 'kred', ;
          'drefl1', 'drefl2', 'drefl3', 'danal1', 'danal2', 'danal3', ;
          'krefl1', 'krefl2', 'krefl3', 'kanal1', 'kanal2', 'kanal3', ;
          'amnt' }

  sql := [ select debt, kred, drefl1, drefl2, drefl3, danal1, danal2, danal3, ;
                              krefl1, krefl2, krefl3, kanal1, kanal2, kanal3, ;
                              AMNT from ] + TmpFilePath( CSP )
  aa := sqltoarr( sql, fld )



finally
  closetable( CSP )
  closetable( _2 )
  closetable( _ )
  HIDEMSG( msg )
end

if !isempty( aa )
  addall( 'CSP', '2', docs1->rgnum,, fld, aa, ~IsRepl := FALSE )
endif

// CSP