É um clichê sobre como estender um IDoc. Um
documento de Lakshmi Narayana Neeli explicou isso de forma muito detalhada, cobrindo quase tudo o que é necessário para melhorar um IDoc de saída.
Portanto, quando um requisito precisa mostrar apenas um preço adicional da condição de preço específica do item do pedido de vendas (que possui uma bandeira de estatísticas), pulei para a solução através da extensão do tipo de IDoc ORDERS05 diretamente com a inserção do novo segmento personalizado sob o segmento do item E1EDP01.
O novo subsegmento do item significa mudanças em toda a estrutura do IDoc, e o lado receptor do IDoc não está disposto a fazer a adaptação, então observam que se o novo preço adicional seguir o tipo de subsegmento E1EDP05, será aceitável. Portanto, só é preciso encontrar onde melhorar esse subsegmento padrão.
SD10 é o código de processo padrão para a confirmação do pedido de vendas usado pelo IDoc de saída ORDERS05 no meu caso. O fluxo de processamento é muito claro e está bem organizado dentro do módulo de função "IDOC_OUTPUT_ORDRSP". Será mais rápido encontrar a saída de usuário correta através do CMOD (consulte a página 21 deste
link se não estiver familiarizado com ele), mas ter esse FM como ponto de partida é uma excelente experiência para entender o processo padrão de preenchimento de dados do IDoc, o que aumentará a eficiência, seja na depuração do IDoc ou na escrita de sua própria lógica de preenchimento de dados do IDoc.
1. A rotina 'fill_idoc_inttab' é um procedimento de preenchimento de dados que contém todos os segmentos do IDoc;
2. 'fill_item_segment' é o preenchimento de dados para todos os segmentos de nível de item que são do tipo EDEDP*
3. 'fill_e1edp01' é o preenchimento de dados para o tipo de segmento E1DP01
que é o nível principal da condição de preço do item. Se eu usar segmentos personalizados como na primeira captura de tela, basta adicionar código para preencher o campo do segmento personalizado em EXIT_SAPLVEDC_002 que dentro da rotina 'customer_function' contém a 'CUSTOMER-FUNCTION' '002'.
4. 'fill_item_cond' é o preenchimento de dados para as condições de preço a nível de item que desejo melhorar. E 'fill_e1edp05' obviamente é para preencher dados para o subsegmento e1edp05.
5. A condição de preço adicional do item deve ser adicionada dentro da rotina 'get_item_prices' em vez de 'fill_e1edp05'.
Porque 'fill_e1edp05' apenas preenche a estrutura de dados de segmentos com condições de preço de item filtradas pelo sistema. Minha condição de preço adicional não está lá, preciso usar 'CUSTOMER-FUNCTION' '008' dentro de 'GET_ITEM_PRICES' que fornece saídas de usuário EXIT_SAPLVEDC_008 para adicionar condições de preço adicionais.
Apenas adicione código para recuperar a condição de preço do item do DIKOMV com o número do pedido, número do item e nome específico do tipo de condição; em seguida, adicione-o à tabela dikomvd que contém todas as condições de preço do item contra IKOMVD em 'GET_ITEM_PRICES'.
if edidc-mestyp