¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Cómo actualizar la tabla KNVV utilizando la F.M. SD_CUSTOMER_MAINTAIN_ALL sin usar INSERT

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 72 Vistas
0
Cargando...

Estoy teniendo problemas, necesito actualizar tanto knvv como knvp utilizando la F.M. "SD_CUSTOMER_MAINTAIN_ALL".

Puedo actualizar la tabla knvp, pero no puedo actualizar knvv. ¿Puedes sugerirme cómo actualizar la tabla knvv utilizando esta F.M. y si hay alguna otra F.M. para actualizar knvv que no implique el uso de la instrucción INSERT?

Aquí está mi código para actualizar:

CALL FUNCTION: 'SD_CUSTOMER_MAINTAIN_ALL'

EXPORTING

i_knvv = ls_knvv
pi_postflag = abap_true
TABLES

t_xknvp = lt_fknvp
EXCEPTIONS

OTHERS = 1.
CASE sy-subrc.
WHEN 0. COMMIT WORK AND WAIT.
WHEN OTHERS. <ls_updated1>-subrc = sy-subrc.
ENDCASE.

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

3 Respuestas

0
Cargando...

Hola,

pista técnica - por favor, use la clase CMD_EI_API oficialmente soportada y no 'SD_CUSTOMER_MAINTAIN_ALL'. Esta FM está definida en el grupo de funciones V02D, que solo debe ser utilizada para la Tienda Online de SAP y la Edición de Ventas en Internet de SAP R/3 (ver nota 1826993 - Comportamiento de la función SD_CUSTOMER_MAINTAIN_ALL).

Aquí hay algunos blogs sobre cómo usar la clase CMD_EI_API:

https://blogs.sap.com/2014/12/16/customer-master-creation-using-class-cmdeiapi/

https://blogs.sap.com/2017/02/17/how-to-createupdate-a-contact-personboth-mobile-telephone-of-a-cust...

https://blogs.sap.com/2013/12/17/create-customers-using-cmdeiapi-with-central-and-sales-data/

Saludos,

Marek

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Gracias por la respuesta. Este es mi código completo para actualizar knvv, knvp. ¿Puedes ayudarme si me falta algo en algún lugar?

MÉTODO update_knvv_and_knvp.
* requisitos previos
COMPROBAR que lt_updated1 NO ES INICIAL. "solo actualizar la base de datos si se encuentra data

* inicializar datos de 'copiar desde' para KNVV
SELECCIONAR * EN LA TABLA lt_knvv DESDE knvv
PARA TODAS LAS ENTRADAS EN lt_updated1
DONDE kunnr EQ lt_updated1-kunnr
Y vkorg EQ lt_updated1-vkorg
Y vtweg EQ lt_updated1-vtweg
Y spart EQ lt_updated1-spart.

* inicializar datos de 'copiar a' para KNVP (esto es necesario para obtener el campo 'contador' PARZA, que necesita incrementarse en 1)
SELECCIONAR * EN LA TABLA lt_knvpt DESDE knvp
PARA TODAS LAS ENTRADAS EN lt_updated1
DONDE kunnr EQ lt_updated1-kunnr
Y vkorg EQ lt_updated1-vkorgt
Y vtweg EQ lt_updated1-vtwegt
Y spart EQ lt_updated1-spartt
Y parvw EQ lt_updated1-parvwt.
*
** actualizar KNVV y KNVP
LOOP AT lt_updated1 ASIGNANDO <ls_updated1>.
* DONDE subrc EQ 0.
EN NUEVO spartt.
BORRAR: ls_knvv, ls_knvpt, lt_fknvp.
ENDEN.
LEER TABLA lt_knvv EN ls_knvv
CON CLAVE DE TABLA mandt = sy-mandt
kunnr = <ls_updated1>-kunnr
vkorg = <ls_updated1>-vkorg
vtweg = <ls_updated1>-vtweg
spart = <ls_updated1>-spart. "obtener datos de 'copiar desde', se encontrará el registro único, ya que utiliza datos SELECT anteriores
ls_knvv-vkorg = <ls_updated1>-vkorgt. "copiar organización de ventas
ls_knvv-vtweg = <ls_updated1>-vtwegt. "copiar canal de distribución
ls_knvv-spart = <ls_updated1>-spartt. "copiar división
LOOP AT lt_knvpt EN ls_knvpt "#EC NECESARIO
DONDE mandt EQ sy-mandt
Y kunnr EQ <ls_updated1>-kunnr
Y vkorg EQ <ls_updated1>-vkorgt
Y vtweg EQ <ls_updated1>-vtwegt
Y spart EQ <ls_updated1>-spartt
Y parvw EQ <ls_updated1>-parvwt. "obtener datos de 'copiar a', se encontrará el último registro si existe; parza (contador) del último registro se incrementará posteriormente en 1 para el número de contador del nuevo registro
ls_knvp-parza = ls_knvpt-parza + 1. "próximo número de contador, necesario para el campo clave
FINLOOP.
ls_knvp-mandt = sy-mandt. "necesario para búsqueda binaria en tabla interna ordenada para obtener el último número de contador (parza)
ls_knvp-kunnr = <ls_updated1>-kunnr. "copiar número de cliente
ls_knvp-vkorg = <ls_updated1>-vkorgt. "copiar organización de ventas
ls_knvp-vtweg = <ls_updated1>-vtwegt. "copiar canal de distribución
ls_knvp-spart = <ls_updated1>-spartt. "copiar división
ls_knvp-parvw = <ls_updated1>-parvwt. "copiar función de socio
ls_knvp-kunn2 = <ls_updated1>-kunn2t. "copiar cliente de función de socio
ls_knvp-kz = 'I'. "bandera de inserción (nuevo registro)
INSERTAR ls_knvp EN LA TABLA: lt_fknvp, "usado en SD_CUSTOMER_MAINTAIN_ALL
lt_knvpt. "puede usarse para obtener el último número de contador (campo parza)
AL FINAL DE spartt.
LLAMAR FUNCIÓN: 'SD_CUSTOMER_MAINTAIN_ALL'
EXPORTANDO i_knvv = ls_knvv
pi_postflag = abap_true
TABLAS t_xknvp = lt_fknvp
EXCEPCIONES OTHERS = 1.
CASO sy-subrc.
CUANDO 0. COMMIT WORK AND WAIT.
CUANDO OTROS. <ls_updated1>-subrc = sy-subrc.
FINCASO.
ENDEN.
FINLOOP.
FINMÉTODO. "update_knvv_and_knvp

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Necesitas completar vkorg, vtweg y spart para actualizarlo. El código proporcionado solo muestra que quieres usar esta función. Eso no ayuda. ¿Qué campos estás completando dentro de knvv...

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?