Sap Script

Sap Script & VBA – Lendo dados em um ALV LIST

Nessa postagem vou detalhar um pouco sobre o controle ALV List, quais as principais diferenças entre o ALV List e o ALV Grid. E como efetuar a leitura do controle ALV List percorrendo todos os itens disponíveis utilizando Excel VBA em um laço de repetição FOR/NEXT.

Primeiramente precisamos identificar o que seria um controle ALV List, e para isso vou apresentar as duas imagens abaixo, uma para um controle ALV Grid e a outra um  controle ALV List.

Controle ALV GRID
Controle ALV List

Nas imagens acima estou apresentando o mesmo documento contábil através da transação FB03, mas com visualizações diferentes. Deixei destacado em vermelho para facilitar a identificação dos controles. Percebam que a primeira e segunda imagem possuem a mesma informação os mesmo campos, apenas a sua visualização é diferente.

Estou utilizando a transação FB03 porque estou mais habituado a utiliza-la e sei que é possível alternar a visualização apresentando em tela um controle ALV Grid ou um controle ALV List, bastando escolher qual deseja usar. Isso é ótimo e acontece que quase todas as transações SAP. Eu disse quase todas as transações SAP, mas ainda existem transações que não disponibilizam o controle ALV Grid e por isso é importante saber automatizar também o controle ALV List.

O controle ALV Grid é mais amigável e atual, é possível ocultar colunas, arrastar sua posição utilizando o mouse, copiar o conteúdo facilmente e deslocar entre as células utilizando o teclado, além de ter propriedades que retornam a quantidade de linhas do Grid, a quantidade de linhas visíveis, sua posição começa sempre no 0 (zero). Não vou entrar em detalhes técnicos, mas adianto que o Grid é muito mais legal que o List.

Mas o foco aqui é o ALV List, porque existe relatórios que não permitem comutação de lista e oferece apenas o ALV List. E esse controle não tem (ou pelo menos eu não achei) uma propriedade que retorne a quantidade de linhas do registro. E diferente do ALV Grid ele nem sempre começa do 0 (zero), variar de acordo com a posição da tela ou do cabeçalho o que dificulta muito a leitura.

No exemplo que vamos utilizar nessa postagem os dados iniciam em 13, isso você consegue descobrir gravando um script e selecionando o campo. Para percorrer a lista iremos precisar de 3 informações, a primeira que acabei de falar que seria a posição inicial da lista, a segunda a quantidade de registro visíveis em tela e a terceira a quantidade total de registros dessa lista.

Iniciando a gravação do script e selecionando a primeira linha da lista no SAP você ira obter dentro do arquivo VBS o registro session.findById(“wnd[0]/usr/lbl[1,13]”).setFocus sendo que 13 é a posição da primeira linha, com isso já conseguimos a primeira informação.

Já a quantidade de registro visíveis em tela é necessária porque igual ao controle ALV Grid, a marcação do controle inicia-se em 13 (neste caso) e pode ir até o ultimo registro visível em tela, quando você alterna a posição da tela, seja deslocando o Scrollbar uma posição ou uma pagina que seja, os conteúdo é atualizado mas os campos são fixos, ou seja a primeira linha em tela sempre terá a posição 13, para obter a quantidade visível em tela vamos utilizar um propriedade session.findById(“wnd[0]/usr/lbl[1,13]”).Parent.verticalscrollbar.pageSize essa propriedade vai retornar 0 (zero) caso não tenha outra pagina no ALV List ou vai retornar a quantidade de linhas visíveis em tela.

Agora para terceira informação precisamos verificar o status da lista… que pode ser acessada pelos menu do SAP conforme imagem abaixo (pode variar dependendo da transação utilizada), ou utilizar o atalho do teclado Ctrl + F11

Utilizando o caminho acima ou através da tecla de atalho, você ira obter a janela abaixo, com um campo contendo a quantidade de registros dessa lista. Como comentado acima não encontrei outra forma de obter esse informação de forma rápida,  caso você tenha conhecimento deixe nos comentários com certeza ira ajudar outros com a mesma duvida. Lembrando também que para capturar esse campo você deve gravar o script na sua maquina porque pode ter um nome ou posição diferente da que vou utilizar nesse exemplo.

Abaixo código comentado utilizado nesse exemplo , atenção a linha 60 até a 72 que é onde fazemos o tratamento da barra de rolagem, caso a variável lngQtdVisivel seja maior que zero significa  existe mais de uma pagina e como comentado acima nesse exemplo a primeira linha começa sempre com 13, e quando a pagina é alterada precisamos voltar a variável para valor igual a 13.

 

Abaixo imagem da planilha utilizada nesse exemplo, consiste em efetuar a leitura através da transação FB03, comutar o tipo de controle de ALV Grid para ALV Lista, capturar a quantidade de registro para essa lista, fazer a leitura linha a linha e transferir para o Excel.

 

 

Clique aqui para baixar o arquivo exemplo utilizado nessa postagem.

Deixe uma resposta