Modificar la línea del plan BAPI_SCHEDULE_MAINTAIN del acuerdo del plan

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.

 

Supongo que te gusta

Origin blog.csdn.net/cylcylcylcylwo/article/details/114015060
Recomendado
Clasificación