¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Como atualizar a tabela KNVV usando o F.M. SD_CUSTOMER_MAINTAIN_ALL sem usar INSERT

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

Estou tendo problemas, preciso atualizar tanto knvv quanto knvp usando a F.M. "SD_CUSTOMER_MAINTAIN_ALL".

Consigo atualizar a tabela knvp, mas não consigo atualizar knvv. Você pode me sugerir como atualizar a tabela knvv usando esta F.M. e se há outra F.M. para atualizar knvv que não envolva o uso da instrução INSERT?

Aqui está meu código para atualizar:

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...

Olá,

Dica técnica - por favor, utilize a classe CMD_EI_API oficialmente suportada e não 'SD_CUSTOMER_MAINTAIN_ALL'. Esta FM está definida no grupo de funções V02D, que deve ser usada apenas para a Loja Online da SAP e a Edição de Vendas na Internet do SAP R/3 (ver nota 1826993 - Comportamento da função SD_CUSTOMER_MAINTAIN_ALL).

Aqui estão alguns blogs sobre como usar a classe 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/

Cumprimentos,

Marek

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

Obrigado pela resposta. Este é o meu código completo para atualizar knvv, knvp. Você pode me ajudar se eu estiver faltando algo em algum lugar?

MÉTODO update_knvv_and_knvp.
* requisitos prévios
VERIFICAR se lt_updated1 NÃO É INICIAL. "atualizar apenas o banco de dados se houver dados

* inicializar dados de 'copiar de' para KNVV
SELECIONAR * NA TABELA lt_knvv DE knvv
PARA TODAS AS ENTRADAS EM lt_updated1
ONDE kunnr EQ lt_updated1-kunnr
E vkorg EQ lt_updated1-vkorg
E vtweg EQ lt_updated1-vtweg
E spart EQ lt_updated1-spart.

* inicializar dados de 'copiar para' para KNVP (isso é necessário para obter o campo 'contador' PARZA, que precisa ser incrementado em 1)
SELECIONAR * NA TABELA lt_knvpt DE knvp
PARA TODAS AS ENTRADAS EM lt_updated1
ONDE kunnr EQ lt_updated1-kunnr
E vkorg EQ lt_updated1-vkorgt
E vtweg EQ lt_updated1-vtwegt
E spart EQ lt_updated1-spartt
E parvw EQ lt_updated1-parvwt.
*
** atualizar KNVV e KNVP
LOOP AT lt_updated1 ASSIGNING <ls_updated1>.
* ONDE subrc EQ 0.
EM NOVO spartt.
EXCLUIR: ls_knvv, ls_knvpt, lt_fknvp.
ENDEN.
LER TABELA lt_knvv EM ls_knvv
COM CHAVE DE TABELA mandt = sy-mandt
kunnr = <ls_updated1>-kunnr
vkorg = <ls_updated1>-vkorg
vtweg = <ls_updated1>-vtweg
spart = <ls_updated1>-spart. "obter dados de 'copiar de', se encontrar o registro único, pois usa dados SELECT anteriores
ls_knvv-vkorg = <ls_updated1>-vkorgt. "copiar organização de vendas
ls_knvv-vtweg = <ls_updated1>-vtwegt. "copiar canal de distribuição
ls_knvv-spart = <ls_updated1>-spartt. "copiar divisão
LOOP AT lt_knvpt INTO ls_knvpt "#EC NECESSÁRIO
ONDE mandt EQ sy-mandt
E kunnr EQ <ls_updated1>-kunnr
E vkorg EQ <ls_updated1>-vkorgt
E vtweg EQ <ls_updated1>-vtwegt
E spart EQ <ls_updated1>-spartt
E parvw EQ <ls_updated1>-parvwt. "obter dados de 'copiar para', encontrar o último registro se existir; parza (contador) do último registro será incrementado em 1 posteriormente para o número de contador do novo registro
ls_knvp-parza = ls_knvpt-parza + 1. "próximo número de contador, necessário para o campo chave
FINLOOP.
ls_knvp-mandt = sy-mandt. "necessário para busca binária em tabela interna ordenada para obter o último número de contador (parza)
ls_knvp-kunnr = <ls_updated1>-kunnr. "copiar número do cliente
ls_knvp-vkorg = <ls_updated1>-vkorgt. "copiar organização de vendas
ls_knvp-vtweg = <ls_updated1>-vtwegt. "copiar canal de distribuição
ls_knvp-spart = <ls_updated1>-spartt. "copiar divisão
ls_knvp-parvw = <ls_updated1>-parvwt. "copiar função de parceiro
ls_knvp-kunn2 = <ls_updated1>-kunn2t. "copiar cliente da função de parceiro
ls_knvp-kz = 'I'. "bandeira de inserção (novo registro)
INSERIR ls_knvp NA TABELA: lt_fknvp, "usado em SD_CUSTOMER_MAINTAIN_ALL
lt_knvpt. "pode ser usado para obter o último número de contador (campo parza)
NO FINAL DE spartt.
CHAMAR FUNÇÃO: 'SD_CUSTOMER_MAINTAIN_ALL'
EXPORTANDO i_knvv = ls_knvv
pi_postflag = abap_true
TABELAS t_xknvp = lt_fknvp
EXCEÇÕES OUTROS = 1.
CASO sy-subrc.
QUANDO 0. COMMIT WORK AND WAIT.
QUANDO OUTROS. <ls_updated1>-subrc = sy-subrc.
FIMCASO.
ENDEN.
FINMÉTODO. "update_knvv_and_knvp

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

Precisa completar vkorg, vtweg y spart para atualizá-lo. O código fornecido apenas indica que deseja usar essa função. Isso não ajuda. Quais campos você está preenchendo 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?