Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: Como Criar Relatórios de Cotações com Dados Agrupados Usando SQL

img: DALL·E 2024-08-09 07.00.00 - A high-quality image showcasing a detailed SQL query being written in a code editor, such as VS Code, on a dark theme background. ... ## Como Criar Relatórios de Cotações com Dados Agrupados Usando SQL Quando trabalhamos com sistemas ERP e precisamos gerar relatórios de cotações que apresentam dados de múltiplos fornecedores, é comum encontrarmos a necessidade de pivotar registros que, originalmente, são apresentados de forma vertical. Isso é especialmente útil quando o objetivo é comparar preços ou condições de diferentes fornecedores para um mesmo produto em uma única linha do relatório. Neste artigo, vamos explorar uma abordagem para transformar registros verticais em colunas, facilitando a impressão de relatórios que consolidam informações de vários fornecedores em uma única linha. Vamos utilizar SQL com técnicas de pivotagem, e ao final, mostraremos como estender essa técnica para um número variável de fornecedores. ### Estrutura do Relatór

BlackTDN :: ADVPL Games ~ GAME 15 : Final

015

Finalizado o Jogo do 15. Com + de 2000 linhas de código da + pura diversão e entretenimento.

Clique aqui se a sua vontade for de obter os códigos fontes (para estudo ou diversão).

Algumas soluções parciais do jogo poderão ser obtidas ao clicar aqui.

Com o jogo finalizado teremos agora as seguintes interfaces:

 

Game15 Start Game15
About Game15 Game15 Top Record
Game 15 Top Record Clear Game15 Save
Game15 Restore Game15 You Win

 

No desenvolvimento do GAME 15 foram utilizados os seguintes recursos da Linguagem ADVPL:

Recurso ADVPL Descrição:
Classe: TPaintPanel Cria um objeto do tipo painel que permite adicionar subpainéis e shapes.
Classe: MsDialog Cria uma janela de diálogo, no programa, para entrada de dados do tipo modal. Desta forma, não é permitido que outras janelas recebam dados enquanto esta estiver ativa.
Classe: TListBox Cria um objeto do tipo lista de itens com barra de rolagem.
Classe: TRect TDN diz: Você não tem permissão para acessar esse recurso.
Classe: TFont Cria um objeto para alterar as características da fonte utilizada em outros controles visuais.
Classe: TGet Cria um objeto para entrada de dados editáveis.
Classe: SButton Cria um objeto do tipo botão.
Função: FreeObj Elimina da memória a instância do objeto informado como parâmetro.
Função: cGetFile Apresenta uma janela com os diretórios disponíveis, na estação e no servidor,  e retorna o nome do item.
Função: AScan Percorre um array procurando por um valor especificado. Pode ser especificado um valor a ser buscado, ou pode ser informada uma condição de busca através de um bloco de código.
Função: AEVal Executa um bloco de código para cada elemento de um array.
Função: MakeDir Cria um diretório.
Função: lIsDir Não documentada. Verifica se um diretório existe.
Função: Sleep A função SLEEP() tem o objetivo de fazer com que a thread corrente deixe de ser executada de acordo com o valor informado como parametro.
Função: NetErr Não documentada: Verificar se um comando de manipulação de arquivo de dados falhou em ambiente de Rede
Função: DBCreate Define uma nova tabela ou um novo arquivo do tipo tabela e sua estrutura (campos)
Função: dbUseArea Abre uma área de dados para utilização.
Função: OrdCreate Não Documentada: Utilizada para criar uma nova ordem em um arquivo de índice
Função: dbClearIndex Fecha todos os índices da área de trabalho corrente.
Função: DBCloseArea Fecha a área de trabalho corrente.
Função: OrdListAdd Não Documentada: Utilizada para abrir um arquivo de índices. Referência mais próxima: DBSeek
Função: DBSeek Localiza um registro com determinado valor da expressão de chave de índice.
Função: DBSetNickname Define um apelido para uma determinada ordem.
Função: DBOrderNickname Seleciona a ordem ativa através de seu apelido.
Função: IndexKey Determina a expressão da chave de um índice especificado na área de trabalho corrente, e o retorna na forma de uma string.
Função: DBAppend Adiciona um novo registro vazio na tabela corrente.
Função: rLock Não Documentada: Tenta efetuar o Lock no registro correte. Referência mais próxima: Função: RecLock - Comando de alteração em modo exclusivo. Que internamente faz uso da rLock para obter o Lock do registro.
Função: DBUnlock Retira bloqueios de registros e de arquivos da tabela corrente.
Função: DBDelete Marca o registro corrente para exclusão.
Função: DBCloseArea Fecha a área de trabalho corrente.
Função: StaticCall Não Documentada. Referência em BlackTDN
Função: ShellExecute Executa um arquivo.

Além das funções e classes acima, foram usadas funções e classes  da biblioteca de Funções NDJLIB também em ADVPL.

Para aqueles que estão se iniciando em ADVPL é uma boa referência.

Um “Ponto de Atenção”:

image

No fragmento de código acima, utilizado para validar o Jogo, utilizei a seguinte expressão:

lMatch    := &cMatch.(@aShapes,@nSqrtBtn,@nButtons)   

Nela faço uso do operador de macro & para executar as funções de validação com passagem de parâmetros.

aMatch         := { "AlgMatchL1" , "AlgMatchR1" , "AlgMatchL2" , "AlgMatchR2" }
nMatches    := Len( aMatch )   
For nMatch := 1 To nMatches
    cMatch    := aMatch[nMatch]
    lMatch    := &cMatch.(@aShapes,@nSqrtBtn,@nButtons)   
    IF ( lMatch )                                                                       
        EXIT
    EndIF
Next nMatch

 

Game15 Opções para Compilação

Lembrando que, para compilar o Projeto u_game15.prj, existem dependências dos includes que se encontram em:

\u_game15\include\
\u_game15\include\protheus\

Referências a BlackTDN GAME15:

[]s
иαldσ dj

Comentários

  1. problema com esse include #INCLUDE "NDJ.CH"

    Compilando arquivos...
    c:\u_game15\ndjlib\ndjlib025.prg...
    (no projeto Game15)
    Erro de compilação:
    c:\u_game15\ndjlib\NDEE67~1.PRG(1) Error C2090 File not found aabonos.ch
    Processo interrompido por erro FATAL de compilação.
    Compilação finalizada - 1 arquivo(s) - 1 mensagem(s)
    Tempo de duração da compilação: 2 segundos

    ResponderExcluir
    Respostas
    1. o include aabonos.ch econtra-se em \u_game15\include\protheus\

      Para que o Projeto u_game15.prj possa ser compilado mapeie os includes das seguintes pastas:

      \u_game15\include\
      \u_game15\include\protheus\


      []s
      иαldσ dj

      Excluir

Postar um comentário

Postagens mais visitadas