Nota
1. El logotipo fijo es X de forma predeterminada y debe escribirse mediante una mejora.
2. Eliminar delete_ind para pasar L, EKET eliminar físicamente, si no se pasa lt_schedulex-sched_linex = 'X', BAPI puede volver a calcular sched_line después de la eliminación, y luego presionar el valor transferido
3. El nombre de la estructura mejorada de la extensión se puede quitar primero a través de BAPI_SAG_GETDETAIL, la prueba no está escrita, está actualizada, debería faltar la mejora
4. Si ya recibió la mercancía, si modifica otras líneas del plan, se informará un error como MEOUT 200. El componente de subcontratación al 5500006237 00010 ya no se puede cambiar, y la recepción puede modificarlo, directa e implícitamente mejorar para omitir el error.
5. Error 61 781 Se produjo un error al determinar las partes del material, puede ser que la fecha de demanda del componente sea mayor que la fecha de la línea de programación
DEMO 1
al final de ebeln.
leer tabla gt_alv index lv_tabix.
* función de llamada 'BAPI_SAG_GETDETAIL'
* exportando
* documento de compra = gt_alv-ebeln
* item_data = 'X'
* schedule_data = 'X'
* mesas
* item = lt_item
* horario = lt_schedule
** extensionout = extensionout
** return = lt_return
*.
función de llamada 'BAPI_SCHEDULE_MAINTAIN'
exportador
Purchasedocument = gt_alv-ebeln
mesas
horario = lt_schedule
Schedulelex = lt_schedulex
* EXTENSIONIN = EXTENSIONIN
* EXTENSIONOUT = EXTENSIONOUT
return = lt_return.
bucle en lt_return donde escriba ca 'AEX'.
id de mensaje lt_return-id tipo lt_return-type número lt_return-number
con lt_return-message_v1 lt_return-message_v2
lt_return-message_v3 lt_return-message_v4
en datos (lv_msg).
gt_alv-rtmsg = gt_alv-rtmsg && lv_msg && ';'.
endloop.
si sy-subrc = 0.
llamar a la función 'BAPI_TRANSACTION_ROLLBACK'.
gt_alv-led = 1.
* lt_ekko-rtmsg = 1.
demás.
llamar a la función 'BAPI_TRANSACTION_COMMIT'
exportador
esperar = 'X'.
gt_alv-led = 3.
gt_alv-rtmsg = 'Éxito'.
terminara si.
modificar gt_alv transportando led rtmsg donde ebeln = gt_alv-ebeln.
claro: lt_item, lt_item [], lt_schedule, lt_schedule [], lt_return, lt_return [].
termina en.
DEMO 2
formulario frm_data_import.
* BAPI
datos :
lt_return tipo bapiret2 ocurre 0 con la línea de encabezado.
data lt_item tipo tabla estándar de bapimeoutitem con línea de encabezado.
data lt_schedule tipo tabla estándar de bapimeoutschedule con línea de encabezado.
data lt_schedulex tipo tabla estándar de bapimeoutschedulex con línea de encabezado.
datos: el comienzo de lt_ekko ocurre 0,
ebeln como ekpo-ebeln,
* ebelp como ekpo-ebelp,
LED,
rtmsg tipo bapi_msg,
fin de lt_ekko.
datos:
lv_eindt como eket-eindt.
datos: comienzo de ls_zmmr007,
ebeln tipo eket-ebeln,
ebelp tipo eket-ebelp,
etenr tipo eket-etenr,
fixkz tipo eket-fixkz,
final de ls_zmmr007.
data lt_zmmr007 como tabla de ls_zmmr007.
bucle en <gt_out> en <gs_out>.
move-correspondiente <gs_out> a lt_ekko.
recopilar lt_ekko.
endloop.
seleccione ebeln, ebelp, etenr, eindt, fixkz, glmng
en la tabla @data (lt_eket)
de eket
para todas las entradas en @lt_ekko
donde ebeln = @ lt_ekko-ebeln.
ordenar lt_eket por ebeln ebelp etenr descendente.
datos (lt_eket2) = lt_eket.
ordenar lt_eket2 por ebeln ebelp etenr fixkz.
bucle en lt_ekko.
claro: lt_item, lt_item [], lt_schedule, lt_schedule [], lt_return, lt_return [], ls_zmmr007, lt_zmmr007.
llamar a la función 'BAPI_SAG_GETDETAIL'
exportador
Purchasedocument = lt_ekko-ebeln
item_data = 'X'
schedule_data = 'X'
mesas
item = lt_item
horario = lt_schedule
* extensionout = extensionout
* return = lt_return
.
datos (lt_schedule2) = lt_schedule [].
ordenar lt_schedule2 por item_no sched_line descendente.
bucle en lt_item.
clear lv_eindt. "Una línea po se borra una vez, para borrar la siguiente línea una vez
lea la tabla lt_schedule2 en datos (ls_schedule2) con la clave item_no = lt_item-item_no.
lea la tabla <gt_out> en <gs_out> con la clave ('EBELN') = lt_ekko-ebeln ('EBELP') = lt_item-item_no búsqueda binaria.
si sy-subrc = 0.
bucle en <gt_out> en <gs_out> desde sy-tabix.
Asigne el componente 'EBELN' de la estructura <gs_out> al símbolo de campo (<lv_ebeln>).
asigne el componente 'EBELP' de la estructura <gs_out> al símbolo de campo (<lv_ebelp>).
si <lv_ebeln> ne lt_ekko-ebeln o <lv_ebelp> ne lt_item-item_no.
Salida.
terminara si.
bucle en gt_fieldcat en datos (ls_fieldcat).
si sy-tabix> = 11 y sy-tabix <= gv_counts.
asigne el componente ls_fieldcat-fieldname de la estructura <gs_out> a field-symbol (<lv_menge>).
divida ls_fieldcat-coltext en '-' en datos (lv_date) datos (lv_type) datos (lv_week).
if lv_type = '02'. "Construya una nueva línea de plan
elseif lv_type = '03'.
si lv_eindt es inicial. "Una línea po se elimina una vez
lv_eindt = lv_date. "Fecha de pronóstico temprano
si lt_item-plant = '2031' o lt_item-plant = '2041'.
bucle en lt_schedule
* donde fecha_envío> = lv_eindt "fecha_envío 居然 是 c
. "Se cubren las líneas del plan de pronóstico después de la fecha de pronóstico más temprana,
datos lv_datum como sy-datum.
lv_datum = lt_schedule-delivery_date (4) && lt_schedule-delivery_date + 5 (2) && lt_schedule-delivery_date + 8 (2).
si lv_datum> = lv_eindt.
lea la tabla lt_eket2 en los datos (ls_eket2) con la clave ebeln = lt_ekko-ebeln ebelp = lt_schedule-item_no etenr = lt_schedule-sched_line fixkz = 'X' búsqueda binaria.
si sy-subrc = 0 y ls_eket2-glmng es inicial. "Los entregados no se pueden eliminar
lt_schedulex-item_no = lt_schedule-item_no.
lt_schedulex-sched_line = lt_schedule-sched_line.
lt_schedulex-delete_ind = 'X'.
añadir lt_schedulex.
lt_schedule-delete_ind = 'L'.
modificar lt_schedule.
terminara si.
terminara si.
endloop.
demás.
bucle en lt_schedule. "Eliminar todos los pronósticos
lea la tabla lt_eket2 en ls_eket2 con la clave ebeln = lt_ekko-ebeln ebelp = lt_schedule-item_no etenr = lt_schedule-sched_line fixkz = 'X' búsqueda binaria.
si sy-subrc = 0 y ls_eket2-glmng es inicial. "Los entregados no se pueden eliminar
lt_schedulex-item_no = lt_schedule-item_no.
lt_schedulex-sched_line = lt_schedule-sched_line.
lt_schedulex-delete_ind = 'X'.
añadir lt_schedulex.
lt_schedule-delete_ind = 'L'.
modificar lt_schedule.
terminara si.
endloop.
terminara si.
terminara si.
terminara si.
si <lv_menge> no es inicial.
claro: lt_schedule, lt_schedulex.
ls_schedule2-sched_line = ls_schedule2-sched_line + 1.
lt_schedule-item_no = lt_item-item_no.
lt_schedule-sched_line = ls_schedule2-sched_line.
lt_schedule-delivery_date = lv_date.
lt_schedule-amount = <lv_menge>.
añadir lt_schedule.
lt_schedulex-item_no = lt_schedule-item_no.
lt_schedulex-sched_line = lt_schedule-sched_line.
lt_schedulex-delivery_date = 'X'.
lt_schedulex-amount = 'X'.
añadir lt_schedulex.
borrar ls_zmmr007.
ls_zmmr007-ebeln = lt_ekko-ebeln.
ls_zmmr007-ebelp = lt_schedule-item_no.
ls_zmmr007-etenr = lt_schedule-sched_line.
si lv_type = '02'.
ls_zmmr007-fixkz = ''.
elseif lv_type = '03'.
ls_zmmr007-fixkz = 'X'.
terminara si.
agregue ls_zmmr007 a lt_zmmr007.
terminara si.
terminara si.
endloop.
claro: ls_schedule2.
endloop.
terminara si.
endloop.
exportar lt_zmmr007 = lt_zmmr007 a la identificación de memoria 'ZMMR007'.
función de llamada 'BAPI_SCHEDULE_MAINTAIN'
exportador
Purchasedocument = lt_ekko-ebeln
mesas
horario = lt_schedule
Schedulelex = lt_schedulex
* EXTENSIONIN = EXTENSIONIN
* EXTENSIONOUT = EXTENSIONOUT
return = lt_return.
bucle en lt_return donde escriba ca 'AEX'.
id de mensaje lt_return-id tipo lt_return-type número lt_return-number
con lt_return-message_v1 lt_return-message_v2
lt_return-message_v3 lt_return-message_v4
en datos (lv_msg).
lt_ekko-rtmsg = lt_ekko-rtmsg && lv_msg && ';'.
endloop.
si sy-subrc = 0.
llamar a la función 'BAPI_TRANSACTION_ROLLBACK'.
lt_ekko-led = 1.
* lt_ekko-rtmsg = 1.
demás.
llamar a la función 'BAPI_TRANSACTION_COMMIT'
exportador
esperar = 'X'.
lt_ekko-led = 3.
lt_ekko-rtmsg = 'Éxito'.
terminara si.
modificar lt_ekko.
endloop.
bucle en <gt_out> en <gs_out>.
asigne el componente 'EBELN' de la estructura <gs_out> a <lv_ebeln>.
Asigne el componente 'LED' de la estructura <gs_out> al símbolo de campo (<lv_led>).
Asigne el componente 'RTMSG' de la estructura <gs_out> a field-symbol (<lv_rtmsg>).
leer la tabla lt_ekko con la clave ebeln = <lv_ebeln> búsqueda binaria.
<lv_led> = lt_ekko-led.
<lv_rtmsg> = lt_ekko-rtmsg.
modificar <gt_out> desde <gs_out>.
endloop.
* Guardar tabla
datos:
lt_ztmm007a como tabla de ztmm007a con línea de encabezado.
bucle en <gt_out> en <gs_out>.
move-correspondiente <gs_out> a lt_ztmm007a.
lt_ztmm007a-version = gv_version.
Asigne el componente 'LED' de la estructura <gs_out> a <lv_led>.
si <lv_led> = 3.
bucle en gt_fieldcat en ls_fieldcat de 11 a gv_counts.
lt_ztmm007a-zjhrq = ls_fieldcat-nombre de campo.
asigne el componente ls_fieldcat-fieldname de la estructura <gs_out> a <lv_menge>.
lt_ztmm007a-amount = <lv_ amount>.
divida ls_fieldcat-coltext en '-' en lv_date lv_type lv_week.
lt_ztmm007a-type = lv_type.
lt_ztmm007a-erdat = sy-datum.
lt_ztmm007a-erzet = sy-uzeit.
lt_ztmm007a-ernam = sy-uname.
lt_ztmm007a-aedat = sy-datum.
lt_ztmm007a-aezet = sy-uzeit.
lt_ztmm007a-aenam = sy-uname.
anexar lt_ztmm007a.
endloop.
terminara si.
endloop.
si lt_ztmm007a no es inicial.
modifique ztmm007a de la tabla lt_ztmm007a.
comprometer el trabajo y esperar.
mensaje s001 (00) con 'Se han guardado los datos de la versión'.
terminara si.
* realizar frm_alv_styl.
realice frm_alv_refresh usando go_alvgrid.
endform.