У всех, наверняка, случалась ситуация, когда банковская выписка проведена и в одной из позиций допущена ошибка, или ошибки нет, но банк вдруг отменил проводку (да, в идеале банк должен прислать другую выписку, но в реале бывает не совсем так). Тогда можно поступить следующим образом:
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'.
Комментариев нет:
Отправить комментарий