ZFI051: dois ALVs separados, XLSX de duas abas, destino do arquivo e datas espelhadas - #1
Draft
RafaelPiassi wants to merge 5 commits into
Draft
ZFI051: dois ALVs separados, XLSX de duas abas, destino do arquivo e datas espelhadas#1RafaelPiassi wants to merge 5 commits into
RafaelPiassi wants to merge 5 commits into
Conversation
Ate agora a ZFI051 so tinha uma saida: contrato e ZSD034 na mesma linha, cruzados pelo CPF / CNPJ. Isso multiplica linha (3 contratos x 10 vendas = 30 linhas) e descarta o que nao tem par, entao nenhum dos dois lados fecha com o relatorio de origem. Novo bloco "Modo de extracao": - Cruzado (P_MCRUZ, padrao) - o comportamento de sempre, intacto. - Separado (P_MSEP) - dois ALVs distintos, sem cruzar compra com venda: em cima os contratos, em baixo a saida da ZSD034 como ela devolve. Cada lado obedece so aos seus filtros, nada e multiplicado nem descartado, e os dois totais fecham com a origem. Na tela sao dois grids empilhados num splitter sobre docking, cada um com sua barra de funcoes, layout e export. No modo separado a coluna CRUZAMENTO some, o bloco "Regra do cruzamento" fica cinza e a ZSD034 e submetida SEM a restricao de clientes - o ALV de vendas tem de mostrar o periodo inteiro. Arquivo da extracao, tambem no bloco novo: - P_X1ARQ (padrao) - um xlsx com duas abas, "Compras (Contratos)" e "Vendas (ZSD034)". - P_X2ARQ - dois xlsx, sufixados _COMPRAS e _VENDAS. O CL_SALV_BS_LEX so gera arquivo de uma aba e OLE / DOI exigiria GUI, mas quem grava e o servidor de aplicacao durante o Job. Entao o arquivo de multiplas abas e montado aqui (OOXML + CL_ABAP_ZIP): cabecalho em negrito congelado com autofiltro, data como data de verdade (serial do Excel), numero como numero e texto pelo WRITE ... TO, para respeitar o exit de conversao do dominio. Os titulos saem de uma ALV headless, logo sao os mesmos da tela - inclusive para colunas novas que a ZSD034 vier a ganhar. No modo cruzado o export continua pelo CL_SALV_BS_LEX, sem mudanca. De quebra, o relatorio passa a detectar SY-BATCH: uma execucao solta por F9 / SM36 agora gera o arquivo em vez de tentar exibir ALV sem GUI. O agendamento leva o modo e a forma do arquivo na selecao, entao o Job gera exatamente o que a tela esta pedindo. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RuczykGZLT5tH7V96EJQ9Q
Documento no mesmo template dos demais objetos: capa, ficha tecnica e 12 capitulos, 19 paginas. Cobre os dois modos de extracao (cruzado e separado), a chave CPF / CNPJ e por que ela e normalizada, o SUBMIT + captura em memoria da ZSD034, a estrutura dinamica, o arquivo de duas abas e como cada tipo de campo e gravado no xlsx, o job, as colunas geradas, um mapa das rotinas para manutencao, os pontos que so o ambiente confirma e o glossario. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RuczykGZLT5tH7V96EJQ9Q
Dois problemas reais em producao, e os dois eram silenciosos.
1) Job "Concl." sem gerar arquivo. O F4 do diretorio navega no PC, entao
e natural apontar uma pasta como C:\Users\...\Desktop. So que o Job
roda no SERVIDOR DE APLICACAO, que nao enxerga o disco da estacao: o
OPEN DATASET falhava e o job terminava normal, sem arquivo.
- Destino agora e explicito: P_DSRV (servidor, OPEN DATASET) ou
P_DPC (estacao de trabalho, GUI_DOWNLOAD, so em dialogo).
- AGENDAR_JOB recusa caminho de PC na hora de agendar.
- Falha de gravacao diz o motivo do sistema operacional e explica
que o caminho e do PC (FORM DIAGNOSTICO_DIR).
- O F4 so abre o navegador de pastas com destino "estacao de
trabalho"; com destino servidor, orienta a usar a AL11.
2) "Executar e nao acontece nada". As mensagens do programa iam para
WRITE - que em background so aparece no SPOOL (nao no log do job) e
em dialogo quebraria a ALV, ou se perdia numa MESSAGE de rodape.
- Todas as mensagens passam por um coletor (FORM LOG): WRITE em
background, popup unico em dialogo (FORM MOSTRAR_LOG).
- Sem linhas, a mensagem informa quantas vieram de CADA lado -
contratos e ZSD034 - e avisa se a captura da ZSD034 falhou. Isso
separa "filtro sem resultado" de "erro no SUBMIT".
- Se o docking nao puder ser criado, cai para EXIBIR_ALV_SEQUENCIAL:
os dois ALVs em tela cheia, um apos o outro, em vez de nada.
De quebra, P_GERAR gera o arquivo tambem em primeiro plano, junto com a
ALV - antes o arquivo so saia por background.
README e documentacao (agora 21 paginas, com o capitulo "Destino do
Arquivo e Diagnostico") atualizados.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RuczykGZLT5tH7V96EJQ9Q
… sempre No modo separado, com o bloco Contratos sem resultado, o arquivo saia so com a aba da ZSD034 - e sem nenhuma mensagem. Do lado do usuario isso e indistinguivel de "o programa deixou de gerar a compra". - MONTAR_ABAS gera a aba/arquivo de compras SEMPRE, mesmo com zero linhas: so o cabecalho. A unica aba que ainda pode faltar e a de vendas quando a captura da ZSD034 falha por completo - ai nao existe nem a estrutura das colunas, e a mensagem diz isso. - Novo FORM CONTAR_LADOS: registra "Contratos de compra: N linha(s). Vendas ZSD034: M linha(s)." em toda execucao do modo separado, valendo para a exibicao e para o arquivo. - Com compra zerada e venda cheia, a mensagem lembra que a Data do pagamento fica vazia em contrato ainda nao pago, e sugere filtrar pela Data do contrato ou pelo Ano-safra. README e documentacao atualizados. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RuczykGZLT5tH7V96EJQ9Q
…job imediato
1) Data do pagamento (S_DTPAG) agora e OBRIGATORIA e carrega sempre o
mesmo valor e range da Data de criacao da OV (S_AUDAT): os dois lados
do relatorio olham a MESMA janela e a data e digitada num lugar so.
- Novo FORM SINCRONIZAR_DATAS, chamado no PBO da tela e tambem no
START-OF-SELECTION - este ultimo e o caminho do Job, onde a tela nao
e montada e uma variante antiga traria as duas datas divergentes.
- S_DTPAG fica em exibicao (MODIF ID pag): editavel so confundiria,
ja que qualquer valor digitado seria sobrescrito no proximo PBO.
Sai tambem o SCREEN-REQUIRED, para nao combinar obrigatorio com
campo sem entrada.
- Sem default a S_DTPAG obrigatoria barraria o primeiro Enter da
tela, antes de o espelhamento poder rodar - entao a janela padrao
de ambas passa a ser o mes corrente.
2) Defaults da tela alinhados ao uso real: modo "Dois ALVs, sem cruzar",
arquivo "Dois arquivos separados", destino "Estacao de trabalho" e
"Gerar arquivo nesta execucao" ja marcado.
3) Job com data/hora no passado agora arranca na hora (STRTIMMED) em vez
de ser empurrado para o proximo horario. A periodicidade continua
valendo a partir dessa execucao. Sem processo de background livre
(CANT_START_IMMEDIATE), agenda para daqui a um minuto em vez de
devolver erro e perder o agendamento.
README e documentacao atualizados.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RuczykGZLT5tH7V96EJQ9Q
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Publica a ZFI051 (
ZFIR051) com a opção de extrair dois ALVs distintos, sem cruzar compra com venda, e de gerar a saída como um XLSX com duas abas ou dois XLSX separados — mais as correções que vieram do teste no ECC.O problema
A ZFI051 tinha uma saída só: contrato e ZSD034 na mesma linha, ligados pelo CPF / CNPJ. Isso multiplica linha (3 contratos × 10 vendas = 30 linhas) e descarta o que não tem par — então nenhum dos dois lados fecha com o relatório de origem.
Modo de extração (bloco novo)
P_MCRUZP_MSEP(padrão)No modo separado: em cima os contratos de compra, em baixo a saída da ZSD034 como ela devolve. Cada lado obedece só aos seus filtros, nada é multiplicado nem descartado, e os dois totais fecham com a origem. Na tela são dois grids empilhados num splitter sobre docking, cada um com sua barra de funções, layout e export. Se o docking não puder ser criado, cai para os dois ALVs em tela cheia, em sequência.
Ainda no modo separado: a coluna
CRUZAMENTOsome, o bloco Regra do cruzamento fica cinza, e a ZSD034 é submetida sem a restrição de clientes — o ALV de vendas tem de mostrar o período inteiro.Arquivo da extração
P_X1ARQ.xlsxcom duas abas:Compras (Contratos)eVendas (ZSD034)P_X2ARQ(padrão).xlsx, sufixados_COMPRASe_VENDASO
CL_SALV_BS_LEXsó gera arquivo de uma aba, e OLE / DOI exigiria GUI — mas quem grava é o servidor de aplicação durante o Job. Por isso o arquivo de múltiplas abas é montado no próprio programa (OOXML +CL_ABAP_ZIP), sem GUI e sem ABAP2XLSX: cabeçalho em negrito congelado com autofiltro, data como serial do Excel (ordena e filtra como data), número como número, e texto peloWRITE ... TOpara respeitar o exit de conversão do domínio. Os títulos saem de uma ALV headless, logo são os mesmos da tela — inclusive para colunas novas da ZSD034.No modo cruzado o export continua pelo
CL_SALV_BS_LEX, sem mudança.A aba do lado vazio é gerada assim mesmo, só com o cabeçalho: omiti-la deixava o usuário sem saber se o lado veio zerado ou se o programa falhou.
Destino do arquivo
P_DSRVOPEN DATASETno servidor de aplicaçãoP_DPC(padrão)GUI_DOWNLOADno PCMotivado por um bug real: com o F4 navegando no PC, era natural apontar
C:\Users\...\Desktop— que o servidor de aplicação não enxerga. O job terminavaConcl.sem gerar arquivo. Agora o agendamento recusa caminho de PC na hora de agendar, a falha de gravação diz o motivo do SO, e o F4 só abre o navegador de pastas com destino "estação de trabalho".P_GERAR(marcado por padrão) gera o arquivo também em primeiro plano, junto com o ALV.Mensagens
Iam para
WRITE, que em background só aparece no spool (não no log do job) e em diálogo quebraria o ALV. Agora passam por um coletor:WRITEem background, popup único em diálogo. Sem linhas, a mensagem informa a contagem de cada lado — o que separa "filtro sem resultado" de "erro na captura da ZSD034".Datas espelhadas
S_DTPAG(data do pagamento) é obrigatória e carrega sempre o mesmo valor e range deS_AUDAT(data de criação da OV): os dois lados olham a mesma janela, digitada num lugar só. O espelhamento roda no PBO e noSTART-OF-SELECTION— este é o caminho do Job, onde a tela não é montada. O campo fica em exibição, porque seria sobrescrito a cada PBO. Ambas vêm com o mês corrente por padrão: sem default, a obrigatória barraria o primeiro Enter antes de o espelhamento poder rodar.Job
Detecta
SY-BATCH, então F9 / SM36 também gera arquivo em vez de tentar exibir ALV sem GUI. Data/hora no passado agora disparaSTRTIMMED— o job arranca na hora, com a periodicidade valendo a partir dali; sem processo de background livre, reagenda para daqui a um minuto em vez de perder o agendamento.Antes de ativar
B04passa a ser "Arquivo e Job de extração automática" eB05= "Modo de extração".P_MCRUZ,P_MSEP,P_X1ARQ,P_X2ARQ,P_DSRV,P_DPC,P_GERAR.SLIN).Inclui
README.mde a documentação técnica e funcional em.docx/.pdf(21 páginas), no mesmo template dos demais objetos.