A rea de Engenharia de Servios visa agrupar os programas / fontes / rotinas como componentes, artefatos cujo
objetivo a reutilizao e reduo de tempo/custos.
Portanto, padronizar as codificaes uma das primeiras preocupaes que temos.
Este boletim no foi construdo a partir do nada e nem se espera que seja um ponto final sobre o assunto.
Escolhemos um padro de documentao que se baseia no que j foi descrito / publicado / pensado pela empresa.
Na parte final constam links importantes do ByYou / TDN que enriquecem e detalham cada tpico.
//----------------------------------------------------------
/*/{Protheus.doc} Proc001
Funo Proc001
@param cNome Informe o Nome
@param cTipo Informe o Tipo
@sample
// Proc001 - User Function pra que gera os dados
U_Proc001( cNome, cTipo )
Return
@project MIT044_Proc001.doc
@menu \SIGAFAT\Atualizacoes\Cadastro\Proc Geral
Parametros: Codigo De Codigo Ate - ZZZZZZZ
@history
17/08/2012 - A programao fornecida foi desvinculada do PE original
e transformada em User Function
20/08/2012 - Acrescimo de cabecalho Protheus.Doc
/*/
//----------------------------------------------------------
User Function Proc001(cNome, cTipo)
Local cTeste := GetMV("MV_ULMES")
//----------------------------------------------------------
/*/{Protheus.doc} Grava
Funo Grava
@param No recebe parmetros
@return No retorna nada
@author Alex Sandro Valario
@owner Totvs S/A
@obs Grava os dados
@history
20/08/2012 - Acrescimo de cabecalho Protheus.Doc
/*/
//----------------------------------------------------------
Static Function Grava()
Prepara() // Rotina que prepara a massa de dados
//----------------------------------------------------------
/*/{Protheus.doc} Prepara
Funo Prepara
@param No recebe parmetros
@return No retorna nada
@author Alex Sandro Valario
@owner Totvs S/A
@obs Prepara os Dados
@history
20/08/2012 - Acrescimo de cabecalho Protheus.Doc
/*/
//----------------------------------------------------------
Static Function Prepara()
Return
//----------------------------------------------------------
/*/{Protheus.doc} Atualiza
Funo Atualiza
@param No recebe parmetros
@return No retorna nada
@author Alex Sandro Valario
@owner Totvs S/A
@obs Prepara os Dados
@history
20/08/2012 - Acrescimo de cabecalho Protheus.Doc
/*/
//----------------------------------------------------------
Static Function Atualiza()
Return
6) Pontos de Entrada obrigatoriamente devem fazer uso das funes GetArea() e RestArea()
devendo-se utilizar uma varivel pra cada rea utilizada alm da rea desconhecida.
Segue exemplo:
//----------------------------------------------------------
/*/{Protheus.doc} M460FIM
Funo M460FIM
@param Nenhum parmetro
@return No retorna nada
@author Marcelo Vicente
@owner Totvs S/A
@version Protheus 10, Protheus 11
@since 22/08/2012 - data de reviso do artefato
@obs
Link oficial do Ponto de Entrada:
http://tdn.totvs.com.br/pages/viewpage.action?pageId=6784180
Ponto de Entrada no final da gerao de Nota Fiscal de sada (PE: M460Fim)
Tabelas manipuladas no PE: 3 (SF2, SD2 e SE1).
Quantidade de variveis de controle de GetArea / RestArea: 4 (quatro)
@project MIT044_GravaDadosAposGerarNotaDeSaida.doc
@menu Rotina no pode ser acessada diretamente do menu
@history
20/08/2012 - Elaborao do Ponto de Entrada
20/08/2012 - Acrescimo de cabecalho Protheus.Doc
/*/
//----------------------------------------------------------
User Function M460Fim()
// chamo de rea desconhecida
// que a rea de trabalho do desenvolvedor ao executar a User Function
Local aArea := GetArea()
<instrues do processamento>
RestArea(aAreaSF2)
RestArea(aAreaSD2)
RestArea(aAreaSE1)
Return
10) Nomes de pastas, links, mapeamentos, endereos de IP interno, etc devem ser colocados
dentro de parmetros (SX6) flexibilizando a rotina/programa
12) No uso de Interfaces visuais dar preferncia para os comandos que facilitam a leitura do
cdigo ao invs de utilizar o construtor da classe
13) Prever eventuais possibilidades de "erro" causados pelo programa gerando arquivos de
Logs, ou mensagens impressas no Console (ConOut) ou ainda telas amigveis para o usurio
evitando ao mximo que a instncia seja derrubada abruptamente
14) Vetores, Arrays ou Matrizes precisam ter suas posies bem documentadas e, em caso de
estruturas grandes (maiores que 10 posies), aconselha-se a utilizao de Nomes definidos
(clusula #DEFINE) para cada coluna do array.
Segue exemplo para um vetor de 6 posies:
#INCLUDE "protheus.ch"
#DEFINE _ARRAY_CODIGO 01 // Cdigo do Produto
#DEFINE _ARRAY_GRUPO 02 // Grupo
#DEFINE _ARRAY_DESCR 03 // Descrio do Produto
#DEFINE _ARRAY_IR 04 // IR Sim ou No
#DEFINE _ARRAY_NCM 05 // Codigo NCM
#DEFINE _ARRAY_QTDVEN 06 // Quantidade Vendida
//----------------------------------------------------------
/*/{Protheus.doc} DadosSB1
Funo DadosSB1
@param Recebe um Array com dados dos Produtos
@return Retorna o mesmo Array com as quantidades vendidas por Produto
@author Marcelo Vicente
@owner Totvs S/A
@version Protheus 10, Protheus 11
@since 22/08/2012 - data de reviso do artefato
@obs
Posio _ARRAY_CODIGO 01 -> Cdigo do Produto
Posio _ARRAY_GRUPO 02 -> Grupo
Posio _ARRAY_DESCR 03 -> Descrio do Produto
Posio _ARRAY_IR 04 -> IR Sim ou No
Posio _ARRAY_NCM 05 -> Codigo NCM
Posio _ARRAY_QTDVEN 06 -> Quantidade Vendida
Cenrio: Suponha uma funo que tenha que acumular quantidades dos pedidos num
Array / Matriz recebido por parmetro.
A Rotina varre a tabela SC6 (Itens de Pedidos de Venda) e acumula as
quantidades na posio _ARRAY_QTDVEN.
@project MIT044_DadosDosProdutos.doc
@menu Rotina no pode ser acessada diretamente do menu
@history
01/08/2012 - Criao da rotina
20/08/2012 - Acrescimo de cabecalho Protheus.Doc
/*/
//----------------------------------------------------------
Static Function DadosSB1(aSB1Dados)
Local nI := 0
Local cFilSC6 := xFilial("SC6")
DbSelectArea("SC6")
DbSetOrder(2) // C6_FILIAL+C6_PRODUTO+C6_NUM+C6_ITEM
For nI := 1 To Len(aSB1Dados)
If DbSeek( cFilSC6 + aSB1Dados[nI, _ARRAY_CODIGO] )
While SC6->( !Eof() ) .And. SC6->C6_FILIAL == cFilSC6
SC6->( DbSkip() )
EndDo
EndIf
Next nI
Return aSB1Dados
15) Disponibilizar dentro do prprio programa cdigo para a criao do grupo de perguntas
(SX1) e/ou parmetros
16) Se possvel transforme o cdigo que compe um Ponto de Entrada numa funo dentro
de outro arquivo 'PRW' deixando no Ponto de Entrada apenas a chamada da funo
02) Protheus.Doc
http://tdn.totvs.com.br/pages/viewpage.action?pageId=22480577
04) Queries
http://tdn.totvs.com.br/pages/viewpage.action?pageId=27675604
http://tdn.totvs.com.br/pages/viewpage.action?pageId=27675608
06) Comentrios
O que no comentar -> http://tdn.totvs.com.br/pages/viewpage.action?pageId=23888922
O que comentar -> http://tdn.totvs.com.br/display/tec/O+que+comentar
Coment. Compactos -> http://tdn.totvs.com.br/pages/viewpage.action?pageId=27675869
Coment. Precisos -> http://tdn.totvs.com.br/pages/viewpage.action?pageId=23888933
08) Variveis
Atribuio -> http://tdn.totvs.com.br/pages/viewpage.action?pageId=23889012
Variveis pblicas -> http://tdn.totvs.com.br/pages/viewpage.action?pageId=23889016
Uso de var. pblic -> http://tdn.totvs.com.br/pages/viewpage.action?pageId=23889018
Valores constantes -> http://tdn.totvs.com.br/pages/viewpage.action?pageId=27675817