<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Adeilson :)</title>
	<atom:link href="https://adeilson.com.br/feed/" rel="self" type="application/rss+xml" />
	<link>https://adeilson.com.br/</link>
	<description>Anotações ao alcance de todos ! ! !</description>
	<lastBuildDate>Wed, 05 Mar 2025 16:41:04 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
		<item>
		<title>Listar diretórios por tamanho no Linux</title>
		<link>https://adeilson.com.br/2025/03/05/listar-diretorios-por-tamanho-no-linux/</link>
					<comments>https://adeilson.com.br/2025/03/05/listar-diretorios-por-tamanho-no-linux/#respond</comments>
		
		<dc:creator><![CDATA[Adeilson]]></dc:creator>
		<pubDate>Wed, 05 Mar 2025 16:40:09 +0000</pubDate>
				<category><![CDATA[Utilitários]]></category>
		<guid isPermaLink="false">https://adeilson.com.br/?p=795</guid>

					<description><![CDATA[Para listar as pastas node_modules ordenado da maior para a menor segue o comando abaixo.]]></description>
										<content:encoded><![CDATA[
<p>Para listar as pastas node_modules ordenado da maior para a menor segue o comando abaixo.</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>find ~/workspace -type d -name &quot;node_modules&quot; -not -path &quot;*/node_modules/*&quot; -exec du -sh {} \; 2&gt;/dev/null | sort -rh</code></pre></div>
]]></content:encoded>
					
					<wfw:commentRss>https://adeilson.com.br/2025/03/05/listar-diretorios-por-tamanho-no-linux/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Arquivo JSON grande no Linux</title>
		<link>https://adeilson.com.br/2021/05/24/arquivo-json-grande-no-linux/</link>
					<comments>https://adeilson.com.br/2021/05/24/arquivo-json-grande-no-linux/#respond</comments>
		
		<dc:creator><![CDATA[Adeilson]]></dc:creator>
		<pubDate>Mon, 24 May 2021 20:27:09 +0000</pubDate>
				<category><![CDATA[Utilitários]]></category>
		<guid isPermaLink="false">https://adeilson.com.br/?p=661</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[
<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code># Install tool 
jqsudo apt-get install jq

# Pretty file
jq &#39;.&#39; myFile.json &gt; myFileBeautified.json

# Delete JSON property
jq &#39;del(.[].field.fieldToDelete)&#39; myFile.json &gt; myFileBeautified.json

# Compact file
jq -c &#39;.&#39; myFileBeautified.json &gt; myFileCleaned.json</code></pre></div>
]]></content:encoded>
					
					<wfw:commentRss>https://adeilson.com.br/2021/05/24/arquivo-json-grande-no-linux/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Remover node_modules de todos os diretórios no Linux</title>
		<link>https://adeilson.com.br/2021/03/22/remover-node_modules-de-todos-os-diretorios-no-linux/</link>
					<comments>https://adeilson.com.br/2021/03/22/remover-node_modules-de-todos-os-diretorios-no-linux/#respond</comments>
		
		<dc:creator><![CDATA[Adeilson]]></dc:creator>
		<pubDate>Mon, 22 Mar 2021 14:16:36 +0000</pubDate>
				<category><![CDATA[Utilitários]]></category>
		<guid isPermaLink="false">https://adeilson.com.br/?p=646</guid>

					<description><![CDATA[A partir do diretório em que você está execute o comando abaixo:]]></description>
										<content:encoded><![CDATA[
<p>A partir do diretório em que você está execute o comando abaixo:</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>find . -name &quot;node_modules&quot; -exec rm -rf &#39;{}&#39; +</code></pre></div>
]]></content:encoded>
					
					<wfw:commentRss>https://adeilson.com.br/2021/03/22/remover-node_modules-de-todos-os-diretorios-no-linux/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Criar um type dos valores de um array de objetos em Typescript</title>
		<link>https://adeilson.com.br/2021/03/17/criar-um-type-dos-valores-de-um-array-de-objetos-em-typescript/</link>
					<comments>https://adeilson.com.br/2021/03/17/criar-um-type-dos-valores-de-um-array-de-objetos-em-typescript/#respond</comments>
		
		<dc:creator><![CDATA[Adeilson]]></dc:creator>
		<pubDate>Wed, 17 Mar 2021 15:30:39 +0000</pubDate>
				<category><![CDATA[Utilitários]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[typescript]]></category>
		<guid isPermaLink="false">https://adeilson.com.br/?p=615</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<div class="hcb_wrap"><pre class="prism line-numbers lang-ts" data-lang="TypeScript"><code>export const status = [
  { value: `st1`, label: `Status 1` },
  { value: `st2`, label: `Status 2` },
] as const;

export type StatusType = typeof status[number][`value`];</code></pre></div>
</div></div>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-1 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:100%"></div>
</div>
</div></div>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://adeilson.com.br/2021/03/17/criar-um-type-dos-valores-de-um-array-de-objetos-em-typescript/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Comandos úteis React Native</title>
		<link>https://adeilson.com.br/2020/12/07/comandos-uteis-react-native/</link>
					<comments>https://adeilson.com.br/2020/12/07/comandos-uteis-react-native/#respond</comments>
		
		<dc:creator><![CDATA[Adeilson]]></dc:creator>
		<pubDate>Mon, 07 Dec 2020 14:04:49 +0000</pubDate>
				<category><![CDATA[Utilitários]]></category>
		<guid isPermaLink="false">http://adeilson.com.br/?p=601</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[
<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code># get device id
adb devices

# refresh app
adb -s YOU_DEVICE_ID reverse tcp:8081 tcp:8081 && adb -s YOU_DEVICE_ID reverse tcp:9090 tcp:9090 && adb -s YOU_DEVICE_ID shell input text &quot;RR&quot;

# Forward port to you computer
adb reverse tcp:8081 tcp:8081

# Reload
adb shell input text &quot;RR&quot;

# Open react native menu developer on your device
adb shell input keyevent 82</code></pre></div>
]]></content:encoded>
					
					<wfw:commentRss>https://adeilson.com.br/2020/12/07/comandos-uteis-react-native/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Docker 01 &#8211; Comandos iniciais</title>
		<link>https://adeilson.com.br/2019/02/17/docker-01-comandos-iniciais/</link>
					<comments>https://adeilson.com.br/2019/02/17/docker-01-comandos-iniciais/#respond</comments>
		
		<dc:creator><![CDATA[Adeilson]]></dc:creator>
		<pubDate>Sun, 17 Feb 2019 19:45:55 +0000</pubDate>
				<category><![CDATA[Utilitários]]></category>
		<category><![CDATA[docker]]></category>
		<guid isPermaLink="false">https://adeilson.com.br/?p=544</guid>

					<description><![CDATA[Exemplo de Dockerfile]]></description>
										<content:encoded><![CDATA[
<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code># gerar uma nova imagem a partir de um docker em execução
docker commit 822da9494718 aj/ngnix-ubuntu:1.1

# executar o docker mandando a 80 do docker para a 8080 da máquina física
docker run -i -t -p 8080:80 aj/ngnix-ubuntu:1.1 /bin/bash

# executar o docker mandando a 80 do docker para a 8080 da máquina física sem abrir o shell
docker run -d -i -t -p 8080:80 aj/ngnix-ubuntu:1.1 /bin/bash

# para os dois dockers ficarem visível na rede um para o outro
docker run -it --name web02 --link inspiring_bose:web01 aj/ngnix-ubuntu:1.0 /bin/bash

# iniciar um docker que está parado
docker start 5aacdcd188f4

# obter as informações do docker
docker inspect 5aacdcd188f4

# executar um comando dentro do docker sem entrar nele
docker exec 5aacdcd188f4 /etc/init.d/nginx start

# executar um comando dentro do docker sem entrar nele
docker exec 5aacdcd188f4 ps -ef

# entrar no shell do docker
docker attach 27ed54219d4b

# executar um docker e abrir o shell nele
docker run -i -t ubuntu /bin/bash

# parar todos os dockers no powershell
docker ps -a -q | ForEach { docker stop $_ }

# cria o docker de acordo com o Dockerfile
docker-compose up -d

# cria o docker de acordo com o Dockerfile
docker build -t webserver:1.0 .

# redes
docker network ls

# obter detalhes da rede
docker network inspect laradock_backend

# Para sair do docker sem desliga-lo no powershell
CTRL+Z CTRL+C

# uso de recurso do docker
docker stats

# filtrar os dockers para a exibição
docker ps -f &quot;status=exited&quot;

# exibir todos os dockers
docker ps -a

# instalar o netstat
apt-get install net-tools

# confirmar se o apache está escutando a porta 80
netstat -atunp

# rodar o composer
docker-compose up --force-recreate
</code></pre></div>



<p>Exemplo de Dockerfile</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>FROM ubuntu
MAINTAINER adeilson@gmail.com
RUN apt-get update && apt-get install -y apache2 && apt-get install -y net-tools && apt-get clean
ENV APACHE_LOCK_DIR=&quot;/var/lock&quot;
ENV APACHE_PID_FILE=&quot;/var/run/apache2.pid&quot;
ENV APACHE_RUN_USER=&quot;www-data&quot;
ENV APACHE_RUN_GROUP=&quot;www-data&quot;
ENV APACHE_LOG_DIR=&quot;/var/log/apache2&quot;

LABEL Description=&quot;Webserver&quot;

VOLUME /var/www/html

# RUN /etc/init.d/apache2 start

EXPOSE 80

CMD apachectl -D FOREGROUND</code></pre></div>
]]></content:encoded>
					
					<wfw:commentRss>https://adeilson.com.br/2019/02/17/docker-01-comandos-iniciais/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Criar arquivos Dummy no Windows</title>
		<link>https://adeilson.com.br/2017/10/18/criar-arquivos-dummy-no-windows/</link>
					<comments>https://adeilson.com.br/2017/10/18/criar-arquivos-dummy-no-windows/#respond</comments>
		
		<dc:creator><![CDATA[Adeilson]]></dc:creator>
		<pubDate>Wed, 18 Oct 2017 13:22:51 +0000</pubDate>
				<category><![CDATA[Utilitários]]></category>
		<category><![CDATA[windows]]></category>
		<guid isPermaLink="false">http://adeilson.com.br/?p=511</guid>

					<description><![CDATA[Cria 20.000 arquivos de 50Mb For /L %i in (1,1,20000) do fsutil file createnew T%i.tmp 52428800]]></description>
										<content:encoded><![CDATA[<p>Cria 20.000 arquivos de 50Mb</p>
<p>For /L %i in (1,1,20000) do fsutil file createnew T%i.tmp 52428800</p>
]]></content:encoded>
					
					<wfw:commentRss>https://adeilson.com.br/2017/10/18/criar-arquivos-dummy-no-windows/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Remover o OpenJDK e instalar o OracleJDK no Linux Mint</title>
		<link>https://adeilson.com.br/2017/03/16/remover-o-openjdk-e-instalar-o-oraclejdk-no-linux-mint/</link>
					<comments>https://adeilson.com.br/2017/03/16/remover-o-openjdk-e-instalar-o-oraclejdk-no-linux-mint/#comments</comments>
		
		<dc:creator><![CDATA[Adeilson]]></dc:creator>
		<pubDate>Thu, 16 Mar 2017 17:27:21 +0000</pubDate>
				<category><![CDATA[Utilitários]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mint]]></category>
		<guid isPermaLink="false">http://adeilson.com.br/?p=500</guid>

					<description><![CDATA[readlink -f $(which java) sudo apt-get remove &#8211;purge openjdk-* sudo add-apt-repository ppa:webupd8team/java sudo apt-get update sudo mkdir -p /usr/lib/mozilla/plugins sudo apt-get install oracle-java8-installer]]></description>
										<content:encoded><![CDATA[<p>readlink -f $(which java)<br />
sudo apt-get remove &#8211;purge openjdk-*<br />
sudo add-apt-repository ppa:webupd8team/java<br />
sudo apt-get update<br />
sudo mkdir -p /usr/lib/mozilla/plugins<br />
sudo apt-get install oracle-java8-installer</p>
]]></content:encoded>
					
					<wfw:commentRss>https://adeilson.com.br/2017/03/16/remover-o-openjdk-e-instalar-o-oraclejdk-no-linux-mint/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Sequência de números em linha no SQL Server</title>
		<link>https://adeilson.com.br/2017/02/24/sequencia-de-numeros-em-linha-no-sql-server/</link>
					<comments>https://adeilson.com.br/2017/02/24/sequencia-de-numeros-em-linha-no-sql-server/#respond</comments>
		
		<dc:creator><![CDATA[Adeilson]]></dc:creator>
		<pubDate>Fri, 24 Feb 2017 17:44:03 +0000</pubDate>
				<category><![CDATA[Utilitários]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[sql_server]]></category>
		<guid isPermaLink="false">http://adeilson.com.br/?p=496</guid>

					<description><![CDATA[SELECT STUFF((SELECT ' ' + CAST(NUMBER AS VARCHAR) FROM MASTER..SPT_VALUES WHERE NUMBER BETWEEN 2000 AND 2010 FOR XML PATH ('')), 1, 1, ''); &#160;]]></description>
										<content:encoded><![CDATA[<pre class="lang:tsql decode:true ">SELECT
  STUFF((SELECT
    ' ' + CAST(NUMBER AS VARCHAR)
  FROM MASTER..SPT_VALUES
  WHERE NUMBER BETWEEN 2000 AND 2010
  FOR XML PATH ('')), 1, 1, '');</pre>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://adeilson.com.br/2017/02/24/sequencia-de-numeros-em-linha-no-sql-server/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ALV Editável</title>
		<link>https://adeilson.com.br/2016/08/30/alv-editavel/</link>
					<comments>https://adeilson.com.br/2016/08/30/alv-editavel/#comments</comments>
		
		<dc:creator><![CDATA[Adeilson]]></dc:creator>
		<pubDate>Tue, 30 Aug 2016 13:53:11 +0000</pubDate>
				<category><![CDATA[ABAP]]></category>
		<category><![CDATA[abap]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[sap]]></category>
		<guid isPermaLink="false">http://adeilson.com.br/?p=480</guid>

					<description><![CDATA[*&#38;---------------------------------------------------------------------* *&#38; Report ZADE7 *&#38; *&#38;---------------------------------------------------------------------* *&#38; *&#38; *&#38;---------------------------------------------------------------------* REPORT zade7. *&#38;---------------------------------------------------------------------* *&#38; TOP *&#38;---------------------------------------------------------------------* TABLES: zade. TYPE-POOLS slis. "ALV * Estrutura de campos do relatório TYPES: BEGIN OF ty_ade. INCLUDE STRUCTURE zade. "Tab resultado RFC TYPES: handle_style TYPE lvc_t_styl, &#8230; <a href="https://adeilson.com.br/2016/08/30/alv-editavel/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<pre class="lang:abap decode:true  ">*&amp;---------------------------------------------------------------------*
*&amp; Report  ZADE7
*&amp;
*&amp;---------------------------------------------------------------------*
*&amp;
*&amp;
*&amp;---------------------------------------------------------------------*

REPORT  zade7.

*&amp;---------------------------------------------------------------------*
*&amp;  TOP
*&amp;---------------------------------------------------------------------*

TABLES: zade.

TYPE-POOLS slis. "ALV

* Estrutura de campos do relatório
TYPES: BEGIN OF ty_ade.
        INCLUDE STRUCTURE zade.         "Tab resultado RFC
TYPES: handle_style TYPE lvc_t_styl,    "Estilo edição
       novo         TYPE c,             "Tipo proc =&gt; Novo
       delete       TYPE c.             "Tipo proc =&gt; Eliminar
TYPES: END OF ty_ade.

DATA: t_ade_ori TYPE TABLE OF      zade,        "Tabela interna original.
      t_ade     TYPE TABLE OF      ty_ade,      "Tabela interna com os campos para CRUD.
      t_fieldcat     TYPE          lvc_t_fcat,  "Fieldcat alv
      w_fieldcat     TYPE          lvc_s_fcat,
      t_sort         TYPE          lvc_t_sort,  "Ordenação
      w_sort         TYPE          lvc_s_sort,
      w_layout       TYPE          lvc_s_layo,  "Layout alv
      t_new          TYPE          lvc_t_styl,  "Registros novos
      w_new          TYPE          lvc_s_styl,
      t_edit         TYPE          lvc_t_styl,  "Registros editar
      w_edit         TYPE          lvc_s_styl,
      t_show         TYPE          lvc_t_styl,  "Registros exibir
      w_show         TYPE          lvc_s_styl,
      w_ade          TYPE          ty_ade,
      w_ade_ori      TYPE          zade,
      v_modific(1)   TYPE          c,           "Modif ou Visual
      v_elimino(1)   TYPE          c,           "Eliminou registro
      v_alterou(1)   TYPE          c,           "Alterou registro
      v_inseriu(1)   TYPE          c,           "Criou regitro
      t_ade_new      TYPE TABLE OF ty_ade,      "Registros novos
      w_ade_new      TYPE          ty_ade,
      t_ade_del      TYPE TABLE OF ty_ade,      "Registros eliminar
      w_ade_del      TYPE          ty_ade,
      t_ade_de2      TYPE TABLE OF zade,        "Registros eliminar
      w_ade_de2      TYPE          zade,
      t_ade_upd      TYPE TABLE OF ty_ade,      "Registros editar
      w_ade_upd      TYPE          ty_ade,
      t_ade_up2      TYPE TABLE OF zade,        "Registros editar
      w_ade_up2      TYPE          zade,
      v_log_handle   TYPE          balloghndl,  "handle da mensagem
      v_msg          TYPE          abap_bool.

*&amp;---------------------------------------------------------------------*
*&amp;  SCREEN
*&amp;---------------------------------------------------------------------*

SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME TITLE text-003.
SELECT-OPTIONS: s_matnr  FOR  zade-matnr, " Centro
                s_descri FOR zade-descri NO INTERVALS NO-EXTENSION. " Data Documento
SELECTION-SCREEN END OF BLOCK a.

START-OF-SELECTION.
* Limpar conteúdo dos objetos
  PERFORM zf_clear.

* Selecionar registros
  PERFORM zf_selecionar_dados.

* Estrutura de campos e layout do ALV
  PERFORM zf_alv_fieldcat.

* Estrutura de campos ordenados no ALV
  PERFORM zf_alv_sort.

* Mapeamento para registros novos
  PERFORM zf_new_fields.

* Mapeamento para registros alterados
  PERFORM zf_edit_fields.

* Mapeamento para visualizar registros
  PERFORM zf_show_fields.

* Loop para montar tabela com campos editaveis ou não
  PERFORM zf_make_fields.

* Exibir relatório ALV
  PERFORM zf_show_alv.

END-OF-SELECTION.


*&amp;---------------------------------------------------------------------*
*&amp;  FORMS
*&amp;---------------------------------------------------------------------*

*&amp;---------------------------------------------------------------------*
*&amp;      Form  ZF_SELECIONAR_DADOS
*&amp;---------------------------------------------------------------------*
FORM zf_selecionar_dados .
  SELECT *
    INTO TABLE t_ade_ori
    FROM zade
   WHERE matnr  IN s_matnr
     AND descri IN s_descri.
  IF sy-subrc IS INITIAL.
    SORT t_ade_ori BY matnr.
  ELSE.
    MESSAGE 'Dados não encontrado!' TYPE 'I' DISPLAY LIKE 'W'.
    LEAVE LIST-PROCESSING.
  ENDIF.

ENDFORM.                    " ZF_SELECIONAR_DADOS

*&amp;---------------------------------------------------------------------*
*&amp;      Form  ZF_CLEAR
*&amp;---------------------------------------------------------------------*
FORM zf_clear .
  CLEAR:
      v_modific,
      v_elimino,
      v_alterou,
      v_inseriu,
      t_fieldcat[],
      w_fieldcat,
      w_layout,
      w_new,
      t_new[],
      w_edit,
      t_edit[],
      w_show,
      t_show[],
      w_ade,
      t_ade[],
      t_ade_new[],
      w_ade_new,
      t_ade_del[],
      w_ade_del,
      t_ade_de2[],
      w_ade_de2,
      t_ade_upd[],
      w_ade_upd,
      t_ade_up2[],
      w_ade_up2,
      t_ade_ori[].

  FREE:
      t_fieldcat[],
      t_new[],
      t_edit[],
      t_show[],
      t_ade[],
      t_ade_new[],
      t_ade_del[],
      t_ade_de2[],
      t_ade_upd[],
      t_ade_up2[],
      t_ade_ori[].
ENDFORM.                    " ZF_CLEAR

*&amp;---------------------------------------------------------------------*
*&amp;      Form  ZF_ALV_FIELDCAT
*&amp; Estrutura de campos e layout do ALV
*&amp;---------------------------------------------------------------------*
FORM zf_alv_fieldcat .
  CLEAR t_fieldcat[].

* Campos do relatório
  w_fieldcat-tabname        = 'T_ADE'.
  w_fieldcat-fieldname      = 'MATNR'.
  w_fieldcat-edit           = abap_false.
  w_fieldcat-ref_table      = 'ZADE'.
  w_fieldcat-ref_field      = 'MATNR'.
*  w_fieldcat-scrtext_l      = 'CNPJ'.
*  w_fieldcat-scrtext_m      = 'CNPJ'.
*  w_fieldcat-scrtext_s      = 'CNPJ'.
  w_fieldcat-outputlen      = 18.
  w_fieldcat-emphasize      = abap_true.
  APPEND w_fieldcat TO t_fieldcat.
  CLEAR w_fieldcat.

  w_fieldcat-tabname        = 'T_ADE'.
  w_fieldcat-fieldname      = 'DESCRI'.
  w_fieldcat-edit           = abap_true.
  w_fieldcat-ref_table      = 'ZADE'.
  w_fieldcat-ref_field      = 'DESCRI'.
  w_fieldcat-outputlen      = 30.
  APPEND w_fieldcat TO t_fieldcat.
  CLEAR w_fieldcat.

* Layout do relatório
  w_layout-zebra            = abap_true.
  w_layout-stylefname       = 'HANDLE_STYLE'.
ENDFORM.                    " ZF_ALV_FIELDCAT

*&amp;---------------------------------------------------------------------*
*&amp;      Form  ZF_NEW_FIELDS
*&amp; Mapeamento para registros novos
*&amp;---------------------------------------------------------------------*
FORM zf_new_fields .
  CLEAR t_new[].

  w_new-fieldname = 'MATNR'.
  w_new-style     = cl_gui_alv_grid=&gt;mc_style_enabled.
  w_new-style2    = abap_false.
  w_new-style3    = abap_false.
  w_new-style4    = abap_false.
  INSERT w_new INTO TABLE t_new.
  CLEAR w_new.

  w_new-fieldname = 'DESCRI'.
  w_new-style     = cl_gui_alv_grid=&gt;mc_style_enabled.
  w_new-style2    = abap_false.
  w_new-style3    = abap_false.
  w_new-style4    = abap_false.
  INSERT w_new INTO TABLE t_new.
  CLEAR w_new.
ENDFORM.                    " ZF_NEW_FIELDS

*&amp;---------------------------------------------------------------------*
*&amp;      Form  ZF_EDIT_FIELDS
*&amp; Mapeamento para registros a serem alterados
*&amp;---------------------------------------------------------------------*
FORM zf_edit_fields .
  CLEAR t_edit[].

  w_edit-fieldname = 'MATNR'.
  w_edit-style     = cl_gui_alv_grid=&gt;mc_style_disabled.
  w_edit-style2    = abap_false.
  w_edit-style3    = abap_false.
  w_edit-style4    = abap_false.
  INSERT w_edit INTO TABLE t_edit.
  CLEAR w_edit.

  w_edit-fieldname = 'DESCRI'.
  w_edit-style     = cl_gui_alv_grid=&gt;mc_style_enabled.
  w_edit-style2    = abap_false.
  w_edit-style3    = abap_false.
  w_edit-style4    = abap_false.
  INSERT w_edit INTO TABLE t_edit.
  CLEAR w_edit.
ENDFORM.                    " ZF_EDIT_FIELDS

*&amp;---------------------------------------------------------------------*
*&amp;      Form  ZF_SHOW_FIELDS
*&amp; Mapeamento para visualizar registros
*&amp;---------------------------------------------------------------------*
FORM zf_show_fields .
  CLEAR t_show[].

  w_show-fieldname = 'MATNR'.
  w_show-style     = cl_gui_alv_grid=&gt;mc_style_disabled.
  w_show-style2    = abap_false.
  w_show-style3    = abap_false.
  w_show-style4    = abap_false.
  INSERT w_show INTO TABLE t_show.
  CLEAR w_show.

  w_show-fieldname = 'DESCRI'.
  w_show-style     = cl_gui_alv_grid=&gt;mc_style_disabled.
  w_show-style2    = abap_false.
  w_show-style3    = abap_false.
  w_show-style4    = abap_false.
  INSERT w_show INTO TABLE t_show.
  CLEAR w_show.
ENDFORM.                    " ZF_SHOW_FIELDS

*&amp;---------------------------------------------------------------------*
*&amp;      Form  ZF_SHOW_ALV
*&amp; Exibir relatório ALV
*&amp;---------------------------------------------------------------------*
FORM zf_show_alv .
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program       = sy-repid
      is_layout_lvc            = w_layout
      it_fieldcat_lvc          = t_fieldcat
      i_callback_user_command  = 'ZF_COMMANDS'
      i_callback_pf_status_set = 'ZF_STATUS'
      it_sort_lvc              = t_sort
    TABLES
      t_outtab                 = t_ade[]
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.
  IF sy-subrc IS NOT INITIAL.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
ENDFORM.                    " ZF_SHOW_ALV

*&amp;---------------------------------------------------------------------*
*&amp;      Form  ZF_STATUS
*&amp; Botões do ALV
*&amp;---------------------------------------------------------------------*
FORM zf_status USING ct_extab TYPE slis_t_extab.
*  DATA l_extab LIKE LINE OF ct_extab.
  CLEAR ct_extab.

*  AUTHORITY-CHECK OBJECT 'ZOAXXXX'
*    ID 'MATNR' FIELD p_matnr "Material
*    ID 'ACTVT' FIELD '01'.   "Criar
*  IF NOT sy-subrc IS INITIAL.
*    MOVE '&amp;NOVO' TO l_extab.
*    APPEND l_extab TO ct_extab.
*  ENDIF.
*
*  AUTHORITY-CHECK OBJECT 'ZOAXXXX'
*    ID 'MATNR' FIELD p_emp  "Material
*    ID 'ACTVT' FIELD '06'.  "Excluir
*  IF NOT sy-subrc IS INITIAL.
*    MOVE '&amp;DELE' TO l_extab.
*    APPEND l_extab TO ct_extab.
*  ENDIF.
*
*  AUTHORITY-CHECK OBJECT 'ZOAXXXX'
*    ID 'MATNR' FIELD p_emp  "Material
*    ID 'ACTVT' FIELD '02'.  "Altera
*  IF NOT sy-subrc IS INITIAL.
*    MOVE '&amp;MODF' TO l_extab.
*    APPEND l_extab TO ct_extab.
*  ENDIF.

  SET PF-STATUS 'ZPFADE7' EXCLUDING ct_extab.
ENDFORM.                    "ZF_STATUS

*&amp;---------------------------------------------------------------------*
*&amp;      Form  ZF_MAKE_FIELDS
*&amp; Manutenção dos dados quando alterados
*&amp;---------------------------------------------------------------------*
FORM zf_make_fields .
  LOOP AT t_ade_ori INTO w_ade_ori.
    MOVE-CORRESPONDING w_ade_ori TO w_ade.
*    w_ade-novo = abap_true.
    APPEND LINES OF t_show TO w_ade-handle_style.
    APPEND w_ade TO t_ade.
    CLEAR w_ade-handle_style[].
  ENDLOOP.
ENDFORM.                    " ZF_MAKE_FIELDS

*&amp;---------------------------------------------------------------------*
*&amp;      Form  ZF_COMMANDS
*&amp; Ação dos botões do ALV
*&amp;---------------------------------------------------------------------*
FORM zf_commands USING ucomm    TYPE sy-ucomm
                       selfield TYPE slis_selfield.
  DATA:
    lv_tabix      TYPE        sy-tabix,
    lv_duplic(1)  TYPE        c,
    ref_grid      TYPE REF TO cl_gui_alv_grid,
    lt_index_rows TYPE        lvc_t_row,
    lt_row_no     TYPE        lvc_t_roid,
    lw_row_no     TYPE        lvc_s_roid.

* Busca valores do ALV ------------------------------------------------*
  IF ref_grid IS INITIAL.
    CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
      IMPORTING
        e_grid = ref_grid.
  ENDIF.

  IF NOT ref_grid IS INITIAL.
    CALL METHOD ref_grid-&gt;check_changed_data.
  ENDIF.


* Refresh -------------------------------------------------------------*
  CASE ucomm.
    WHEN '&amp;REFR'.
* Atualizar alv
      PERFORM zf_refresh.

    WHEN '&amp;MODF'.
* Ver/Modificar registro ----------------------------------------------*
      IF v_modific IS INITIAL.
        LOOP AT t_ade INTO w_ade.
          lv_tabix = sy-tabix.
          CLEAR w_ade-handle_style[].
          IF w_ade-matnr IS INITIAL.
            APPEND LINES OF t_new TO w_ade-handle_style.
          ELSE.
            APPEND LINES OF t_edit TO w_ade-handle_style.
          ENDIF.
          MODIFY t_ade FROM w_ade INDEX lv_tabix.
        ENDLOOP.
        v_modific = abap_true.
      ELSE.
        LOOP AT t_ade INTO w_ade WHERE matnr IS NOT INITIAL.
          lv_tabix = sy-tabix.
          CLEAR w_ade-handle_style[].
          APPEND LINES OF t_show TO w_ade-handle_style.
          MODIFY t_ade FROM w_ade INDEX lv_tabix.
        ENDLOOP.
        v_modific = abap_false.
      ENDIF.

* Novo registro -------------------------------------------------------*
    WHEN '&amp;NOVO'.
      CLEAR w_ade.
      w_ade-mandt = sy-mandt.
      APPEND LINES OF t_new TO w_ade-handle_style.
      w_ade-novo = abap_true.
      APPEND w_ade TO t_ade.
      CLEAR w_ade-handle_style[].

* Eliminar registro ---------------------------------------------------*
    WHEN '&amp;DELE'.
      CALL METHOD ref_grid-&gt;get_selected_rows
        IMPORTING
          et_index_rows = lt_index_rows
          et_row_no     = lt_row_no.

      LOOP AT lt_row_no INTO lw_row_no.
        READ TABLE t_ade
              INTO w_ade
             INDEX lw_row_no-row_id.
        IF sy-subrc IS INITIAL.
          lv_tabix = sy-tabix.
          w_ade-delete = abap_true.
          MODIFY t_ade FROM w_ade INDEX lv_tabix.
          MOVE-CORRESPONDING w_ade TO w_ade_del.
          APPEND w_ade_del TO t_ade_del.
          CLEAR w_ade_del.
        ENDIF.
      ENDLOOP.
      DELETE t_ade WHERE delete = abap_true.

* Gravar atualizações -------------------------------------------------*
    WHEN '&amp;SAVE'.
      v_msg = abap_false.
      PERFORM log_create.

* Valida registros novos
      t_ade_new[] = t_ade[].

      DELETE t_ade_new WHERE novo IS INITIAL.
      DELETE t_ade     WHERE novo IS NOT INITIAL.

      LOOP AT t_ade_new INTO w_ade_new.
* Atualiza tabela de visualização do ALV
        READ TABLE t_ade
              INTO w_ade
          WITH KEY matnr        = w_ade_new-matnr.
        IF sy-subrc IS INITIAL.
          lv_duplic = abap_true.
        ELSE.
          w_ade-matnr        = w_ade_new-matnr.
          w_ade-descri       = w_ade_new-descri.
          w_ade-novo         = abap_false.

          CLEAR w_ade-handle_style[].
          APPEND LINES OF t_show TO w_ade-handle_style.
          APPEND w_ade TO t_ade.
        ENDIF.

      ENDLOOP.

* Insere registros na tabela original
      IF t_ade[] IS NOT INITIAL.
* Atualizar registros
        LOOP AT t_ade INTO w_ade.
          lv_tabix = sy-tabix.

* Adicionar/modificar registros
          IF w_ade-matnr IS INITIAL.
            PERFORM log_add USING 'Material deve ser preenchido!'
                                  'E'.
            CONTINUE.
          ENDIF.
          w_ade_upd-matnr        = w_ade-matnr.
          w_ade_upd-descri       = w_ade-descri.

          READ TABLE t_ade_ori
                INTO w_ade_ori
            WITH KEY matnr     = w_ade_upd-matnr.
          IF sy-subrc IS INITIAL.
            IF w_ade_ori-descri = w_ade_upd-descri.
              CONTINUE.
            ELSE.
              v_alterou = abap_true.
            ENDIF.
          ELSE.
            v_inseriu = abap_true.
          ENDIF.
          APPEND w_ade_upd TO t_ade_upd.
        ENDLOOP.

* Alterar tabela de fornecedores
        CLEAR t_ade_up2[].
        LOOP AT t_ade_upd INTO w_ade_upd.
          MOVE-CORRESPONDING w_ade_upd TO w_ade_up2.
          APPEND w_ade_up2 TO t_ade_up2.
        ENDLOOP.
        IF NOT t_ade_up2[] IS INITIAL.
          MODIFY zade FROM TABLE t_ade_up2.
        ENDIF.
        CLEAR t_ade_upd[].
      ENDIF.

* Elimina registros
      CLEAR t_ade_de2[].
      LOOP AT t_ade_del INTO w_ade_del.
        MOVE-CORRESPONDING w_ade_del TO w_ade_de2.
        APPEND w_ade_de2 TO t_ade_de2.
      ENDLOOP.
      IF t_ade_de2[] IS NOT INITIAL.
        DELETE zade FROM TABLE t_ade_de2.
        v_elimino = abap_true.
      ENDIF.

* Mensagens
      IF v_inseriu IS NOT INITIAL.
        PERFORM log_add USING 'Registro(s) inseridos(s) com sucesso!'
                              'S'.
      ENDIF.

      IF v_alterou IS NOT INITIAL.
        PERFORM log_add USING 'Registro(s) modificado(s) com sucesso!'
                              'S'.
      ENDIF.

      IF v_elimino IS NOT INITIAL.
        PERFORM log_add USING 'Registro(s) eliminado(s) com sucesso!'
                              'S'.
      ENDIF.

      IF lv_duplic IS NOT INITIAL.
        PERFORM log_add USING 'Um ou mais registros duplicados foram removidos!'
                              'S'.
      ENDIF.

      PERFORM log_show.

* Atualizar alv
      PERFORM zf_refresh.
  ENDCASE.

*  SORT t_ade BY matnr.

* Atualiza os dados no ALV
  selfield-refresh = abap_true.
ENDFORM.                    "ZF_COMMANDS

*&amp;---------------------------------------------------------------------*
*&amp;      Form  ZF_REFRESH
*&amp; Atualizar alv
*&amp;---------------------------------------------------------------------*
FORM zf_refresh .
* Limpar conteúdo dos objetos
  PERFORM zf_clear.

* Selecionar registros
  PERFORM zf_selecionar_dados.

* Estrutura de campos e layout do ALV
  PERFORM zf_alv_fieldcat.

* Estrutura de campos ordenados no ALV
  PERFORM zf_alv_sort.

* Mapeamento para registros novos
  PERFORM zf_new_fields.

* Mapeamento para registros a serem alterados
  PERFORM zf_edit_fields.

* Mapeamento para visualizar registros
  PERFORM zf_show_fields.

* Loop para montar tabela com campos editaveis ou não
  PERFORM zf_make_fields.
ENDFORM.                    " ZF_REFRESH

*&amp;---------------------------------------------------------------------*
*&amp;      Form  ZF_ALV_SORT
*&amp;---------------------------------------------------------------------*
FORM zf_alv_sort.
  CLEAR w_sort.
  w_sort-fieldname = 'MATNR'.
  w_sort-spos = '1'.
  w_sort-up = 'X'.
  APPEND w_sort TO t_sort.
ENDFORM.                    " ZF_ALV_SORT

*&amp;---------------------------------------------------------------------*
*&amp;      Form  log_create
*&amp; Cria o handle do LOG
*&amp;---------------------------------------------------------------------*
FORM log_create.
  DATA l_s_log TYPE bal_s_log.

  IF v_log_handle IS INITIAL.
* create an initial log file
    l_s_log-extnumber  = 'ZADE7'(001).
    CALL FUNCTION 'BAL_LOG_CREATE'
      EXPORTING
        i_s_log      = l_s_log
      IMPORTING
        e_log_handle = v_log_handle
      EXCEPTIONS
        OTHERS       = 1.
    IF sy-subrc &lt;&gt; 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
               WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
  ENDIF.

* Limpar as mensagens anteriores
  CALL FUNCTION 'BAL_LOG_MSG_DELETE_ALL'
    EXPORTING
      i_log_handle  = v_log_handle
    EXCEPTIONS
      log_not_found = 1
      OTHERS        = 2.
  IF sy-subrc &lt;&gt; 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
             WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

ENDFORM.                    "log_create

*&amp;---------------------------------------------------------------------*
*&amp;      Form  LOG_ADD
*&amp; Adiciona mensagem para exibir
*&amp;---------------------------------------------------------------------*
FORM log_add USING p_msg       TYPE bal_s_msg-msgv1
                   p_msgty     TYPE bal_s_msg-msgty. "E / W / S
*                   p_probclass TYPE bal_s_msg-probclass. "1 / 2 / 3
  DATA l_s_msg TYPE bal_s_msg.

  v_msg = abap_true.

  l_s_msg-msgid     = '88'.
  l_s_msg-msgno     = 0.
  l_s_msg-msgty     = p_msgty.
*  l_s_msg-probclass = p_probclass.
  l_s_msg-msgv1     = p_msg.

*   add message to log file
*   (we explicitly specify I_LOG_HANLDE since we want to add this
*    message to the new opened log. The default log might be different
*    from this!).
  CALL FUNCTION 'BAL_LOG_MSG_ADD'
    EXPORTING
      i_log_handle = v_log_handle
      i_s_msg      = l_s_msg
    EXCEPTIONS
      OTHERS       = 1.
  IF sy-subrc &lt;&gt; 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
             WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
ENDFORM.                    "LOG_ADD

*&amp;---------------------------------------------------------------------*
*&amp;      Form  LOG_SHOW
*&amp; Exibi a mensagem
*&amp;---------------------------------------------------------------------*
FORM log_show.
  DATA:
    l_s_display_profile TYPE bal_s_prof.

  IF v_msg EQ abap_true.
* get a prepared profile
    CALL FUNCTION 'BAL_DSP_PROFILE_POPUP_GET'
      IMPORTING
        e_s_display_profile = l_s_display_profile
      EXCEPTIONS
        OTHERS              = 1.
    IF sy-subrc &lt;&gt; 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
               WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

* set report to allow saving of variants
    l_s_display_profile-disvariant-report = sy-repid.

* when you use also other ALV lists in your report,
* please specify a handle to distinguish between the display
* variants of these different lists, e.g:
    l_s_display_profile-disvariant-handle = 'LOG'.

* call display function module
* We do not specify any filter (like I_S_LOG_FILTER, ...,
* I_T_MSG_HANDLE) since we want to display all logs available
    CALL FUNCTION 'BAL_DSP_LOG_DISPLAY'
      EXPORTING
        i_s_display_profile = l_s_display_profile
      EXCEPTIONS
        OTHERS              = 1.
    IF sy-subrc &lt;&gt; 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
               WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
  ENDIF.
ENDFORM.                    "LOG_SHOW</pre>
<p><span id="more-480"></span></p>
<p>Arquivos auxiliares</p>
<p><a href="https://adeilson.com.br/wp-content/uploads/2016/08/Image-20160830_1042.jpg"><img fetchpriority="high" decoding="async" class="alignnone size-full wp-image-481" src="https://adeilson.com.br/wp-content/uploads/2016/08/Image-20160830_1042.jpg" alt="Image 20160830_1042" width="1531" height="1584" srcset="https://adeilson.com.br/wp-content/uploads/2016/08/Image-20160830_1042.jpg 1531w, https://adeilson.com.br/wp-content/uploads/2016/08/Image-20160830_1042-290x300.jpg 290w, https://adeilson.com.br/wp-content/uploads/2016/08/Image-20160830_1042-768x795.jpg 768w, https://adeilson.com.br/wp-content/uploads/2016/08/Image-20160830_1042-990x1024.jpg 990w" sizes="(max-width: 1531px) 100vw, 1531px" /></a> <a href="https://adeilson.com.br/wp-content/uploads/2016/08/Image-20160830_104400.jpg"><img decoding="async" class="alignnone size-full wp-image-482" src="https://adeilson.com.br/wp-content/uploads/2016/08/Image-20160830_104400.jpg" alt="Image 20160830_104400" width="1538" height="892" srcset="https://adeilson.com.br/wp-content/uploads/2016/08/Image-20160830_104400.jpg 1538w, https://adeilson.com.br/wp-content/uploads/2016/08/Image-20160830_104400-300x174.jpg 300w, https://adeilson.com.br/wp-content/uploads/2016/08/Image-20160830_104400-768x445.jpg 768w, https://adeilson.com.br/wp-content/uploads/2016/08/Image-20160830_104400-1024x594.jpg 1024w" sizes="(max-width: 1538px) 100vw, 1538px" /></a> <a href="https://adeilson.com.br/wp-content/uploads/2016/08/PF-status.txt">PF-status</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://adeilson.com.br/2016/08/30/alv-editavel/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
	</channel>
</rss>
