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

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

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

  • Я НЕ ЗАНИМАЮСЬ SAP
  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Репутация: +20/-0
  • Пол: Мужской
  • https://noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • 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
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login