Сторно отдельных позиций банковской выписки

П.С. Публикую одну из заметок собственного ранее написанного хелпа.

У всех, наверняка, случалась ситуация, когда банковская выписка проведена и в одной из позиций допущена ошибка, или ошибки нет, но банк вдруг отменил проводку (да, в идеале банк должен прислать другую выписку, но в реале бывает не совсем так). Тогда можно поступить следующим образом:

1) В таблице FEBKO меняем значение поля ASTAT на 3. VB2OK очищаем.
2) В таблице FEBEP очищаем EPERL, VB2OK, NBBLN.
3) Перепроводим позицию выписки.

а можно написать маленькую программку



REPORT  ZCHNGBV.
TABLES: FEBEP,
        FEBKO.
DATA:   BIK(50) type c,
        NOM(9) type c.
SELECTION-SCREEN BEGIN OF BLOCK part1 WITH FRAME TITLE text-001.
PARAMETERS: r1 RADIOBUTTON GROUP rad1 default 'X',
            r2 RADIOBUTTON GROUP rad1.
SELECTION-SCREEN END OF BLOCK part1.
SELECTION-SCREEN BEGIN OF BLOCK part2 WITH FRAME TITLE text-002.
PARAMETERS: nom_bv(5)   type c,
            pos_bv(5)   type c,
            zjahr(4)    type c,
            obl_01      type c as checkbox,
            obl_02      type c as checkbox.
SELECTION-SCREEN END OF BLOCK part2.
*if r2 = 'X'.
*  message 'jg ' type 'I'.
*endif.
IF r1 = 'X'. " выбран 1-й банк
  BIK = '<БИК_БАНКА      СЧЕТ_БАНКА            RUB'.
  "MESSAGE BIK TYPE 'I'.
ELSEIF r2 = 'X'.
  BIK = 'БИК_БАНКА      СЧЕТ_БАНКА            RUB'.
  "MESSAGE BIK TYPE 'I'.
ELSE.
  MESSAGE 'Данные банка в таблице FEBKO не найдены!' TYPE 'I'.
ENDIF.
case strlen( nom_bv ).
  when 1.
    concatenate zjahr '0000' nom_bv into NOM.
  when 2.
    concatenate zjahr '000' nom_bv into NOM.
  when 3.
    concatenate zjahr '00' nom_bv into NOM.
  when 4.
    concatenate zjahr '0' nom_bv into NOM.
  when 5.
    concatenate zjahr nom_bv into NOM.
endcase.
SELECT * FROM FEBKO WHERE ABSND = BIK and AZIDT = NOM.
ENDSELECT.
if obl_01 = 'X'.
  TRY.
    update FEBKO set ASTAT = 7 VB1OK = '' where ABSND = BIK and AZIDT = NOM.
  CATCH cx_sy_dynamic_osql_error.
    MESSAGE `Error in update FEBKO!` TYPE 'I'.
  ENDTRY.
endif.
if obl_02 = 'X'.
  TRY.
    update FEBKO set ASTAT = 7 VB2OK = '' where ABSND = BIK and AZIDT = NOM .
  CATCH cx_sy_dynamic_osql_error.
    MESSAGE `Error in update FEBKO!` TYPE 'I'.
  ENDTRY.
endif.
* Для найденной записи надо сделать апдейт полей в таблице FEBKO:
* ASTAT = 7
* если obl_01 = X, то очистить поле VB01K
* если obl_02 = X, то очистить поле VB02K

* Для найденной записи делаем апдейт полей:
* очищаем EPERL
* если obl_01 = X, то очищаем поля VB01K, BELNR
* если obl_02 = X, то очищаем поля VB02K, NBBLN
SELECT * FROM FEBEP WHERE KUKEY = FEBKO-KUKEY and ESNUM = pos_bv.
ENDSELECT.
if obl_01 = 'X'.
  TRY.
    update FEBEP set EPERL = '' VB1OK = '' BELNR = '' where KUKEY = FEBKO-KUKEY and ESNUM = pos_bv.
  CATCH cx_sy_dynamic_osql_error.
    MESSAGE `Error in update FEBEP!` TYPE 'I'.
  ENDTRY.
endif.
if obl_02 = 'X'.
  TRY.
    update FEBEP set EPERL = '' VB2OK = '' NBBLN = '' where KUKEY = FEBKO-KUKEY and ESNUM = pos_bv.
  CATCH cx_sy_dynamic_osql_error.
    MESSAGE `Error in update FEBEP!` TYPE 'I'.
  ENDTRY.
endif.
message 'Обновление выполнено!' type 'I'.
На красоту кода внимание не обращаем, главное решить задачу)

Комментариев нет:

Отправить комментарий