По сбыту пришлось писать ФМ:
Code:
FUNCTION z_sbyt.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*" IMPORTING
*" REFERENCE(LI_BE) TYPE T001-BUKRS
*" REFERENCE(LI_KUNNR) TYPE KNA1-KUNNR
*" REFERENCE(LI_KTOKD) TYPE KNA1-KTOKD
*" TABLES
*" TTMESSAGES STRUCTURE BDCMSGCOLL OPTIONAL
*" EXCEPTIONS
*" ERROR_MESSAGE
*"----------------------------------------------------------------------
* создание ракурсов сбыта у контрагента
* перед вызовом надо создать дебитора!
* 14.06.2006.г.
*"----------------------------------------------------------------------
DATA: lt_tvta TYPE TABLE OF tvta WITH HEADER LINE,
lt_knvv TYPE TABLE OF knvv WITH HEADER LINE,
msg(50) TYPE c,
call TYPE tcode.
IF li_kunnr IS NOT INITIAL.
CLEAR lt_tvta.
REFRESH lt_tvta.
SELECT * " всего 2 записи
INTO CORRESPONDING FIELDS OF lt_tvta
FROM tvta.
APPEND lt_tvta.
ENDSELECT.
LOOP AT lt_tvta.
REFRESH bdcdata.
SELECT SINGLE *
INTO CORRESPONDING FIELDS OF lt_knvv
FROM knvv
WHERE kunnr = li_kunnr
AND vkorg = lt_tvta-vkorg
AND vtweg = lt_tvta-vtweg
AND spart = lt_tvta-spart.
IF sy-subrc <> 0. " нет такой записи
PERFORM form_cbyt USING lt_tvta
li_kunnr
li_be
li_ktokd.
call = 'XD01'.
ELSE. " уже есть такая запись
PERFORM form_cbyt1 USING lt_tvta
li_kunnr
li_be
li_ktokd.
call = 'XD02'.
ENDIF.
* MESSAGE s042(zmm02) WITH lt_tvta-vkorg
* lt_tvta-vtweg
* lt_tvta-spart.
CALL FUNCTION 'Z_CALL_TRANSACTION'
EXPORTING
i_tcode = call
i_mode = 'N'
i_update = 'L'
i_newtask = 'X'
TABLES
t_bdcdata = bdcdata
t_messages = ttmessages
EXCEPTIONS
error_message = 1 MESSAGE msg.
IF sy-subrc NE 0.
MESSAGE e398(00) WITH 'CALL TRANSACTION:' msg.
ENDIF.
ENDLOOP.
ENDIF.
ENDFUNCTION.
Code:
*&---------------------------------------------------------------------*
*& Form form_cbyt
*& формирование ракурса сбыта для контрагента в пакетном режиме
* если запись не создана
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LT_TVTA text
*----------------------------------------------------------------------*
FORM form_cbyt USING lt_tvta LIKE tvta
l_kunnr TYPE kna1-kunnr
l_be TYPE t001-bukrs
l_sch TYPE t077x-ktokd.
* начальное окно
PERFORM bdc_dynpro USING 'SAPMF02D' '0100'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RF02D-KTOKD'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'RF02D-KUNNR'
l_kunnr. " контрагент
PERFORM bdc_field USING 'RF02D-BUKRS'
l_be. " БЕ
PERFORM bdc_field USING 'RF02D-VKORG'
lt_tvta-vkorg. " сбытовая организация
PERFORM bdc_field USING 'RF02D-VTWEG'
lt_tvta-vtweg. " Канал сбыта
PERFORM bdc_field USING 'RF02D-SPART'
lt_tvta-spart. " сектор
PERFORM bdc_field USING 'RF02D-KTOKD'
l_sch. " группа счетов
PERFORM bdc_field USING 'KNVK-PARNR'
' '.
PERFORM bdc_field USING 'RF02D-REF_KUNNR'
' '.
PERFORM bdc_field USING 'RF02D-REF_BUKRS'
' '.
PERFORM bdc_field USING 'RF02D-REF_VKORG'
' '.
PERFORM bdc_field USING 'RF02D-REF_VTWEG'
' '.
PERFORM bdc_field USING 'RF02D-REF_SPART'
' '.
PERFORM bdc_field USING 'USE_ZAV'
' '.
* остальные окна
PERFORM cbyt_osn USING l_sch.
ENDFORM. "form_cbyt
Code:
*&---------------------------------------------------------------------*
*& Form form_cbyt
*& формирование ракурса сбыта для контрагента в пакетном режиме
* если запись уже создана
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LT_TVTA text
*----------------------------------------------------------------------*
FORM form_cbyt1 USING lt_tvta LIKE tvta
l_kunnr TYPE kna1-kunnr
l_be TYPE t001-bukrs
l_sch TYPE t077x-ktokd.
* начальное окно
PERFORM bdc_dynpro USING 'SAPMF02D' '0101'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RF02D-D0324'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'RF02D-KUNNR'
l_kunnr. " контрагент
PERFORM bdc_field USING 'RF02D-BUKRS'
l_be. " БЕ
PERFORM bdc_field USING 'RF02D-VKORG'
lt_tvta-vkorg. " сбытовая организация
PERFORM bdc_field USING 'RF02D-VTWEG'
lt_tvta-vtweg. " Канал сбыта
PERFORM bdc_field USING 'RF02D-SPART'
lt_tvta-spart. " сектор
* управляющие галочки
PERFORM bdc_field USING 'RF02D-D0110' " адрес
' '.
PERFORM bdc_field USING 'RF02D-D0210' " управление
' '.
PERFORM bdc_field USING 'RF02D-D0120' " маркетинг
' '.
PERFORM bdc_field USING 'RF02D-D0215' " платёжные операции
' '.
PERFORM bdc_field USING 'RF02D-D0125' " пункты выгрузки
' '.
PERFORM bdc_field USING 'RF02D-D0220' " внешняя торговля
' '.
PERFORM bdc_field USING 'RF02D-D0130' " Контактное лицо
' '.
PERFORM bdc_field USING 'RF02D-D0230' " ведение счетов
' '.
PERFORM bdc_field USING 'RF02D-D0340' " платёжные операции
' '.
PERFORM bdc_field USING 'RF02D-D0610' " корреспонденция
' '.
PERFORM bdc_field USING 'RF02D-D0370' " страхование
' '.
PERFORM bdc_field USING 'RF02D-D0360' " НИД
' '.
PERFORM bdc_field USING 'USE_ZAV' " ЦентрУправАдресами
' '.
* управление сбытом
PERFORM bdc_field USING 'RF02D-D0310' " продажа
'X'.
PERFORM bdc_field USING 'RF02D-D0315' " отгрузка
'X'.
PERFORM bdc_field USING 'RF02D-D0320' " фактурирование
' '.
PERFORM bdc_field USING 'RF02D-D0326' " выходные документы
'X'.
PERFORM bdc_field USING 'RF02D-D0324' " роли партнёров
' '.
* остальные окна
PERFORM cbyt_osn USING l_sch.
ENDFORM.
'Z_CALL_TRANSACTION' - это просто вызов
Code:
CALL TRANSACTION i_tcode USING t_bdcdata MODE i_mode UPDATE i_update
MESSAGES INTO t_messages.
Code:
*&---------------------------------------------------------------------*
*& Form cbyt_osn
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM cbyt_osn USING l_sch TYPE t077x-ktokd.
* PERFORM bdc_dynpro USING 'SAPMF02D' '0210'.
* PERFORM bdc_field USING 'BDC_CURSOR'
* 'KNB1-AKONT'.
* PERFORM bdc_field USING 'BDC_OKCODE'
* '=VW'.
PERFORM bdc_dynpro USING 'SAPMF02D' '0310'.
PERFORM bdc_field USING 'BDC_CURSOR'
'KNVV-WAERS'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=VW'.
PERFORM bdc_field USING 'KNVV-WAERS'
c_rub.
PERFORM bdc_field USING 'KNVV-KALKS'
c_kalks.
PERFORM bdc_dynpro USING 'SAPMF02D' '0315'.
PERFORM bdc_field USING 'BDC_CURSOR'
'KNVV-VSBED'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=VW'.
PERFORM bdc_field USING 'KNVV-VSBED'
c_vsbed.
PERFORM bdc_dynpro USING 'SAPMF02D' '0320'.
PERFORM bdc_field USING 'BDC_CURSOR'
'KNVV-KTGRD'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=VW'.
PERFORM bdc_field USING 'KNVV-ZTERM'
c_zterm.
IF l_sch = '0002'.
PERFORM bdc_field USING 'KNVV-KTGRD' '02'.
ELSE.
PERFORM bdc_field USING 'KNVV-KTGRD' '01'.
ENDIF.
PERFORM bdc_dynpro USING 'SAPMF02D' '1350'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RF02D-KUNNR'.
PERFORM bdc_field USING 'BDC_OKCODE'
'VW'.
IF l_sch = '0002'.
PERFORM bdc_field USING 'KNVI-TAXKD(01)' '1'.
ELSE.
PERFORM bdc_field USING 'KNVI-TAXKD(01)' '2'.
ENDIF.
PERFORM bdc_dynpro USING 'SAPMF02D' '0324'.
PERFORM bdc_field USING 'BDC_CURSOR'
'KNVP-PARVW(01)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=VW'.
ENDFORM. " form_cbyt