Замещением подругому это и не делаеться

, хотя и без проблем
на всякий случай выложу, так как эта проблема обсуждалась уже 1000 раз ...
Замещение контрольного счета в документах Контроля Счетов
1 Используем только замещение FI; передача номера счета через текстовые поля заголовка документа:
1. Модификация табл.GB01:
• Строка 009 S BSEG HKONT X
заменить X на “ “
Через ABAP-словарь – Содержимое таблицы - /h(отладчик)
2. Генерация c пом. Программы RGUGBR00 , выбрать все
3. Прикладная область GBLS - (программу – образец RGGBS000 скопировать в свою программу – Z…..000). В этой программе Z…000 создать новый EXIT , например U177
exits-name = 'U177'.
exits-param = c_exit_param_none.
append exits.
и FORM U177.
*------------------------------------------------
form u177.
if bkpf-blart = 'RE'.
if bseg-koart = 'K'.
if bkpf-bktxt(1) = '1'.
bseg-hkont = '0060006100'.
endif.
endif.
endif.
endform.
*
Настройка - Финансы – Специальные регистры – Основные параметры настройки - Пользовательские программы – Ведение пользовательских программ, зависимых от манданта :
В рассматриваемой таблице поставить свою программу Z…000.
4. В настройке меню FI
- Финансы
- Главная бухгалтерия
- Хозяйственные операции
- Проводка по основному счету
- Настройка или проверка параметров документа
*Определение замещений (Define substitutions) определить новое замещение :
-Новые записи
БЕ 0001 момент 2 (позиция) замещение SUB2 1 активно
Два раза щелкнуть на SUB2
Сообщение: Замещение не существует Создать? Да
На следующем экране нажать на Ввод
Ввести название замещения
Нажать Вставить запись Выдается экран полей для замещений
Выбрать необходимые и пометить (BSEG-HKONT)
Нажать на ввод и на следующем экране
определить формулу (условие )
BKPF-BLART = 'RE'
подставить под выбранные поля Имена пользовательских программ (U177)
Проверить
Выход по зеленой стрелке
Сохранить
2. Используем дополнительно расширения пользователя для Контроля счетов логистики
1. используем расширение LMR1M001 для контроля счетов логистики Создаем и активируем проект (например, mm1) c этим расширением.
2. С пом. Редактора экранов создаем экран SAPLXM08 0400:
Тип экрана – подэкран
Поля Zhkont – поле ввода – вывода 10 знаков
ZTHKONT – текстовое поле “Контрольный счет”
Логика выполнения:
process before output.
module status_0400.
*
process after input.
module user_command_0400.
process on value-request.
field zhkont module help_zhkont.
Тексты модулей создаются в include ZXM08ZZZZ:
*-------------------------------------------------------------------*
* INCLUDE ZXM08ZZZ *
*-------------------------------------------------------------------*
*&------------------------------------------------------------------*
*& Module STATUS_0400 OUTPUT
*&------------------------------------------------------------------*
* text
*-------------------------------------------------------------------*
MODULE STATUS_0400 OUTPUT.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.
IF SY-TCODE = 'MR3M'.
LOOP AT SCREEN.
CASE SCREEN-NAME.
WHEN 'ZHKONT' OR 'ZTHKONT'.
SCREEN-ACTIVE = 0.
MODIFY SCREEN.
ENDCASE.
ENDLOOP.
ENDIF.
ENDMODULE. " STATUS_0400 OUTPUT
*&------------------------------------------------------------------*
*& Module HELP_ZHKONT INPUT
*&------------------------------------------------------------------*
* text
*-------------------------------------------------------------------*
MODULE HELP_ZHKONT INPUT.
CALL FUNCTION 'FI_F4_AKONT'
EXPORTING
I_BUKRS = ZBUKRS
I_MITKZ = 'K'
I_AKONT = ZHKONT
* I_XSHOW = ' '
IMPORTING
* e_akont = zhkont
E_AKONT0 = ZHKONT
EXCEPTIONS
INVALID_CALL = 1
NOTHING_FOUND = 2
INTERNAL_ERROR = 3
OTHERS = 4.
*modify screen.
*break-point.
ENDMODULE. " HELP_ZHKONT INPUT
*&------------------------------------------------------------------*
*& Module USER_COMMAND_0400 INPUT
*&------------------------------------------------------------------*
* text
*-------------------------------------------------------------------*
MODULE USER_COMMAND_0400 INPUT.
SELECT SINGLE MITKZ FROM SKB1 INTO ZMITKZ
WHERE BUKRS = ZBUKRS
AND SAKNR = ZHKONT.
IF NOT SY-SUBRC IS INITIAL OR ZMITKZ NE 'K'.
MESSAGE E999(ZZ) WITH ZHKONT.
* Счета &1 нет или счет не является контрольным
ENDIF.
EXPORT ZHKONT TO MEMORY.
ENDMODULE. " USER_COMMAND_0400 INPUT
3.Для исходного определения контрольного счета используем User-Exit exit_saplmr1m_003 , Который тоже принадлежит расширению LMR1M001 . Для этого кодирум include zxm08u15:
*-----------------------------------------------------------------
* INCLUDE ZXM08U15
*-----------------------------------------------------------------
*" VALUE(I_RBKPV) TYPE MRM_RBKPV
* Контрольный счет кредитора
*break-point.
if zhkont is initial.
select single akont from lfb1 into zhkont
where lifnr = i_rbkpv-lifnr
and bukrs = i_rbkpv-bukrs.
endif.
zbukrs = i_rbkpv-bukrs.
*zhkont = lfb1-akont.
В Области глобальных данных zxm08top определяем
data zhkont like bseg-hkont.
data zbukrs like bseg-bukrs.
data zmitkz.
4.Генерируем экран SAPLXM08 0400.
В программе для замещений FI исправляем form u177. if bkpf-blart = 'RE'. if bseg-koart = 'K'.
* if bkpf-bktxt(1) = '1'.
* bseg-hkont = '0060006100'.
* endif.
import zhkont from memory. if Not zhkont is initial. bseg-hkont = zhkont. endif endif. endif.
endform.
*
5. Используем для операций сторно (дабы подставить такой же контрольный счет) Exit exit_saplmrmp_010. Include zxm08u16:
*----------------------------------------------------------------------*
* INCLUDE ZXM08U16 *
*----------------------------------------------------------------------*
*break-point.
tables: bkpf.
data:
zbelnr like bkpf-belnr,
zawkey like bkpf-awkey.
if e_trbkpv-vgart = 'RS' and e_trbkpv-tcode = 'MR8M'."сторно
concatenate e_trbkpv-stblg e_trbkpv-stjah into zawkey.
select single belnr bukrs into (zbelnr, zbukrs)
from bkpf
where awkey = zawkey
and awtyp = 'RMRP'.
select single hkont from bseg into zhkont where
belnr = zbelnr
and gjahr = e_trbkpv-stjah
and bukrs = zbukrs
and buzei = '001'.
export zhkont to memory.
endif.
7Наслаждаемся новой возможностью (можно посмотреть в RUF 030)