Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

CONTEÚDO

Índice
exclude/^.*\b(?:Class|class|Parâmetros|Sintaxe|Retorno|Definição|CONTEÚDO|Function)\b.*$/gmi


Introdução

Neste documento procuramos apresentar e justificar as escolhas técnicas realizadas durante a implementação da rotina SCANCREF. As escolhas podem ser agrupadas da seguinte maneira:

...

  • Reutilização de código: objetos podem ser reutilizados em diferentes partes do programa, o que economiza tempo e esforço de desenvolvimento.
  • Modularidade: os objetos podem ser criados independentemente e depois integrados em um programa maior. Isso ajuda a separar as diferentes partes do programa em módulos lógicos, tornando o programa mais fácil de entender, manter e modificar.
  • Abstração: objetos permitem que você abstraia conceitos e ideias em representações mais concretas e fáceis de entender. Isso torna o código mais legível e fácil de manter.
  • Encapsulamento: a orientação a objetos permite que você esconda a complexidade interna de um objeto. Isso torna o objeto mais fácil de usar, porque o usuário só precisa conhecer as funções públicas disponíveis e não precisa se preocupar com detalhes internos.
  • Herança: a orientação a objetos permite que você crie hierarquias de objetos, com objetos mais especializados derivados de objetos mais gerais. Isso economiza tempo e esforço de desenvolvimento, uma vez que você pode reutilizar e modificar objetos existentes em vez de criar novos a partir do zero.
  • Produtividade: cada desenvolvedor pôde focar no desenvolvimento de uma parte do programa, já que este foi abstraído em classes com finalidades bem definidas. Isso aumentou a produtividade e minimizou as chances de desencontros no momento do merge.


Aviso
titleImportante

Todas estas vantagens foram exploradas com maior ou menor intensidade durante o desenvolvimento. Ao final

Aviso
titleImportante

Todas estas vantagens foram exploradas com maior ou menor intensidade durante o desenvolvimento. Ao final deste documento deixamos a documentação no padrão Protheus Doc com a descrição das classes e métodos criados.

...

  • Separação de responsabilidades: cada camada tem uma responsabilidade específica, tornando o código mais fácil de entender, alterar e depurar.
  • Reutilização de código: as camadas são isoladas e independentes, permitindo que o código seja reutilizado em outros projetos ou partes do mesmo projeto. Isto se aplica, inclusive para os futuros projetos do TAF. Procuramos desenvolver artefatos backend agnósticosreutilizáveis, que poderão, a princípio, ser reaproveitados em projetos REST e PO-UI.
  • Melhor escalabilidade: como as camadas são independentes, é possível escalar apenas aquela que precisa ser escalada, sem afetar as demais camadas.
  • Facilidade de manutenção: com a separação de responsabilidades, é mais fácil identificar onde estão os erros e realizar manutenções pontuais, sem afetar outras partes do sistema.
  • Facilidade de testes: a separação de responsabilidades também facilita a criação de testes automatizados para cada camada.

...

Aqui foram desenvolvidas as tabelas e as respectivas telas para entrada de informações, utilizando as funções MVC disponibilizadas pelo Framework.

FISA309 - Cadastro dos Quadros - Scanc Refinaria do Anexo VI

FISA310

O porquê da escolha

O porquê da escolha

Escolhemos Escolhemos essa abordagem devido ao domínio do time sobre a tecnologia.

...

  • É uma evolução do ADVPL e, ao contrário desta, continuará recebendo atualizações no futuro, portanto é a escolha mais adequada para a construção de uma rotina durável;
  • Suporte a namespaces: o que permitiu otimizar a organização conforme arquitetura escolhida;
  • Suporte a Reflection e Annotations: embora não tenha sido essencial, este recurso permitiu criar uma nova camada de abstração sobre os objetos o que facilitou muito a implementação da rotina (ex.: a criação de metadados sobre os campos de cada registro, tais como a quantidade de casas decimais ou a posição de cada campo).

...

  • (ex.: a criação de metadados sobre os campos de cada registro, tais como a quantidade de casas decimais ou a posição de cada campo).


Anexo I – Artefatos MVC


FISA309 - Cadastro dos Quadros - Scanc Refinaria do Anexo VI

FISA309 Function

...

Rotina para cadastro e geração do arquivo SCANC REF.

Definição:

Sintaxe

FISA309()


...


MenuDef Static Function

...

Função responsável por gerar o menu

Definição:

Sintaxe

MenuDef()


...


ModelDef Static Function

...

Função que criará o modelo do tree para cadastro de quadros do SCANC REF

Definição:

Sintaxe

ModelDef()


...


ViewDef Static Function

...

Função que monta a view da rotina

Definição:

Sintaxe

ViewDef()


...


MontaTree Static Function

...

Função que cria tree com as rotinas disponíveis do SCANC

Definição:

Sintaxe

MontaTree()


...


FChgTree Static Function

...

Adiciona ações para cada nó do Tree

Definição:

Sintaxe

FChgTree()


...


FBrowseMon Static Function

...

Browser para cada nó que selecionar

Definição:

Sintaxe

FBrowseMon()


...


FSA309FUNC Function

...

Função que identifica a opção selecionada pelo usuário e abre a rotina pertinente a opção selecionada.

Definição:

Sintaxe

FSA309FUNC()


...


FISA309AR Static Function

...

Chamada de geração do arquivo SCANC REF Anexo VI

Definição:

Sintaxe

FISA309AR()


...


FISA309Vld Static Function

...

Verifica se o diretório de destino para exportação do TXT existe.

Definição:

Sintaxe

FISA309Vld()


...


FISA309PROC Static Function

...

Função para implementar a classe do arquivo e gerar o arquivo magnético

Definição:

Sintaxe

FISA309PROC(cMesAno,cUfDest,cDestArq,cNomeArq,aFil)

Parâmetros

NomeTipoUsoDescrição
cMesAnocharacterObrigatórioparam_description
cUfDestcharacterObrigatórioparam_description
cDestArqcharacterObrigatórioparam_description
cNomeArqcharacterObrigatórioparam_description
aFilarrayObrigatórioparam_description

Retorno

TipoDescrição
variantreturn_description


FISA310 - Rotina para cadastro e geração do arquivo SCANC REF

FISA310 Function

...

Rotina para cadastro de valores dos quadros do Anexo 6 do SCANC REF

Definição:

Sintaxe

FISA310()


...


MenuDef Static Function

...

Funcao responsável por gerar o menu.

Definição:

Sintaxe

MenuDef()


...


ModelDef Static Function

...

Função que criará o modelo do cadastro de quadros do SCANC REF

Definição:

Sintaxe

ModelDef()


...


ViewDef Static Function

...

Função que monta a view da rotina

Definição:

Sintaxe

ViewDef()


...


A310Active Static Function

...

Função que trata informações especificas por quadros do SCANC

Definição:

Sintaxe

A310Active()


...


WhenCliFor Static Function

...

Controle edição do campo, somente quando o campo CJO_TPCHV for Fornecedor/Cliente

Definição:

Sintaxe

WhenCliFor()


...


WhenCodFil Static Function

...

Controle edição do campo, somente quando o campo CJO_TPCHV for Filial

Definição:

Sintaxe

WhenCodFil()


...


A310ChgF3 Static Function

...

Função responsável por informar a consulta padrão

Definição:

Sintaxe

A310ChgF3()


...


A310Remove Static Function

...

Remove campo de acordo com o quadro posicionado

Definição:

Sintaxe

A310Remove()


...


FISA310F3 Function

...

Função para consulta padrão F3 do campo CJO_CODEMP.

Aviso

Atenção!
Esta consulta padrão CJOEMP só deve ser utilizada aqui neste fonte.

Definição:

Sintaxe

FISA310F3()


...


FS310EmpF3 Function

...

Função que trabalha em conjunto com a função FISA310F3 para consulta padrão.

Aviso

Atenção!
Esta consulta padrão CJOEMP só deve ser utilizada aqui neste fonte.

Definição:

Sintaxe

FS310EmpF3()


...


ValidCpo Static Function

...

Validação de campos

Definição:

Sintaxe

ValidCpo()


...


FISA310POS Static Function

...

Validação de campos caso estejam vazios (Tudo OK).

Definição:

Sintaxe

FISA310POS()

Anexo II – Classes e métodos TLPP

...

Classe genérica com métodos e propriedades comuns à todos os registros do SCANC Refinaria

Definição:

Sintaxe

FieldOfScanRef()


...


toString of Class FieldOfScanRef method

...

Retorna o registro no formato Character

Definição:

Sintaxe

FieldOfScanRef():toString()

Retorno

TipoDescrição
CharacterRetorna o registro no formato Character

...

Classe modelo para o registro de cabeçalho do arquivo SCANC Refinaria

Definição:

Sintaxe

RegA6HD()


...


RegA6Q3 class

...

Classe modelo para o registro QUADRO 3 - OPERAÇÕES REALIZADAS PELO EMITENTE DO RELATÓRIO

Definição:

Sintaxe

RegA6Q3()


...


RegA6Q1 class

...

QUADRO 1 - Anexo VI Quadro 1 - VALOR DEVIDO POR OPERAÇÕES COM IMPOSTO RETIDO

Definição:

Sintaxe

RegA6Q1()


...


RegA6Q2 class

...

QUADRO 2 - APURAÇÃO DO ICMS PROVISIONADO

Definição:

Sintaxe

RegA6Q2()


...


RegA6Q41 class

...

QUADRO 4.1 - REPASSE POR OPERAÇÕES REALIZADAS POR DISTRIBUIDORAS/TRR (Transportador Revendedor Retalhista de Combustível)

Definição:

Sintaxe

RegA6Q41()


...


RegA6Q42 class

...

QUADRO 4.2 - OPERAÇÕES COM IMPOSTO RETIDO POR OUTROS CONTRIBUINTES

Definição:

Sintaxe

RegA6Q42()


...


RegA6Q43 class

...

QUADRO 4.3 - RELATÓRIOS EXTEMPORÂNEOS

Definição:

Sintaxe

RegA6Q43()


...


RegA6Q5 class

...

QUADRO 5 - REPASSE POR OPERAÇÕES REALIZADAS POR IMPORTADORES

Definição:

Sintaxe

RegA6Q5()


...


RegA6Q6 class

...

QUADRO 6 - REPASSE POR REMESSA DE AEAC (Álcool etílico anidro combustível) OU DE B100 (Biodisel) PARA OUTRAS UF

Definição:

Sintaxe

RegA6Q6()


...


RegA6Q61 class

...

QUADRO 6.1 - OPERAÇÕES COM IMPOSTO RETIDO POR ESTABELECIMENTO DO EMITENTE

Definição:

Sintaxe

RegA6Q61()


...


RegA6Q62 class

...

QUADRO 6.2 - OPERAÇÕES COM IMPOSTO RETIDO POR OUTROS CONTRIBUINTES

Definição:

Sintaxe

RegA6Q62()


...


RegA6Q63 class

...

QUADRO 6.3 - RELATÓRIOS EXTEMPORÂNEOS

Definição:

Sintaxe

RegA6Q63()


...


RegA6Q71 class

...

QUADRO 7.1 - OPERAÇÕES COM IMPOSTO RETIDO POR ESTABELECIMENTO DO EMITENTE

Definição:

Sintaxe

RegA6Q71()


...


RegA6Q72 class

...

QUADRO 7.2 - OPERAÇÕES COM IMPOSTO RETIDO POR OUTROS CONTRIBUINTES

Definição:

Sintaxe

RegA6Q72()


...


RegA6Q73 class

...

QUADRO 7.3 – - RELATÓRIOS EXTEMPORÂNEOS

Definição:

Sintaxe

RegA6Q73()


...


RegA6Q8 class

...

QUADRO 8 - DEDUÇÃO POR OPERAÇÕES REALIZADAS POR IMPORTADORES

Definição:

Sintaxe

RegA6Q8()


...


RegA6Q91 class

...

QUADRO 9.1 - OPERAÇÕES COM IMPOSTO RETIDO POR ESTABELECIMENTO DO EMITENTE

Definição:

Sintaxe

RegA6Q91()


...


RegA6Q92 class

...

QUADRO 9.2 - OPERAÇÕES COM IMPOSTO RETIDO POR OUTROS CONTRIBUINTES

Definição:

Sintaxe

RegA6Q92()


...


RegA6Q93 class

...

QUADRO 9.3 - RELATÓRIOS EXTEMPORÂNEOS

Definição:

Sintaxe

RegA6Q93()


...


RegA6Q10 class

...

QUADRO 10 - DEDUÇÃO POR RESSARCIMENTO EFETUADO A DISTRIBUIDORAS

Definição:

Sintaxe

RegA6Q10()


...


RegA6Q11 class

...

QUADRO 11 - DEDUÇÃO POR RESSARCIMENTO EFETUADO A TRR

Definição:

Sintaxe

RegA6Q11()


...


RegA6Q12 class

...

QUADRO 12 - DEDUÇÃO POR RESSARCIMENTO EFETUADO A IMPORTADORES

Definição:

Sintaxe

RegA6Q12()


...


RegA6Q13 class

...

QUADRO 13 - DEDUÇÃO POR RESSARCIMENTO EFETUADO A OUTROS CONTRIBUINTES

Definição:

Sintaxe

RegA6Q13()


...


RegA6Q14 class

...

QUADRO 14 - DEDUÇÃO TRANSFERIDA DE OUTRO ESTABELECIMENTO DO SUJEITO PASSIVO POR SUBSTITUIÇÃO

Definição:

Sintaxe

RegA6Q14()


...


RegA6Q15 class

...

QUADRO 15 - DEDUÇÃO TRANSFERIDA PARA OUTRO ESTABELECIMENTO DO SUJEITO PASSIVO POR SUBSTITUIÇÃO

Definição:

Sintaxe

RegA6Q15()

Namespace backoffice.fiscal.arquivos.estadual.scancref.service

...

Classe responsável por obter os dados dos registros do SCANC Refinaria

Definição:

Sintaxe

ScancRefService()


...


QryCJO of Class ScancRefService method

...

Metodo responsavel Método responsável por buscar os registros da tabela CJO com os dados dos quadros preenchidos pelo usuariousuário

Definição:

Sintaxe

ScancRefService():QryCJO()

Retorno

TipoDescrição
Charactercom o alias da query para uso

...

Método responsável por traduzir o tipo, sendo o cliente, fornecedor ou filial

Definição:

Sintaxe

ScancRefService():DefCliFor()

Retorno

TipoDescrição
Arraycom os dados da base

...

Método responsável por fornecer o registro de cabeçalho do SCANC Refinaria

Definição:

Sintaxe

ScancRefService():getRegA6HD()

Retorno

TipoDescrição
Objectretorna um objeto do tipo RegA6HD

...

QUADRO 1 - Anexo VI Quadro 1 - VALOR DEVIDO POR OPERAÇÕES COM IMPOSTO RETIDO

Definição:

Sintaxe

ScancRefService():getRegA6Q1()

Retorno

TipoDescrição
Objectobjeto com dados do registro A6Q1

...

QUADRO 2 - APURAÇÃO DO ICMS PROVISIONADO

Definição:

Sintaxe

ScancRefService():getRegA6Q2()

Retorno

TipoDescrição
Objectobjeto com dados do registro A6Q2

...

Método responsável por fornecer o QUADRO 3 - OPERAÇÕES REALIZADAS PELO EMITENTE DO RELATÓRIO

Definição:

Sintaxe

ScancRefService():getRegA6Q3()

Retorno

TipoDescrição
Arrayretorna um array de objetos do tipo RegA6Q3

...

QUADRO 4.1 - OPERAÇÕES COM IMPOSTO RETIDO POR ESTABELECIMENTO DO EMITENTE

Definição:

Sintaxe

ScancRefService():getRegA6Q41()

Retorno

TipoDescrição
Objectobjeto com dados do registro A6Q41

...

QUADRO 4.2 - OPERAÇÕES COM IMPOSTO RETIDO POR OUTROS CONTRIBUINTES

Definição:

Sintaxe

ScancRefService():getRegA6Q42()

Retorno

TipoDescrição
Objectobjeto com dados do registro A6Q42

...

getRegA6Q43 of Class ScancRefService method

...

QUADRO 4.3 – - RELATÓRIOS EXTEMPORÂNEOS

Definição:

Sintaxe

ScancRefService():getRegA6Q43()

Retorno

TipoDescrição
Objectobjeto com dados do registro A6Q43

...

getRegA6Q5 of Class ScancRefService method

...

QUADRO 5 - REPASSE POR OPERAÇÕES REALIZADAS POR IMPORTADORES

Definição:

Sintaxe

ScancRefService():getRegA6Q5()

Retorno

TipoDescrição
Objectobjeto com dados do registro A6Q5

getRegA6Q6 of Class ScancRefService method

QUADRO 6 - REPASSE POR REMESSA DE AEAC (Álcool etílico anidro combustível) OU DE B100 (Biodisel) PARA OUTRAS UF- REPASSE POR OPERAÇÕES REALIZADAS POR IMPORTADORES

Definição:

Sintaxe

ScancRefService():getRegA6Q6getRegA6Q5()

Retorno

TipoDescrição
Objectobjeto com dados do registro A6Q6A6Q5


...

getRegA6Q61 of Class ScancRefService method

...

QUADRO 6.1 - OPERAÇÕES COM IMPOSTO RETIDO POR ESTABELECIMENTO DO EMITENTE

Definição:

Sintaxe

ScancRefService():getRegA6Q61()

...

QUADRO 6.2 - OPERAÇÕES COM IMPOSTO RETIDO POR OUTROS CONTRIBUINTES

Definição:

Sintaxe

ScancRefService():getRegA6Q62()

...

getRegA6Q63 of Class ScancRefService method

...

QUADRO 6.3 – - RELATÓRIOS EXTEMPORÂNEOS

Definição:

Sintaxe

ScancRefService():getRegA6Q63()

...

QUADRO 7.1 - OPERAÇÕES COM IMPOSTO RETIDO POR ESTABELECIMENTO DO EMITENTE

Definição:

Sintaxe

ScancRefService():getRegA6Q71()

...

QUADRO 7.2 - OPERAÇÕES COM IMPOSTO RETIDO POR OUTROS CONTRIBUINTES

Definição:

Sintaxe

ScancRefService():getRegA6Q72()

...

getRegA6Q73 of Class ScancRefService method

...

QUADRO 7.3 – - RELATÓRIOS EXTEMPORÂNEOS

Definição:

Sintaxe

ScancRefService():getRegA6Q73()

...

QUADRO 8 - DEDUÇÃO POR OPERAÇÕES REALIZADAS POR IMPORTADORES

Definição:

Sintaxe

ScancRefService():getRegA6Q8()

...

QUADRO 9.1 - OPERAÇÕES COM IMPOSTO RETIDO POR ESTABELECIMENTO DO EMITENTE

Definição:

Sintaxe

ScancRefService():getRegA6Q91()

...

QUADRO 9.2 - OPERAÇÕES COM IMPOSTO RETIDO POR OUTROS CONTRIBUINTES

Definição:

Sintaxe

ScancRefService():getRegA6Q92()

...

getRegA6Q93 of Class ScancRefService method

...

QUADRO 9.3 – - RELATÓRIOS EXTEMPORÂNEOS

Definição:

Sintaxe

ScancRefService():getRegA6Q93()

...

QUADRO 10 - DEDUÇÃO POR RESSARCIMENTO EFETUADO A DISTRIBUIDORAS

Definição:

Sintaxe

ScancRefService():getRegA6Q10()

...

QUADRO 11 - DEDUÇÃO POR RESSARCIMENTO EFETUADO A TRR

Definição:

Sintaxe

ScancRefService():getRegA6Q11()

...

QUADRO 12 - DEDUÇÃO POR RESSARCIMENTO EFETUADO A IMPORTADORES

Definição:

Sintaxe

ScancRefService():getRegA6Q12()

...

QUADRO 13 - DEDUÇÃO POR RESSARCIMENTO EFETUADO A OUTROS CONTRIBUINTES

Definição:

Sintaxe

ScancRefService():getRegA6Q13()

...

QUADRO 14 - DEDUÇÃO TRANSFERIDA DE OUTRO ESTABELECIMENTO DO SUJEITO PASSIVO POR SUBSTITUIÇÃO

Definição:

Sintaxe

ScancRefService():getRegA6Q14()

...

QUADRO 15 - DEDUÇÃO TRANSFERIDA PARA OUTRO ESTABELECIMENTO DO SUJEITO PASSIVO POR SUBSTITUIÇÃO

Definição:

Sintaxe

ScancRefService():getRegA6Q15()

...

Classe modelo para o arquivo SCANC Refinaria

Definição:

Sintaxe

ScancRef()


...


makeRecords of Class ScancRef method

...

Método responsável por montar os registros do arquivo

Definição:

Sintaxe

ScancRef():makeRecords(cIdGrupo,cMesAno,cUfDest,_cFilial)

Parâmetros

NomeTipoUsoDescrição
cIdGrupocharacterObrigatórioIdentificador do grupo
cMesAnocharacterObrigatórioIdentificador do período
cUfDestcharacterObrigatórioUnidade federativa do arquivo
_cFilialcharacterObrigatórioFilial para a qual o arquivo será gerado

...

Método responsável por escrever o arquivo texto

Definição:

Sintaxe

ScancRef():writeRecords(oWriter)

Parâmetros

NomeTipoUsoDescrição
oWriterobjectObrigatórioObjeto da classe FWFileWriter responsável pela escrita no arquivo texto

...

writeCounters of Class ScancRef method

...

RODAPÉ - gera os totais de linhas de todos os registros do arquvoEscreve os contadores dos registros ao final do arquivo

Definição:

Sintaxe

ScancRef():writeCounters()

ScancTotais class

RODAPÉ - gera os totais de linhas de todos os registros do arquivo

Definição:

Sintaxe

ScancTotais()


...


Namespace backoffice.fiscal.arquivos.utils

...

Classe no padrão Singleton que fornece um objeto e métodos estáticos para manipulação de annotations

Definição:

Sintaxe

AnnotationHelper()


...


getDataAnnotation of Class AnnotationHelper method

...

Organiza as annotations de um objeto em um objeto HashMap de acordo com a chave de pesquisa informada

Definição:

Sintaxe

AnnotationHelper():getDataAnnotation(oObj,cAnnotationName,cKey)

Parâmetros

NomeTipoUsoDescrição
oObjObjectObrigatórioo objeto para o qual se quer obter os dados de annotation
cAnnotationNameCharacterObrigatórioo nome da annotation a ser obtida
cKeyCharacterObrigatórioo índice de pesquisa para o HashMap (deve ser uma propriedade da annotation)

...

Cria uma instância (se não houver) e a fornece

Definição:

Sintaxe

AnnotationHelper():getInstance()

...