segunda-feira, 28 de abril de 2014

Formatar String C# com String.Format(...)


Boa noite a todos,

Precisei essa semana formatar uma string para poder visualizar num TextBox um valor com aparência de valor numérico, após verificar a melhor forma percebi que a maneira mais prática seria utilizar String.Format().


Fica abaixo as dicas de formatos aceito por essa função:

string Formato1 = String.Format("{0:C}", Valor); //Moeda
string Formato2 = String.Format("{0:C8}", Valor); //Moeda com 8 casas decimais
string Formato3 = String.Format("{0:D}", Valor); //Decimal
string Formato4 = String.Format("{0:D15}", Valor); //Decimal com 15 posições (vai zeros a frente p/ completar as posições)
string Formato5 = String.Format("{0:E}", Valor); //Exponencial XXX.XXXe+xxx
string Formato6 = String.Format("{0:F}", Valor); //Ponto Fixo
string Formato7 = String.Format("{0:G}", Valor); //Formato Geral ou Científico
string Formato8 = String.Format("{0:N}", Valor); //Numérico
string Formato9 = String.Format("{0:N7}", Valor); //Numérico com 7 casas decimais
string Formato10 = String.Format("{0:X}", Valor); //Representação Hexadecimal

Daniel S. Menezes 
Analista de Sistemas 
Programador AdvPL 
Programador C#

sexta-feira, 14 de fevereiro de 2014

ShutDown Remoto (ShutDown Via Rede)

Olá a todos,

Buscando uma forma de resolver alguns problemas na rede da empresa que trabalho, visto que muitas maquinas ficavam ligadas a noite toda resolvi criar uma solução para acabar com esse problema.
Uma das alternativa que encontrei foi fazer uma GPO para agendar o desligamento das maquinas, mas pensei em fazer algo que fosse útil a todos.

Criei uma aplicação em C# que executa um comando remoto de ShutDown nos equipamento. Simples de ser usado, sem necessidade de instalação.

Vamos ao que interessa. O link: http://www.4shared.com/rar/eXKSNSVhce/ShutDownRemote.html e como ele funciona.

Após a descompactação do arquivo, encontraremos a aplicação:


Ao executarmos a aplicação encontraremos a seguinte tela.


Para essa tela vamos precisar preencher todos os campos. O arquivo maquinas é um arquivo .txt com o nome das maquinas que deverão ser desligadas.

OBS: cada nome de maquina deverá ficar em uma linha. Sendo assim se tivermos 20 maquinas teremos 20 linhas no arquivo.

Clicando no botão ao lado do campo "Arquivo Maquinas", abriremos uma caixa de dialogo para escolhermos os arquivos com os nomes das maquinas.

Arquivo escolhido, agora é preencher os demais campos e clicar no botão ShutDown para iniciar o desligamento das maquinas.

Na tela das maquinas que serão desligadas aparecerá a seguinte mensagem.


Após isso o computador iniciará o processo de desligamento.

Espero que essa aplicação ajude a todos e caso tenham alguma dúvida ou sugestão basta entrar em contato através do Blog ou pelo meu e-mail danielsmenezes@gmail.com

Daniel S. Menezes
Analista de Sistemas
Programador AdvPL
Programador C# (.Net)

quarta-feira, 12 de fevereiro de 2014

Relação de Tabelas do Protheus (Microsiga)

Segue a relação das tabelas:

SA- Cadastro 
SA1-CADASTRO DE CLIENTES
SA2-CADASTRO DE FORNECEDORES
SA3-CADASTRO DE VENDEDORES
SA4-CADASTRO DE TRANSPORTADORAS
SA5-AMARRAÇÃO PRODUTOxFORNECEDOR
SA6-CADASTRO DE BANCOS
SA7-AMARRAÇÃO PRODUTOxCLIENTE
SA9-CADASTRO DE TÉCNICOS
SAA -CADASTRO DE PACOTE DE HORAS
SAB-PACOTE DE COMISSÕES


SB - Estoque 
SB1- DESCRIÇÃO GENÉRICA DO PRODUTO
SB2S-ALDOS FÍSICO E FINANCEIRO
SB3-DEMANDAS
SB5-DADOS ADICIONAIS DO PRODUTO
SB6-SALDO EM PODER DE TERCEIROS
SB7-LANÇAMENTOS DO INVENTARIO
SB8-SALDOS POR LOTE
SB9-SALDOS INICIAIS


SC - Previsões de E/S 
SC0-RESERVAS PARA FATURAMENTO
SC1-SOLICITAÇÕES DE COMPRA
SC2-ORDENS DE PRODUÇÃO
SC4-PREVISÃO DE VENDAS
SC5- PEDIDOS DE VENDA
SC6 -ITENS DOS PEDIDOS DE VENDA
SC7 -PEDIDOS DE COMPRA
SC8-COTAÇÕE S
SC9- PEDIDOS LIBERADOS
SCA- MOVIMENTOS DE O.S.
SCB -CADASTRO DE CONTRATO
SCC- MOVIMENTO DE COMISSÕES
SCD- FATURAMENTO POR GRADES
SCE -ENCERRAMENTO DE COTAÇÕES


SD - Movimentações de Estoques 
SD1-ITENS DAS NF's DE ENTRADA
SD2-ITENS DE VENDA DA NF
SD3-MOVIMENTAÇÕES INTERNAS
SD4-REQUISIÇÕES EMPENHADAS
SD5-REQUISIÇÕES POR LOTE
SD7-TRANSFERENCIAS PARA CQ


SE- Financeiro 
SE1-CONTAS A RECEBER
SE2-CONTAS A PAGAR
SE3-COMISSÕES DE VENDAS
SE4-CONDIÇÕES DE PAGAMENTO
SE5-MOVIMENTAÇÃO BANCARIA
SE7-OR ÇAM EN T OS
SE8-SALDOS BANCÁRIOS
SE9-CONTRATOS BANCÁRIOS
SEA-TÍTULOS ENVIADOS AO BANCO
SEB-OCORRÊNCIAS DA TRANSM. BANCÁRIA
SEC-AGENCIAS DEPOSITARIAS / CEP
SED-CADASTRO DE NATUREZAS
SEE-COMUNICAÇÃO REMOTA
SEF-CADASTRO DE CHEQUES
SEG-CONTROLE DE APLICAÇÕES


SF - Fiscal 
SF1-CABEÇALHO DAS NF's DE ENTRADA 
SF2-CABEÇALHO DAS NF's DE SAÍDA 
SF3 -LIVROS FISCAIS 
SF4 -TIPOS DE ENTRADA E SAÍDA 
SF5 -TIPOS DE MOVIMENTAÇÃO 
SF6 -RESUMO DE MOVIMENTAÇÃO DA DIPI 
SF7 -GRUPO DE TRIBUTAÇÃO 


SG - Estrutura de Montagem 
SG1 -ESTRUTURAS DOS PRODUTOS 
SG2 -OPERAÇÕES 
SG3 -GRUPOS DE SELETIVIDADE 
SG4 -COMPOSIÇÃO SELETIVA DO PRODUTO 



SH - Carga Máquina 
SH1 -RECURSOS 
SH2 -RECURSOS ALTERNATIVOS 
SH3 -REC. ALTERNATIVOS. POR OPERAÇÃO 
SH4 -FERRAMENTAS 
SH6 -MOVIMENTAÇÃO DA PRODUÇÃO 
SH7 -CALENDÁRIO 
SH8 -OPERAÇÕES ALOCADAS 
SH9 -RECURSOS BLOQUEADOS 
SHA -OPERAÇÕES OFF-LINE 
SHB -CARGA ACUMULATIVA 
SHC -PLANO MESTRE DE PRODUÇÃO 

SI- Contabilidade 
SI1 -PLANO DE CONTAS 
SI2 -LANÇAMENTOS CONTABEIS 
SI3 -CENTRO DE CUSTO 
SI5 -LANÇAMENTOS PADRONIZADOS 
SI6 -TOTAIS DE LOTE 
SI7 -PLANO DE CONTAS / OUTRAS MOEDAS 
SI8 -CADASTRO DE HISTORICO 
SI9 -CADASTRO DE RATEIOS 
SIA -VALORES ORÇADOS 
SIB -RATEIOS OFF LINE 

SJ - Etatísticas 
SJ3 -ACUMULADOS MENSAIS 

SM- Miscelâneas 
SM2-MOEDAS DO SISTEMA 
SM4 -FÓRMULAS 

SN - Ativo Fixo 
SN1 -CADASTRO DE ATIVO IMOBILIZADO 
SN2 -DESCRIÇÕES ESTENDIDAS 
SN3 -CADASTRO DE SALDOS E VALORES 
SN4 -MOVIMENTAÇÕES DO ATIVO FIXO 
SN5 -ARQUIVOS DE SALDOS 


SP - Ponto Eletrônico 
SP0 -DESCRIÇÃO DO RELÓGIO DE PONTO 
SP1 -CALENDÁRIO DE HORAS 
SP2 -EXCEÇÕES 
SP3 -FERIADOS 
SP4 -TIPOS DE HORAS EXTRAS 
SP5 -REFEITÓRIO 
SP6 -MOTIVO ABONO/JUSTIFICATIVA 
SP7 -TABELA DE HORÁRIO PADRÃO 
SP8 -TEMPORÁRIO DE MARCAÇÕES 
SP9 -EVENTOS 
SPA -REGRAS DE VALIDAÇÃO 
SPB -MARCAÇÕES 
SPC -RESULTADOS 
SPD -ARREDONDAMENTOS 


SR- Folha de Pagamento 
SR0-CADASTRO DE VALE TRANSPORTE
SR1-VALORES EXTRAS
SR2-R .A.I.S
SR3- D.I.R.F./INFORMERENDIMENTOS ITENS
SR5-CONFIGURAÇÕES DE PARÂMETROS
SR6-CADASTRO DE TURNOS DE TRABALHO
SRA-CADASTRO DE FUNCIONÁRIOS
SRB-CADASTRO DE DEPENDENTES
SRC-CADASTRO DE MOVIMENTO MENSAL
SRD-CADASTRO ACUMULADOS MENSAIS
SER-TR ANSFER ÊN CIAS
SRF-CADASTRO DE PROVISÕES
SRG-CABEÇALHO DE RECISÃO
SRH-RECIBO DE FÉRIAS
SRI-2ª PARCELA 13º SALÁRIO
SRJ-CADASTRO DE FUNÇÕES
SRK-VALORES FUTUROS
SRL -CABEÇALHO DA DIRF/INFORME REND.
SEM-FORMULAS DA FOLHA
SRN-MEIOS DE TRANSPORTE
SRP-DEMONSTRATIVO DE MÉDIAS
SRR-ITENS DA RESCISÃO
SRS-SALDOS FGTS
SRT-LÍQUIDOS EM DISQUETE
SRU-MOVIMENTOS DE CHEQUES
SRV-VER BAS
SRX-PAR ÂME TR OS

SRZ-RESUMO DA FOLHA

Daniel S. Menezes
Analista de Sistemas
Programador AdvPL
Programador C# (.Net)

sexta-feira, 25 de outubro de 2013

Identificadores de Cálculo Plano de Saúde e Odontológico

Olá para todos,

Me peguei esse fim de tarde com o problema no cálculo do Plano de Saúde e Odontológico verifiquei que haviam feito alterações nos Identificadores de Cálculo do Plano Odontológico, para quem não conhece são os que estão abaixo.

O sistema possui identificadores de cálculo para o desconto patronal e funcionário da Assistência Médica e Odontológica: Patronal, verbas do Tipo BASE, campo RV_TIPOCOD =3:

o 213 - Assistência Médica Empresa Titular
o 725 – Assistência Médica Empresa Dependente
o 726 – Assistência Médica Empresa Agregados
o 717 – Assistência Odontológica Empresa Titular
o 718 – Assistência Odontológica Empresa Dependente
o 719 – Assistência Odontológica Empresa Agregados

Funcionário, verbas do Tipo DESCONTO, campo RV_TIPOCOD =2:
o 049 - Assistência Médica Titular
o 714 – Assistência Odontológica Titular

Daniel S. Menezes
Analista de Sistemas
Programador AdvPL
Programador C# (.Net)

terça-feira, 16 de julho de 2013

Condição de Pagamento Protheus


Olá pessoal,

Faz tempo que não posto nada sobre Protheus, mas me deparei com um problema interessante.
Um colaborador do Financeiro me pediu para criar a condição de pagamento com 36 parcelas. Até aí tudo bem, mas tive o primeiro impasse.
O campo só cabe 40 caracteres.
Depois de muita pesquisa e de buscar no TDN e nada achar, encontre a solução em um fórum para facilitar a vida de todos como sempre, estou postando abaixo as possíveis soluções para cadastros de condições de pagamento no Protheus.

Detalhe usei o Tipo 5

Condição de Pagamento
A Condição de Pagamento é característica geral da maneira pela qual um pagamento será efetuado. Para indicar uma condição de pagamento em qualquer módulo do Advanced Protheus deve-se informar:

Código - Código da Condição de Pagamento
Tipo - Tipo da Condição de Pagamento
Condição - Parâmetros da Condição de Pagamento

Assim:

Tipo: 1
Estrutura: A condição de pagamento indica o deslocamento em dias a partir da data base. Os valores devem ser separados por vírgula. O usuário pode definir qualquer código para representar a condição.

Exemplo: 30,60,90,120,150

Tipo: 2
Estrutura: O próprio código da Condição de Pagamento representa os vencimentos, regidos pela formula:
O campo condição deve determinar o multiplicador.

Exemplo:
O código 341 com um multiplicador 7 representa:
- 21 dias para a primeira duplicata
- 4 duplicatas
- 7 dias de intervalo entre duplicatas

Tipo: 3
Estrutura: O campo "Condição" determina as datas padronizadas para o vencimento. O usuário pode definir qualquer código para representar a condição.

Exemplo:
O programa calcula, após a data de emissão, as datas de vencimento, ajustando-as de acordo com as datas padrão fornecidas, sempre para a próxima.

Tipo: 4
Estrutura: O campo "Condição" determina os dias da semana padronizados para o vencimento. O usuário pode definir qualquer código para representar a condição.
Onde D1:

1 Domingo
2 Segunda
3 Terça
4 Quarta
5 Quinta
6 Sexta
7 Sábado

Tipo: 5
Estrutura: O campo "Condição" representa os vencimentos, regidos pela seguinte fórmula:
Exemplo: A condição "10,12,30" representa:

10 -dias para a primeira duplicata
12 -duplicatas
30-dias de intervalo entre duplicatas

Tipo: 6
Estrutura: O campo "Sistema" assume dias da semana padronizados para o vencimento, considerando o intervalo de dias entre cada parcela.
Onde D1:
1 Domingo
2 Segunda
3 Terça
4 Quarta
5 Quinta
6 Sexta
7 Sábado

Tipo: 7
Permitinde a definição de datas fixas de vencimento no período de um ano.
O valor de cada parcela será calculado dividindo o Valor Total da Nota pelo Número de Parcelas. Quando o dia informado for superior ao último dia do mês, o último dia do
mesmo será assumido. Esta condição trata as parcelas da seguinte maneira:
São definidos 13 valores numéricos, separados por vírgulas.  Os dois primeiros dígitos, indicam o número de parcelas.  Os demais devem ser utilizados para informar os dias de vencimento das parcelas (de Janeiro a Dezembro).
Quando o dia informado for superior ao último dia do mês, o último dia
do mesmo será assumido.

Exemplo:
Condição: 03,05,10,15,20,25,30,05,10,15,20,25,30
Dias da Data: Fora a Quinzena
Data Base: 25/03/96
Neste caso, serão 3 parcelas com vencimento nos dias 20/04, 25/05 e 30/06.

Tipo: 8
Estrutura: O campo "Condição" representa os dias de deslocamento para cálculo do vencimento das parcelas e o percentual para divisão dos valores cada parcela.

Exemplo:
Condição: [30,60,90],[25,35,40]
A soma dos totais dos percentuais deve ser de 100%
Num total de 1.000 reais serão gerados as seguintes parcelas.
para 30 dias, 25% do total R$ 250,00
para 60 dias, 35% do total R$ 350,00
para 90 dias, 40% do total R$ 400,00

Tipo: 9
Estrutura: Datas fixas. O cliente informa as datas de vencimentos e valores ou percentuais.
Basta indicar no arquivo de Condições de Pagamento, campo Condição, o símbolo "%" para utilizar os campos PARCELAS do arquivo de Pedidos de Vendas, como percentuais a serem parcelados. Caso o campo "Condição" (arquivo Condições de Pagamento), seja preenchido com qualquer outra informação que não seja o símbolo "%", os parcelamentos serão considerados em valor.

Daniel S. Menezes
Analista de Sistemas
Programador AdvPL
Programador C# (.Net)

terça-feira, 10 de abril de 2012

Régua de Registros Funcionando (Protheus)

Olá,

Essa semana me deparei com o seguinte problema, fazer a régua do Protheus funcionar.
Observei os manuais, pesquisei várias coisas na internet e cheguei a uma solução simples e funcional.

Chamando a função Processa(Ação, cTitulo, cMensagem, cParam).

onde Ação é o programa que iremos utilizar para realizar o que queremos, cTitulo é a mensagem que irá aparecer na barra de título da caixa de processamento, cMensagem é a mesagem que vai aparecer logo acima da régua, cParam é o parametro (.T. ou .F.) que define se o botão de cancelar estará ativo ou não.

Abaixo temos um exemplo da tela e abaixo da tela temos o código fonte utilizado.

#Include "TopConn.ch"

/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±ºPrograma  ³cTest     ºAutor  ³Daniel Menezes      º Data ³  03/29/12   º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºDesc.     ³                                                            º±±
±±º          ³                                                            º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºUso       ³ AP                                                         º±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/


User Function cTest

Processa( {|| xProc()}, "Tela de Processamento" , "Realizando Consulta...", .T.)

Static Function xProc

Private nRec

xPesq()

ProcRegua(nRec)    // Cria a régua com a quantidade de registros contatos
DbSelectArea("PSQ")
PSQ->(DbGoTop())     // Na contagem de registros o sistema posiciona no ultimo registros, usamos para reposicionar no primeiro registro.

Do While PSQ->(!Eof())
                
           IncProc(PSQ->(FILIAL + " - " + MAT + " - " + SubStr(NOME,1,25))) //Altera o texto da régua em tempo de execução.
    
PSQ->(DbSkip())

EndDo

PSQ->(dbCloseArea())

Return


Static Function xPesq

cArqSRA    := RetSqlName("SRA")

    cQry:= " SELECT A.RA_FILIAL AS FILIAL, A.RA_MAT MAT, LTRIM(A.RA_NOME) NOME 
    cQry+= " FROM " + cArqSRA + " A
    cQry+= " WHERE A.D_E_L_E_T_ <> '*' "
    cQry+= " AND A.RA_SITFOLH IN (' ','F')"

TCQUERY cQry NEW ALIAS "PSQ"

Count To nRec     //Varre o Alias criado e conta o número de registros.

Return

terça-feira, 13 de março de 2012

apt-get com internet com proxy




Olá,


Hoje eu fiz a instalação de uma maquina virtual com Linux Ubuntu 11.10 e me deparei com um problema um tanto complicado.
Como atualizar via apt-get já que eu estou utilizando uma rede com proxy, pesquisei um bocado até achar uma solução muito interessante.




Configurando "apt-get" com Proxy Transparente


# sudo vi /etc/environment


http_proxy="http://endereçoproxy:3128"
ftp_proxy= "http://endereçoproxy:3128" 


Acquire {
HTTP::Proxy  http://endereçoproxy:3128;
FTP::Proxy  http://endereçoproxy:3128;
};
alias wget="wget -Y on" 


No exemplo acima é demonstrada a configuração do proxy para o protocolo HTTP e FTP.
Você também deve informar o endereço e a porta do seu servidor Proxy (Squid).


Edite o arquivo de configuração do APT-GET:


# sudo vi /etc/apt/apt.conf


Adicione as seguintes linhas:


Acquire {
HTTP::proxy "http://endereçoproxy:3128";
FTP::proxy "http://endereçoproxy:3128";
};


Está pronto.


Configurando "apt-get" para Proxy com Autenticação
Para configurar o "apt-get" para Proxy com Autenticação é necessário incluir o usuário e senha, como
EXEMPLO irei utilizar o usuário "user1" e a senha "123654".
Primeiro edite o arquivo de variáveis de ambiente com o comando abaixo:


#sudo vi /etc/environment 


E inclua o seguinte conteúdo no arquivo "environment":


http_proxy="http://user1:123654@endereçoproxy:3128"
ftp_proxy="http://user1:123654@endereçoproxy:3128" 


Acquire {
HTTP::Proxy  user1:123654@endereçoproxy:3128;
FTP::Proxy  user1:123654@endereçoproxy:3128 ;
};
alias wget="wget --proxy-user=user1 --proxy-passwd=123654"