Histórico da Página
CONTEÚDO
Índice | ||
---|---|---|
|
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 | ||
---|---|---|
| ||
Todas estas vantagens foram exploradas com maior ou menor intensidade durante o desenvolvimento. Ao final | ||
Aviso | ||
| ||
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
Nome | Tipo | Uso | Descrição |
---|---|---|---|
cMesAno | character | Obrigatório | param_description |
cUfDest | character | Obrigatório | param_description |
cDestArq | character | Obrigatório | param_description |
cNomeArq | character | Obrigatório | param_description |
aFil | array | Obrigatório | param_description |
Retorno
Tipo | Descrição |
---|---|
variant | return_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! |
Definição:
Sintaxe
FISA310F3()
...
FS310EmpF3 Function
...
Função que trabalha em conjunto com a função FISA310F3 para consulta padrão.
Aviso |
---|
Atenção! |
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
Tipo | Descrição |
---|---|
Character | Retorna 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
Tipo | Descrição |
---|---|
Character | com 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
Tipo | Descrição |
---|---|
Array | com os dados da base |
...
Método responsável por fornecer o registro de cabeçalho do SCANC Refinaria
Definição:
Sintaxe
ScancRefService():getRegA6HD()
Retorno
Tipo | Descrição |
---|---|
Object | retorna 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
Tipo | Descrição |
---|---|
Object | objeto com dados do registro A6Q1 |
...
QUADRO 2 - APURAÇÃO DO ICMS PROVISIONADO
Definição:
Sintaxe
ScancRefService():getRegA6Q2()
Retorno
Tipo | Descrição |
---|---|
Object | objeto 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
Tipo | Descrição |
---|---|
Array | retorna 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
Tipo | Descrição |
---|---|
Object | objeto com dados do registro A6Q41 |
...
QUADRO 4.2 - OPERAÇÕES COM IMPOSTO RETIDO POR OUTROS CONTRIBUINTES
Definição:
Sintaxe
ScancRefService():getRegA6Q42()
Retorno
Tipo | Descrição |
---|---|
Object | objeto com dados do registro A6Q42 |
...
getRegA6Q43 of Class ScancRefService method
...
QUADRO 4.3 - RELATÓRIOS EXTEMPORÂNEOS
Definição:
Sintaxe
ScancRefService():getRegA6Q43()
Retorno
Tipo | Descrição |
---|---|
Object | objeto 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
Tipo | Descrição |
---|---|
Object | objeto 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
Tipo | Descrição |
---|---|
Object | objeto 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
Nome | Tipo | Uso | Descrição |
---|---|---|---|
cIdGrupo | character | Obrigatório | Identificador do grupo |
cMesAno | character | Obrigatório | Identificador do período |
cUfDest | character | Obrigatório | Unidade federativa do arquivo |
_cFilial | character | Obrigatório | Filial para a qual o arquivo será gerado |
...
Método responsável por escrever o arquivo texto
Definição:
Sintaxe
ScancRef():writeRecords(oWriter)
Parâmetros
Nome | Tipo | Uso | Descrição |
---|---|---|---|
oWriter | object | Obrigatório | Objeto 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
Nome | Tipo | Uso | Descrição |
---|---|---|---|
oObj | Object | Obrigatório | o objeto para o qual se quer obter os dados de annotation |
cAnnotationName | Character | Obrigatório | o nome da annotation a ser obtida |
cKey | Character | Obrigatório | o í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()
...