REW CTRL F9

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

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

Вызывается по CTRL+F9 из документа "Пересортица", этаж 2

Текст

local fld, _, _2, sql, DescFld, DescHK, DescTbl, prog1, sr, ind

fld := ' _1,N,1; _2,C,4; _3,N,5; _4,N,14,4; _5,N,14,4; _6,N,14,4; _7,N,5;;
  _8,C,10; _9,C,50; '

if Empty( AUTOID )
  return
endif

prog1 := GetProgText( '_5_PostBlk' )

sql := [ Select REFL2, ANAL2, EAMNT, ESUM ;
  From REPS] + Ret_f_ext() + [ ;
  Where SHIFT = '] + DOCS1->DSHIFT + [' and REFL1 = '] + DOCS1->DREFL1 + [' and ;
    ANAL1 = ] + DOCS1->DANAL1 + [ and ANAL2 <> 0 and EAMNT <> 0 ]

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

  SimpleSql( [ Insert into ] + TmpFilePath( _2 ) + [( _2, _3, ;
    _5, _6 ) ] + sql, OpdataPath )

  // r08
  sql := [ Update _2 ;
    Set _9 = Left( PNAME, 50 ), _7 = KODED ;
    From ] + TmpFilePath( _2 ) + [ _2 ;
      left outer join R08 ON _3 = KOD ;
    Where _2 = 'R08 '  ]
  SimpleSql( sql, ReflisPath )

  // r11
  sql := [ Update _2 ;
    Set _9 = Left( PNAME, 50 ), _7 = KODED ;
    From ] + TmpFilePath( _2 ) + [ _2 ;
      left outer join R11 ON _3 = KOD ;
    Where _2 = 'R11 '  ]
  SimpleSql( sql, ReflisPath )

  sql := [ Update _2 ;
    Set _4 = Round( _6 / _5, 2 ) ;
    From ] + TmpFilePath( _2 ) + [ _2 ]
  SimpleSql( sql, TempPath )

  // _2 -> _
  sql := [ Select TOP 100 PERCENT * ;
    From ] + TmpFilePath( _2 ) + [ ;
    Order by _4 ]
  SimpleSql( [ Insert into ] + TmpFilePath( _ ) + [ ] + sql, OpdataPath )

  // r09
  sql := [ Update _ ;
    Set _8 = PNAME ;
    From ] + TmpFilePath( _ ) + [ _ ;
      left outer join R09 ON _7 = KOD ]
  SimpleSql( sql, ReflisPath )

  ( _ )->( DbGoTop() )

  ind := CreateIndex( _, '_9', '_9' )
  ( _ )->( OrdSetFocus( '_9' ) )

  DescFld := { ;
    { { 'FldName', '_3' }, { 'FldTitl', 'Код'          }, { 'PreBlk', false } }, ;
    { { 'FldName', '_9' }, { 'FldTitl', 'Наименование' }, { 'PreBlk', false } }, ;
    { { 'FldName', '_8' }, { 'FldTitl', 'ед.изм.'      }, { 'PreBlk', false } }, ;
    { { 'FldName', '_5' }, { 'FldTitl', 'Количество'   }, { 'PostBlk', prog1 } }, ;
    { { 'FldName', '_4' }, { 'FldTitl', 'Цена'         }, { 'PreBlk', false } }, ;
    { { 'FldName', '_6' }, { 'FldTitl', 'Сумма'        }, { 'PreBlk', false } } ;
  }

  DescHK := { ;
    { ;
      { 'KeyName', 'F7'      }, ;
      { 'TEXT'   , 'В накл.' }, ;
      { 'BLK', 'CloseForm( GetForm(), false ), SetProperty( "ModalResult", 1, GetForm() )' } ;
    }, ;
    { { 'KeyName', 'F6' } }, ;
    { { 'KeyName', 'F8' } }, ;
    { { 'KeyName', 'Enter'          }, ;
      { 'TEXT'   , 'Оборот'         }, ;
      { 'BLK'    , 'gridedit(true)' } ;
    } ;
  }

  DescTbl := { ;
    { 'Title', 'Выберите одну номенклатуру по Alt+F1 ( или измените количество ) и нажмите F7' },;
    { 'ResultExpr', 'SelRows()' }, ;
    { 'CurLineStr', 'RealName( _2, _3, true )' }, ;
    { 'ShowType'  , 2 } ;
  }

  sr := MyGrid( _, DescTbl, DescFld, DescHK, ~Modal := true )

  if !Empty( sr )
    ( _ )->( DbGoTo( sr[1] ) )
    ( _ )->_1 := 1

    // KREFL2 - справочник
    // KANAL2 - код
    // NATTR1 - количество
    KREFL2 := ( _ )->_2
    KANAL2 := ( _ )->_3
    NATTR1 := ( _ )->_5
  endif

finally
  DeleteTmpIndex( _, ind )
  CloseTable( _ )
  CloseTable( _2 )
end

// _1 - признак выбора
// _2 - справочник
// _3 - код
// _4 - цена
// _5 - количество
// _6 - сумма
// _7 - единица измерения, код
// _8 - единица измерения, наименование
// _9 - наименование

<_5_PostBlk>

if NewValue <> OldValue
  _6 := Round( val( NewValue ) * _4, 2 )
endif

SetSelRows( Recno(), true )

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

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

Функции Delphi