2015-11-24 3 views
0

У меня проблема с оператором обновления ABAP. Я использую «Commit work» в одном заявлении таблицы обновлений, но он не работает должным образом, когда-то он работает, а когда-то он не работает.Обязательная работа над таблицей с использованием инструкции UPDATE

Проверка заявления:

UPDATE mara 
SET 
     zzmanu  = wa-sales_data2-zzmanu 
     zzmatnr_sf = wa-sales_data2-zzmatnr_sf 
WHERE matnr = wa-basic_data1-matnr. 

if sy-subrc eq 0. 
commit work. 
wait up to 2 seconds. 
ENDIF. 

Будет ли выше Фиксировать работу вызывает какие-либо проблемы или что является причиной его не обновляет таблицу. Просьба дать некоторое предложение в этом случае.

+0

Можете ли вы предоставить больше данных, например; являются ли эти Z уникальными индексами? Какова ценность 'wa-basic_data1-matnr'? Преобразован ли он для ввода ?, и т. Д. –

+0

Что такое SY-SUBRC, когда он не работает? Является ли материал заблокированным, когда вы делаете это обновление? –

+0

@ Нельсон Миранда "matnr = wa-basic_data1-matnr." Я проверил это значение правильно. это готовый товарный материал № –

ответ

2

Измените ваши обязательства по

COMMIT WORK AND WAIT. 
IF SY-SUBRC NE 0. 
    WRITE:/'Update error! Check SM13'. 
ENDIF. 

Если вы проверяете BAPI_TRANSACTION_COMMIT, это именно то, что делается при вызове с параметром WAIT. Вы можете использовать этот функциональный модуль, если хотите, и отобразите стандартное сообщение об ошибке.

Если ваше обновление не удается, проверьте SM13 на наличие причины. Скорее всего, это проблема блокировки, но могут быть и другие причины.

В любом случае вы должны расширить свою логику, включив блокировку объектов перед UPDATE.

+0

Привет, спасибо за ответ, Я проверил вот так, но это не обновление. :( –

+2

Ну, тогда у вас нет проблемы с COMMIT, и ваши проблемы возникают в самом UPDATE-заявлении. Попробуйте это: SELECT SINGLE * FROM mara INTO ls_mara WHERE matnr = wa-basic_data1-matnr. WRITE:/ls_mara- matnr wa-sales_data2-zzmanu wa-sales_data2-zzmanu_sf. Является ли инструкция SELECT успешной? –

+0

да, материал создан, инструкция SELECT успешна. –

2

Если SY-SUBRC равно «4», то материал в таблице MARA не существует или значение wa-basic_data1-matnr не готово для ввода, и вы должны его преобразовать.

Иногда значение «MATNR» в таблице «MARA» настраивается в SAP для использования диапазона для автоматического присвоения номера материалам в стандартных транзакциях «MM01» и «MM41». Такое поведение не применяется в пользовательских программах, поэтому в этих ситуациях обязательно используйте функциональные модули «CONVERSION_EXIT_MATN1_INPUT» и «CONVERSION_EXIT_MATN1_OUTPUT».

Тип данных «MATNR» - это символ CHAR (18), а значения (в этом случае) сохраняются с нулями слева, хотя вы видите число без этих нулей. И это потому, что SAP внутренне преобразует для вывода значения, чтобы пользователь не видел эти нули.

Например, если значение MARA-MATNR в транзакции «SE16N» или «MM03» равно «9999999», тогда реальное значение хранится «000000000009999999». Проверьте ту же таблицу с транзакцией «SE11», и на этот раз вы увидите необработанные данные. Следующий код может объяснить немного лучше выше:

DATA: lv_matnr TYPE matnr, 
     wa_mara TYPE mara. 

lv_matnr = '1234567'. " -> Not ready for input 
SELECT SINGLE * FROM mara INTO wa_mara WHERE matnr eq lv_matnr. 
WRITE sy-subrc. " -> sy-subrc = 4. Not found 

CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT' " Format for input 
    EXPORTING 
    INPUT    = lv_matnr " The value is '1234567' 
    IMPORTING 
    OUTPUT    = lv_matnr " The value will be formatted to '0000000000' 
    EXCEPTIONS 
    LENGTH_ERROR  = 1 
    OTHERS    = 2 
      . 
IF SY-SUBRC <> 0. 
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO 
*   WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. 
ENDIF. 

SELECT SINGLE * FROM mara INTO wa_mara WHERE matnr eq lv_matnr. 
WRITE/sy-subrc. " -> sy-subrc = 0. Found 

В вашем случае попробуйте это;

CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT' 
    EXPORTING 
    INPUT    = wa-basic_data1-matnr 
    IMPORTING 
    OUTPUT    = wa-basic_data1-matnr " Add zeroes at the left 
    EXCEPTIONS 
    LENGTH_ERROR  = 1 
    OTHERS    = 2 
      . 
IF SY-SUBRC <> 0. 
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO 
*   WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. 
ENDIF. 

UPDATE mara 
SET 
     zzmanu  = wa-sales_data2-zzmanu 
     zzmatnr_sf = wa-sales_data2-zzmatnr_sf 
WHERE matnr = wa-basic_data1-matnr. 

if sy-subrc eq 0. 
commit work. 
wait up to 2 seconds. 
ENDIF. 

Надеется, что это помогает

1

О вещественных числах вы должны знать, что SAP использует так называемый «Альфа-Конверсию».

Номера буквенно-цифровых материалов оставлены слева, числовые номера материалов связаны сверху с ведущими нулями.

Это может быть проблемой, если у вас нет номера материала в форме, необходимой для обновления.

Таким образом, Ax1123 будет AX1123 в базе данных 123 будет 00000000000000на базе данных.

SAP использует функциональные модули, такие как conversion_exit_alpha_input и conversion_exit_alpha_output, для переключения между значениями DB и UI-представлением.

Смежные вопросы