Você está na página 1de 82

Módulo:

Programa:
Versões:
Data de Inclusão: 25/04/2000
Países:
cGetFile ( ExpC1, ExpC2, ExpN1, ExpC3, ExpL1,
ExpN2 )

ExpC1 -> Mascara para filtro (Ex: "Informes Protheus


(*.##R) | *.##R")
ExpC2 -> Titilo da
Janela
ExpN1 -> Numero da mascara default ( Ex: 1 p/
*.exe )
ExpC3 -> Diretorio inicial se
necessario
Expl1 -> .T. para mostrar botao como "Salvar" e .F. para
botao "Abrir"
ExpN2 -> Mascara de bits para escolher as opcoes de
visualizacao do
Objeto. Mascaras
possiveis:

GETF_OVERWRITEPROMPT - Solicita confirmacao para


sobrescrever
GETF_MULTISELECT - Permite selecionar multiplos
arquivos
GETF_NOCHANGEDIR - Nao permite mudar o diretorio
inicial
GETF_LOCALFLOPPY - Exibe o(s) Drive(s) de diskete da
maquina local
GETF_LOCALHARD - Exibe o(s) HardDisk(s)
Local(is)
GETF_NETWORKDRIVE - Exibe os drives da rede
( Mapeamentos )
GETF_SHAREWARE - Nao
implementado
GETF_RETDIRECTORY - Retorna um
diretorio

Exemplo:

cGetFile ( "*.PRW|*.CH" , "Fontes", 1, "C:\VER507", .F.,


GETF_LOCALHARD
+
GETF_LOCALFLOPPY)
Módulo:
Programa:
Versões:
Data de Inclusão:
14/04/2000
Países:
Estas funcoes visam facilitar o trabalho com indices
no sistema.

dbOrderNickName(cApelido)

cApelido -> Nome existente no campo NICKNAME dentro


do SINDEX

Retorna -> .T. se o nickname for


encontrado
.F. se nao for
encontrado

dbSetNickName(cIndex,)

cIndex -> Nome do arquivo de


indice
-> Nome a ser dado ao indice (Se nao for informado
retorna o
proprio nome do
arquivo)

Retorna -> O nome dado ao


indice

Para a utilizacao dessas funcoes basta seguir os


seguintes
procedimentos:

- Criar no SINDEX o campo NICKNAME (caracter de 10


posicoes)
- Preencher o campo com o "apelido" do
indice

NAO PREENCHER ESTE CAMPO PARA INDICES DO


SISTEMA

- Usar a funcao dbOrderNickName(cApelido), no lugar


de dbSetOrder(),
para selecionar o indice
desejado
- Usar a funcao dbSetNickName() para definir o alias
de indices que nao
sejam presentes no
SINDEX

Obs: Estas funcoes so estarao disponiveis para


versoes Advanced Protheus
posteriores a
08/04/2000

Módulo:
Programa:
Versões:
Data de Inclusão:
16/02/2000
Países:

Sintaxe : ChkFile( , [lExclusivo] ,


cNewAlias)

Descriçäo : A funçäo ChkFile executa a abertura de


uma tabela cadastrada
no Dicionário SX2 /
SX3.

Parâmetros: cAlias -> Alias da tabela a ser


aberta.
lExclusivo -> Se especificado .T., indica
que a tabela deve
ser aberta em modo exclusivo ( Default = .F. /
Compartilhado ).
cNewAlias -> Alias com que se deseja
abrir o arquivo.

Retorno : Booleano. Retorna .T. caso a tabela tenha


sido aberta com
sucesso ou case a tabela já estava aberta. Caso
contrário, retorna .F.

Módulo:
Programa:
Versões:
Data de Inclusão:
25/05/2000
Países:
Para habilitar ou desabilitar a relacao de parametros
nos relatorios
existem 2
maneiras:

1) Atraves do parametro MV_IMPSX1 onde se o conteudo


for igual a "N" os
parametros nao serao impressos para nenhum
usuário.

2) Atraves da senha do usuário poderá ser habilitado


ou desabilitado
pela ocorrencia 101 do registro de senha
(SIGAMAT.ACS).

* Este arquivo devera estar no diretorio dos


Dicionarios e ter
obrigatoriamente esta posicao
(101).

Caso nao tenha, solicitar aa Microsiga o envio deste


arquivo.

Módulo:
Programa:
Versões:
Data de Inclusão:
09/06/2000
Países:
A melhor maneira de se criar novos indices, para
customizacoes no
sistema, eh usando uma nova feature disponivel apenas
no AP5, onde se
coloca no SINDEX, campo NICKNAME, o apelido pelo qual
desejamos chamar o
Indice.

Eh importante salientar que os indices padroes do


sistema, nao tem e nao
devem ter NICKNAMES, visto que eles obrigatoriamente
estao sempre na
ordem
esperada.

Exemplo
:
O Objetivo quando foi feito isso, eh evitar que o
indice 10 (criado em
uma customizacao), passe a ser o indice 11 na proxima
versao obrigando a
a manutencao dos
Rdmakes.

Para se utilizar na versao 5.07 eh necessario criar o


campo NICKNAME no
SINDEX campo este jah no padrao da versao
5.08

Para se chamar o Indice, no lugar de


dbSetOrder(nIndex), utilizar

DBOrderNickName(cNickName)

Módulo:
Programa:
Versões:
Data de Inclusão:
13/06/2000
Países:
Na Versao TopCOnnect eh possivel se utilizar filtros
SQL que sao
resolvidos unica e tao somente pelo
DBMS.

Para essa utilizacao , basta que o primeiro caracter


do filtro seja @
(arroba)

Exemplo de
utilizacao
:

Function
Teste()

Local
cFiltro

cFiltro := "@X5_DESCRI LIKE '% DA


%'"

dbSelectArea("SX5")

Set Filter to
&cFilter

dbgotop()

Outro
Exemplo
:

dbSelectArea("SX5")

Set Filter to &("@X5_DESCRI LIKE '% DA


%'")
dbGotop()

* Liberado apenas para o


AP5

Observacao - A funcao dbFilter() nao retorna nada


quando o filtro
utilizado foi um Filtro
SQL.

Módulo:
Programa:
Versões:
Data de Inclusão:
15/06/2000
Países:
A Funcao MayIUseCode tem o objetivo de reservar uma
palavra , ou seja
quando uma estacao reserva uma palavra, a outra nao
conseguirah usar.

Podem ser reservadas ateh 20 palavras simultaneamente


e estas palavras
sao liberadas automaticamente nos seguintes
pontos :

- Volta para o
Menu

- VOlta para a mbrwose ou


MarkBrowse
- no End
Transaction

Especialmente em funcoes com transacao esta eh muito


util, visto que
enquanto em uma transacao eh impossivel checar por
outra conexao se o
registro jah estah incluido enquanto a outra estacao
nao der o
EndTransaction.

Exemplos de possiveis
usos
:
Nao deixar gravar 2 pedidos de venda com o mesmo
numero
Nao deixar gravar 2 produtos com o mesmo codigo,
melhor lugar a colocar
eh na validacao do produto. ( ATENCAO!! Verificar a
funcao FreeForUse()
para utilizacao da MayIUseCode na validacao do
SX3 ).

Para se liberar os registros em outro ponto que nao


seja os automaticos,
utilizar a funcao freeusedCode(), que liberarah todos
os codigos
reservados.

Para se desabilitar a funcao utilizar MV_USELOCK com


retorno False
Módulo:
Programa:
Versões:
Data de Inclusão:
06/09/2000
Países:
CRIACAO DE CAMPO MEMO VIRTUAL UTILIZANDO O ARQUIVO
SYP.

Para criacao de um campo memo virtual, e necessario


que sejam criados
dois campos, um de codigo e o outro com tipo memo
virtual. Esses dados
sao gravados no arquivo
SYP.

EXEMPLO PARA UM NOVO CAMPO NO CADASTRO DE


CLIENTES:
--------------------------------------------------

Campo
Codigo:

Nome Tipo Tamanho


Contexto
A1_CODTST C 6
Real

Campo
Memo:

Nome Tipo Tamanho


Contexto
A1_TESTE M 80
Virtual

Obs. O tamanho do campo YP_TEXTO e


80.

Inicializador
Padrao:
IF(!INCLUI,MSMM(SA1->A1_CODTST),"")

Para gravacao do campo memo, incluir a funcao MSMM no


programa (nesse
caso, estaremos utilizando pontos de entrada do
programa MATA030).

No caso de inclusao, estamos utilizando o ponto de


entrada M030INC:

_cTeste := M-
>A1_TESTE

_nTam :=
TamSX3("A1_TESTE")

_nTam1 :=
_nTam[1]

MSMM(_nTam1,,_cTeste,1,,,"SA1","A1_CODTST")

Caso seja alteracao, estamos utilizando o ponto de


entrada MALTCLI:
_cTeste := M-
>A1_TESTE

_nTam :=
TamSX3("A1_TESTE")

_nTam1 :=
_nTam[1]

MSMM(SA1-
>A1_TESTE,_nTam1,,_cTeste,1,,,"SA1","A1_CODTST")

Caso seja exclusao, estamos utilizando o ponto de


entrada M030EXC:
_cAlias :=
Alias()

_nRegto :=
Recno()

dbSelectArea("SYP")

dbSeek(xFilial("SYP")+SA1-
>A1_CODTST)
If
found()

While SYP->YP_CHAVE==SA1-
>A1_CODTST

Reclock("SYP",.F.)

dbDelete

MsUnlock()

dbSkip()

Enddo

Endif

dbSelectArea(_cAlias)

__Return()

Módulo:
Programa:
Versões:
Data de Inclusão:
07/11/2000
Países:
Extenso(nValor[,lQuantid][,nMoeda][,cPrefixo]
[,cIdioma][,lCent][,lFrac])

Objetivo:

Retornar valores em
extenso.

Pontos da
mudanca:
- Retornar o extenso numerico (quantidade ou valor)
em português,
espanhol ou inglês, mesmo sem utilizar o repositorio
do idioma
correspondente.

- Retornar o extenso de valor em qualquer uma das


cinco moedas
presentes no
sistema.

- Permitir ou nao exibir os centavos (no caso de


cheques que ja
contenham o texto fixo "e centavos
acima")
- Permitir o formato americano para exibicao dos
centavos (notacao
fracionaria e sem a utilizacao da palavra
"cents")

Para a
mudanca:

- Nao usaremos as strings traduzidas no CH, pois as


mesmas limitam o
uso do idioma atraves da compilacao da diretiva IFDEF
SPANISH ou
ENGLISH. Ou seja, todo o texto ficara na propria
funcao visto que
poderemos querer um texto em inglês mesmo usando o
repositorio em
português.

- Passaremos a utilizar o parâmetro nMoeda (que ate


entao nao tinha
finalidade) para saber em qual moeda se deseja o
extenso.
- Para o texto (em singular) que representa a moeda
serao usados os ja
existentes MV_MOEDAx (onde x de 1 a 5) e deverao ser
criados mais cinco
parâmetros MV_MOEDAPx (onde x de 1 a 5) para os
respectivos plurais.
- Serao necessarios três novos parâmetros na
funcao:
1) cIdioma: define em que idioma sera retornado o
extenso. Sendo
possiveis: 0-RPO;1-português;2-espanhol;3-inglês. O
default 0 (zero),
para manter compatibilidade com o uso
anterior.
2) lCent: considera ou nao os centavos/decimais. O
default true, para
manter compatibilidade com o uso
anterior.
3) lFrac: informa se o formato dos centavos ser em
notacao fracionaria.
O default false, para manter compatibilidade com o
uso anterior.

Parametros:

1 - nValor = Valor numerico no qual a funcao


retornara o seu valor
numerico

2 - lQuantid = Valor logico que especifica se o


retorno da Extenso
sera para quantidade ou para valores. O default e
".f.".
3 - nMoeda = Identifica em que moeda se dara o
retorno.
4 - cPrefixo = Prefixo alternativo. Caso
especificado, prefixa o
retorno do extenso. Fazendo com que a unidade
monetaria nao seja
impressa.

----------------------------

Parametros
novos

----------------------------

5 - cIdioma = Especifica em qual idioma devera


ser retornado o valor
do extenso.
(1=Port.2=Espa.3=Ingl)

6 - lCent = Especifica se a funcao devera


retornar os centavos. O
default
e .t
.

7 - lFrac = Especifica se os centavos deverao ser


retornados em modo
fracionado(Somente funcionara com o idioma Ingles)

Exemplos:

Extenso(500.00)

= "QUINHENTOS
REAIS"

Extenso(500.00,.f.,2,,1)

= "QUINHENTOS
DOLARES"

Extenso(1999.78 ,.T.,2
)

= "ONE THOUNSAND NINE HUNDRED AND NINETY-


NINE"

Extenso(1999.78 ,.F.,1
)

= "ONE THOUNSAND NINE HUNDRED AND NINETY-NINE DOLLARS


AND SEVENTY-EIGHT
CENTS"

Extenso(1999.78 ,.F.,1,,,.f.
)
= "ONE THOUNSAND NINE HUNDRED AND NINETY-NINE
DOLLARS"

Extenso(1999.78 ,.F.,1,,"3",.t.,.t.
)
= "ONE THOUNSAND NINE HUNDRED AND NINETY-NINE AND
78/100 DOLLARS"

Extenso(1999.78 ,.F.,1,,"2",.t.,.f.
)
= "UM MIL, NOVECIENTOS NOVENTA Y NUEVE DOLARES Y
SETENTA Y OCHO
CENTAVOS"

Extenso(1999.78 ,.F.,1,,"1",.t.,.f.
)
= "UM MIL, NOVECENTOS E NOVENTA E NOVE DOLARES E
SETENTA E OITO
CENTAVOS"

Extenso(0.85,.f.,1,,"3",.t.,.t.)

= "85/100
DOLLARS"

Extenso(0.85,.f.,1,,"3",.t.,.f.)

= "EIGHTY-FIVE
CENTS"

Extenso(2001,.f.,1,,"2",.t.,.f.)

= "DOS MIL Y UM
DOLARES"

Extenso(500.05,.f.,1,,"3",.t.,.f.)

= "FIVE HUNDRED DOLLARS AND FIVE


CENTS"

Extenso(500.05,.f.,1,,"3",.t.,.t.)

= "FIVE HUNDRED AND 5/100


DOLLARS"

Extenso(500.05,.f.,2,,"1",.t.,.t.)

= "QUINHENTOS REAIS E CINCO


CENTAVOS"

Módulo:
Programa:
Versões:
Data de Inclusão:
09/11/2000
Países:
Para cálculo do do dígito do CGC é feito a somatoria
dos produtos dos 12
primeiros dígitos pela sua respectiva posiçÆo mais a
somatoria dos
produtos dos 13 primeiros dígitos pela sua respectiva
posiçÆo.
Obs. A posiçÆo dos dígitos é contada da direita para
a esquerda;
Após a 9ø posiçÆo o deve-se considerar os próximos
dígitos como
iniciando a partir do
2ø.

Exemplo
:

Temos o CGC 12.345.678\9012-


3?

Calculamos a somatória com os 12 primeiros


dígitos :

2 (12ø
dígito)

a2*b2 +a1*b3 +a 0*b4 +a 9*b5 + a8*b6 + a7*b7 +a 6*b8


+ a5*b9 + a4*b2 +
a3*b3 + a2*b4 + a1*b5 =
272

a:=Número do CGC (Os primeiros


12)
b:=Número de ordem (Após o 9 reinicia em
2)

O primeiro valor será obtido de acordo com a seguinte


regra :
Se o resto da divisÆo entre o valor da soma por 11
for menor que 2 o
valor será
zero

Se o resto da divisÆo entre o valor da soma por 11


for maior ou igual a
2 o valor será obtido pela subtraçÆo do resto por
11
Obs. Se o resto for menor que dois o mesmo será
igualado a zero
272/11 = 24 Resto 8 (É maior ou igual a 2 portanto
o valor será 3
(11-8))

O mesmo deve ser feito para os 13


primeiros :

3 (13ø
dígito)

a3*b2 + a2*b3 + a1*b4 + a0*b5 + a9*b6 + a8*b7 + a7*b8


+ a6*b9 + a5*b2 +
a4*b3 + a3*b4 + a2*b5 + a1*b6 =
286

a:=Número do CGC (Os primeiros


12)
b:=Número de ordem (Após o 9 reinicia em
2)

286/11 = 26 Resto
0

O dígito de controle será a a junçÆo dos dois


números encontrados 3 e 0
portanto nosso CGC será 12.345.678\9012-
30

Módulo:
Programa:
Versões:
Data de Inclusão:
17/04/2001
Países:
Retorno de uma campo data com formatos diferentes
conforme
parametrizacao
desejada.

GravaData(ExpD1,ExpL1,ExpN1)

Parametros?
ExpD1 ?= Data a ser
convertida

ExpL1 ?= Tipo(Se .T. com Barra, se .F., sem


Barra
ExpN1 ?= Formato
(1,2,3)

Formato 1 ?=
ddmmaa

2 ?=
mmddaa

3 ?=
aaddmm

4 ?=
aammdd

5 ?=
ddmmaaaa

6 ?=
mmddaaaa

7 ?=
aaaaddmm

8 ?=
aaaammdd

Módulo:
Programa:
Versões:
Data de Inclusão:
18/04/2001
Países:
A Funcao FreeForUse tem o objetivo de reservar uma
palavra , ou seja
quando uma estacao reserva uma palavra, a outra nao
conseguirah usar.
Esta funcao ja esta preparada para utilizacao da
MayIUseCode diretamente
no SX3 ( validacao do
campo )
.

Sintaxe :
FreeForUse(cAlias,cChave)

cAlias - Alias do
arquivo

cChave - Palavra que sera


resevada.

Exemplo de utilizacao no cadastro de


produtos :

X3_CAMPO =
B1_COD

X3_VLDUSER = FreeForUse("SB1",M-
>B1_COD)

Obs .: A liberacao do codigo ocorre apos a gravacao


no cancelamento e no
retorno ao
menu.

Módulo:
Programa:
Versões:
Data de Inclusão:
18/04/2001
Países:
A Funcao MayIUseCode tem o objetivo de reservar uma
palavra , ou seja
quando uma estacao reserva uma palavra, a outra nao
conseguirah usar.

Podem ser reservadas ateh 20 palavras simultaneamente


e estas palavras
sao liberadas automaticamente nos seguintes
pontos :

- Volta para o
Menu

- VOlta para a mbrwose ou


MarkBrowse
- no End
Transaction

Especialmente em funcoes com transacao esta eh muito


util, visto que
enquanto em uma transacao eh impossivel checar por
outra conexao se o
registro jah estah incluido enquanto a outra estacao
nao der o
EndTransaction.

Exemplos de possiveis
usos
:
Nao deixar gravar 2 pedidos de venda com o mesmo
numero
Nao deixar gravar 2 produtos com o mesmo codigo,
melhor lugar a colocar
eh na validacao do produto. ( ATENCAO!! Verificar a
funcao FreeForUse()
para utilizacao da MayIUseCode na validacao do
SX3 ).

Para se liberar os registros em outro ponto que nao


seja os automaticos,
utilizar a funcao freeusedCode(), que liberarah todos
os codigos
reservados.

Para se desabilitar a funcao utilizar MV_USELOCK com


retorno False

Módulo:
Programa: ATUSX
Versões:
Data de Inclusão:
14/01/2000
Países:
SX1 - Dicionário de
Perguntas

Contém a configuraçao das perguntas apresentadas


pelos programa do
sistema. Seu conteúdo
é:

1. X1_GRUPO Especifica o agrupamento das


perguntas. O padrao para o
preenchimento desta coluna é o nome do programa para
o qual as perguntas
estao sendo definidas, sem a terceira letra. Exemplo:
programa GPEM430 =
grupo
GPM430.

2. X1_ORDEM Ordem de apresentaçao da


pergunta.
3. X1_PERPOR Descriçao da pergunta em
português.
4. X1_PERSPA Descriçao da pergunta em
espanhol.
5. X1_PERENG Descriçao da pergunta em
inglês.
6. X1_VARIAVL Variável na qual será armazenada a
resposta dada pelo
usuário.

7. X1_TIPO Tipo da variável, sendo: C para


caracter, D para data e
N para número. Quando a coluna X1_GSC estiver
posicionada em C esta
informaçao deve ser
N.

8. X1_TAMANHO Tamanho da variável, no caso dos


números deve considerar
o tamanho total, incluindo o ponto e as casas
decimais.
9. X1_DECIMAL Somente para variáveis do tipo
número. Representa a
quantidade de
decimais.

10. X1_PRESEL Item que deverá aparecer pré


selecionado. Somente válido
quando X1_GSC =
C.

11. X1_GSC Determina a forma que a pergunta será


apresentada ao
usuário, sendo G para caixa de ediçao (edit ) e C
para caixa de
combinaçao ( combo
box )
.

12. X1_VALID Nome de uma funçao que contenha a


regra de validaçao
para a resposta dada pelo usuário. A funçao nao pode
conter parâmetros.
13. X1_VAR01...05:
(...)

14. X1_DEFPOR1...5 Resposta padrao em


português.
15. X1_DEFSPA1...5 Resposta padrao em
espanhol.
16. X1_DEFENG1...5 Resposta padrao em
inglês.
17. X1_CNT01...05 Conteúdo da último resposta dada
pelo usuário
18. X1_F3 Prefixo da tabela a ser
consultada caso o usuário
tecle nesta pergunta. Também poderá ser indicado o
código de uma
tabela ( lista ) definiçao em SX5. Esta
funcionalidade somente poderá
ser utilizada quando X1_GSC =
G.

Módulo:
Programa: ATUSX
Versões:
Data de Inclusão:
14/01/2000
Países:
SX2 - Dicionário de
Arquivos

Armazena a definiçao das tabelas do sistema. Seu


conteúdo é:

1. X2_CHAVE Prefixo da
tabela.
2. X2_PATH Caminho da localizaçao da
tabela.
3. X2_ARQUIVO Nome como o qual o arquivo é
encontrado no caminho
especificado.
4. X2_NOMEPOR Descriçao sumária da tabela, em
português.
5. X2_NOMESPA Descriçao sumária da tabela, em
espanhol.
6. X2_NOMEENG Descriçao sumária da tabela, em
espanhol.
7. X2_DELET Controle interno do sistema, quando
as linhas
excluídas. Este campo näo está mais sendo
utilizado.
8. X2_MODO Modo de compartilhamento entre
filiais, sendo: C =
compartilhado e E =
exclusivo.

9. X2_TTS Esta coluna nao é mais


utilizada.
10. X2_ROTINA Rotina a ser executada após a
abertura da tabela.

Módulo:
Programa: ATUSX
Versões:
Data de Inclusão:
14/01/2000
Países:
SX3 - Dicionário de
Campos

Armazena a definiçao dos campos das tabelas do


sistema. Seu conteúdo
é:

1. X3_ARQUIVO Prefixo da
tabela.
2. X3_ORDEM Ordem de apresentaçao da
coluna.
3. X3_CAMPO Nome da coluna na
tabela.
4. X3_TIPO Tipo de dado armazenado pela coluna,
sendo: C para
caracter, D para data, N para número e M para
memorando. Observaçao : No
caso de campos do Tipo M (Memorando), o contexto do
campo (X3_CONTEXT)
deve ser V
(Virtual)
5. X3_TAMANHO Tamanho do campo. No caso dos números
deve considerar o
tamanho total, incluindo o ponto e as casas
decimais.
6. X3_DEC Quantidade de casas decimais do
campo.Somente para
variáveis do tipo
número.

7. X3_TITPOR Título da coluna em português. É


apresentado em todas
telas e relatórios do
sistema.

8. X3_TITSPA Título da coluna em espanhol. É


apresentado em todas
telas e relatórios do
sistema.

9. X3_TITENG Título da coluna em inglês. É


apresentado em todas telas
e relatórios do
sistema.

10. X3_DESCPOR Descriçao sumária da coluna em


português.
11. X3_DESCSPA Descriçao sumária da coluna em
espanhol.
12. X3_DESCENG Descriçao sumária da coluna em
inglês.
13. X3_PICTURE Máscara de digitaçao da coluna. Deve
respeitar a sintaxe
xBase.

14. X3_VALID Regra de validaçao da coluna. Deve


respeitar a sintaxe
xBase.

15. X3_USADO Características de uso da coluna para


o idioma
português.

16. X3_RESERV Característica reservada do Campo.


Ver Obrigat()
17. X3_RELAPOR Inicializador padrao da coluna para o
idioma português.
É utilizado nas inclusoes, quando o conteúdo da
coluna já vem preenchido
com o dado aqui
informado.
18. X3_RELASPA Inicializador padrao da coluna para o
idioma espanhol. É
utilizado nas inclusoes, quando o conteúdo da coluna
já vem preenchido
com o dado aqui
informado.

19. X3_RELAENG Inicializador padrao da coluna para o


idioma inglês. É
utilizado nas inclusoes, quando o conteúdo da coluna
já vem preenchido
com o dado aqui
informado.

20. X3_F3 Determina o prefixo da tabela que


será consultada caso o
usuário teclar estando posicionado neste campo.
Também poderá ser
indicado o código de uma lista cadastrada na tabela
de listas do sistema
(SX5).

21. X3_NIVEL Nível de acesso do


campo.
22. X3_CHECK Preenchido automaticamente na
configuraçao do uso da
coluna.

23. X3_TRIGGER "S" indica se existe gatilho


configurado para a coluna.
24. X3_PROPRI "U" indica se o campo pertence ao
usuário em, sendo
assim, nao pode ser manipulado pelas rotinas de
atualizaçao de versao.
25. X3_BROWSE Indica se o campo será apresentado
nos browses do
sistema.

26. X3_VISUAL Indica se a coluna destina-se somente


a visualizaçao, ou
seja, nao pode ser
editada.

27. X3_CONTEXT Indica se a coluna é virtual, sou


seja, nao existe
realmente na base de dados, somente é apresentada nas
telas do sistema.
28. X3_OBRIG Indica se o campo é de preenchimento
obrigatório.
29. X3_VLDUSER Regra de validaçao do
usuário.
30. X3_CBOXPOR Caso a coluna em questao deva ser
preenchida a partir de
uma caixa de combinaçao (Combo Box), os elementos
desse controle devem
ser inseridos neste campo. Para o idioma
português.
31. X3_CBOXSPA Caso a coluna em questao deva ser
preenchida a partir de
uma caixa de combinaçao (Combo Box), os elementos
desse controle devem
ser inseridos neste campo. Para o idioma
espanhol.
32. X3_CBOXENG Caso a coluna em questao deva ser
preenchida a partir de
uma caixa de combinaçao (Combo Box), os elementos
desse controle devem
ser inseridos neste campo. Para o idioma
inglês.
33. X3_PVARPOR Trata-se de uma máscara variável a
ser aplicada nas
entradas de dados do sistema. Para o idioma
português.
34. X3_PVARSPA Trata-se de uma máscara variável a
ser aplicada nas
entradas de dados do sistema. Para o idioma
espanhol.
35. X3_PVARENG Trata-se de uma máscara variável a
ser aplicada nas
entradas de dados do sistema. Para o idioma
inglês.
36. X3_WHEN Condiçao para determinar se a coluna deve
ou nao ser
apresentada.

37. X3_INIBRW Contém a regra de busca de uma coluna


virtual cujo
conteúdo deva ser preenchido a partir de outra
tabela.
38. X3_PAISES Indica quais países sao suportados
pelas configuraçoes
existentes neste registro do
SX3.

Módulo:
Programa: ATUSX
Versões:
Data de Inclusão:
14/01/2000
Países:
SX5 - Dicionário de
Tabelas

Armazena a definiçao das tabelas utilizadas pelo


sistema, tais como
unidades da federaçao, estado civil, tipos de
materiais, séries de notas
fiscais. Etc.. Seu conteúdo
é:

1. X5_FILIAL Código da filial para a qual a tabela


foi criada.
Somente é utilizado para tabelas do usuário, pois as
tabelas do sistema
destinam-se a todas filiais existentes e
consequentemente este campo
deve ser deixado em
branco.

2. X5_TABELA Código identificador da tabela.


Quando este campo está
com "00" indica que trata-se da definiçao de uma
tabela.
3. X5_CHAVE Quando o conteúdo do campo X5_TABELA for
igual a "00", este
campo conterá o código de identificaçao da tabela.
Quando o campo
X5_TABELA for diferente de "00", este campo conterá o
identificador de
um item da
tabela.

4. X5_DESCPOR Quando o conteúdo do campo X5_TABELA


for igual a "00",
este campo conterá a descriçao da tabela. Quando o
campo X5_TABELA for
diferente de "00", este campo conterá a descriçao de
um item da tabela.
Para o idioma
português.

5. X5_DESCSPA Quando o conteúdo do campo X5_TABELA


for igual a "00",
este campo conterá a descriçao da tabela. Quando o
campo X5_TABELA for
diferente de "00", este campo conterá a descriçao de
um item da tabela.
Para o idioma
espanhol.
6. X5_DESCENG Quando o conteúdo do campo X5_TABELA
for igual a "00",
este campo conterá a descriçao da tabela. Quando o
campo X5_TABELA for
diferente de "00", este campo conterá a descriçao de
um item da tabela.
Para o idioma
inglês.

7. X5_PAISES Indica para quais países este


registro irá constar na
base.

Módulo:
Programa: ATUSX
Versões:
Data de Inclusão:
14/01/2000
Países:
SX6 - Dicionário de
Parâmetros

Armazena os parâmetros de configuraçao do sistema.


Seu conteúdo é:

1. X6_FIL Código da filial para a qual o


parâmetro foi criado.
Este campo somente terá conteúdo para os parâmetros
já configurados pelo
usuário. Os parâmetros base possuem este campo sem
preenchimento.
2. X6_VAR Identificador do
parâmetro.
3. X6_TIPO Tipo de dados esperado no
preenchimento do parâmetro.
Podendo ser C para caracter, D para data, L para
lógico e N para número.
4. X6_DSCPOR Descriçao do parâmetro em
português.
5. X6_DSCSPA Descriçao do parâmetro em
espanhol.
6. X6_DSCENG Descriçao do parâmetro em
inglês.
7. X6_DSCPOR1 Continuaçao da descriçao do parâmetro
em português.
8. X6_DSCSPA1 Continuaçao da descriçao do parâmetro
em espanhol.
9. X6_DSCENG1 Continuaçao da descriçao do parâmetro
em inglês.
10. X6_DSCPOR2 Continuaçao da descriçao do parâmetro
em português.
11. X6_DSCSPA2 Continuaçao da descriçao do parâmetro
em espanhol.
12. X6_DSCENG2 Continuaçao da descriçao do parâmetro
em inglês.
13. X6_CONTPOR Conteúdo do parâmetro, para o idioma
português.
14. X6_CONTSPA Conteúdo do parâmetro, para o idioma
espanhol.
15. X6_CONTENG Conteúdo do parâmetro, para o idioma
inglês.
16. X6_SIGACOM Indica de o campo é utilizado no
módulo de compras.
17. X6_SIGAFAT Idica de o campo é utilizado no
módulo de faturamento.
18. X6_SIGAFIN Indica de o campo é utilizado no
módulo financeiro.
19. X6_SIGACON Indica de o campo é utilizado no
módulo de
contabilidade.

20. X6_SIGAGPE Indica de o campo é utilizado no


módulo de gestao de
pessoal.

21. X6_SIGAEST Indica de o campo é utilizado no


módulo de estoque.
22. X6_SIGAPCP Indica de o campo é utilizado no
módulo de controle de
produçao.

23. X6_SIGAFIS Indica de o campo é utilizado no


módulo fiscal.
24. X6_SIGAATF Indica de o campo é utilizado no
módulo de ativo fixo.
25. X6_SIGAPON Indica de o campo é utilizado no
módulo de ponto.
26. X6_SIGAFAS Indica de o campo é utilizado no
módulo de faturamento
de
serviço.

27. X6_SIGAMAN Indica de o campo é utilizado no


módulo de manutençao
industrial.

28. X6_SIGARPM Indica de o campo é utilizado no


gerador de relatórios
(só
DOS).

29. X6_SIGALOJ Indica de o campo é utilizado no


módulo de lojas.
30. X6_SIGAVEI Indica de o campo é utilizado no
módulo de veículos.
31. X6_SIGACOM Indica de o campo é utilizado no
módulo específico.
32. X6_SIGAOFI Indica de o campo é utilizado no
módulo de oficina.
33. X6_SIGAREV Indica de o campo é utilizado no
módulo de revendas.
34. X6_SIGAEIC Indica de o campo é utilizado no
módulo de controle de
importaçao.

35. X6_SIGATEC Indica de o campo é utilizado no


módulo de assistência
técnica.

Módulo:
Programa: ATUSX
Versões:
Data de Inclusão:
14/01/2000
Países:
SX7 - Dicionário de
Gatilhos

Armazena os gatilhos disparados nas atualizaçoes


de campos, através
das rotinas padroes do sistema. Seu conteúdo
é:

1. X7_CAMPO Nome do campo que ao ser atualizado


fará com que os
procedimentos do gatilho sejam
disparados.
2. X7_SEQUENC Seqüência dos procedimentos a serem
executados.
3. X7_REGRA Procedimento a ser executado. Deve
respeitar a sintaxe
xBase..

4. X7_CDOMIN Campo que será


atualizado.
5. X7_TIPO P indica que a coluna está na própria
tabela e E indica
que a coluna está em outra
tabela.
6. X7_SEEK Indica se o sistema deve posicionar-
se na tabela antes
da execuçao do
gatilho.

7. X7_ALIAS Prefixo da tabela a ser


consultada.
8. X7_ORDEM Indice a ser utilizado no
posicionamento.
9. X7_CHAVE Chave de
pesquisa.
10. X7_PROPRI U indica que o gatilho pertence ao
usuário e nao pode
ser alterado pela rotina de atualizaçao de
versao.
11. X7_CONDIC Condiçao para que o gatilho seja
executado.

Módulo:
Programa: ATUSX
Versões:
Data de Inclusão:
14/01/2000
Países:
SXB - Dicionário de
Pesquisas

Armazena a configuraçao da consulta disparada a


partir da tecla F3,
nos cadastros e movimentaçoes do sistema. Seu
conteúdo é:

1. XB_ALIAS Prefixo da tabela que será


consultada.
2. XB_TIPO Tipo da linha, sendo 1 = Título da
consulta, 2 = Ordens
possíveis, 3 = Possibilita o cadastra novo, 4 =
Campos a serem listados
para cada uma das ordens, 5 = Campo retornado pela
consulta, 6 =
Estabelece um filtro para a consulta, 7 = Parâmetros
o para execuçao de
um programa externo
(ExecBlock).

3. XB_SEQ Seqüencial cada um dos


XB_TIPO.
4. XB_COLUNA Coluna na qual o dado será
apresentado.
5. XB_DESCPOR Descriçao da coluna em
português.
6. XB_DESCSPA Descriçao da coluna em
espanhol.
7. XB_DESCENG Descriçao da coluna em
inglês.
8. XB_CONTEM Conteúdo da coluna, obedecendo o
seguinte critério:
XB_TIPO = 1: Prefixo da tabela, XB_TIPO = 2: Vazio,
XB_TIPO = 3: Zero um
( 01 ), XB_TIPO = 4: Campos do índice, XB_TIPO = 5:
Prefixo da tabela
mais "->" mais nome do
campo.

Módulo:
Programa: SERIAL
Versões:
Data de Inclusão:
29/11/2000
Países:
Porta
Serial

============

Utilize o seguinte conjunto de funcoes (4.06, 4.07,


5.07, 5.08):
(apos cada linha segue
comentario)

cTexto :=
SPACE(50)

/* A quantidade de espacos variada de acordo com o


buffer de dados
recebido do
periférico

*/
nHandle :=
LoadLibrary("SERIAL.DLL")

/* No Protheus (versoes 5.0x) nao e necessario


existir o arquivo
SERIAL.DLL, mas esse parametro foi mantido por
questoes de
compatibilidade com as versoes
4.0x
*/

MsOpenPort(nHandle,"COM1:9600,n,8,1")

/* Abre a porta serial. Os parametros passados entre


aspas sao (na ordem
da direita para a
esquerda):

- Porta
Serial

- Velocida de transmissao em
bps
- Paridade
s/n

- Quantidade de bits de
dados

- Bits de
parada

Essas informacoes dependem da configuracao do


periferico, o padrao esta
demonstrado no exempo
acima.

*/

MsWrite(nHandle,"Comandos a serem
enviados")
/* Envia informacoes para a
porta
*/

MSRead(nHandle,cTexto)
/* Le informacoes da porta e coloca na variavel
informada no segundo
parametro (cTexto no
exemplo)

*/

MsClosePort(nHandle)

/* Fecha a porta
serial

*/

FreeLibrary(nHandle)

/* Libera o handle (controle) da porta


serial
*/

Módulo:
Programa: SIGAAUT
Versões:
Data de Inclusão:
11/10/2000
Países:
1)
Objetivo
:

Fazer manutençao automática (inclusao, alteraçao


e exclusao)
automatizando o processo de entrada de dados sem a
necessidade de
desenvolver rotinas
especificas.

2)
Aplicacao:

Esta tecnica esta aplicada em todas as versoes


Protheus, porem esta
documentacao se baseou na versao
6.09.
3)
Vantagens:

1) Interface : A entrada de dados e enviada a


rotina em forma de
campos e conteudos (array) e desta forma nao sendo
necessario a
apresentacao de nenhuma inteface ao
usuario.

2) Segurança : Em relacao a este aspecto e


fundamental sua
utilizacao desta forma, pois esta se usando a rotina
padrao no sistema,
onde se a rotina sofrer manutencao a atualizacao sera
automatica para o
usuario
final.

3) Agilidade no processo : Aumenta


consideravemente a agilidade,
pois neste processo se bem construido elimina-se a
entrada de dados via
teclado
(digitacao).

4)
Procedimento:

Existe duas maneiras de esta utilizando a rotina


automatica.
1§ Por um
job

2§ Direto do
sistema

Aprincipalo diferenca entre elas e que quando


usamos por um Job ,
devemos utilizar diretamente os nomes da
funcoes

1§)Procedimento utilizando em
JOB

----------------------------------
Para a utilizacao da rotina automatica em JOB nao
utilizar a funçao
MSExecAuto mas sim direto o nome da
funcao.

Exemplo:

Mata010(aProduto,nOpc) // utilizando em
JOB

Ja para rotinas que nao sao em Job , devemos usas


a MSExecAuto, pois
a mesma tem a funca de quardar o ambiente , executar
a funcao
automatica e retornar de onde
parou

2§)Procedimentos utilizando
MSExecAuto

-------------------------------------

Exemplo:

MSExecAuto({|x,y| mata010(x,y)},aProduto,3) //
utilizando em
aplicacao
normal.

Modelos de Rotinas
Automáticas:

-------------------------------

Existem 2 modelos de rotinas


automaticas:

1§Modelo

--------

Rotinas que utilizam somente a Enchoice (Baseada


no dicionario de
dados para uma
tabela).
CONA060(aRotAuto)-- Cadastro de Centro de Custo
Custo
FINA040(aRotAuto,nOpc)--Cadastro Titulo a
Receber
FINA050(aRotAuto,nOpcion,nOpc)*--Cadastro Titulo A
pagar
MATA010(aRotAuto,nOpc)--Cadstro de
produtos
MATA020(aRotAuto,nOpc)--Cadatro de
Fornecedor
MATA030(aRotAuto,nOpc)--Cadstro de
Clientes
MATA040(aRotAuto,nOpc)--Cadastro de
Vendedor
MATA050(aRotAuto,nOpc)--Cadastro de
Trasportadora
MATA060(aRotAuto,nOpc)--Atualizacao da Amarracao
Produto Fornecedor
MATA080(aRotAuto,nOpc)--Cadastro de Tipo entrada e
saida
MATA180(aRotAuto,nOpc)--Atualizacao dos dados
complementares do produto
MATA240(aRotAuto,nOpc)--Movimentacoes Internas
(Requisicoes/Devolucoes)
MATA250(aRotAuto)--Programa para digitacao das
producoes.
MATA270(aRotAuto)--Programa de digitacao do
inventario
MATA650(aRotAuto,nOpc)--Cadastramento de Ordens de
Producao
MATA680(aRotAuto)--Programa de atualizacao do
movimento de producao
MATA681(aRotAuto)-Apontamento de Producao baseado no
Roteiro de de
de
OperaØoes

MATA682(aRotAuto)--Apontamento de Horas
Improdutivas
QADA020(aRotAuto,nOpc)--Cadastro de Check
List
QIEA030(aRotAuto)--Programa de atualizacao de
Unidades de Medida

Obs.: As funçoes que nao tem o parâmetro 'nOpc' estao


disponíveis
somente a rotina de
inclusao.

*nOpcion= utilizado para localizaçao, para os


processos automáticos
passar
NIL.

Parametros:

-----------

NOpc - numerico com tipo da operaçao 3-inclusao, 4-


alteraçao e 5
exclusao

ARotAuto - array contendo os campos e conteúdos, no


mínimo passar os
campos
obrigatorios.

NIL - parametro
reservado

Exemplo:

User Function
IncProd()

Local aRotAuto :=
{}

Local nOpc := 3 //
inclusao

Private lMsHelpAuto := .t. // se .t. direciona as


mensagens de help
para o arq. de
log
Private lMsErroAuto := .f. //necessario a criacao,
pois sera
//atualizado quando
houver
//alguma incosistencia nos
parametros
Begin
Transaction

aRotAuto:= {{"B1_COD" ,"1010" ,Nil


},;
{"B1_DESC" ,"Produto
teste",Nil},;
{"B1_TIPO" ,"PA" ,Nil},
;
{"B1_UM" ,"UN" ,Nil},
;
{"B1_LOCPAD" ,"01" ,Nil},
;
{"B1_PICM" ,0 ,Nil},
;
{"B1_IPI" ,0 ,Nil},
;
{"B1_PRV1" ,100 ,Nil},
;
{"B1_LOCALIZ" ,"N" ,Nil},
;
{"B1_CODBAR" ,'789888800001' ,Nil}
}

MSExecAuto({|x,y|
mata010(x,y)},aProduto,nOpc)

If
lMsErroAuto

DisarmTransaction()

break

EndIf

End
Transaction

If
lMsErroAuto

/
*

Se estiver em uma aplicao normal e ocorrer


alguma incosistencia nos
parametros passados,mostrar na tela o log
informando qual coluna
teve a
incosistencia.

*/

Mostraerro()
Return .f
.

EndIf

Return .t
.

2§MODELO

--------

Rotinas que utilizam enchoice e


getdados.
Rotinas
disponiveis:

CONA050(lLanc,xAutoCab,xAutoItens)*- Lancamentos
Contabeis
MATA100(xAutoCab,xAutoItens,nOpc103)-Entrada de Notas
Fiscais de Compra
MATA102(xAutoCab,xAutoItens,nOpc)-Remito de Entrada
de Materiais
(Compras)

MATA103(xAutoCab,xAutoItens,nOpc,lWhenGet)**- Notas
Fiscais de Entrada
MATA110(xAutoCab,xAutoItens, nOpc)-Solicitacao de
Compra
MATA120(nFuncao,xAutoCab,xAutoItens,nOpcAuto)***-
Pedidos de Compra
MATA140(xAutoCab,xAutoItens,nOpc)-Digitacao das Notas
Fiscais de Entrada
sem os dados
Fiscais

MATA150(xAutoCab,xAutoItens,nOpc)-Rotina de
atualizacao manual das
cotacoes de
compra

MATA241(xAutoCab,xAutoItens)-Programa de
Movimentacoes Internas
(Requisicoes/Devolucoes)

MATA265(xAutoCab,xAutoItens,nOpc)-Distribuicao de
Produtos.
MATA410(xAutoCab,xAutoItens,nOpc)-Programa de
atualizacao de Pedidos de
Venda

MATA415(xAutoCab,xAutoItens,nOpc)-Rotina de
atualizacao dos Orcamentos
de
venda

MATA920(xAutoCab,xAutoItens,nOpc)-SAIDA de Notas
Fiscais de Venda Manual
TMKA061(xAutoCab,xAutoItens,nOpc)-Gerador de
Listas
CFGX016(xAutoCab,xAutoItens)-Manutencao do arquivo de
tabelas do sistema
FINA070(xAutoCab,nOpc)-Programa de Baixa de Titulos a
Receber
FINA080(xAutoCab,nOpc)-Programa de Baixa de Titulos a
Pagar
MATA266(aAutoItens)-Programa de Transferencia de
Material para Expedicao

Obs.: As funcoes que nao tem o parametro 'nOpc' estao


disponiveis
somente a rotina de
inclusao.

* lLanc -Utilizado para ..., nos processos


automaticos passar
falso(.f.).

** lWhenGet - Nas rotinas automaticas passar


NIL
***nOpcAuto-Passar o tipo que usa o modulo mata120 (1
pra pedido de
compra, 2 Atualizacao de
Entrega)

Parametros:

nOpc - numerico com tipo da operacao 3-inclusao, 4-


alteracao e 5
exclusao

xAutoCab - array contendo os campos e conteudos do


cabecalho, no minimo
passar os campos
obrigatorios.

xAutoItens - array contendo outro array com os campos


e conteudo
referente aos
itens.

NIL - parametro
reservado

Exemplo:

User Function
IncPed()

Local aCabPV :=
{}

Local aItemPV1:=
{}

Local aItemPV2:=
{}

Local nOpc := 3 //
inclusao

Private
lMsHelpAuto := .t
.
Private
lMsErroAuto := .f
.
Begin
Transaction

//Cabecalho

aCabPV:={{"C5_NUM" ,"000108" ,Nil},; //


Numero do pedido
{"C5_CLIENTE","000001" ,Nil},; //
Codigo do cliente
{"C5_LOJAENT","00" ,Nil},; // Loja
para entrada
{"C5_LOJACLI","00" ,Nil},; // Loja
do cliente
{"C5_EMISSAO",dDatabase ,Nil},; // Data
de emissao
{"C5_TIPO" ,"N" ,Nil},; // Tipo
de pedido
{"C5_CONDPAG","001" ,Nil},; //
Codigo da condicao de
pagamanto*

{"C5_LIBEROK","S" ,Nil}} //
Liberacao Total

//Items

aItemPV1:={ {"C6_NUM" ,"000108" ,Nil},; //


Numero do Pedido
{"C6_ITEM","01" ,Nil},; // Numero do
Item no Pedido
{"C6_PRODUTO","1010" ,Nil},; // Codigo do
Produto
{"C6_QTDVEN",1 ,Nil},; //
Quantidade Vendida
{"C6_PRCVEN",100 ,Nil},; // Preco
Unitario
Liquido

{"C6_VALOR",100 ,Nil},; // Valor


Total do Item
{"C6_ENTREG",dDataBase ,Nil},; // Data
da Entrega
{"C6_UM","UN" ,Nil},; // Unidade de
Medida Primar.
{"C6_TES","510" ,Nil},; // Tipo de
Entrada/Saida do Item
{"C6_LOCAL","01" ,Nil},; //
Almoxarifado
{"C6_DESCONT",1 ,Nil},; // Percentual
de
Desconto

{"C6_COMIS1",0 ,Nil},; // Comissao


Vendedor
{"C6_CLI","000001" ,Nil},; //
Cliente
{"C6_LOJA","00" ,Nil},; // Loja do
Cliente
{"C6_QTDEMP",1 ,Nil},; // Quantidade
Empenhada
{"C6_QTDLIB",1 ,Nil}} // Quantidade
Liberada Items
aItemPV2:={ {"C6_NUM" ,"000108" ,Nil},; //
Numero do Pedido
{"C6_ITEM","01" ,Nil},; // Numero
do Item noPedido
{"C6_PRODUTO","1010" ,Nil},; // Codigo do
Produto
{"C6_QTDVEN",1 ,Nil},; //
Quantidade Vendida
{"C6_PRCVEN",100 ,Nil},; // Preco
Unitario Liquido
{"C6_VALOR",100 ,Nil},; // Valor
Total do Item
{"C6_ENTREG",dDataBase ,Nil},; // Data
da Entrega
{"C6_UM","UN" ,Nil},; //
Unidade de Medida Primar.
{"C6_TES","510" ,Nil},; // Tipo de
Entrada/Saida do Item
{"C6_LOCAL","01" ,Nil},; //
Almoxarifado
{"C6_DESCONT",1 ,Nil},; //
Percentual de Desconto
{"C6_COMIS1",0 ,Nil},; // Comissao
Vendedor
{"C6_CLI","000001" ,Nil},; //
Cliente
{"C6_LOJA" ,"00" ,Nil},; // Loja do
Cliente
{"C6_QTDEMP" ,1 ,Nil},; //
Quantidade Empenhada
{"C6_QTDLIB" ,1 ,Nil}} //
Quantidade Liberada

MSExecAuto({|x,y,z|Mata410(x,y,z)},aCabPv,
{aItemPV1,aItemPV2},nOpc)
If
lMsErroAuto

DisarmTransaction()

break

EndIf

End
Transaction

If
lMsErroAuto

/
*

Se estiver em uma aplicao normal e ocorrer


alguma incosistencia nos
parametros
passados,

mostrar na tela o log informando qual coluna teve


a incosistencia.

*/

Mostraerro()

Return .f
.

EndIf

Return .t
.

Módulo:
Programa: SIGACFG
Versões: 609
Data de Inclusão:
07/02/2002
Países: *
No SIGACFG na opcao "Reposit. Imagens" (CFGX012)
possivel
incluir/alterar/excluir imagens nos formatos acima
que sao armazenados
nos arquivos SIGAADV.BMD SIGAADV.BMI
SIGAADV.BMR
Apos cadastrar as imagens na rotina acima, possivel
obter as imagens
atraves do exemplo
abaixo

//

//
Exemplo

//

#include
"protheus.ch"
USER FUNCTION
TesteImg()

Local oDlg, cImage:= "MyImage.jpg" // <=== j


cadastrada no
configurador!!!!

Local
oBmp

DEFINE MSDIALOG oDlg FROM 0,0 TO 500,500 PIXEL TITLE


"Imagem" OF
oMainWnd

@ 000, 000 REPOSITORY oBmp SIZE 200, 200 OF oDlg


PIXEL NOBORDER
oBmp:lAutoSize := .T
.

oBmp:LoadBmp(cImage)

ACTIVATE MSDIALOG oDlg


CENTERED

Return
Nil

Módulo: AP5
Programa:
Versões:
Data de Inclusão:
14/01/2000
Países:
Funçäo : AmIIn Data
: 09/06/99
Descriçäo : Verifica se a rotina selecionada esta
sendo chamada de
maquina com licenca de uso para o modulo de
origem.
Sintaxe :
AMIIn(nMD01,...nMD20)

nMDxx - Numero do Modulo a ser verificado


(anexo)
Retorno : Booleano. Retorna .T. se a funçäo está
sendo chamada de
algum dos módulos passados como
parâmetros

+----------------------------------------------------
--+
| Lista de Módulos do
Advanced
|
+----+---------
+---------------------------------------+

| N§ | Módulo |
Descriçäo
|
+----+---------
+---------------------------------------+

| 01 | SIGAATF | Ativo
Fixo
|
| 02 | SIGACOM |
Compras
|
| 03 | SIGACON |
Contabilidade
|
| 04 | SIGAEST |
Estoque/Custos
|
| 05 | SIGAFAT |
Faturamento
|
| 06 | SIGAFIN |
Financeiro
|
| 07 | SIGAGPE | Gestäo de
Pessoal |
| 08 | SIGAFAS | Faturamento de
Serviço |
| 09 | SIGAFIS | Livros
Fiscais
|
| 10 | SIGAPCP | Planejamento e Controle de
Produçäo |
| 11 | SIGAVEI |
Veiculos
|
| 12 | SIGALOJA| Controle de
Lojas |
| 13 | SIGATMK |
Telemarketing
|
| 14 | SIGAOFI |
Oficina
|
| 15 | SIGARPM | Gerador de
Relatorios |
| 16 | SIGAPON | Ponto
Eletronico
|
| 17 | SIGAEIC | Controle de
Importaçäo |
| 18 | SIGAGRH | Gestäo de Recursos
Humanos |
| 19 | SIGAMNT | ManutençÆo
Industrial |
| 20 | SIGARSP | Recrutamento e Seleçäo
Pessoal |
| 21 | SIGAQIE | InspeçÆo de
Entregas |
| 22 | SIGAQMT |
Metrologia
|
| 23 | SIGAFRT | Front
Loja
|
| 24 | SIGAQDO | Controle de
Documentos |
| 25 | SIGAQIP | InspeçÆo de
Processos |
| 26 | SIGATRM |
Treinamento
|
| 27 | SIGAEIF | ImportaçÆo -
Financeiro |
| 28 | SIGATEC | Assistência
Técnica |
| 29 | SIGAEEC | Easy Export
Control |
| 30 | SIGAEFF | Easy
Financing
|
| 31 | SIGAECO | Easy
Accounting
|
| 32 | SIGAAFV | Administtraçäo de Força de
Vendas |
| 33 | SIGAPLS | Controle de Planos de
Saúde |
| 34 | SIGACTB | Contabilidade
Gerencial |
+ .. | .......
| .....................................
|
| 44 | SIGAESP |
Específicos
|
| 45 | SIGAESP1| Específicos
II |
+----+---------
+---------------------------------------+

Módulo: AP5
Programa: AP5MAIL
Versões:
Data de Inclusão:
07/06/2000
Países:
!!! Eh necessário utilizar o arquivo de include
'Ap5Mail.ch'.

CONNECT SMTP SERVER


;
ACCOUNT
;
PASSWORD
;
[ IN SERVER ]
;
=> Servidor smtp que sera utilizado.
Ex.
"smtp.microsiga.com.br" ou
"200.213.222.12"
=> Conta que sera utilizada na
conexao.
Ex.
"AccountName"

=> Senha da conta utilizada na


conexao.
Ex.
"AccountPass"

=> Parametro opcional que so eh utilizado quando


eh
necessario enviar um email atraves de um servidor
remoto. Ver
conexao
RPC.

DISCONNECT SMTP SERVER


;
[ IN SERVER ]
;

=> Parametro opcional que so eh utilizado quando


eh
necessario enviar um email atraves de um servidor
remoto. Ver
conexao
RPC.

SEND MAIL FROM


;
TO
;
[ CC ]
;
[ BCC ]
;
SUBJECT
;
BODY
;
[ IN SERVER ]
;

=> Email de
origem.
=>
Destinatario.

=> Opcional.
Copia.
=> Opcional. Copia
oculta.
=>
Assunto.

=> Corpo da
mensagem.
=> Parametro opcional que so eh utilizado quando
eh
necessario enviar um email atraves de um
servidor
remoto. Ver conexao
RPC

OBS
:

1 - Nos parametros , e pode-se incluir mais de


uma
conta, desde que as contas sejam separadas por
virgula
Exemplo
:

CC "Conat1@.....", "Conta2@.......",
"Conta3@....." ;
BCC "Conat7@.....", "Conta8@.......",
"Conta3@......"

Exemplo
pratico
:

#include
'Ap5Mail.ch'

#include
'Protheu.ch'

Function
MandaEmail()

Local cServer :=
'smtp.microsiga.com.br'

Local cAccount :=
'MinhaConta'

Local cPassword :=
'Minhasenha'

Local aLista :=
{}

Local nI :=
1
Local cMensagem :=
''

Local
cTos

cMensagem := 'Colegas' +
CRLF
cMensagem += '' +
CRLF

cMensagem += ' Ja estao disponiveis as funcoes para


enviar email'
cMensagem += 'atraves Ap5.' +
CRLF
cMensagem += ' Favor atualizar o repositorio das
libs.'
cMensagem += '' +
CRLF

cMensagem += '' +
CRLF

cMensagem += 'Obrigado' +
CRLF
cMensagem += '' +
CRLF

cMensagem += '' +
CRLF

cMensagem +=
'Ramalho'

Aadd( aLista,
'Conta1@microsiga.com.br'
)
Aadd( aLista,
'Conta2@microsiga.com.br'
)
Aadd( aLista,
'Conta3@microsiga.com.br'
)
Aadd( aLista,
'Conta4@microsiga.com.br'
)
Aadd( aLista,
'Conta5@microsiga.com.br'
)
Aadd( aLista,
'Conta6@microsiga.com.br'
)

CONNECT SMTP SERVER cServer ACCOUNT cAccount PASSWORD


cPassword

SEND MAIL FROM 'MinhaConta@microsiga.com.br'


;
TO aLista[1],aLista[2],aLista[3],
;
aLista[4],aLista[5],aLista[6]
;
SUBJECT 'Nova funcao'
;
BODY
cMensagem

DISCONNECT SMTP
SERVER

Return

2 - Caso voce ache mais simples montar a string


ela podera ser feita
da seguinte
forma
:

Exemplo
:

CC
"Conat1@.....;Conta2@.......;Conta3@....."
;
BCC
"Conat7@....;Conta8@.......;Conta3@....."

Exemplo
pratico
:
#include
'Ap5Mail.ch'

#include
'Protheu.ch'

Function
MandaEmail()

Local cServer :=
'smtp.microsiga.com.br'

Local cAccount :=
'MinhaConta'

Local cPassword :=
'Minhasenha'

Local aLista :=
{}

Local nI :=
1

Local cMensagem :=
''

Local
cTos

cMensagem := 'Colegas' +
CRLF
cMensagem += '' +
CRLF

cMensagem += ' Ja estao disponiveis as funcoes para


enviar email'
cMensagem += 'no Ap5.' +
CRLF
cMensagem += ' Favor atualizar o repositorio das
libs.'
cMensagem += '' +
CRLF

cMensagem += '' +
CRLF

cMensagem += 'Obrigado' +
CRLF
cMensagem += '' +
CRLF

cMensagem += '' +
CRLF

cMensagem +=
'Ramalho'

Aadd( aLista,
'Conta1@microsiga.com.br'
)
Aadd( aLista,
'Conta2@microsiga.com.br'
)
Aadd( aLista,
'Conta3@microsiga.com.br'
)
Aadd( aLista,
'Conta4@microsiga.com.br'
)
Aadd( aLista,
'Conta5@microsiga.com.br'
)
Aadd( aLista,
'Conta6@microsiga.com.br'
)

CONNECT SMTP SERVER cServer ACCOUNT cAccount PASSWORD


cPassword

cTos :=
""

For nI:=1 To
Len( aLista
)
cTos += aLista[nI]
+";"

Next

SEND MAIL FROM 'MinhaConta@microsiga.com.br'


;
TO cTos
;
SUBJECT 'Nova funcao'
;
BODY
cMensagem

DISCONNECT SMTP
SERVER

Return

Módulo: AP5
Programa: AP5MAIL
Versões:
Data de Inclusão:
13/09/2000
Países:

Foram disponibilizados novos


recursos :

--------------------------- A T E N C A O
------------------------------

Eh necessario atualizar o arquivo


AP5MAIL.CH

-----------------------------------------------------
-------------------

- Verificar se ocorreu algum erro durante a conexao


ou envio do email.
Para verificar se ocorreu algum erro basta utilizar
a clausula RESULT
e se ocorreu um erro pode-se utilizar o comando GET
MAIL ERROR para
pegar o texto que descreve o
erro .

Ex
:

User Function
IXSENDMAIL()

Local lOk := .F
.
Local cErro :=
''

CONNECT SMTP SERVER 'smtp.microsiga.com.br' ACCOUNT


'myaccount' ;
PASSWORD 'mypassword' RESULT
lOK

If
( lOk
)

SEND MAIL FROM 'from@teste.com.br'


;
TO 'dest_to@teste.com.br'
;
CC 'dest_cc@teste.com.br'
;
BCC 'dest_bcc@teste.com.br'
;
SUBJECT 'FILE ATTACHMENT'
;
BODY 'TESTE'
;
ATTACHMENT "\ENVIAR\ARQUIVO.TXT", "\
ENVIAR\ARQ02.TXT"
RESULT
lOk

If ( !
lOk
)

GET MAIL ERROR


cErro
MsgAlert( cErro, 'Erro durante o
envio' )

EndIf

DISCONNECT SMTP SERVER RESULT


lOK

If ( !
lOk
)
GET MAIL ERROR
cErro
MsgAlert( cErro, 'Erro durante a
desconexao' )

EndIf

Else

GET MAIL ERROR


cErro

MsgAlert( cErro, 'Erro durante a


conexao' )

EndIf

- Anexar
arquivos

Para anexar arquivos basta utilizar a clausula


ATTACHMENT.
OBS : So poderao ser anexados arquivos que estejam
em diretorios
abaixo do
RootPath.

Ex
:

SEND MAIL FROM 'from@teste.com.br'


;
TO 'dest_to@teste.com.br'
;
CC 'dest_cc@teste.com.br'
;
BCC 'dest_bcc@teste.com.br'
;
SUBJECT 'FILE ATTACHMENT'
;
BODY 'TESTE'
;
ATTACHMENT "\ENVIAR\ARQUIVO.TXT", "\ENVIAR\
ARQ02.TXT" ;
RESULT
lOk

- Formato das
mensagens.

O formato default para envio de email é HTML, porem


pode-se utilizar a
clausula FORMAT TEXT para enviar email no formato
texto.

Ex
:

SEND MAIL FROM 'from@teste.com.br'


;
TO 'dest_to@teste.com.br'
;
CC 'dest_cc@teste.com.br'
;
BCC 'dest_bcc@teste.com.br'
;
SUBJECT 'TEST FORMAT'
;
BODY 'TESTE'
;
FORMAT TEXT
;
RESULT
lOk

Módulo: AP5
Programa: GENERIC
Versões:
Data de Inclusão:
23/03/2001
Países:

Para utilizar o logotipo da empresa nos cabecalhos


dos relatorios basta
criar o arquivo LGRL + Codigo da Empresa + Filial
+ .BMP
no diretorio dos dicionarios de dados
(Sigaadv).

Caso a filial nao seja indicada o logotipo sera


considerado para TODAS
as
filiais.

Ex.

LGRL0101.BMP (Logotipo da Empresa 01, Filial


01).
LGRL03.BMP (Logotipo da Empresa 03 para todas as
filiais).

Módulo: AP5
Programa: IMPRESS
Versões:
Data de Inclusão:
01/02/2000
Países:
Para capturar uma impressora que esta conectada na
rede para a LPTx:
* no prompt do DOS digitar comando "NET USE LPTx \\
[servidor]\[nome de
impressora na
rede]"

Obs: Se na maquina esta instalado o "Client For


Netware" o procedimento
acima nao funciona. Para conseguir o mesmo
efeito:
Ir para o "Ambiente de rede", localizar o servidor, e
quando este
estiver visivel, clicar com botao direito sobre a
impressora
compartilhada entao escolher a opcao "Capture" do
menu pop-up.
Aparecera-a um dialogo com a opcao da porta a ser
capturada.

Módulo: AP5IDE
Programa: DIVERS.
Versões:
Data de Inclusão:
12/01/2000
Países:
No AP5 IDE, existem alguns comandos que por näo se
encontram disponíveis
nos menus ou na barra de ferramentas, näo säo
conhecidos. Tais comandos
säo acionados através de teclas de atalho, seguindo o
padräo utilizado
por outros editores de
texto:

Ctrl+Shift+ (onde n representa uma tecla numérica de


0 a 9) - Marca a
linha com um BookMark para localizaçäo
rápida;
Ctrl+ (onde n representa uma tecla numérica de 0 a 9)
- Localiza o
BookMark (localiza a linha) previamente
marcado;
Tab (com um bloco de texto selecionado) - Tabula todo
o bloco de texto;
Shift+Tab (com um bloco de texto selecionado) -
Remove uma tabulaçäo de
todo o bloco de
texto;

Módulo: SIGAEST
Programa: DIVERS.
Versões:
Data de Inclusão:
16/03/2000
Países:
Para se realizar a explosÆo de uma estrutura
cadastrada no SG1 pode-se
utilizar as seguintes funçäes em
RDMakes:
**ESTRUT2(cProduto, nQuantidade, cAliasTRB,
cArquivoTRB)
*Parametros:

cProduto = Código do Produto a ser


pesquisado
nQuantidade = Quantidade a ser
explodida
cAliasTRB = Alias do Arquivo de Trabalho a ser
criado
(Default=ESTRUT)
cArquivoTRB = Nome do Arquivo de Trabalho a ser
criado (pode ser Nil)
*UtilizaçÆo:

Esta funçÆo irá criar um arquivo de trabalho (com


os campos NIVEL,
CODIGO, COMP, QUANT, TRT, GROPC e OPC) contendo os
componentes da
estrutura
.

O Retorno desta funçÆo é o Nome do Arquivo criado


(Ex.:pode-se fazer:
cNome:=ESTRUT2(B1_COD, 1), e a variavel cNome irá
trazer o nome do
arquivo
criado).

**ENDESTRUT2(cAliasTRB,
cArquivoTRB)

*Parametros:

cAliasTRB = Alias do arquivo


criado
cArquivoTRB = Nome do arquivo de trabalho
criado
*UtilizaçÆo

Esta funçÆo irá deletar o arquivo de trabalho


criado pela funçÆo
ESTRUT2, e DEVE ser utilizada antes da finalizaçÆo do
programa.

FUNCAO GETNEWPAR()
O objetivo da funçao GetNewPar() é ler um parâmetro
(identica a GetMv()),
porém tratando um possível default no caso de o mesmo nao
existir. É
muito utilizada quando da necessidade de se criar algum
parâmetro
específico para um usuário ou quando for criando algum
parâmetro no meio
de uma versao.
Exemplos:
dLei102 := GetNewPar("MV_DATCIAP",ctod("01/01/2001"))
If GetNewPar('MV_DIFSEMP','N')=='S'
lImpEmp := (Aviso('DIFSALDO','Imprime
Diferencas de Empenhos/Reservas? (Padrao=Nao)',
{'Nao','Sim'})==2)
EndIf

FUNCOES DISPONIVEIS PARA HP E LASER


Parametros Basicos:
nRow - Linha em centimetros
nCol - Coluna em centimetros
cCode - String com o codigo de barras
oPrint - Objeto Printer
nColor - Numero da cor - Default Preto
lHorz - Verdadeiro Horizontal, Falso Vertical -
Default
Vedadeiro
nWidth - Tamanho do codigo de barras - Default 10 Cmm
nHeigth - Altura do codigo de barras - Default 1,5 Cmm

c_Codabar
(nRow,nCol,cCode,oPrint,Color,lHorz,nWidth,nHeigth)
c_Code128
(nRow,nCol,cCode,oPrint,cMode,Color,lHorz,nWidth,nHeigth)
c_Code3_9
(nRow,nCol,cCode,oPrint,lCheck,Color,lHorz,nWidth,nHeigth)
c_Sup5
(nRow,nCol,cCode,oPrint,Color,lHorz,nWidth,nHeigth,lBanner,
cFont)
c_UPCA (nRow,nCol,cCode,oPrint,Color,lHorz,nWidth,nHeigth)
c_ean13 (nRow,nCol,cCode,oPrint,Color,lHorz,nWidth,nHeigth)
c_ean8 (nRow,nCol,cCode,oPrint,Color,lHorz,nWidth,nHeigth)
c_ind25
(nRow,nCol,cCode,oPrint,lCheck,Color,lHorz,nWidth,nHeigth)
c_int25
(nRow,nCol,cCode,oPrint,lCheck,Color,lHorz,nWidth,nHeigth)
c_mat25
(nRow,nCol,cCode,oPrint,lCheck,Color,lHorz,nWidth,nHeigth)

Obs. Para obter o objeto printer tem que usar a funçao


ReturnPrtObj()

Exemplo:

oPrt := ReturnPrtObj()
c_ean13(100,100,"7896934403870",oPrt)

FUNCOES UTILIZADAS EM QUERY'S

563
Em
um programa ADVPL podemos utilizar QUERY's que irao acessar
o Banco de
Dados diretamente, existem funçoes específicas para
podermos montar e
executar a Query, sao elas:
- TCQUERY() define a Query propriamente dita.
- TCSETFIELD () define o tipo das colunas a serem
consideradas na Query.
- CHANGEQUERY() transforma em sintaxe SQL Server definida
na expressao
convertida de acordo com o Banco de Dados utilizado.
- SQLFOLDER() converte a expressao de um índice xBase em um
índice SQL.
- RETSQLNAME() devolve o nome físico do Banco de Dados
utilizado.

IMPRESSORA CHEQUES BEMATECH DP10 E DP20


406
Esta homologada a impressora de cheques BEMATECH DP10 ou
DP20 para
impressao na porta paralela (LPT1).
Para o correto funcionamento deve-se:
- Sigaloja.dll 0.2.43.13 de 16/04/2002 ou posterior
- BEMADP32.dll
- Patch do FINR460.PRW de 24/04/2002 ou posterior

As dll's acima citadas devem ser copiadas para o diretorio


do BIN e
podem ser obtidas no FTP
(ftp.microsiga.com.br/protheus/Dlls_Fiscais)
IMPRESSORA DE CHEQUES BEMATECH DP10 (WINDOWS)
Procedimento de Implantaçao de Impressoras Bematech
Modelo Bematech DP10 sem Teclado
Advanced Financeiro Versao 4.06 / 4.07 / Protheus 5.07
Estaçoes Windows 95...98 / Windows NT

Arquivos nevessários para Implantaçao :

DP10 .INI - Inicializaçao da DLL / Impressora


DP2032 .EXE - Agente de Impressao (apenas NT)
DP1032 .DLL - DLL do Agente de Impressao (apenas
Windows NT)

Os arquivos acima devem ser copiados para o diretórios


especificados:

DP10 .INI -> \WINDOWS (Diretório do Windows)


DP2032 .EXE -> \SIGAADV (Diretório dos SX)
DP1032 .DLL -> \SIGAADV (Diretório dos SX)

A porta de impressao / scripts dos bancos devem ser


configurados no
Arquivo DP10.INI. A impressao é realizada mediante a
execuçao do agente
DP2032.EXE / DP1032.DLL para realizar a comunicaçao com a
impressora.

MULTSTR()
Funçao .....: MULTSTR( cValor1 , cValor2 )
Autor ......: Jùlio Wittwer
Parâmetros .: cValor1 / cValor2 : String's numéricas a
serem
multiplicadas
Retorno ....: String numérica correspondente à
multiplicaçao das strings

passadas como parâmetro uma pela outra.


Exemplo ....:

...
cString1 := "10254001425"
cString2 := "52102555410"
cResult := MULTSTR(cString1,cString2) //
"534259677420281459250"

Funçao .....: SOMASTR( cValor1 , cValor2 )


Autor ......: Jùlio Wittwer
Parâmetros .: cValor1 / cValor2 : String's numéricas
inteiras a serem
somadas
Retorno ....: String numérica correspondente à soma das
strings passadas
como parâmetro.
Exemplo ....:

...
cString1 := "102540"
cString2 := "521478"
cSoma := SOMASTR(cString1,cString2) // "624018"

Para as rotinas que tem a necessidade de especificar um


diretorio que
ira armazenar arquivos, foi criado a funcao LJDIRECT().

Sintaxe:

LJDIRECT(<cPath>,[lDrive])

Descricao :
Valida o caminho <cPath>, caso o diretorio nao exista sera
criado.Para
que seja possivel a criacao do diretorio e necessario que:

- Tenha direito de criacao, no caso de uma unidade de rede


- A unidade de drive informada em <cPath>, deve estar
disponivel
- O <cPath> nao ter cricao de diretorios aninhados.
Caso [lDrive] seja igual a .T., sera obrigatorio informar a
unidade de
drive em <cPath>, caso contrario o diretorio sera criado
apartir do
diretorio corrente. Caso [lDrive] nao seja informado o
default e .T..

Parametros:

cPath - O caminho para validar/criar o diretorio


lDrive - Flag para validar a unidade de drive, ou seja se
a unidade de
drive tem que ser informada, onde:
.T. - Forcara a entrada da unidade de drive
.F. - Nao exige que entre com a unidade de drive

Retorno :
.T. - O diretorio existe ou foi criado corretamente
.F. - Nao foi possive criar o diretorio, neste caso
apresentara um help
de campo (NOMAKEDIR).

Exemplo:

Prog1.
...

@ 01,01 MSGET cDirTrans VALID LJDIRECT(cDirTrans,.T.)

...

Prog2 - diretorio Aninhados

Local cDir:="C:\DIR1\DIR2\DIR3"

// o Diretorio DIR1 existe e o DIR2 nao


//
ljDirect(cDir) -> Erro

Local oOk := LoadBitMap(GetResources(),


"LBOK")
Local oNo := LoadBitMap(GetResources(),
"LBNO")
SD1->D1_NUMSEQ := ProxNum()

If !MsSeek(xFilial()+SD1->D1_COD+SD1->D1_LOCAL)
CriaSB2(SD1->D1_COD,SD1->D1_LOCAL)
EndIf

MsgAlert(STR0061+M->C5_NUM) //"Gerada Ped.de Venda N.: "

Aviso(STR0099,STR0118,{"OK"}) //"ATENCAO"###"Esta nota nao


pode ser Classificada, pois esta em processo de
conferencia"

lRet :=
(MsgYesNo(OemToAnsi(cLinha1+cLinha2),OemToAnsi(STR0078)+cPr
oduto)) //"Aten‡„o - "

If ( __lSX8 )
ConfirmSx8()
EndIf
AllTrim(FunName()) //Origem

Return (EnchoiceBar(oDlg,bOK,bcancel,,aButtonsAtu))

Local aRotina := {{STR0122,"A103ProcDv",0,2}}


If Inclui .And. SF1->F1_FILIAL == xFilial("SF1")

MaWndBrowse(0,0,300,600,STR0123,"SF2",,aRotina,,,,.T.,)
EndIf

If SoftLock("SF2")
MsUnLockAll()

Local nHdl := GetFocus()


SetFocus(nHdl)

Local nTamData := IIF(__SetCentury(),10,8)

HasEmail()
AltSenha()

XCalcEst() ????

LeLog(@cStatus,@cUsuarioI,@cUsuarioA,@cDataI,@cDataA,cTipo)
.

As varíáveis com vínculo que são passadas como parâmetro


devem ser declaradas como local e a função irá armazenar
nelas o resultado.

A variável cTipo deve ser inicializada da seguinte forma:

SE A TABELA QUE SE DESEJA OBTER O LOG POSSUIR SOMENTE O DE


INCLUSÃO (??_USERLGI ou ???_USERGI) CTIPO := "1".
SE A TABELA QUE SE DESEJA OBTER O LOG POSSUIR SOMENTE O DE
ALTERAÇÃO (??_USERLGI ou ???_USERGI) CTIPO := "2".
SE A TABELA POSSUIR AMBOS OS CAMPOS DE INCLUSÃO E
ALTERAÇÃO, CTIPO := "3"

ft_fUse()

ft_fGoTop()

ft_fSkip()

ft_fEOF()

ft_fReadLn()

ft_pFlush()

CPYS2T( AllTrim(MV_PAR01), AllTrim(MV_PAR02), .T. )


CPYT2S( AllTrim(MV_PAR01),
AllTrim(MV_PAR02), .T. )

WaitRun("copy U:\DIN\PEDIDOS.TXT \DADOSADV\PEDIDOS.TXT",0)

A Função HeadProva
Este função cria o cabeçalho da contabilização. É tratada de forma diferenciada para os
módulos SIGACON e SIGACTB.
Sintaxe:
nHdlPrv := HeadProva(cLoteAtf, cNomProg, Substr(cUsuario,7,6), @arquivo, .T.)
Onde:
NHdlPrv -> Variável que conterá o num. (Handle) do arquivo (.LAN) criado.
cLoteAtf -> Código do lote do módulo (Ex.: Ativo Fixo: “8866”)
cNomProg -> Nome do Programa (Ex.: “ATFA060”)
cUsuario -> Usuário arquivo: nome do arquivo (Ex.: cArquivo := ‘ ‘)

A função DetProva()
Em primeiro lugar, deve-se estar posicionado no registro, que contém o valor à ser
contabilizado
Sintaxe:
ExpN1 := DetProva(ExpN2,ExpC1,ExpC2,ExpC3)
ExpN1 -> Valor Total da Contabilização
ExpN2 -> Handle retornado da função anterior
ExpC1 -> Código do Lançamento Padrão
ExpC2 -> Nome da rotina Geradora
ExpC3 -> Lançamento Padrão

A função RodaProva()
Esta função irá cria a finalização da contabilização.
Sintaxe:
RodaProva(ExpN1, ExpN2)
ExpN1 -> Handle retornado da função anterior
ExpN2 -> Valor Total da contabililização
No Final, ou seja, após todos registros serem processados utilizar a função
CA100INCL(), cujo objetivo é ler o arquivo gerado (.LAN), e gerar os lançamentos no
arquivo SI2 (Lançamentos contábeis).
Exemplo:
CA100Incl( cArquivo, nHdlPrv, nOpcx, cLoteContabil, lDigita, lAglut, cOnLine,
dData)
Onde:
cArquivo -> Nome do arquivo
nHdlPrv -> Numero do Header
nOpcx -> Numero da Opcao escolhida
cLoteContabil -> Numero do Lote
lDigita -> Se Mostra ou nao
lAglut -> Se Aglutina ou não
cOnLine -> Determina se sera On Line ou pelo cProva

Function
Opcoes(cVarRet,cTitulo,aOpcoes,cOpcoes,nLin1,nCol1,l1Elem,nTam,nElemRet,lMultSelect)

cVarRet - variável para retorno da escolha(s)


cTitulo - Titulo do Dialog
aOpcoes - vetor com opções a serem mostradas
cOpcoes - variável que contém última escolha (MV_PAR que armazena no SX1 o que foi
escolhido para já vir marcado no Listbox())
nLin1 - Linha Inicial de posicionamento do listbox
nCol1 - Linha Inicial de posicionamento do listbox
l1Elem - Se apenas uma opção pode ser escolhida
nTam - Tamanho da opção. Por exemplo, o listbox irá exibir as filiais, o tamanho do campo filial
é 2 posições. Dessa forma, nTam tem que ser 2.
nElemRet - Número de elementos do Listbox que poderão ser escolhidos (quando l1Elem
for .F.)
lMultSelect - Define, com .T. ou .F., se poderão ser feitas mais de uma escolha. Se ele não for
definido, será o contrário do l1Elem.

Valid  CheckSX3(“D3_DOC”) .and. VldUser(“D3_DOC”)

_cdoc:=nextnumero("SD3",2,"D3_DOC",.t.)
NEXTNUMERO("ALIAS",INDICE,"CAMPO",NÃO LEMBRO (HEHEHE))
Eu sei que esta função faz o seguinte:
posiciona no alias no índice informado, vai no final do arquivo e verifica o conteúdo do campo e
soma + 1. Sei que trata letras e números.

A Função HeadProva
Este função cria o cabeçalho da contabilização. É tratada de forma diferenciada
para os módulos SIGACON e SIGACTB.
Sintaxe:
nHdlPrv := HeadProva(cLoteAtf, cNomProg, Substr(cUsuario,7,6), @arquivo, .T.)
Onde:
NHdlPrv -> Variável que conterá o num. (Handle) do arquivo (.LAN) criado.
cLoteAtf -> Código do lote do módulo (Ex.: Ativo Fixo: “8866”)
cNomProg -> Nome do Programa (Ex.: “ATFA060”)
cUsuario -> Usuário arquivo: nome do arquivo (Ex.: cArquivo := ‘ ‘)

A função DetProva()
Em primeiro lugar, deve-se estar posicionado no registro, que contém o valor à ser
contabilizado
Sintaxe:
ExpN1 := DetProva(ExpN2,ExpC1,ExpC2,ExpC3)
ExpN1 -> Valor Total da Contabilização
ExpN2 -> Handle retornado da função anterior
ExpC1 -> Código do Lançamento Padrão
ExpC2 -> Nome da rotina Geradora
ExpC3 -> Lançamento Padrão

A função RodaProva()
Esta função irá cria a finalização da contabilização.
Sintaxe:
RodaProva(ExpN1, ExpN2)
ExpN1 -> Handle retornado da função anterior
ExpN2 -> Valor Total da contabililização
No Final, ou seja, após todos registros serem processados utilizar a função
CA100INCL(), cujo objetivo é ler o arquivo gerado (.LAN), e gerar os lançamentos
no arquivo SI2 (Lançamentos contábeis).
Exemplo:
CA100Incl( cArquivo, nHdlPrv, nOpcx, cLoteContabil, lDigita, lAglut, cOnLine,
dData)
Onde:
cArquivo -> Nome do arquivo
nHdlPrv -> Numero do Header
nOpcx -> Numero da Opcao escolhida
cLoteContabil -> Numero do Lote
lDigita -> Se Mostra ou nao
lAglut -> Se Aglutina ou não
cOnLine -> Determina se sera On Line ou pelo cProva

MSCOMPRESS
Abrangência
Sintaxe
MSCOMPRESS ( < cArq | aArquivos > , [ cDestino ] , [ cSenha ] ) --> cFileName
Parâmetros
Retorno
Descrição
Compacta um ou vários arquivos em um único arquivo com extensão .MZP.
MSCOMPRESS() compacta os arquivos informados em um único arquivo com
extensão
default .MZP. O formato é proprietário e multiplataforma.
Caso a senha seja informada apenas com a senha poderemos descompactar os
arquivos.
Tanto arquivos no local ( Remote ) como no Servidor são aceitos.
Revisão: 07/05/2003
Versão 6.09 Versão 7.10
Argumento Tipo Descrição
cArq | aArquivos (Qualquer)
Arquivo(s) a ser(em) compactado(s). Pode ser do tipo
String , para especificar um único arquivo , ou do tipo
Array , contendo um ou mais arquivo(s) a ser(em)
compatado(s).
cDestino Caracter
Nome do Arquivo destino, caso a extensão seja omitida
será assumido .MZP, se não for informado assumirá o
mesmo nome do cArq com extensão .MZP ou o nome do
1º. Arquivo no Array <aArquivos>.
cSenha Caracter Senha a ser utilizada para criptografar o arquivo
compactado.
Tipo Descrição
Caracter
Caso a compactação seja executada com sucesso , a função retornará uma
sring contendo o nome do arquivo gerado . Caso não seja possível a
compactação , por falta de espaço em disco ou erro de acesso a algum dos
arquivos a ser(em) compactado(s), a função retornará uma string em branco
("").
Grupos Relacionados
Principal / A Linguagem AdvPl / Funcöes da Linguagem AdvPl / Funcöes de Disco e Arquivos
Veja também
Principal / A Linguagem AdvPl / Exemplos de Codigo AdvPl / Exemplos de Funções de
Acesso a Disco e Arquivos / Exemplo da Função MSCOMPRES
30/8/2004 http://dem.microsiga.com.br/w_wEx011.apw?Cod=000991
AcroPDF - A Quality PDF Writer and PDF Converter to create PDF files. To
remove the line, buy a license.

MSDECOMP
Abrangência
Sintaxe
MSDECOMP ( < cArq > , [ cPathDestino ] , [ cSenha ] ) --> lSucess
Parâmetros
Retorno
Descrição
MSDECOMP() descompacta o arquivo informado em um diretório. O Formato é
proprietário, e
multi-plataforma, suporta apenas arquivos compactados pela função
MSCOMPRESS().
Caso o arquivo seja protegido por senha, apenas com a senha poderemos
descompactá-lo.
Tanto arquivos no local ( Remote ) como no Servidor são aceitos.
Revisão: 07/05/2003
Versão 6.09 Versão 7.10
Argumento Tipo Descrição
cArq Caracter Nome do Arquivo no formato MZP a ser descompactado.
cPathDestino Caracter
Path de destino onde serão gravados o(s) arquivo(s)
descompactado(s). Note que podem ser incluídos caminhos
do servidor como caminhos locais.
cSenha Caracter
Caso o arquivo tenha sido compactado com senha , esta
deve ser especificada ñeste parâmetro para ser poss;ivel a
descompactação do arquivo.
Tipo Descrição
Lógico
Caso a descompactação foi executada com sucesso, a função retornará .T. ,
Em caso de erro durante a descompactação, a função retrornará .F. Verifique
o espaço disponível na unidade de disco para descompactar o(s) arquivo(s)
e/ou se existe amgum arquivo a ser descompactado no pacote que já exista
na unidade de disco , atribuído como "REad-Only".
Grupos Relacionados
Principal / A Linguagem AdvPl / Funcöes da Linguagem AdvPl / Funcöes de Disco e Arquivos
Veja também
Principal / A Linguagem AdvPl / Funcöes da Linguagem AdvPl / Funcöes de Disco e
Arquivos / MSCOMPRESS

tFont
Abrangência
Classe que encapsula fonte de edição.
Hierarquia
tFontAbs -> tFont
Descrição
Utilize objeto tFont para modificar a fonte padrão de controles visuais.
Propriedades
Vide classes ancestrais.
Métodos
 New
Revisão: 23/02/2003
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10
Descrição Método construtor da classe.
Sintaxe New([acName], [nPar2], [anHeight], [lPar4], [alBold],
[nPar6], [lPar7], [nPar8], [alItalic], [alUnderline])
Parâmetros
Parâmetro Tipo / Descrição
acName Caractere, opcional. Nome da fonte, o
padrão é “Arial”.
nPar2 Reservado.
anHeight Numérico, opcional. Tamanho da
fonte. O padrão é -11.
lPar4 Reservado.
alBold Lógico, opcional. Se .T. o estilo da
fonte será negrito.
nPar6 Reservado.
lPar7 Reservado.
nPar8 Reservado.
alItalic Lógico, opcional. Se .T. o estilo da
fonte será itálico.

CPYT2S
Abrangência
Sintaxe
CPYT2S ( < cOrigem > , < cDestino > , [ lCompacta ] ) --> lSucess
Parâmetros
Retorno
Descrição
Copia um arquivo, do cliente ( Remote ) para o servidor,. Caso a compactação seja
habilitada
( lCompacta ), os dados serão transmitidos de maneira compacta e
descompactados antes do uso.
Exemplo
CpyT2S( "C:\TEMP\MANUAL.DOC","\BKP", .T. ) // Copia arquivos do cliente( remote ) para o Servidor compactando antes
CpyT2S( "C:\TEMP\MANUAL.DOC", "\BKP" ) // Copia arquivos do cliente( remote ) para o Servidor sem compactar.
Revisão: 19/10/2002
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10
Argumento Tipo Descrição
cOrigem Caracter
Nomes dos arquivos a serem copiados, aceita apenas
arquivos locais ( Cliente ), WildCards ( * e ? ) são aceitos
normalmente.
cDestino Caracter Diretório com o destino dos arquivos no Servidor
lCompacta Lógico lCompacta indica se o(s) arquivo(s) deve(m) ser enviados
em formato compactado.
Tipo Descrição
Lógico lSucess indica , caso verdadeiro , que a cópia foi realizada com sucesso.
Caso
retorne .F. , houve erro na copia do arquivo.
Grupos Relacionados
Principal / A Linguagem AdvPl / Funcöes da Linguagem AdvPl / Funcöes de Disco e Arquivos
Veja também
Principal / A Linguagem AdvPl / Funcöes da Linguagem AdvPl / Funcöes de Disco e
Arquivos / CPYS2T

CPYS2T
Abrangência
Sintaxe
CPYS2T ( < cOrigem > , < cDestino > , [ lCompacta ] ) --> lSucess
Parâmetros
Retorno
Descrição
Copia um arquivo, do servidor para o cliente ( Remote ). .Caso a compactação seja
habilitada
(lCompacta ), os dados serão transmitidos de maneira compactada e
descompactados antes do
uso.
Exemplo :
CpyS2T( "\BKP\MANUAL.DOC", "C:\TEMP", .T. ) // Copia arquivos do servidor para o remote local, compactando antes de
CpyS2T( "\BKP\MANUAL.DOC", "C:\TEMP", .F. ) // Copia arquivos do servidor para o remote local, sem compactar antes
Revisão: 19/10/2002
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10
Argumento Tipo Descrição
cOrigem Caracter
Nome(s) dos arquivos a serem copiados, aceita apenas
arquivos
no servidor, WildCards ( * e ? ) são aceitos normalmente.
cDestino Caracter Diretório com o destino dos arquivos no Client ( Remote )
lCompacta Lógico Indica se a cópia deve ser feita compactando o arquivo
antes do envio.
Tipo Descrição
Lógico lSucess retorna .T. caso o arquivo seja copiado com sucesso , ou .F. em caso
de falha na cópia.
Grupos Relacionados
Principal / A Linguagem AdvPl / Funcöes da Linguagem AdvPl / Funcöes de Disco e Arquivos
Veja também
Principal / A Linguagem AdvPl / Funcöes da Linguagem AdvPl / Funcöes de Disco e
Arquivos / CPYT2S

Em caso de incompatibilidade de versão do remote x


(browse), verificar a existência do arquivo apconn.dll na
pasta WINNT\SYSTEM32 e excluí-lo.
Pelo browser, Ferramentas \ Opções da Internet \ Guia Geral
\ botão Configurações \ botão Exibir Objetos, excluir o
Objeto ap6remotexControl.

RDListBox(nRow,nCol,nWidth,nHeight,aArray,aCab,;
aColunas,aPicture,lEdit)

Onde:
nRow,nCol := Coordenadas para o ListBox(Linha,coluna)
nWidth := Comprimento em pixel do ListBox
nHeight := Altura em pixel do ListBox
aArray := Array contEndo as colunas de
Edicao/Visualizacao.
aCab := Array contEndo os cabecalhos para as colunas.
aPicture := Array contEndo as pictures para as
colunas.
lEdit := Determina se as colunas serao editadas ou nao.

getcomputername()

Abaixo os parâmetros das funções BIT2TEMPO, TRANSHORA, CONVTIME, TIMEPICT e


CONVTIMEH6 que utilizam informações sobre tempo no SIGAPCP:

±
±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁ
ÄÄÄÄÄÄÄÄÄÄ´±±
±±³Descri‡…o ³ Tranforma Numero de Bits em Tempo de Operacao ³±±
±
±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ÄÄÄÄÄÄÄÄÄÄ´±±
±±³Sintaxe ³ ExpC1=Bit2Tempo(ExpN2) ³±±
±
±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ÄÄÄÄÄÄÄÄÄÄ´±±
±±³Parametros³ ExpC1 = Retorna o tempo de Operacao no formato "HHHH:MM" ³±±
±±³ ³ ExpN2 = Numero de Bits a ser transformado ³±±
±
±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ÄÄÄÄÄÄÄÄÄÄ´±±
±±³ Uso ³ SIGAPCP ³±±
±
±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ÄÄÄÄÄÄÄÄÄÄÙ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
ßßßßßßßß
*/
±
±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁ
ÄÄÄÄÄÄÄÄÄÄ´±±
±±³Descri‡„o ³Avalia a Picture a ser impressa para Horas (C)entesimais ou ³±±
±±³ ³(N)ormais. ³±±
±
±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ÄÄÄÄÄÄÄÄÄÄ´±±
±±³Sintaxe ³ TransHora(ExpC1,ExpC2,ExpN1,ExpC3) ³±±
±
±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ÄÄÄÄÄÄÄÄÄÄ´±±
±±³Parametros³ ExpC1 = Campo a ser impresso ³±±
±±³ ³ ExpC2 = Tipo de hora utilizada (MV_TPHR) ³±±
±±³ ³ ExpN1 = Coluna em que deve ser impresso o campo ³±±
±
±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ÄÄÄÄÄÄÄÄÄÄ´±±
±±³ Uso ³ Generico ³±±
±
±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ÄÄÄÄÄÄÄÄÄÄÙ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
ßßßßßßßß

±
±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁ
ÄÄÄÄÄÄÄÄÄÄ´±±
±±³Descri‡„o ³ Converte o tempo em bits para impressao de acordo com o ³±±
±±³ ³ parametro selecionado (MV_TPHR). Se o parametro do tempo ³±±
±±³ ³ estiver centesimal, o retorno ser numerico, se estiver ³±±
±±³ ³ normal o retorno ser caracter. ³±±
±
±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ÄÄÄÄÄÄÄÄÄÄ´±±
±±³Sintaxe ³ ConvTime(ExpN1,ExpN2,ExpC1) ³±±
±
±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ÄÄÄÄÄÄÄÄÄÄ´±±
±±³Parametros³ ExpN1 = Tempo em Bits ³±±
±±³ ³ ExpN2 = Tempo no formato centesimal ³±±
±±³ ³ ExpC1 = Tempo no formato normal ³±±
±
±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ÄÄÄÄÄÄÄÄÄÄ´±±
±±³ Uso ³ RELATORIOS PCP ³±±
±
±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ÄÄÄÄÄÄÄÄÄÄÙ±±

±
±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁ
ÄÄÄÄÄÄÄÄÄÄ´±±
±±³Descri‡„o ³ Retorna a picture para hora centesimal ou normal ³±±
±
±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ÄÄÄÄÄÄÄÄÄÄ´±±
±±³Sintaxe ³ TimePict() ³±±
±
±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ÄÄÄÄÄÄÄÄÄÄ´±±
±±³ Uso ³ RELATORIOS PCP ³±±
±
±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ÄÄÄÄÄÄÄÄÄÄÙ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
ßßßßßßßß

±
±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ÄÄÄÄÄÄÄÄÄÄÄ´±±
±±³ Sintaxe ³ ExpC1:=ConvTimeH6(ExpN1, ExpC2) ³±±
±
±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ÄÄÄÄÄÄÄÄÄÄÄ´±±
±±³Parametros³ ExpC1 = Tempo convertido de acordo com parametro informado ³±±
±±³ ³ ExpN1 = Identifica qual o formato de hora desejado, sendo: ³±±
±±³ ³ 1=Retorna de acordo com MTA680 (mv_par03); ³±±
±±³ ³ 2=Retorna de acordo com MV_TPHR ³±±
±±³ ³ 3=Retorna formato normal ³±±
±±³ ³ 4=Retorna formato centesimal ³±±
±±³ ³ ExpC2 = Hora a ser convertida. Se Nil, usa H6_TEMPO ³±±
±
±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ÄÄÄÄÄÄÄÄÄÄÄ´±±
±±³ Uso ³ MATA680/MATA681 ³±±
±
±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ÄÄÄÄÄÄÄÄÄÄÄÙ±±

/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±ºPrograma ³A690CalendºAutor ³Marcelo Iuspa º Data ³ 18/04/01 º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºDesc. ³Transforma os dados binarios referente calendario do SH7 º±±
±±º ³para o formato hora (hh:mm) e os retorna em um array º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºUso ³ AP5 º±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/
Function A690Calend(cCalend)
Local aArray := {}, aRet := {}
Local nPrecisa := GETMV("MV_PRECISA")
Local nTamanho
Local cAloc, x, y
Local cAlias := Alias()
Local nRecSH7 := SH7->(RecNo())
Local cHoraFim
dbSelectArea("SH7")
If ! dbSeek(xFilial("SH7")+cCalend)
dbGoto(nRecSH7)
dbSelectArea(cAlias)
Return(aArray)
Endif
cAloc := Bin2Str(SH7->H7_ALOC)
nTamanho := Len(cAloc) / 7
Aadd(aArray, "")
While Len(cAloc) > 0
Aadd(aArray, SubStr(cAloc, 1, nTamanho) + " ")
cAloc := SubStr(cAloc, nTamanho + 1)
Enddo
aArray[1] := aArray[8]
aDel(aArray, 8)
aSize(aArray, 7)
For x := 1 to Len(aArray)
nPos1 := 0
nPos2 := 0
Aadd(aRet, {x})
For y := 1 to Len(aArray[x])
If substr(aArray[x], y, 1) == "x" .and. nPos1 = 0
nPos1 := y
ElseIf substr(aArray[x], y, 1) == " " .And. nPos1 # 0
nPos2 := y
If Len(aRet[Len(aRet)]) < 10
Aadd(aRet[Len(aRet)], Bit2Tempo(nPos1-1))
cHoraFim := SubStr(Bit2Tempo(nPos2-1), 3) + ":00"
cHoraFim := A690Sec2Time(Secs(cHoraFim) - 60)
Aadd(aRet[Len(aRet)], cHoraFim)
Endif
nPos1 := 0
Endif
Next
aSize(aRet[Len(aRet)], 11)
Next
dbGoto(nRecSH7)
dbSelectArea(cAlias)
Return(aRet)

/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±ºPrograma ³A690Excec ºAutor ³Marcelo Iuspa º Data ³ 18/04/01 º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºDesc. ³Transforma os dados binarios referente a excecao de º±±
±±º ³calendario e retorna em array º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºUso ³ AP5 º±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/
Function A690Excec(cStrBin)
Local nPrecisa := GETMV("MV_PRECISA")
Local cStr := Bin2Str(cStrBin) + " "
Local aRet := {}
Local nPos1 := 0, nPos2 := 0
Local cHoraFim

For y := 1 to Len(cStr)
If substr(cStr, y, 1) == "x" .and. nPos1 = 0
nPos1 := y
ElseIf substr(cStr, y, 1) == " " .And. nPos1 # 0
nPos2 := y
If Len(aRet) < 10
Aadd(aRet, substr(Bit2Tempo(nPos1-1),3))
cHoraFim := SubStr(Bit2Tempo(nPos2-1), 3) + ":00"
cHoraFim := A690Sec2Time(Secs(cHoraFim) - 60)
Aadd(aRet, cHoraFim)
Endif
nPos1 := 0
Endif
Next
aSize(aRet, 10)
Return(aRet)

/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±ºPrograma ³MATA690A ºAutor ³Marcelo Iuspa º Data ³ 17/05/2001 º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºDesc. ³Checa a existencia ou nao do project º±±
±±º ³ º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºRetorno ³,T. para usar o project ou .f. exibir no Protheus º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºUso ³ AP6 º±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/
Function SeleProject
Local oDlg, nOpt :=2, cCombo1 := "MsProject 2000"

If ApOleClient( 'MsProject' )
DEFINE MSDIALOG oDlg TITLE STR0118 From 145,0 To 230,300 OF oMainWnd
PIXEL //"Carga Máquina"
@ 10,06 SAY STR0147 SIZE 60,8 OF oDlg PIXEL //"Saída do Gráfico:"
@ 08,55 MSCOMBOBOX oCombo1 VAR cCombo1 ITEMS {"MsProject 2000", "Protheus"}
SIZE 80,34 Of oDlg Pixel
DEFINE SBUTTON FROM 30,120 TYPE 1 ACTION (nOpt := oCombo1:nAt, oDlg:End())
ENABLE OF oDlg
ACTIVATE MSDIALOG oDlg CENTERED
Endif
Return(nOpt==1)

/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±ºPrograma ³MATA690A ºAutor ³Marcelo Iuspa º Data ³ 17/05/2001 º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºDesc. ³Transforma string de hora em um numero (total de minutos) º±±
±±º ³ º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºParametro ³String tipo hora ("10:40" ou "10:40:00") º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºRetorno ³Numero de minutos da string fornecida º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºUso ³ AP6 º±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/
Function HoraToBit(cHora)
Return(If(Empty(cHora), 0, Val(SubStr(cHora, 1, 2)) * 60 + Val(SubStr(cHora, 3, 2))))

Eu conheço a função fFeriado, o qual voce passa a filial e a data e ele valida se a
data é verdadeiro ou falço, ja a questão do dia util irei pesquisar.
Para qual finalidade voce necessita desta função?

Feraido:= fFeriado("01", nData1)

fDesc_Mes( nMes, nFormato ) -> retorna o nome do mês de número nMes no formato nFormato.

fValidFil() -> retorna uma lista (string) com todas as filiais disponíveis para o usário corrente (????)

Você também pode gostar