segunda-feira, 12 de setembro de 2022

80 principais transações no SAP para a área de Suprimentos

Para a área de Suprimentos, é considerado um sistema robusto e confiável.


Cadastro e consultas

XK03 - Exibir fornecedor
MK03 - Exibir fornecedor
XD03 - Exibir Cliente
MKVZ - Lista de fornecedores
MM03 - Exibir material

Requisição

ME51N - Criar requisição de compras
ME52N - Modificar requisição de compra
ME53N - Exibir requisição de compra
ME54N - Liberar requisição de compra
ME5J - Requisições de compra para projeto
ME5K - Requisições de compra para Classificações Contábeis
ME5A - Exibir lista de requisições de compra



Pedido de compra

ME21N - Criar pedido
ME22N - Modificar pedido
ME23N - Exibir pedido
ME29N - Liberar pedido
ME28 - Liberar pedido
MEMASSPO - Modificação em massa de pedido
EXPD - Relatório de Pedidos Pendentes
ME2M - Relatório de Pedidos por número de material
ME2N - Relatório de Pedidos por número de pedido
ME2L - Reatório de Pedidos por número do fornecedor
ME2C - Relatório de Pedidos por grupo de mercadorias
ME2J - Relatório de Pedidos por número do Projeto
ME2K - Relatório de Pedidos por Classificação Contábil
ME2W - Relatório de Pedidos por Centro Fornecedor
ME2B - Relatório de Pedidos por número de acompanhamento
ME80FN - Relatório de Pedidos - Produtividade e Remessa
ME80RN - Relatório de Pedidos - Produtividade e Remessa
ME81N - Análise do valor do pedido
ME1P - Histórico de preço do pedido



Contratos

ME31K - Criar contrato
ME32K - Modificar contrato
ME33K - Exibir contrato
ME35K  Liberar contrato
MEDL - Modificação de preço contrato
MEKR - Modificação de preço contrato
MEMASSCONTRACT - Modificação em massa de contratos
ME3N - Relatório de consumo de contrato
ME3M - Relatório de contratos por número de material
ME3L - Relatório de contratos por número do fornecedor
ME3B - Relatório de contratos por número de acompanhamento
ME3C - Relatório de contratos por grupo de mercadorias



Gestão de estoques

MIGO - Movimentação de mercadorias
MMBE - Exibir saldo de estoque
MMBE_OLD - Exibir saldo de estoque
MB51 - Lista documentos materiais / movimentações
LS24 - Posição do Material no almoxarifado
MMSC - Criação de depósitos
MBST - Estornar documento material
MB1C - Movimentação de saldo
MBBS - Exibir estoque especial avaliado - Projeto
MB23 - Exibir reserva
MB25 - Lista de reservas
MB52 - Lista de estoque em depósito
MB53 - Exibir disponibilidades centros
MD01 - Planejamento global
MD02 - Planejamento individual MRP
MD03 - Planejamento individual
MD04 - Exibir situação estoque / necessidade
MD05 - Exibição individual lista MRP
MD06 - Exibição coletiva lista MRP
MD11 - Criar ordem planejada
MD12 - Modificar ordem planejada
MD14 - Conversão individual ordem planejada
MD15 - Conversão coletiva ordem planejada
MD16 - Exibição coletiva ordem planeada
MDLD - Impressão lista MRP
MCE7 - Relatório - Lead time materiais



Mestre de Serviço

AC01 - Exibir Mestre de prestação de serviços
AC03 - Modificar Mestre de prestação de serviços
AC06 - Exibição de lista mestre de serviço
MSRV3 - Lista de Serviços para pedido
MSRV5 - Lista de Serviços para contrato



Folha de Registro de Serviços

ML81N - Registro de serviços - FRS
ML84 - Lista de folhas de registro de serviços



Nota fiscal e Pagamento

FBL1N - Partidas individuais para fornecedores
FBL3N - Partidas individuais contas do Razão
J1BNFE - Monitor para nota fiscal eletrônica
J1B3N - Exibir nota fiscal

segunda-feira, 5 de setembro de 2022

SAP - Como Consultar o conteúdo de uma tabela (SE16 e DB02)

 

É muito comum a necessidade de explorar o conteúdo de uma tabela no SAP.

Diante vou demonstrar como é feito uma “pesquisa” através de das transações SE16 e a DB02.

Será utilizado a Tabela CRMD_TIMEREP (Transação - registro tempo p/add-on para Service Industries)

Opção 1 :Transação SE16

Informar o nome da tabela(CRMD_TIMEREP) e teclar ENTER. Para seguir a tela de critérios

Tela de Critérios (Where)

Utilizada para restringir o resultado. Por exemplo, extrair os dados em um determinado período. Para listar o conteúdo sem critério basta executar(F8) direto.

Cenário 1: Consultar o conteúdo da tabela sem Critério (Sem Where)

O Resultado da consulta :

Consultando a tabela com critério (Com a Clausula WHERE)

Pesquisar na tabela CRMD_TIMEREP, quando o campo CHANGED_AT for igual a 02.03.2017 14:32:19

Basta informa a data no campo CHANGED_AT e executar F8.

Resultado

Retorno dos os registros iguais a 02.03.2017 14:32:19

Dica: Na tela de critério existe um limitador de quantidade utilizado para retornar uma quantidade de linhas especificas. Caso exista a necessidade de retornar mais dados alterei a quantidade de registros. Há também a configuração para limitar a largura da listagem do resultado

É possível alterar a largura da listagem também na tela de resultado:

Opção 2 :Transação DB02

Esta transação é mais indicada para quem possui domínio do SQL, Caso queira conhecer um pouco mais de SQL segue o curso : clique aqui

Transação: DB02 - Menu do lado esquerdo "Diagnostics" e a opção "SQL Command Editor"

OBS.: utilize esta transação com moderação, pois ela pode degradar a performance. Por exemplo um select "sem WHERE" em uma tabela com grande volume de dados.

Select sem WHERE. Não execute para tabelas com muitos dados

Informe o select na ABA SQL Code :Select da tabela CRMD_TIMEREP (SELECT * FROM CRMD_TIMEREP), tecle F6 para executar

DICA : Não existe limitador para o resultado deste select, com isso utilize o comado TOP. Para que o resultado seja apenas 20 linhas TOP 20

Resultado sera apenas 20 registros(desconsidere as linhas de cabeçalho)

Select com Where

Informe o select com o "Where" e execute(F6)


Resultado do Select :



terça-feira, 16 de agosto de 2022

Transação SNRO SAP - Criar e manter faixas de número de ABAP

A SAP SNRO código de transação permite criar e manter faixas de número para você programas ABAP. Abaixo mostra-lhe os passos necessários para criar um intervalo de números. Em ordem para acessar o próximo número na faixa de dentro de seu código ABAP simplesmente chamar a função módulo NUMBER_GET_NEXT com os detalhes relevantes. 

Passo 1 - SAP transação intervalo de números 
Execute SNRO Tcode e digite um nome para o seu novo número de série (ou seja, ZNRANGE) 


Passo 2 - objeto detalhes da gama de números 
Pressione o botão Criar e preencha o intervalo da tela objeto número de detalhes, agora pressione salvar. Leia a mensagem pop-up e clique em sim se feliz com o método selecionado de buffering. 


Número de intervalos reais 3 - Etapa 
Agora pressione o botão 'Número intervalos "para manter os intervalos associados a este objeto. 


Passo 4 - Número intervalo de variação (s) 
Pressione o botão Alterar intervalos (lápis) para criar um novo intervalo e manter qualquer existentes 


Passo 5 - Dê intervalo de variação número 
Pressione o botão intervalo de + para adicionar um novo número de série para o seu objeto. 


Preencha os detalhes adequados, tais como o de e para o número, pressione o botão de inserção (+) para adicionar o intervalo para o objeto de intervalo de números 

Passo 6 - Criado intervalo 
O intervalo de variação número agora deve ter sido adicionado. Pressione salvar, ler a mensagem de informação e, em seguida, pressione o sinal verde. Sua gama de números foi agora criado. 


Use a função módulo NUMBER_GET_NEXT em seu código ABAP para obter o próximo número na sua faixa de número

Source: http://www.sapdev.co.uk/tcodes/snro.htm

Acessar transação bloqueada no SAP -

 


Para acessar uma transação bloqueada no SAP basta seguir os seguintes passos;



 1. Abrir a transação SE37 e buscar pela função C14Z_TRANSACTION_CALL e clicar em Exibir.

2. Inserir um ponto de parada na linha 44 da função.



3. Executar a função (F8) e preencher o campo I_TCODE com a transação que deseja acessar e executar 
novamente (F8).




4. Quando o Debug for chamado, alterar o valor da variável sy-subrc para 1 e executar (F8)



5. Após a execução da função a transação será acessada.



segunda-feira, 13 de novembro de 2017

SAP ABAP - Como alterar dados através da SE16N quando o &SAP_EDIT não funciona

Em alguns ambientes o "truque" de utilizar '&SAP_EDIT' na SE16N não funciona mais.
Para poder fazer a alteração, aqui vai a solução.

a. Entre na transação SE16N;
b. Informe a tabela e os filtros desejados;
c. Ative o debugging "/h" e execute a pesquisa "F8";
d. Marque as variáveis mostradas na figura a seguir com um "X"  e avance normalmente com "F8";

                               GD-EDIT                X
                               GD-SAPEDIT         X






quarta-feira, 30 de abril de 2014

ABAP OLE Excel

*ABAP OLE - Excel.application

REPORT z_abap_excel.
*----------------------------------------------------------------------*
*  Conjunto de tipos
*----------------------------------------------------------------------*
"  Tem um include que a maioria trabalho mas eu prefiro o Grupo de tipo.
TYPE-POOLS ole2.

*----------------------------------------------------------------------*
*  Tabelas transparentes
*----------------------------------------------------------------------*
TABLES :
  sflight.

*----------------------------------------------------------------------*
*  Tabelas internas
*----------------------------------------------------------------------*
DATA :
 it_spfli   TYPE TABLE OF spfli,
 it_sflight TYPE TABLE OF sflight
.
*----------------------------------------------------------------------*
*  Estruturas
*----------------------------------------------------------------------*
DATA :
 st_spfli   TYPE spfli,
 st_sflight TYPE sflight
.

*----------------------------------------------------------------------*
*  Declarações de variáveis
*----------------------------------------------------------------------*
DATA : linha   TYPE i,      " Atribui Valor Linha
       coluna  TYPE i,
       v_texto TYPE string            " Conteudo das celulas
       .
*----------------------------------------------------------------------*
*  Definições de objetos OLE2
*----------------------------------------------------------------------*
DATA: gs_excel        TYPE ole2_object,       " Objeto Excel
      gs_workbook     TYPE ole2_object,       " Workbook 'Area de trabalho'
      gs_sheet        TYPE ole2_object,       " Planilha
      gs_cell1        TYPE ole2_object,                     " Celula 1
      gs_cell2        TYPE ole2_object,                     " Celula 2
      gs_cells        TYPE ole2_object,       " Células
      gs_range        TYPE ole2_object,       " Grupo de células
      gs_font         TYPE ole2_object,       " Fonte da célula
      gs_column       TYPE ole2_object.       " Coluna da célula


SELECTION-SCREEN BEGIN OF BLOCK b1.
PARAMETERS:
  p_carrid TYPE sflight-carrid OBLIGATORY.
SELECT-OPTIONS:
  s_connid FOR sflight-connid,
  s_fldate FOR sflight-fldate.
SELECTION-SCREEN END OF BLOCK   b1.

START-OF-SELECTION.

* select dos dados
  PERFORM selects.

  IF it_sflight IS NOT INITIAL.

* Cria o objeto Excel com area de trabalho e planilhas.
    PERFORM f_gera_excel.

* Agora com a planilha pronta vamos formatar as colunas do excel.
    PERFORM formata_colunas.

* Eu criei um perform só pra trata o cabeçalho pra fica mais legível.
    PERFORM gera_cabecalho.

* Gera linhas
    PERFORM gera_linhas.

* Encerra planilha Excel
    PERFORM encerra_planilha_excel.

  ELSE.

    MESSAGE 'Não foi encontrado dados na tabela conforme críterios da tela de seleção'
      TYPE 'I'.

  ENDIF.

END-OF-SELECTION.




*&---------------------------------------------------------------------*
*&      Form  F_GERA_EXCEL
*&---------------------------------------------------------------------*
FORM f_gera_excel .

  " Criação do objeto Excel.
  CREATE OBJECT gs_excel 'Excel.Application'.

  "  É um parametro do objeto Excel para que seja mostrado o arquivo excel
  " somente quando carregar por completo.
  SET PROPERTY OF gs_excel 'ScreenUpdating'   = 0.

  " Deixa ativo o excel
  SET PROPERTY OF gs_excel 'Visible'   = 1.
  "  Aqui é pego a parametro area de trabalho do Excel e passado para uma
  " variável.
  GET PROPERTY OF gs_excel 'Workbooks' = gs_workbook.
  " Agora com essa variavel você chama um método da classe para que seja
  " adicionado uma área de trabalho.
  CALL METHOD OF gs_workbook 'Add'.
  " Perform para verificação de erros.
  PERFORM err_hdl.
  " Toda essa parte acima é só pra abilitar e abrir o excel.

  " Entrando no nivel planila do excel passada para uma variável.
  CALL METHOD OF gs_excel 'Worksheets' = gs_sheet.
  " Criação de uma aba de planilha para área de trabalho.
  CALL METHOD OF gs_sheet 'Add' = gs_sheet.
  " Modifica a propriedade nome da aba para 'ABA Nova'
  SET PROPERTY OF gs_sheet 'Name' = 'ABA Nova'.
  " Perform para verificação de erros.
  PERFORM err_hdl.


ENDFORM.                    " F_GERA_EXCEL
*&---------------------------------------------------------------------*
*&      Form  ERR_HDL
*&---------------------------------------------------------------------*
FORM err_hdl .

  " Deu problema ?
  IF sy-subrc <> 0.
    " Erro ....
    WRITE: / 'Erro na abertura OLE-Automation(EXCEL):', sy-subrc.
    " Famoso João Kleber ---- Pára, Pára, Pára tuuudo..
    STOP.
  ENDIF.

ENDFORM.                    " ERR_HDL

*&---------------------------------------------------------------------*
*&      Form  FORMATA_COLUNAS
*&---------------------------------------------------------------------*
FORM formata_colunas .

  "  Eu criei um perform para que fique mais facil de trabalhar....
  " Aki estarei trabalhando inteiramente com a coluna 'E' passando o
  " tamanho '33'.
  PERFORM formata_largura USING 'E:E' '33'.

ENDFORM.                    " FORMATA_COLUNAS

*&---------------------------------------------------------------------*
*&      Form  FORMATA_LARGURA
*&---------------------------------------------------------------------*
FORM formata_largura  USING  coluna
                             largura.
  " Uso metodo para fazer um intervalo passando a coluna desejada.
  CALL METHOD OF gs_excel 'Range' = gs_range
    EXPORTING
    #1 = coluna.
  " Estou modificando uma das propriedades deste intervalo e informando a lagura.
  SET PROPERTY OF gs_range 'ColumnWidth' = largura.


ENDFORM.                    " FORMATA_LARGURA

*&---------------------------------------------------------------------*
*&      Form  GERA_CABECALHO
*&---------------------------------------------------------------------*
FORM gera_cabecalho .
*&---------------------------------------------------------------------*
  linha = linha + 1.

  "  Trata a primeira linha da planilha ( Cabeçalho ).
  v_texto = 'Titulo do Excel.'.
  PERFORM preenche_titulo USING linha 1 linha 5  v_texto.

*&---------------------------------------------------------------------*
  linha = linha + 2.

  " Trata um segundo cabeçalho.
  CONCATENATE : 'Dados Denominação breve da companhia aérea :' p_carrid
    INTO v_texto SEPARATED BY space.
  PERFORM preenche_titulo USING linha 1 linha 5  v_texto.


*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
  linha  = linha  + 2.

  coluna = coluna + 1.
  v_texto = 'Carrid'.
  PERFORM preenche_titulo USING linha coluna linha coluna  v_texto.
*&---------------------------------------------------------------------*
  coluna = coluna + 1.
  v_texto = 'Connid'.
  PERFORM preenche_titulo USING linha coluna linha coluna  v_texto.
*&---------------------------------------------------------------------*
  coluna = coluna + 1.
  v_texto = 'Fldate'.
  PERFORM preenche_titulo USING linha coluna linha coluna  v_texto.
*&---------------------------------------------------------------------*
  coluna = coluna + 1.
  v_texto = 'Price'.
  PERFORM preenche_titulo USING linha coluna linha coluna  v_texto.
*&---------------------------------------------------------------------*
  coluna = coluna + 1.
  v_texto = 'Paymentsum'.
  PERFORM preenche_titulo USING linha coluna linha coluna  v_texto.

ENDFORM.                    " GERA_CABECALHO

*&---------------------------------------------------------------------*
*&      Form  PREENCHE_TITULO
*&---------------------------------------------------------------------*
FORM preenche_titulo  USING linha1
                            coluna1
                            linha2
                            coluna2
                            texto.

* Mescla células selecionadas
  " Primeiro seleciona a primeira celula
  PERFORM seleciona_celula USING linha1 coluna1 gs_cell1.
  " Depois seleciona a segunda celula
  PERFORM seleciona_celula USING linha2 coluna2 gs_cell2.
  " Mescla as duas celulas juntamente com seu intervalo caso tenha
  PERFORM mescla_celulas.

* Coloca borda
  PERFORM cria_borda USING gs_cell1 gs_cell2 gs_cells.

* Preenche célula
  PERFORM preenche_celula USING gs_cell1 1 3 0 12 texto.


ENDFORM.                    " PREENCHE_TITULO

*&---------------------------------------------------------------------*
*&      Form  SELECIONA_CELULA
*&---------------------------------------------------------------------*
FORM seleciona_celula  USING    linha
                                coluna
                                celula.

* Seleciona célula
  CALL METHOD OF gs_excel 'Cells' = celula
    EXPORTING
    #1 = linha
    #2 = coluna.

ENDFORM.                    " SELECIONA_CELULA

*&---------------------------------------------------------------------*
*&      Form  MESCLA_CELULAS
*&---------------------------------------------------------------------*
FORM mescla_celulas .

* Passa que é um intervalo entre estes dois campos.
  CALL METHOD OF gs_excel 'Range' = gs_cells
    EXPORTING
    #1 = gs_cell1
    #2 = gs_cell2.

* Mescla células do intevalos acima.
  CALL METHOD OF gs_cells 'Merge' = gs_cells.

ENDFORM.                    " MESCLA_CELULAS
*&---------------------------------------------------------------------*
*&      Form  CRIA_BORDA
*&---------------------------------------------------------------------*
FORM cria_borda  USING    celula1
                          celula2
                          celula.

* Seleciona o intervalo de células
  CALL METHOD OF gs_excel 'Range' = celula
    EXPORTING
    #1 = celula1
    #2 = celula2.

* Cria borda e os valores de exportação são cor e intensidade.
  CALL METHOD OF celula 'BorderAround'
    EXPORTING
    #1 = 1
    #2 = 3.


ENDFORM.                    " CRIA_BORDA

*&---------------------------------------------------------------------*
*&      Form  PREENCHE_CELULA
*&---------------------------------------------------------------------*
FORM preenche_celula  USING celula
                            bold
                            alinhamento
                            largura
                            tam
                            valor.

* Formata célula
  GET PROPERTY OF celula  'Font' = gs_font.
  SET PROPERTY OF gs_font 'Bold' = bold.
  SET PROPERTY OF gs_font 'Size' = tam.
  SET PROPERTY OF celula  'HorizontalAlignment' = alinhamento.
  SET PROPERTY OF celula  'NumberFormat' = '@'.
* Preenche célula
  SET PROPERTY OF celula  'Value' = valor.


ENDFORM.                    " PREENCHE_CELULA

*&---------------------------------------------------------------------*
*&      Form  SELECTS
*&---------------------------------------------------------------------*
FORM selects .

  SELECT *
    FROM sflight
    INTO TABLE it_sflight
    WHERE carrid =  p_carrid
      AND connid IN s_connid
      AND fldate IN s_fldate
    .

ENDFORM.                    " SELECTS

*&---------------------------------------------------------------------*
*&      Form  MONTA_LINHAS
*&---------------------------------------------------------------------*
FORM monta_linhas .

  " 1ª coluna de dados da linha correspondente
  PERFORM preenche_detalhe USING linha 1 0 0 7 3 st_sflight-carrid.
  " 2ª coluna de dados da linha correspondente
  PERFORM preenche_detalhe USING linha 2 0 0 7 3 st_sflight-connid.
  " 3ª coluna de dados da linha correspondente
  PERFORM preenche_detalhe USING linha 3 0 0 7 3 st_sflight-fldate.
  " 4ª coluna de dados da linha correspondente
  PERFORM preenche_detalhe USING linha 4 0 0 7 3 st_sflight-price.
  " 5ª coluna de dados da linha correspondente
  PERFORM preenche_detalhe USING linha 5 0 0 7 3 st_sflight-paymentsum.

ENDFORM.                    " MONTA_LINHAS

*&---------------------------------------------------------------------*
*&      Form  PREENCHE_DETALHE
*&---------------------------------------------------------------------*
FORM preenche_detalhe  USING linha
                             coluna
                             bold
                             largura
                             tam
                             alinhamento
                             conteudo.

* Seleciona célula
  PERFORM seleciona_celula USING linha coluna gs_cell1.

* Preenche célula
  PERFORM preenche_celula USING gs_cell1 bold alinhamento
                                largura tam conteudo.

ENDFORM.                    " PREENCHE_DETALHE

*&---------------------------------------------------------------------*
*&      Form  GERA_LINHAS
*&---------------------------------------------------------------------*
FORM gera_linhas .

  LOOP AT it_sflight INTO st_sflight.

    " Cada registro da tabela será uma linha do excel.
    linha = linha + 1.
    PERFORM monta_linhas.

  ENDLOOP.

ENDFORM.                    " GERA_LINHAS

*&---------------------------------------------------------------------*
*&      Form  ENCERRA_PLANILHA_EXCEL
*&---------------------------------------------------------------------*
FORM encerra_planilha_excel .

  " Faz com que a planilha só aparece quando terminar de ser alimentada.
  SET PROPERTY OF gs_excel 'ScreenUpdating'   = 1.

  " Libera os cara aee.
  FREE OBJECT gs_sheet.
  FREE OBJECT gs_workbook.
  FREE OBJECT gs_excel.


ENDFORM.                    " ENCERRA_PLANILHA_EXCEL

ALV Editável / Atualização Tab. Transparente

* & ------------------------------------------------ --------------------- *
* & Report Z_AFL_ALV_ATUALIZAVEL
* &
* & ------------------------------------------------ --------------------- *
* &
* &
* & ------------------------------------------------ --------------------- *

RELATÓRIO Z_AFL_ALV_ATUALIZAVEL.


* ALV Editável / Tab Atualização. Transparente

"Conjunto de TIPOS
TIPO-PISCINAS: SLIS.

"TIPOS
TIPOS:
  COMEÇAR DE ty_selfield,
    índice TYPE slis_selfield-tabindex,
  FIM DO ty_selfield.

"Estruturas e Tabelas Internas
DATA:
  it_out TYPE TABLE OF SFLIGHT,
  st_out TIPO SFLIGHT,
  it_index TYPE TABLE OF ty_selfield,
  st_index TIPO ty_selfield.

"Estruturas e Tabelas intenas (ALV)
DATA:
  it_fieldcat TYPE TABLE OF slis_fieldcat_alv,
  st_layout TIPO slis_layout_alv.

"fiels-símbolos
* O campo-símbolos:
* TIPO slis_fieldcat_alv.

START-OF-SELECTION.

  "Faz o seleccionar da Tabela.
  EXECUTAR: f_select,
"Mostra ALV com sistema operacional Dados
            f_alv.

FIM DE SELEÇÃO.



* & ------------------------------------------------ --------------------- *
* & Form F_SELECT
* & ------------------------------------------------ --------------------- *
F_select FORM.

  SELECIONE *
    DE SFLIGHT
    INTO TABLE it_out
    ONDE carrid = 'AA'.

ENDFORM. "F_SELECT

* & ------------------------------------------------ --------------------- *
* & Form F_ALV
* & ------------------------------------------------ --------------------- *
F_alv FORM.

  "Criação da Tabela Contendo como Informations dos Campos Que Serao mostrados não ALV
  EXECUTAR: f_fieldcat,
"Criação da Estrutura Contendo Informations que fazer o layout ALV
            f_layout.
  "Criação fazer ALV
  EXECUTAR: f_relatorio TABELAS it_fieldcat
                               it_out
                        UTILIZAÇÃO sy-repid
                               'F_SET_PF_STATUS'
                               'F_USER_COMMAND'
                               st_layout.

ENDFORM. "F_ALV

* & ------------------------------------------------ --------------------- *
* & Form F_FIELDCAT
* & ------------------------------------------------ --------------------- *
F_fieldcat FORM.
  "Função de para trazer OS Dados dos Campos fazer ALV baseada n'uma Tabela transparente.
  Função de chamada de 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTAÇÃO
      i_structure_name = 'SFLIGHT'
    MUDANÇA
      ct_fieldcat = it_fieldcat
    EXCEÇÕES
      inconsistent_interface = 1
      Program_Error = 2
      OUTROS = 3.

  IF sy-SUBRC <> 0.
    MENSAGEM ID sy-msgid tipo de número sy-MSGTY sy-MSGNO
            COM sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

ENDFORM. "F_FIELDCAT

* & ------------------------------------------------ --------------------- *
* & Form F_LAYOUT
* & ------------------------------------------------ --------------------- *
F_layout FORM.

  st_layout-zebra = 'X'.
  st_layout-colwidth_optimize = 'X'.

ENDFORM. "F_LAYOUT

* & ------------------------------------------------ --------------------- *
* & Form F_FUNCTION
* & ------------------------------------------------ --------------------- *
FORMULÁRIO f_relatorio TABELAS fieldcat
                        outtab
                 UTILIZAÇÃO repid
                        estado
                        comando
                        traçado
    .

  Função de chamada de 'REUSE_ALV_GRID_DISPLAY'
    EXPORTAÇÃO
      i_callback_program = repid
      i_callback_pf_status_set = Estado
      i_callback_user_command = comando
      is_layout = disposição
      it_fieldcat fieldcat = []
      i_save = 'X'
    TABELAS
      t_outtab = outtab
    EXCEÇÕES
      Program_Error = 1
      OUTROS = 2.
  IF sy-SUBRC <> 0.
    MENSAGEM ID sy-msgid tipo de número sy-MSGTY sy-MSGNO
            COM sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.



ENDFORM. "F_FUNCTION

* & ------------------------------------------------ --------------------- *
* & Form SET_PF_STATUS
* & ------------------------------------------------ --------------------- *
* Ajuste personalizado PF-Estado
* ------------------------------------------------- --------------------- *
* -> Mesa RT_EXTAB Excluindo
* ------------------------------------------------- --------------------- *
FORMULÁRIO DE USAR f_set_pf_status rt_extab TIPO slis_t_extab.

  SET PF-STATUS 'Z_STANDARD'.

ENDFORM. "SET_PF_STATUS


* & ------------------------------------------------ --------------------- *
* & Form user_command
* & ------------------------------------------------ --------------------- *
* Códigos de função personalizado Manipulação
* ------------------------------------------------- --------------------- *
* -> Valor de código R_UCOMM Função
* -> RS_SELFIELD Info. da posição do cursor em ALV
* ------------------------------------------------- --------------------- *
FORMULÁRIO f_user_command USAR COMO vl_ucomm sy-ucomm
                           st_selfield TIPO slis_selfield.
  "Declarações das Variáveis ​​CRP
  DATA:
    it_out_temp TYPE TABLE OF SFLIGHT,
    st_out_temp TIPO SFLIGHT,
    it_fieldcat_temp TYPE TABLE OF slis_fieldcat_alv,
    st_fieldcat_temp TIPO slis_fieldcat_alv.

  BREAK-POINT.
  "Verifica uma Ação Favoritos Looks Favoritos.
  Vl_ucomm CASE.
      "Caso o Looks Favoritos tenha selecionado hum Registro não ALV.
    QUANDO 'e IC1.
* Trata fieldcat parágrafos corrediças abertas parágrafos Edição de Todos os campos EXCETO OS campos chaves
      it_fieldcat_temp = it_fieldcat.
      st_fieldcat_temp-edit = 'X'.
      MODIFICAR it_fieldcat_temp DE st_fieldcat_temp
      TRANSPORTE edição
      ONDE ESTÁ chave inicial.

* Dados Trata do Registro selecionado.
      Ler a tabela it_out INTO st_out
        ÍNDICE st_selfield-tabindex.
      APPEND st_out TO it_out_temp.

* Cria hum novo ALV usando o MESMO executar tão Que da SEM User_command e Com. Tabelas <>.
      EXECUTAR: f_relatorio TABELAS it_fieldcat_temp
                                   it_out_temp
                            UTILIZAÇÃO sy-repid
                                   ''
                                   ''
                                   st_layout.
      BREAK-POINT.
      Não "Se o Botão 'SALVAR' para pressionado entao uma modificação Localidade: Não Ira serviços
      "Atualizado na Tabela 'IT_OUT_TEMP'.
      "Verifica O Primeiro (e Unico) Registro da Tabela
      Ler a tabela it_out_temp INTO st_out_temp
        ÍNDICE 1.

      "Verifica se ESSE FOI Registro Modificado.
      IF st_out_temp <> st_out.
        "Atualiza com a Tabela interna como Informations modificadas
        MODIFICAR it_out DE st_out_temp
          ÍNDICE st_selfield-tabindex.
        "Mover A Informação da Linha do Registro parágrafo UMA Estrutura Opaco aliemnta uma Tabela
        MOVER st_selfield-tabindex TO st_index-index.
        APPEND st_index TO it_index.
      ENDIF.
      "Muito Importante Este Comando POIs ISSO atualiza como alterações feitas na Tabela,
      "Mostra e não ALV.
      st_selfield-refresh = 'X'.
      "Caso o Looks Favoritos tenha clicado no Botão" SALVAR ".
    QUANDO "SAVE".
      "Verifica se alteração Teve.
      SE NÃO É it_index INICIAL.
        LOOP AT it_index INTO st_index.
          "Lê a principal Tabela não Informado Registro na Tabela de Registros modiicados.
          Ler a tabela it_out INTO st_out
            ÍNDICE st_index-index.
          "Mover OS Dados da Estrutura Modificada parágrafo UMA Estrutura Temporária local.
          Move-CORRESPONDENTE AO st_out st_out_temp.
          "Alimenta UMA TABELA COM REGISTROS auxiliar OS ALTERADOS.
          APPEND st_out_temp TO it_out_temp.
        ENDLOOP.

        "Usa uma Tabela alimentada com sistema operacional Registros Modificados e atualiza a Tabela transparente.
        "Muito Cuidado EM USAR essas Coisas de atualizar, Incluir e excluir Dados de Tabelas
        "Transparente.
        MODIFICAR SFLIGHT DE TABELA it_out_temp.
        MENSAGEM 'A Tabela SFLIGHT FOI alterada com Sucesso' TYPE 'S'.
        "Caso nao Teve alteração - Mostra uma MENSAGEM
      MAIS.
        MENSAGEM 'A Tabela SFLIGHT Localidade: Não Teve alteração! TIPO 'W'.
      ENDIF.
      "Caso o Looks Favoritos tenha clicado no Botão 'SAIR' 'BACK' UO
    QUANDO 'BACK' OR 'SAIR'.
      Sair do programa.
      "QUALQUÉR Outro Caso.
    QUANDO OUTROS.

  ENDCASE.


ENDFORM. "User_command