Adicionando campos no cabeçalho.
Resultado
========================================
Adionando abas
Resultado
Adicionando campos no cabeçalho.
Resultado
========================================
Adionando abas
Resultado
Código exemplo abaixo, pegando dados de remessa
sELECT likp~vbeln,
likp~ernam,
lips~matnr,
lips~lfimg
INTO TABLE @DATA(lt_likp)
types: begin of ty_doc,
bukrs type bukrs,
belnr type belnr_d,
gjahr type gjahr,
buzei type buzei,
end of ty_doc.
data t_doc type STANDARD TABLE OF ty_doc WITH DEFAULT KEY.
t_doc = value #(
( bukrs = '1000' belnr = '1' gjahr = '2025' buzei = 1 )
( bukrs = '1000' belnr = '1' gjahr = '2025' buzei = 2 )
( bukrs = '1000' belnr = '1' gjahr = '2025' buzei = 3 )
( bukrs = '1000' belnr = '2' gjahr = '2025' buzei = 1 )
( bukrs = '1000' belnr = '3' gjahr = '2025' buzei = 1 )
( bukrs = '1000' belnr = '3' gjahr = '2025' buzei = 2 )
( bukrs = '2000' belnr = '4' gjahr = '2025' buzei = 1 )
( bukrs = '2000' belnr = '5' gjahr = '2025' buzei = 1 )
( bukrs = '2000' belnr = '6' gjahr = '2025' buzei = 1 )
( bukrs = '3000' belnr = '7' gjahr = '2025' buzei = 1 )
( bukrs = '3000' belnr = '7' gjahr = '2025' buzei = 2 )
( bukrs = '3000' belnr = '8' gjahr = '2025' buzei = 1 )
).
BREAK-POINT.
loop at t_doc into data(ls_doc) GROUP BY ls_doc-bukrs into data(lv_bukrs).
loop at group lv_bukrs into data(lv_docs).
if 1 = 1.
endif.
endloop.
endloop.
Transações importantes
BOBX - Estruturas dos BOPF
BOBT - Teste de estrutura BOPF
Ex: /SCMTMS/TOR
Transação BOBX
- Clicar na estrutura desejada
BOBT - teste de query
Do lado esquerdo na BOBT tem as queries disponíveis.
Do lado direito na BOBX a localização das querys disponíveis na visão de estrutura
Pegando exemplo de dados da remessa na query PLANNING_ATTRIBUTES
Registros encontrados
Fazendo pelo código do programa
"Service Manager
DATA(lo_srv_mgr) = /bobf/cl_tra_serv_mgr_factory=>get_service_manager( /SCMTMS/IF_TOR_C=>sc_bo_key ).
DATA(lv_bo_name) = /SCMTMS/IF_TOR_C=>sc_bo_name.
data(lv_attname) = /SCMTMS/IF_TOR_C=>sc_query_attribute-root-planning_attributes-trq_base_btd_id.
*"Selection Parameters
DATA(lt_selpar) = VALUE /bobf/t_frw_query_selparam( ( attribute_name = lv_attname
sign = 'I'
option = 'EQ'
low = '0080000180' ) ).
*"Query key
data lt_key TYPE /BOBF/T_FRW_KEY.
data lt_docref type /scmtms/t_tor_root_k.
"Execução da query
lo_srv_mgr->query( EXPORTING iv_query_key = /scmtms/if_tor_c=>sc_query-root-planning_attributes
"it_filter_key =
it_selection_parameters = lt_selpar
"is_query_options =
iv_fill_data = abap_true
"it_requested_attributes =
IMPORTING "eo_message = DATA(lo_message)
et_key = lt_key
et_data = lt_docref
).
====== Abaixo de onde vem as informações na BOBX
====== Para ler os dados da estrutura abaixo do ROOT.
Transação BOBT
========= Código ==========
Como faz parte da estrutura ROOT pega os dados a partir das chaves retornadas da leitura do root
DELETE lt_key WHERE key not in lt_r_key.
data lt_doc_tr type /SCMTMS/T_TOR_ITEM_TR_K.
lo_srv_mgr->retrieve_by_association(
EXPORTING
iv_node_key = /scmtms/if_tor_c=>sc_node-root
it_key = lt_key " Key Table
iv_edit_mode = /bobf/if_conf_c=>sc_edit_read_only " Change Mode
iv_fill_data = abap_true " Data element for domain BOOLE: TRUE (='X') and FALSE (=' ')
iv_association = /scmtms/if_tor_c=>sc_association-root-item_tr_main
IMPORTING
"eo_message = lo_message " Interface of Message Object
et_data = lt_doc_tr
et_failed_key = DATA(lt_failed_key) " Key Table
).
E assim sucessivamente, com outras estruturas sob o mesmo nó
data lt_doc_tr_seal type /SCMTMS/T_TOR_SEAL_K.
lo_srv_mgr->retrieve_by_association(
EXPORTING
iv_node_key = /scmtms/if_tor_c=>sc_node-root
it_key = lt_key " Key Table
iv_edit_mode = /bobf/if_conf_c=>sc_edit_read_only " Change Mode
iv_fill_data = abap_true " Data element for domain BOOLE: TRUE (='X') and FALSE (=' ')
iv_association = /scmtms/if_tor_c=>sc_association-root-seal
IMPORTING
"eo_message = lo_message " Interface of Message Object
et_data = lt_doc_tr_seal
et_failed_key = lt_failed_key " Key Table
).
data lt_doc_tr_item type /SCMTMS/T_TOR_ITEM_TR_K.
lo_srv_mgr->retrieve_by_association(
EXPORTING
iv_node_key = /scmtms/if_tor_c=>sc_node-root
it_key = lt_key " Key Table
iv_edit_mode = /bobf/if_conf_c=>sc_edit_read_only " Change Mode
iv_fill_data = abap_true " Data element for domain BOOLE: TRUE (='X') and FALSE (=' ')
iv_association = /scmtms/if_tor_c=>sc_association-root-item_tr
IMPORTING
"eo_message = lo_message " Interface of Message Object
et_data = lt_doc_tr_item
et_failed_key = lt_failed_key " Key Table
).
- Caso estranho onde tenho um programa que executa uma remessa VL01NO em batch input e depois a criação de ordem de venda pela BAPI BAPI_SALESORDER_CREATEFROMDAT2, ocorre um DUMP de chave duplicada na atualização da VBFA
Pesquisando no SDN achei o mesmo problema, que se resolveu utilizando a função RV_DELIVERY_INIT antes da execução da BAPI
Informar os parâmetros.


@ClientHandling.type: #CLIENT_DEPENDENT
@ClientHandling.algorithm: #SESSION_VARIABLE
@EndUserText.label: 'Busca Centro cooperado'
define table function ZI_CCXXXXX
with parameters
@Consumption.hidden: true
@Environment.systemField: #CLIENT
client : abap.clnt
returns
{
@Consumption.hidden: true
client : abap.clnt;
partner : bu_partner;
centro : abap.char(6);
}
implemented by method
zcl_fi_CC_XXXXXX=>get_centro;
============== ERRO/SOLUÇÃO 23/05/2026
Erro na ativação só q somente de classe AMDP O mesmo de client
Na declaração colocar o parâmetro com opçoes amdp
CLASS zcl_TESTE_AMDP DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES if_amdp_marker_hdb .
TYPES: BEGIN OF ty_doc_fi,
accounting_document TYPE bseg-belnr,
fiscal_year TYPE bseg-gjahr,
END OF ty_doc_fi,
tty_doc_fi TYPE STANDARD TABLE OF ty_doc_fi WITH DEFAULT KEY.
CLASS-METHODS get_dados_doc_ref AMDP OPTIONS CDS SESSION CLIENT iv_client
IMPORTING VALUE(iv_company) TYPE bseg-bukrs
VALUE(iv_acc_doc) TYPE bseg-belnr
VALUE(iv_fiscal_year) TYPE bseg-gjahr
VALUE(iv_client) TYPE sy-mandt
EXPORTING VALUE(et_doc_fi) TYPE tty_doc_fi.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.