ABAP
FMs and BAPIs to create customer/vendor master
Ruslan ABAP, Customer ABAP, Vendor 0
Customers:
SD_CUSTOMER_MAINTAIN_ALL – quite powerful, but has no RFC (should be wrapped for it)
BAPI_CUSTOMER_CREATEFROMDATA1 – much simple, but has RFC (a BAPI).
As an additional way – using IDocs (DEBMAS).
Vendors:
Class VMD_EI_API – methods Initialize and Maintenance
Functional group LC01.
As an additional way – IDocs (CREMAS).
Geschützt: ABAP: Adding new line items to an Inbound delivery (with PO reference)
Ruslan ABAP ABAP, BORGR Um die Kommentare zu sehen, musst du dein Passwort eingeben.
Прокси-сервер в ABAP
Если вы из программы на ABAP пытаетесь получить веб-контент через HTTP, то соединение будет производиться не с компьютера клиента, а с сервера приложений. В зависимости от конфигурации локальной сети вам может понадобиться пробираться через прокси-сервер (иначе потребуется прямая видимость сервера или NAT).
При оформлении HTTP запроса можно непосредственно указать прокси-сервер:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
if client is initial. call method cl_http_client=>create exporting host = 'www.example.com' proxy_host = '192.168.1.1' proxy_service = '8080' importing client = client exceptions argument_not_found = 1 internal_error = 2 plugin_not_active = 3 others = 4. |
Однако здесь есть пара моментов. Во-первых – хардкод в коде не приветствуется, а во-вторых – нет авторизации.
Глобальную настройку HTTP-прокси можно обнаружить в транзакции SM59:
И там уже в появившемся окошечке можно указать не только сервер/порт, но также и логин/пароль для авторизации.
© Иван Болховитинов
Важные слова не важны
В процессе написания кода по заданной спецификации неожижанно обнаружилось, что ключевые слова ABAP не являюся зарезервированными.
Поэтому нижеследующий код компилируется и даже выполняется:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
TYPES TYPE. DATA USING TYPE TYPE. PERFORM FORM USING USING USING USING. FORM FORM USING USING TYPE TYPE DATA LIKE USING TYPE TYPE TYPE. DATA = TYPE. DATA TO TYPE I. DATA ADD LIKE TO. ADD ADD TO TO. DATA IF. DATA EQ. DATA ENDIF. IF IF EQ EQ. MOVE TO TO ENDIF. ENDIF. ENDFORM. |
Даже если так писать и можно, то этого делать всё-таки не следует:
- Усложняет восприятие, хотя есть и подсветка кода и uppercase/lowercase
- Name-conventions
- Ограничения при работе с БД
- Это не смешно
Зато есть служебная таблица TRESE, в которой перечисляются разные наименования полей, которые нельзя создавать из-за ограниченний в разных БД.
© Иван Болховитинов
Geschützt: WMS: propose next empty bin
Ruslan ABAP ABAP Um die Kommentare zu sehen, musst du dein Passwort eingeben.
On distribution – is delivery packed?
Ruslan ABAP ABAP, Enhancement 0
FM WS_LM_CHANGE_DLV_DISTRIB_STATE
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
ENHANCEMENT 1 YDISTRIBUTE. if ( sy-tcode eq 'VL06I' or sy-tcode eq 'VL06ID' ) and ( if_d_proctype eq proctype_inbdist ). "VL06I - do not process the enhancement if it distributes via other ways" "proctype_inbdist - checking only inbound deliveries" types: begin of t_params, paramval like yparamconst-paramval, end of t_params. data: lt_params type standard table of t_params, wa_params like line of lt_params, "work area (header line)" is_zles type boolean. "default abap_false." "which delivery types for checking/processing are defined in our Z-table?" select paramval from yparamconst into corresponding fields of table lt_params where paramid = 'LIEFERUNGSNUMMER'. if sy-subrc eq 0. field-symbols: <ls_lfart> type lipov. loop at ct_worktab assigning <ls_lfart>. read table lt_params with key paramval = <ls_lfart>-lfart transporting no fields. if sy-subrc eq 0. is_zles = abap_true. "all the selected delivery [types] are in yparamconst" endif. endloop. if is_zles eq abap_true. data: lt_wahl like gs_select occurs 0 with header line, begin of lt_wahl2 occurs 0, vbeln like likp-vbeln, verur like likp-verur, end of lt_wahl2, l_msg type c length 50, ans type char1. field-symbols: <ls_arbeit> type lipov, <ls_wahl2> like line of lt_wahl2. loop at ct_worktab assigning <ls_arbeit>. lt_wahl-vbeln = <ls_arbeit>-vbeln. collect lt_wahl. endloop. check not lt_wahl[] is initial. select vbeln verur from likp into table lt_wahl2 for all entries in lt_wahl where vbeln eq lt_wahl-vbeln. "in addition we checking if the field External ID isn't empty" loop at lt_wahl2 transporting no fields where verur eq space. endloop. if sy-subrc eq 0. message s000(Y_YSD) into l_msg. call function 'POPUP_TO_CONFIRM' exporting titlebar = 'Confirm' text_question = l_msg text_button_1 = 'Yes' text_button_2 = 'No' display_cancel_button = '' default_button = '2' importing answer = ans. if ans eq 2. return. endif. endif. clear l_msg. field-symbols: <ls_vepo> type lipov. data lt_vepo like VEPO occurs 0. loop at ct_worktab assigning <ls_vepo>. select vbeln from vepo into corresponding fields of table lt_vepo where vbeln eq <ls_vepo>-vbeln. if sy-subrc ne 0. message s001(Y_YSD) into l_msg. call function 'POPUP_TO_CONFIRM' exporting titlebar = 'Confirm' text_question = l_msg text_button_1 = 'Yes' text_button_2 = 'No' display_cancel_button = '' default_button = '2' importing answer = ans. if ans eq 2. return. endif. endif. endloop. endif. "is_zles" endif. endif. ENDENHANCEMENT. |
Набор полезных программ
Получить внешние вызовы ФМ, транзакций и многого другого внутри программы можно с помощью программы — RSINCL00.
Транзакция ABAPDOCU — ABAP документация и примеры.
Транзакция BIBS — примеры пользовательского интерфейса для ABAP программ.
Транзакция DWDM — демо примеры с использованием Enjoy контролов.
Программа ADBC_DEMO — демо программа ADBC API (для подключения к внешним базам данных).
Транзакция SE83 — библиотека примеров с ALV и прочими контролами.
Программа BALVBT01 — демонстрация множественного использования ALV.
Программа SHOWICON — список всех иконок.
Программа SHOWCOLO — все цвета используемые во WRITE или ALV.
Программа SHOWLINE — всевозможные линии во write отчётах.
Программа SHOWSYMB — символы.
Программа AFX_CODE_SCANNER (или RPR_ABAP_SOURCE_SCAN) — поиск в исходных кодах.
Программа RSBDCOS0 — выполнение системных команд на сервере.
Программа REPTRAN — массовая выгрузка исходников.
© abap-blog.ru
ALV & Internal table
INCLUDE ZDATAI_TOP:
1 2 3 4 5 6 7 8 9 10 11 12 |
TABLES: vbap, marc, sscrfields. DATA: BEGIN OF sd_main OCCURS 0. data matnr like marc-matnr. data vbeln like vbap-vbeln. data arktx like vbap-arktx. data kdmat like vbap-kdmat. data stdpd like marc-stdpd. DATA: END OF sd_main. |
INCLUDE ZSD_SEL:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
SELECTION-SCREEN SKIP. SELECTION-SCREEN BEGIN OF BLOCK selection WITH FRAME TITLE text-001. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT (32) text-a11 FOR FIELD p_datef. PARAMETERS : p_datef LIKE sy-datum DEFAULT space. "OBLIGATORY. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT (32) text-a12 FOR FIELD p_datet. PARAMETERS : p_datet LIKE sy-datum DEFAULT sy-datum OBLIGATORY. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN SKIP. SELECTION-SCREEN BEGIN OF BLOCK dest WITH FRAME TITLE text-e10. PARAMETERS : dest LIKE rfcdisplay-rfcdest DEFAULT 'NONE'. SELECTION-SCREEN END OF BLOCK dest. SELECTION-SCREEN BEGIN OF BLOCK optional WITH FRAME TITLE d10. SELECT-OPTIONS : s_matnr FOR vbap-matnr. SELECT-OPTIONS : s_vbeln FOR vbap-vbeln. "Transaction Code SELECTION-SCREEN END OF BLOCK optional. SELECTION-SCREEN END OF BLOCK selection. SELECTION-SCREEN SKIP. SELECTION-SCREEN PUSHBUTTON 1(10) bt1 USER-COMMAND uc2. AT SELECTION-SCREEN. CASE sscrfields-ucomm. WHEN 'UC2'. CLEAR: s_matnr, s_vbeln, p_datef, p_datet. ENDCASE. |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
REPORT Z_ITJX INCLUDE zdatai_top. INCLUDE zsd_sel. TYPE-POOLS: slis. " SLIS contains all the ALV data types DATA: it_fieldcat TYPE slis_t_fieldcat_alv, wa_fieldcat TYPE slis_fieldcat_alv. DATA: it_vbak LIKE sd_main OCCURS 0. SELECT * FROM vbap "UP TO 500 ROWS INNER JOIN marc ON vbap~matnr EQ marc~matnr " AND vbak~vbeln EQ vbap~vbeln INTO CORRESPONDING FIELDS OF TABLE sd_main WHERE vbap~matnr IN s_matnr. wa_fieldcat-fieldname = 'VBELN'. " Fieldname in the data table (sd_main) wa_fieldcat-seltext_m = 'Sales document'. " Column description in the output APPEND wa_fieldcat TO it_fieldcat. wa_fieldcat-fieldname = 'KDMAT'. wa_fieldcat-seltext_m = 'Client material'. APPEND wa_fieldcat TO it_fieldcat. wa_fieldcat-fieldname = 'MATNR'. wa_fieldcat-seltext_m = 'Material number'. APPEND wa_fieldcat TO it_fieldcat. wa_fieldcat-fieldname = 'ARKTX'. wa_fieldcat-seltext_m = 'Description'. APPEND wa_fieldcat TO it_fieldcat. wa_fieldcat-fieldname = 'STDPD'. wa_fieldcat-seltext_m = 'KMAT'. APPEND wa_fieldcat TO it_fieldcat. *Pass data and field catalog to ALV function module to display ALV list CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING it_fieldcat = it_fieldcat TABLES t_outtab = sd_main EXCEPTIONS program_error = 1 OTHERS = 2. |