Автор Тема: Обновление данных завода пакетным вводом (Ритейл)  (Прочитано 9940 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Паганель

  • Я НЕ ЗАНИМАЮСЬ SAP
  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Репутация: +20/-0
  • Пол: Мужской
  • https://noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Тут вот понадобилось обновить массово данные по заводам (Ритейл, WB02).

Использовать LSMW c пакетным вводом не получилось (по непонятным причинам, система сразу за wb02 вызывала последовательно XK02 и XD02, при этом в XD02 данные пакетного ввода не передавались).

Решил написать небольшую программку, см. ниже.

Пару особенностей:

Если использовать стандартный вызов:
Код: You are not allowed to view links. Register or Login
CALL TRANSACTION 'WB02' USING gt_bdctable MODE 'E' UPDATE 'A'.То получаем, ту же ситуацию - вызов XK02 и XD02.

В ходе экспериментов в SHDB, было выявлено, что необходимо вызывать пакетник с параметрами UPDATE 'L' (Local) + без режима пакетного ввода см. рис. 1. (видимо если SY-BINPT не пустой, то система, автоматом вызывает связанные транзакции.
SY-BINPT=SPACE при CALL TRANSACTION USING... )

В таком случае, при вызове транзакции в коде, необходимо использовать OPTIONS FROM opt (тип - ctu_params), вместо MODE 'E' UPDATE 'A'.

Код: You are not allowed to view links. Register or Login
*&---------------------------------------------------------------------*
*& Report  ZMM_UPDATE_WERKS
*&---------------------------------------------------------------------*

REPORT  zmm_update_werks.

TABLES: ekko.

INCLUDE zmm_functions.

TYPE-POOLS: truxs, slis.

TYPES: BEGIN OF gs_buffer.
  TYPES: col1(30)  TYPE c. " код
  TYPES: col2(30)  TYPE c. " название
  TYPES: col3(30)  TYPE c. " улица
  TYPES: col4(30)  TYPE c. " город
TYPES: END OF gs_buffer.

SELECTION-SCREEN BEGIN OF BLOCK 10 WITH FRAME TITLE text-011.
  PARAMETERS: p_fname LIKE rlgrap-filename DEFAULT 'c:\UPD_HEADER.xls'.
SELECTION-SCREEN END OF BLOCK 10.


AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fname.
  CALL FUNCTION 'F4_FILENAME'
    IMPORTING
        file_name = p_fname.

START-OF-SELECTION.
    PERFORM read_data.


FORM read_data.
  DATA: str_temp TYPE string.
  DATA: it_raw TYPE truxs_t_text_data.
  DATA: i_strlen TYPE i.
  DATA: gt_buffer TYPE STANDARD TABLE OF gs_buffer.
  DATA: ls_buffer LIKE LINE OF gt_buffer.
  DATA: werks TYPE werks_d.
  DATA: name  TYPE string.
  DATA: street TYPE string.
  DATA: city  TYPE string.

  CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
  EXPORTING
    i_line_header        = 'X'
    i_tab_raw_data       = it_raw
    i_filename           = p_fname
  TABLES
    i_tab_converted_data = gt_buffer[]
  EXCEPTIONS
    conversion_failed    = 1
    OTHERS               = 2.

  LOOP AT gt_buffer INTO ls_buffer.
    werks  = ls_buffer-col1.
    name   = ls_buffer-col2.
    street = ls_buffer-col3.
    city   = ls_buffer-col4.

    PERFORM do_update_werks USING werks name street city.
  ENDLOOP.
ENDFORM.

FORM do_update_werks
USING zwerks TYPE werks_d
      zname  TYPE string
      zstreet TYPE string
      zcity  TYPE string.

  DATA: opt TYPE ctu_params OCCURS 10 WITH HEADER LINE.

  DATA: txt TYPE string.
  DATA: str TYPE string.
  CONCATENATE 'Завод' zwerks INTO txt SEPARATED BY space.
  CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING percentage = 0 text = txt.

  CLEAR gt_bdctable.
  REFRESH gt_bdctable.

  PERFORM bdcpro USING:
        'X'  'SAPMWBE3'  '0102',

        ' ' 'BDC_CURSOR'  'WR02D-LOCNR',
        ' ' 'BDC_OKCODE'  '/00',
        ' ' 'WR02D-LOCNR'  zwerks.

  PERFORM bdcpro USING:
        'X' 'SAPMWBE3'  '0401',
        ' ' 'BDC_OKCODE'  '=5200',
        ' ' 'BDC_SUBSCR'  'SAPMWBE3 5100SUB1',
        ' ' 'BDC_SUBSCR'  'SAPMWBE3 2100ORGA'.

  PERFORM bdcpro USING:
        'X' 'SAPMWBE3'  '0401',

        ' ' 'BDC_OKCODE'  '=UPDA',
        ' ' 'BDC_SUBSCR'  'SAPMWBE3 5200SUB1',
        ' ' 'BDC_CURSOR'  'ADDR1_DATA-CITY1',
        ' ' 'ADDR1_DATA-NAME1'  zwerks,
        ' ' 'ADDR1_DATA-SORT1'  zwerks,
        ' ' 'ADDR1_DATA-SORT2'  zwerks,
        ' ' 'ADDR1_DATA-STREET' zstreet,
        ' ' 'ADDR1_DATA-CITY1'  zcity.

  CLEAR opt.
  REFRESH opt.
  opt-nobinpt = 'X'.
  opt-updmode ='L'.
  opt-dismode = 'E'.
  APPEND opt.

  CALL TRANSACTION 'WB02' USING gt_bdctable OPTIONS FROM opt. "'A'.
  "CALL TRANSACTION 'WB02' USING gt_bdctable MODE 'E' UPDATE 'A'. " Так не работает

  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

ENDFORM. " do_update_werks
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Sapforum.Biz