Arquivo mensal: dezembro 2008

iPHONE DROPES – Blog de Daniela Moreira


Por Daniela Moreira
Origem: Site da InfoAbril
Em: 30 de dezembro de 2008


iPHONE DROPES

Tudo sobre o iPhone no Brasil e no mundo

Blog de Daniela Moreira

Nano ou Pro: o que será do iPhone em 2009?

Rumores envolvendo a Apple costumam ser tão fartos como fantasiosos, mas de vez em quando há fundamento nos palpites. Os boatos do momento envolvem o futuro do iPhone em 2009. Alguns apostam em uma versão “nano”, menor e mais leve, supostamente antecipada por dois fabricantes de assessórios para produtos Apple.

A XSKN foi a primeira a dar força à aposta de que 2009 será o ano do “nano”. A fornecedora já lista em sua loja online uma capa para iPhone nano. O rumor ganhou mais peso esta semana, quando a Vaja, outra fabricante de acessórios, também passou a listar a categoria iPhone nano no seu catálogo de produtos.

Se a versão nano oficial chegará ou não em 2009, ainda é uma incógnita. Mas a no mercado asiático, o “nano” pirata já deu as caras – e é até bem simpático. Trata-se de uma versão compacta dos já manjados clones do iPhone, disponível em cores variadas, como cor-de-rosa e prata.

Mas enquanto alguns antevêem uma versão light do telefone, outros acreditam que em 2009 o iPhone terá na verdade um modelo mais parrudo.

O suposto iPhone Elite, “materializado” pelo blogueiro Mat Brady (confira na foto acima), teria teclado físico, câmera de 5 megapixels com zoom e 60GB de armazenamento.

Embora o design seja uma brincadeira, a idéia de um modelo mais “adaptado” a usuários corporativos também faz sentido, tanto que o analista Gene Munster, do banco de investimento Piper Jaffray a defendeu em um boletim a seus clientes.

O modelo seria um pouco mais espesso que o atual – graças ao teclado físico – e custaria entre US$ 99 e US$ 149.

Mas o próprio analista não descarta a possibilidade de que a Apple opte por manter o preço US$ 199 e substituir o material do corpo do iPhone para torná-lo mais fino.

Seja qual for a metamorfose, o fato é que o iPhone deve mudar em 2009. Munster aposta que o novo modelo chega às prateleiras já no início do próximo ano.

Anúncios

Uso de blogs beneficia alunos, diz pesquisa


Por Agência Fapesp
Origem: Site da InfoAbril
Em: Terça-feira, 30 de dezembro de 2008 – 15h10

O QI verde da USP


Por Silvia Balieiro
Origem: Site da InfoAbril
Em: 22 de dezembro de 2008

A Universidade de São Paulo cria um selo verde e pensa na criação de um centro de descarte, reuso e reciclagem sustentável para microcomputadores velhos.

O que tecnologia tem a ver com sustentabilidade? Essa pergunta é respondida com freqüência pela professora Tereza Cristina Carvalho, professora do LARC e diretora do CCE (Centro de Computação Eletrônica) da USP. Essa pergunta é feita não só por pessoas de fora, mas também de dentro da USP. Para todas a professora Tereza tem a resposta na ponta da língua. E não é por acaso. Ela é líder de um movimento que acaba de criar um “selo verde” para todas as máquinas que são compradas pela Universidade de São Paulo. Além disso, foi dela a iniciativa de criar um centro de reciclagem para máquinas velhas dentro da universidade. Em entrevista à INFO, Tereza falou a importância de ser verde para as empresas e para os usuários de tecnologia.

INFO As empresas ainda estão reticentes em relação à necessidade da sustentabilidade na TI?
Profa. Tereza Muitas empresas ainda estranham esse assunto. Mesmo aqui no CCE, quando nós falamos da necessidade de criar uma TI mais verde, muitos se perguntaram o que a tecnologia tem a ver com a sustentabilidade.

INFO Como esse trabalho começou aqui na USP?
Profa. Tereza Sou ex-aluna do MIT (Massachusetts Institute of Technology) e em 2007, durante um encontro de ex-alunos, conheci um projeto de Sustentabilidade, que busca transformar máquinas obsoletas ou inutilizadas em algo útil. Foi aí que resolvi fazer algo parecido aqui na USP, com o apoio do MIT.

INFO Como funciona essa parceria com o MIT?
Profa. Tereza Assim que nosso projeto foi aprovado por uma comissão deles, dois representantes vieram ao Brasil para começarmos a colocar o plano em ação. Com a ajuda deles criamos a Cadeia de Transformação de Lixo Eletrônico, um projeto que tem a intenção de pegar a sucata de um micro e aproveitar ao máximo os seus componentes e matérias.

INFO Que materiais e componentes são esses?
Profa. Tereza São vários. A sílica, por exemplo, pode ser transformada em vidro, o plástico é reaproveitado transformado em outros materiais plásticos e o mesmo pode acontecer com as peças metálicas ao passarem por uma reciclagem.

INFO Quais ações já foram tomadas por esse grupo de sustentabilidade?
Profa. Tereza Quando começamos decidimos fazer uma experiência. Fizemos uma campanha de limpeza do CCE (Centro de Computação Eletrônica). Em apenas um dia recolhemos 5 toneladas de lixo eletrônico, como micros, mouse, teclado e CDs. Tudo isso vinha sendo acumulado pelas 220 pessoas que trabalham somente aqui no centro.

INFO O que vocês fizeram com todo esse lixo?
Profa. Tereza Essa coleta foi o primeiro passo de nosso projeto. Em seguida criamos uma comissão de sustentabilidade, que teve o objetivo de buscar formar de reaproveitar esse lixo eletrônico.

INFO Quem faz parte dessa comissão?
Profa. Tereza São oito pessoas das cinco divisões do CCE. Essa comissão foi procurar empresas ou organizações que pudessem fazer a reciclagem. Mas o que eles verificaram foi que a maioria das empresas que diziam que reciclavam só exportavam o lixo para lugares incertos, na maior parte das vezes da Ásia.

INFO Isso é ruim?
Profa. Tereza Sim. É ruim, porque dessa forma não é possível saber se a máquina é realmente reciclada ou é apenas descartada num outro lixão. E os riscos de ter esse lixo espalhado de forma inconseqüente são grandes.

INFO Quais são esses riscos?
Profa. Tereza Uma pilha comum, de boa qualidade, tem 0,02 mg de mercúrio. Já uma pilha de marcas duvidosas e de baixa qualidade tem 80 mg de mercúrio. Se essa pilha é jogada num rio ela pode de alguma maneira afetar a vida de uma pessoa. Agora imagine que no Brasil são consumidas por ano 800 milhões de pilhas de boa qualidade e 400 milhões de pilhas de má qualidade. Em baterias de notebooks também tem uma certa quantidade de mercúrio. Para onde vai todo esse mercúrio, que é uma substância cancerígena? Por isso a necessidade de se fazer um descarte responsável.

INFO Voltando ao lixo eletrônico do CCE, o que foi feito com a sucata?
Profa. Tereza A comissão de sustentabilidade encontrou uma única empresa que realmente fazia a reciclagem. No entanto, para as cinco toneladas de lixo eles pagaram somente 1 200 reais. A partir daí começamos a pensar na criação de uma área de reciclagem de materiais eletrônicos aqui no CCE.

INFO Essa área de reciclagem já está funcionando?
Profa. Tereza Não. Estamos fazendo uma avaliação da viabilidade financeira dessa iniciativa e para isso também estamos contando com a ajuda do MIT.

INFO Quando esse centro de reciclagem estiver pronto vai ser possível levar uma máquina para a USP na hora de fazer o descarte?
Profa. Tereza Ainda não sabemos como funcionará o centro. Há duas possibilidades: criar um centro que faça apenas a separação dos materiais que podem ser reaproveitados ou criar realmente um centro capaz de realizar processos químicos para separar os itens de um micro que realmente são reaproveitáveis. Neste últimocaso seria necessária a obtenção de maquinas maiores para os processos químicos.

INFO Muita gente costuma doar suas máquinas para instituições de caridade ou ONGs de inclusão digital. Esse tipo de iniciativa pode ser considerado sustentável?
Profa. Tereza É preciso analisar com cuidado esse tipo de descarte de máquina. O que se vê muito é que os micros doados têm muitos problemas. Às vezes três micros velhos desmontados se transformam em apenas um micro inteiro, o restante dessa é descartado. A pergunta nesse caso é será que esse descarte tem sido feito de forma sustentável?

INFO A venda de micros tem crescido muito no Brasil. Isso aumenta o número de máquinas em uso. Isso não é um desafio à sustentabilidade?
Profa. Tereza Com certeza é. Há estatísticas que dizem que 10% dos micros em uso ficam obsoletos todos os anos no Brasil. No caso de celular esse número de equipamentos descartados é ainda maior, já esse tipo de equipamento fica obsoleto com maior velocidade.

INFO Na USP foi criado também o selo verde para fabricantes de máquinas e eletrônicos. Qual o objetivo desse selo?
Profa. Tereza Esse selo tem a intenção de identificar as máquinas que são feitas num modelo sustentável. Entre as características está a inexistência de chumbo, a capacidade de economizar energia elétrica, o alinhamento com as normas ISSO 14001 e ISSO 9001 e aderência ao ROHS (Restriction os Certain Hazardous Substances).

INFO Quem já recebeu esse selo verde?
Profa. Tereza A primeira empresa foi a Itautec. Fizemos uma compra de 1962 desktops e 300 laptops. Eles se comprometeram a desenvolver uma máquina com as nossas especificações e apesar do custo 2% mais alto, a quantia não foi repassada para a USP. Em contrapartida a USP emitiu um selo atestando que as máquinas com aqueles números de série são verdes.

INFO Na sua opinião, o que falta para que todas as fabricantes comecem a produzir máquinas verdes, independentemente do selo?
Profa. Tereza No caso do Brasil falta uma legislação que obrigue os fabricantes a criarem máquinas com essas características.

Administre sua Empresa – Parte II


Vamos falar sobre outros tipos de categorias. São as categorias de despesas. Lembrando que na semana passada iniciamos a série de matérias nas quais passarei algumas dicas de como se administrar uma empresa e como projetar uma aplicação em cima desta necessidade. Usando o melhor da instrução reduzida e o melhor em termos de componentes do VB.

Conforme citei: para que tenhamos um bom formulário de Contas a Pagar é necessário que o mesmo seja amarrado a um fornecedor, uma conta bancária para despesa e sobretudo categorias e subcategorias de despesa. Atualmente quanto menos você permitir o usuário digitar melhor. E isso não significa encher o seu projeto de Combos. Nem muito menos validar até a alma do programa. Lembrem-se da ilustrissíma relação Performance x Segurança.
Já pensaram se o caixa automático dos bancos perguntassem além da senha, o nome do pai e da mãe. A fila daquela joça iria dobrar. Imagine se você sobre um suave acidente e na hora de lhe internarem os caras querem saber o seu C.P.F., R.G, quantas meninas beijou no Verão e ou para as garotas, quantos rapazes foram para o diário. Sendo a sim, quanto maior a segurança, menor a performance.

>Na verdade quando resolvi planejar a idéia da Categorias e SubCategorias para Despesas usada oficialmente pela Microsoft no Money, foi pelo simples fato de que o usuário poderá cadastrar novas categorias e não precisará preencher um campo específico para a Descrição da conta a pagar. É um campo do tipo CHAR a menos na base e dois índices a mais: CDCATEGORIA, CDSUBCATEGORIA. Funcionando da seguinte maneira:

Na Categoria mulheres estão cadastradas todas as SubCategorias referentes aos gastos feitos com as mulheres. É claro, de uma forma hedionda e bem machista.

Você deve tá se perguntando: _ Legal, eu entendi, mas como codificar essa tranquerada toda no VB ?

Primeiramente o desenho da estrutura de dados é impressindível. Vincule a cada SubCategoria o código da Categoria. Veja só:

Fazer isso funcionar é bem fácil. Monte o formulário abaixo e codifique uma função espeficifa para carregar o Combo de Categorias. E em seguida, no evento Lost_Focus deste Combo (CMBCD_CATEGORIA). Carregue o outro Combo (CMBCD_SUBCATEGORIA). Aplicando um Filtro (WHERE) na montagem do RecordSet com o código da Categoria.

ModFunções

   'Módulo Básico com que conterá
   'as funções mais básicas usadas
   Option Explicit
   Dim cConn As ADODB.Connection
   Dim cStrConn As Variant
   Public cMensagem As String
   Public Const cTitulo = "FINANCEIRO"

   Public Function ConectaBanco() As Boolean

        ConectaBanco = False

        'Protegendo em memória na função
        'os objetos a serem usados
        Set cConn = New ADODB.Connection

        'Não se esqueça de direcionar o path com o banco 
        'para o diretório em que o mesmo estive em sua
        'máquina. Ou ultilize um arquivo .INI para informar
        'o path de conexão com a máquina.
         cStrConn = "Provider=Microsoft.Jet.OLEDB.4.0;"
         cStrConn = cStrConn & "Data Source=D:Imasters41ª Materiafinanceiro.mdb;"
         cStrConn = cStrConn & "Persist Security Info=False" 'Abrindo conexão    com a base

         cConn.Open cStrConn 
         Set cStrConn = Nothing

         ConectaBanco = True
End Function
   Public Function DesconectaBanco() As Boolean 
         DesconectaBanco = False

            cConn.Close
            Set cConn = Nothing

         DesconectaBanco = True

   End Function

   Public Function HabilitaCampo(NomeForm As Form, _
                                 NomeCampo As TextBox, _
                                 Habilita As Boolean)

         'Instrução Reduzida para Habilitar
         'ou desabilitar Campos

         NomeForm.NomeCampo.Enable = Habilita

   End Function
   Public Function DisparaComandos(cInstrucao As String) As Boolean

         'Esta função fará as conexões com o banco e dispará    os
         'comandos direto ao objeto de conexão
         'sem o uso de command's e ou recordset's

         DisparaComandos = False

         If ConectaBanco = True Then

            If IsNull(cInstrucao) = True Then
               cMensagem = MsgBox("ERRO INTERNO: O Banco 
Recebeu uma instrução    nula.", vbCritical, cTitulo)
               Exit Function
            End If

            cConn.Execute cInstrucao
          End If

          Call DesconectaBanco

          DisparaComandos = True

   End Function 
 

frmPCOMPRA

   Function CarregaCategoria() As Boolean

   CarregaCategoria = False
   On Error Resume Next

       Set cConn = New ADODB.Connection
       Set RS = New ADODB.Recordset

       If ConectaBanco = True Then

          cSQL = " SELECT CATEGORIASUB.CD_CATEGORIA,"
          cSQL = cSQL & " CATEGORIASUB.DS_CATEGORIA"
          cSQL = cSQL & " FROM CATEGORIASUB"

          Set RS = cConn.Execute(cSQL)
          If Err.Number <> 0 Then
             cMensagem = MsgBox("ERRO INTERNO: Não foi possível carregar as 
Categorias", vbCritical & " " & Err.Description, cTitulo)
             Exit Function
          End If

          While Not RS.EOF
             cmbcd_categoria.AddItem RS("CD_CATEGORIA") & " " & RS("DS_CATEGORIA")
             cmbcd_categoria.Refresh
             RS.MoveNext
          Wend

       End If

        Call DesconectaBanco

   CarregaCategoria = True
   End Function
Function CarregaSubCategoria() As Boolean

   CarregaSubCategoria = False
   On Error Resume Next

   Set cConn = New ADODB.Connection
   Set RS = New ADODB.Recordset

   If ConectaBanco = True Then

      cSQL = " SELECT CATEGORIASUB.CD_SUBCATEGORIA,"
      cSQL = cSQL & " CATEGORIASUB.DS_SUBCATEGORIA"
      cSQL = cSQL & " FROM CATEGORIASUB"
      cSQL = cSQL & " WHERE CATEGORIASUB.CD_CATEGORIAPAI = " 
& cmbcd_categoria.Text    & ""

      Set RS = cConn.Execute(cSQL)
      If Err.Number <> 0 Then
         cMensagem = MsgBox("ERRO INTERNO: Não foi possível 
carregar as Categorias", vbCritical & " " & Err.Description, cTitulo)
         Exit Function
      End If

      While Not RS.EOF
         cmbcd_subcategoria.AddItem RS("CD_SUBCATEGORIA") & " "    
& RS("DS_SUBCATEGORIA")
         cmbcd_subcategoria.Refresh
         RS.MoveNext
      Wend

   End If

   Call DesconectaBanco

   CarregaSubCategoria = True

End Function

Agora não se esqueça de declarar as variáveis globais e fazer a chamada da Function CarregaCategoria( ) ao carregar o formulário:

   'Exigindo que as variáveis sejam
   'declaradas e no código
   Option Explicit
   Dim cSQL As Variant
   Dim RS As ADODB.Recordset
   Dim cNovo As Boolean
Private Sub Form_Load()
   If CarregaCategoria = False Then
      cMensagem = MsgBox("Não foi possível carregar CATEGORIAS.", 
vbCritical & " " & Err.Description, cTitulo)
      Exit Sub
   End If
End Sub

Um outro assunto que quero abordar é a questão das Validações. Nem sempre encher o Form de eventos Validate é uma boa opção. Quanto mais você prende o usuário. Mais você o irrita.

Adote na programação Cliente/Servidor a mesma estética do projeto WEB. Valide tudo o que você tem que validar quando o usuário enviar os dados ao banco. O que chamamos na WEB de: “Dar o Submit”. E isso não é boiolagem !!!

Para seguir esta estética criei uma única função chamada de VALIDACAMPOS( ). Nela validarei tudo o que preciso à acionando no instante em que o feinho do usuário gravar ou atualizar algum dado. Veja só:

Function ValidaCampos() As Boolean

   ValidaCampos = False

   Dim cData As Date

   If cmbcd_categoria.Text = "(Nenhuma Categoria)" Then
      cMensagem = MsgBox("Categoria de Despesa não informada.", vbCritical, cTitulo)
      Exit Function
   End If

   If cmbcd_subcategoria.Text = "(Nenhuma SubCategoria)" Then
      cMensagem = MsgBox("SubCategoria de Desepasa não informada.", vbCritical, cTitulo)
      Exit Function
   End If

   cData = txtdt_emissao.Text
   If IsNull(cData) = True Then
      cMensagem = MsgBox("Data de Emissão não informada.", vbCritical, cTitulo)
      Exit Function
   End If

   cData = txtdt_vencimento.Text
   If IsNull(cData) = True Then
      cMensagem = MsgBox("Data de Vencimento não informada.", vbCritical, cTitulo)
      Exit Function
   End If

   cData = txtdt_pagamento.Text
   If IsNull(cData) = True Then
       txtdt_pagamento.Text = cData
       Exit Function
   End If

   If cmbds_formapg.Text = (Nenhum) Then
      cMensagem = MsgBox("Forma de Pagamento não informada.", vbCritical, cTitulo)
      Exit Function
   End If

   If txtds_juros.Text = vbNullString Then
      txtds_juros.Text = "0"
   End If

   If txtds_multa.Text = vbNullString Then
      txtds_multa.Text = ""
   End If

   If txtcd_fornecedor.Text = vbNullString Then
      cMensagem = MsgBox("Fornecedor não informado.", vbCritical, cTitulo)
      Exit Function
   End If

   If txtcd_contamemo.Text = vbNullString Then
      cMensagem = MsgBox("ContaMemo não informada.", vbCritical, cTitulo)
      Exit Function
   End If

   'Cheque
   If cmbds_formapg.ListIndex = 1 Or _
      txtcd_cheque.Text = vbNullString Then
      cMensagem = MsgBox("Pagamento em Cheque com 
número do cheque não informado.", vbCritical, cTitulo)
      Exit Function
   End If

   If txtvl_conta.Text = vbNullString Then
      cMensagem = MsgBox("Valor não informado.", vbCritical, cTitulo)
      Exit Function
   End If

   If txtvl_contapago.Text = vbNullString Then
      txtvl_contapago.Text = txtvl_conta.Text
   End If

   If txtds_obs.Text = vbNullString Then
      txtds_obs.Text = "Nenhum"
   End If

   ValidaCampos = True

   End Function




Um último assunto a ser abordado no Formulário de Contas a Pagar é a questão do Button Hit.

Trata-se de um componente construído, para vinculação de Chaves Estrangeiras. Ao invés montar um combo com todos os fornecedores cadastrados. O que com um tempo poderá levar a um Combo enorme com mais de 999 registros e conseguentemente o seu combo deixaria de funcionar ou o seu formulário demoraria uma década para carregar os dados.

Com o Button Hit o mentecapto do usuário digita o código do fornecedor ou da conta memo e o sistema pesquisa e exibe a descrição no campo ao lado. Caso não encontre, exibirá que o registro não foi encontrado. Daí se o usuário não souber o código, basta clicar no botão e chamar o cadastro de fornecedores por exemplo, para fazer a pesquisa.

Segue o código para que o Button Hit funcione. Se caso queira maiores detalhes, consulte a matéria sobre Button Hit.

Function ButtonHit(nCodigo As Integer, _
                   cTabela As String) As Boolean

   ButtonHit = False
   On Error Resume Next

   If ConectaBanco = True Then

   If IsNull(nCodigo) = True Then
      cMensagem = MsgBox("Código não Informado.", vbCritical, cTitulo)
      Exit Function
   End If

   If IsNull(cTabela) = True Then
      cMensagem = MsgBox("Tabela não encontrada.", vbCritical, cTitulo)
      Exit Function
   End If

   If Trim(cTabela) = "FORNECEDOR" Then
      cSQL = " SELECT FORNECEDOR.CD_FORNECEDOR,"
      cSQL = cSQL & " FORNECEDOR.NM_FANTASIA"
      cSQL = cSQL & " FROM FORNECEDOR"
      cSQL = cSQL & " WHERE FORNECEDOR.CD_FORNECEDOR = " & nCodigo    & ""
   Else
      cSQL = " SELECT CONTAMEMO.CD_CONTAMEMO,"
      cSQL = cSQL & " CONTAMEMO.NM_TITULAR"
      cSQL = cSQL & " FROM CONTAMEMO"
      cSQL = cSQL & " WHERE CONTAMEMO.CD_CONTAMEMO = " & nCodigo    & ""
   End If

   Set RS = cConn.Execute(cSQL)
   If Err.Number <> 0 Then
         cMensagem = MsgBox("Não foi possível carregar os dados."    _
                            , vbCritical & " " & Err.Description, cTitulo)
         Exit Function
   End If

   If IsNull(RS) = True Then
      If Trim(cTabela) = "FORNECEDOR" Then
         txtcd_fornecedor.Text = ""
         txtnm_fantasia.Text = "Fornecedor não encontrado"
         Exit Function
      Else
         txtcd_contamemo.Text = ""
         txtno_contamemo.Text = "Conta Memo não cadastrada"
         Exit Function
      End If
    End If

   If Trim(cTabela) = "FORNECEDOR" Then
      txtcd_fornecedor.Text = RS("CD_FORNECEDOR")
      txtnm_fantasia.Text = RS("NM_FANTASIA")
      Exit Function
   Else
      txtcd_contamemo.Text = RS("CD_CONTAMEMO")
      txtno_contamemo.Text = RS("NM_TITULAR")
      Exit Function
   End If

   Call DesconectaBanco
   
   End If

   ButtonHit = True

End Function

Por fim, o restante do código. Note a única rotina para Salvar e Atualizar dados. As rotinas para Exclusão e movimentação dos dados no formulário fica prá semana que vem.

Private Sub cmdContaMemo_Click()
   frmCONTAMEMO.Show
End Sub

Private Sub cmdFornecedor_Click()
   frmFORNECEDORES.Show
End Sub

Private Sub cmdNova_Click()
   cNovo = True
End Sub

Private Sub cmdSair_Click()
   End
End Sub

Private Sub cmdSalvar_Click()
   If ValidaCampos = False Then
      Exit Sub
   End If

   If cNovo = True Then
      cSQL = " INSERT INTO PCOMPRA"
      cSQL = cSQL & " (PCOMPRA.CD_CATEGORIA,"
      cSQL = cSQL & " PCOMPRA.CD_SUBCATEGORIA,"
      cSQL = cSQL & " PCOMPRA.CD_FORNECEDOR,"
      cSQL = cSQL & " PCOMPRA.CD_CONTAMEMO,"
      cSQL = cSQL & " PCOMPRA.DT_PAGAMENTO,"
      cSQL = cSQL & " PCOMPRA.DT_VENCIMENTO,"
      cSQL = cSQL & " PCOMPRA.DT_EMISSAO,"
      cSQL = cSQL & " PCOMPRA.DS_OBS,"
      cSQL = cSQL & " PCOMPRA.DS_FORMAPG,"
      cSQL = cSQL & " PCOMPRA.CD_CHEQUE,"
      cSQL = cSQL & " PCOMPRA.VL_CONTA,"
      cSQL = cSQL & " PCOMPRA.VL_CONTAPAGO,"
      cSQL = cSQL & " PCOMPRA.DS_JUROS,"
      cSQL = cSQL & " PCOMPRA.DS_MULTA)"
      cSQL = cSQL & " VALUES(" & cmbcd_categoria.Text & ","
      cSQL = cSQL & " " & cmbcd_subcategoria.Text & ","
      cSQL = cSQL & " " & txtcd_contamemo.Text & ","
      cSQL = cSQL & " '" & txtdt_pagamento.Text & "',"
      cSQL = cSQL & " '" & txtdt_vencimento.Text & "',"
      cSQL = cSQL & " '" & txtdt_emissao.Text & "',"
      cSQL = cSQL & " '" & txtds_obs.Text & "',"
      cSQL = cSQL & " '" & cmbds_formapg.Text & "',"
      cSQL = cSQL & " " & txtcd_cheque.Text & ","
      cSQL = cSQL & " " & txtvl_conta.Text & ","
      cSQL = cSQL & " " & txtvl_contapago.Text & ","
      cSQL = cSQL & " " & txtds_juros.Text & ","
      cSQL = cSQL & " " & txtds_multa.Text & ")"
      cMensagem = "Dados Gravados com Sucesso."
   Else
      cSQL = " UPDATE PCOMPRA SET"
      cSQL = cSQL & " PCOMPRA.CD_CATEGORIA = " & cmbcd_categoria.Text    & ","
      cSQL = cSQL & " PCOMPRA.CD_SUBCATEGORIA = " & cmbcd_subcategoria.Text    & ","
      cSQL = cSQL & " PCOMPRA.CD_FORNECEDOR = " & txtcd_fornecedor.Text    & ","
      cSQL = cSQL & " PCOMPRA.CD_CONTAMEMO = " & txtcd_contamemo.Text    & ","
      cSQL = cSQL & " PCOMPRA.DT_PAGAMENTO = '" & txtdt_pagamento.Text    & "',"
      cSQL = cSQL & " PCOMPRA.DT_VENCIMENTO = '" & txtdt_vencimento.Text    & "',"
      cSQL = cSQL & " PCOMPRA.DT_EMISSAO = '" & txtdt_emissao.Text    & ","
      cSQL = cSQL & " PCOMPRA.DS_OBS = '" & txtds_obs.Text &    "',"
      cSQL = cSQL & " PCOMPRA.DS_FORMAPG = '" & cmbds_formapg.Text    & "',"
      cSQL = cSQL & " PCOMPRA.CD_CHEQUE = " & txtcd_cheque.Text    & ","
      cSQL = cSQL & " PCOMPRA.VL_CONTA = " & txtvl_conta.Text &    ","
      cSQL = cSQL & " PCOMPRA.VL_CONTAPAGO = " & txtvl_contapago.Text    & ","
      cSQL = cSQL & " PCOMPRA.DS_JUROS = " & txtds_juros.Text &    ","
      cSQL = cSQL & " PCOMPRA.DS_MULTA = " & txtds_multa.Text &    ""
      cSQL = cSQL & " WHERE PCOMPRA.CD_PCOMPRA = " & txtcd_conta.Text    & ""
      cMensagem = "Dados Atuallizados com Sucesso."
   End if

     If DisparaComandos(cSQL) = True Then
        cMensagem = MsgBox(cMensagem, vbInformation, cTitulo)
     Else
        cMensagem = MsgBox("ERRO INTERNO: Não foi possível executar    
a operação" & " " & Err.Description, vbCritical,    cTitulo)
        Exit Sub
      End If
   End If

End Sub
 

Agora parem tudo !!! Largem o copo de leite, desliguem a TV, tranquem as portas . . .

Quase todo iniciante em VB tem dúvidas na hora de aplicar um filtro e gerar uma SPREAD, um GRID em cima destes dados filtrados. Exemplo: Selecionar todas as contas a pagar em um determinado período de vencimento. Observe:

frmGRIDPCOMPRA

   Option Explicit
   Dim cSQL As Variant
   Dim cMensagem As String
   Dim RS As New ADODB.Recordset

Private Sub Form_Load()
   If CarregaGrid = False Then
      cMensagem = MsgBox("ERRO INTERNO: Não foi possível carregar os dados.", 
vbCritical & " " & Err.Description, cTitulo)
      Exit Sub
   End If
End Sub

Function CarregaGrid() As Boolean
   CarregaGrid = False

   Set cConn = New ADODB.Connection
   Set RS = New ADODB.Recordset
   Dim cDataInicial As Date
   Dim cDataFinal As Date

   cDataIncial = InputBox("Digite a Data Inicial", cTitulo, cDataInicial)
   cDataFinal = InputBox("Digite a Data Final", cTitulo, cDataFinal)
   cSQL = " SELECT PCOMPRA.CD_PCOMPRA ""Código"""
   cSQL = cSQL & " PCOMPRA.CD_CATEGORIA ""Categoria"""
   cSQL = cSQL & " PCOMPRA.CD_SUBCATEGORIA ""SubaCategoria"""
   cSQL = cSQL & " PCOMPRA.VL_CONTA ""Valor"""
   cSQL = cSQL & " PCOMPRA.DT_VENCIMENTO ""Vencimento"""
   cSQL = cSQL & " WHERE PCOMPRA.DT_VENCIMENTO >= '" & Format(cDataInicial,
    "dd/mm/yyyy") & "',"
   cSQL = cSQL & " AND PCOMPRA.DT_VENCIMENTO <= '" & Format(cDataFinal,
    "dd/mm/yyyy") & ""
  Set RS = cConn.Execute(cSQL)

   Set grdPCONTA.DataSource = RS

   CarregaGrid = True

End Function

>O segredo está em deixar o formulário solto e gerar uma instrução SQL passando como parâmetros as datas imputadas e em seguida carregando um objeto Recordset e passando o mesmo como propriedade DataSource para o GRID. Fazendo isso, o seu Grid, será carregado em tempo de execução com os dados filtrados. E quantas e quantas vezes você disparar esta função, o seu Grid será atualizado.

Legenda do código:

Comentários
Destaque
Códigos

Finalmente concluimos o Form de Contas a Pagar e na semana que vem. Eu volto com os formulários restantes.

Abraços a todos!

Administre sua Empresa – Parte I


Tenho juntado um punhado de dúvidas de diversos leitores ao longo de algum tempo; dúvidas com GRID, SPREAD, em suma; Todas estão relacionadas com o grupo de Componentes do Visual Basic.

Afinal, é indispensável para o bom programador VB, saber carregar um SPREAD, um MSFLEX GRID, um DBGRID e até mesmo uma PROGRESS BAR. E o melhor, de forma higiência. Criando funções específicas e separadas.

Juntei este ao qual chamarei de catalógo de dúvidas e resolvi destinar o meu espaço no Imasters para comentar sobre o uso dos componentes mais sensacionais do Front End Visual Basic, em cima de alguma lógica plausível e bem postada.

Acompanhando uma série de estatíticas sobre a administração das empresas nacionais, sofri uma catalepsia momentânea !

O resultado me assustou tanto, foi pior do que tomar um fora de uma baranga em festa de formatura.
É justo, mas 90% dos microempresários brasileiros não sabem realmente quanto ganham e quanto gastam. Vou ainda mais longe, pois 88% das microempresas paulistas não possuem um Prolabore estimado. Têm o capital dos sócios administrado concomitantemente em paralelo à receita da empresa. Isso é como você montar uma barraquinha de Hot Dog e administrar os seus gastos pessoais em cima da renda bruta obtida com as vendas do seu negócio.

E não é necessário ser pós graduado em Administração de Empresas para saber que o correto é: estimar o capital bruto, retirar a despesa líquida ou o caixa para rêpor a mercadoria, no caso da barraquinha de Hot Dog. E por fim, a sobra é aplicada a um fundo de caixa e o restante é o que chamamos de Prolabore. A renda que deve ser destinada aos respectivos sócios e submetida a um processo semelhante.

O problema é que nem tudo mundo detém essa forma de administrar como uma regra básica, como uma lei!

É é ai que mora o perigo. E onde morre esta série de colunas; pois tentarei ao máximo simplificar resumindo todo o processo de Contas a Pagar/Contas a Receber e Livro Caixa. Em um único projeto. Usando em matéria de componentes, o que o Visual Basic tem de melhor.

Meu amigo, antes que você saia como um pedreiro codificando o que vê pela frente.
Faremos um breve estudo e em cima deste construiremos a base de dados.
Parte por parte. Nada de construir a base toda e depois ir desenvolvendo os formulários no decorrer das outras matérias.

Tentarei ao máximo adicionar um fechamento a cada coluna.

1.1 Contas a Pagar

Para que se obtenha sucesso no ato de fazer um fechamento de gastos mensal e tirar o seu Prolabore.
Ter todas as contas a pagar em dia é fundamental. E mais fundamental ainda é construir um projeto que atenda as espectativas financeiras e proceda uma amarração contábil eficiente.
Sendo assim, para o formulário de Contas a Pagar funcione corretamente vincularemos o mesmo a três chaves estrangeiras:
Fornecedores, Contas Memo (Contas Bancárias) e Categorias/Sub Categorias de Despesa.

Já com a questão das CONSTRAINTS após a criação das tabelas. É bem simples!
Todos os relacionamentos deste pequeno módulo, estão concentrados da tabela PCOMPRA. Afinal, uma conta a pagar provém de um Fornecedor, é paga a partir de uma conta bancária e possui uma Categoria / Sub Categoria para despesa, exemplo Categoria – Despesas Domésticas, Sub Categoria – Conta de Luz, assim como o Microsoft Money.
Foi uma idéia oficializada neste software e que eu particularmente adorei.

O Relacionamento Categoria com SubCategoria, ocorrerá numa mesma tabela; de forma sintética e analítica.
E com essa base devidamente preenchida você já terá um controle simples das suas despesas podendo até fazer um fechamento mensal de gastos.
Mas é claro, vamos dar uma cara a essa lógica. Usando o nosso bom e velho Visual Basic, portando algumas técnicas de programação modernas, generalizando o código em Funções Globais ao invés de ficar copiando e colando código.

Dentre as funções genéricas, separei algumas neste módulo:

ModFunções

 'Módulo Básico com que conterá
 'as funções mais básicas usadas
 Option Explicit
 Dim cConn As ADODB.Connection
 Dim cStrConn As Variant
 Public cMensagem As String
 Public Const cTitulo = "FINANCEIRO"

 Public Function ConectaBanco() As  Boolean

 	ConectaBanco = False

 	'Protegendo em memória na função
 	'os objetos a serem usados
 	Set cConn = New ADODB.Connection

    'Não se esqueça de direcionar o path com o banco	
    'para o diretório em que o mesmo estive em sua
    'máquina. Ou ultilize um arquivo .INI para informar
    'o path de conexão com a máquina.
    cStrConn = "Provider=Microsoft.Jet.OLEDB.4.0;"
 	cStrConn = cStrConn & "Data Source=D:Imasters40ª Materiafinanceiro.mdb;"
 	cStrConn = cStrConn & "Persist Security Info=False" 'Abrindo conexão  com a base

    cConn.Open cStrConn 
    Set cStrConn = Nothing

    ConectaBanco = True

 End Function

 Public Function DesconectaBanco() As Boolean 

      DesconectaBanco  = False

      cConn.Close
      Set cConn = Nothing

      DesconectaBanco = True

 End Function

 Public Function HabilitaCampo(NomeForm As Form, _
                               NomeCampo As TextBox, _
                               Habilita As Boolean)

      'Instrução Reduzida para Habilitar
      'ou desabilitar Campos

       NomeForm.NomeCampo.Enable = Habilita

  End Function

 Public Function DisparaComandos(cInstrucao As String) As Boolean

      'Esta função fará as conexões com o banco e dispará  os
      'comandos direto ao objeto de conexão
      'sem o uso de command's e ou recordset's

      DisparaComandos = False

      If ConectaBanco = True Then

        If IsNull(cInstrucao) = True Then
          cMensagem = MsgBox("ERRO INTERNO: O Banco 
Recebeu uma instrução  nula.", vbCritical, cTitulo)
          Exit Function
        End If

        cConn.Execute cInstrucao

      End If

      Call DesconectaBanco

      DisparaComandos = True

 End Function

Notem que generalizei ao máximo. Tudo o que for usado em um ou mais formulários recomenda-se aplicar em funções globais com retorno Booleano ou seja, sempre vamos ter a certeza de que aquela função foi executada com sucesso.

frmContaMemo

Este é o cadastro simples de contas bancárias, que mandará um código Chave Estrangeira para o formulário frmPCompra.
Este será codificado passo a passo na semana que vem. Notem o encaixe dos componentes:

Atualmente ando abolindo o uso do DataControl para cordenação de registros em um Cadastro.

Seu método de acesso ao banco é arcaíco e mau estruturado. Seus procedimentos são meio desengonçados.
Ele protege além do objeto de conexão, outro objeto em memória de forma preemptiva.
Imagine um passageiro no ônibus sem o número da passagem.

O ideal na hora de programar qualquer tipo de cadastro, é deixar o formulário o mais solto possível.
Fazendo as rotinas de alteração/inclusão e exclusão via instrução SQL direto no objeto de conexão; sem a necessidade de
um ponteiro recordset.Que a propósito só deve ser aberto, quando os botões de navegação forem acionados.
No caso do exemplo da figura abaixo são os botões Próximo e Anterior.

Não se esqueça ainda de aplicar validações rigorosas e de preferência na hora de disparar as rotinas dentro do banco,
como uma página em ASP quando faz o Submit. Note na figura que o Combo com o Nome do Banco é carregado em
tempo de execução. Não há nenhuma tabela de cadastros de bancos na nossa base de dados.
Talvez até houvesse a necessidade em sistemas de escrita contábil. Então todos sabemos que existem menos de 20
bancos economicamente participantes em nosso país. Por que não carregar em tempo de execução o Combo.
E se caso o meliante do usuário desejar optar por um que não tenha sido carregado.
Basta clicar no botão ao lado e incluir um novo banco ao cadastro, naquela execução.
Pois não há o mínimo interesse em aumentar o volume de dados do Combo.

frmFornecedores

Já neste Form. A auto numeração foi deixada por conta do banco. É só será exibida no quando as rotinas de navegação entre os
registros for disparada. Neste formulário foi codificado as rotinas essenciais e não se esqueça de inserir a mascára no campo
referente a Data de Entrega. Observe:

Clique  aqui para abrir a janela pop up com o código

frmCATEGORIASUB

Com este aqui, coloque a mão na massa. E obtenha assim uma idéia básica de como iniciar um simples plano de despesas para
administrar a sua microempresa. É claro que empresas como a Votorantim,
possuem um plano de contas muito mas muito mais complexo. Qualquer dúvida, eu tô na área . . .

Legenda do código:

destaque
comentários
códigos

Na semana que vem. Volto com a continuação enquanto vocês se recuperam dos estragos causados pelo Carnaval. Ainda por fim, preciso comunicar-lhes sobre os problemas que estive com minha conta de email do Imasters e acabei por não receber nenhum email enviado no período de 26/02/2003 a 05/03/2003. Porém quero comunicar-lhes que já está tudo certo e o meu email continua o mesmo: fernando.andrade@imasters.com.br.

Abraços a todos. Beijos para as meninas. E quando chegar o final de semana:

Esse negócio de se trajar de mulher no Carnaval e sobretudo afirmar que isso é só por que é Carnaval. Não é digno. Eu particularmente acho que isso é uma perobagem adquirida e um processo de encapsulamento que mais cedo ou mais tarde poderá expandir-se e lhe tornar uma mulher presa no corpo de um homem.

Álbum de fotos com thumbs


Salve Comunidade. Tenho acompanhado as dúvidas da comunidade Fireworks nestas últimas semanas e vejo uma procura muito grande em relação a fazer um mostruário de fotos parecido com os da Paparazzo, Morango, etc. Resolvi então, nesta matéria, desenvolver um álbum de fotos com thumbs.

Abra um novo documento de tamanho 350 x 250px e aplique a cor branca (#FFFFFF) ao fundo da sua tela.

Utilizando a ferramenta retângulo, desenhe um de tamanho 346 x 240px e vamos arredondar as bordas. Vá na aba Propriedades e procure por Retanble Roundness.

Aplique 30 na caixa referente como no exemplo. Selecione a ferramenta Linha.

Desenhe uma linha vertical de tamanho desejado para projetar o efeito de divisão como no nosso exemplo.

Agora vamos importar as imagens para fazermos nosso álbum de fotos usando thumbs. Clique em CTRL+R e navegue até a pasta onde tem a imagem a ser inserida no seu album e depois de OK.

Com a imagem selecionada, use a ferramenta Redimensionar para diminuir a foto até o tamanho desejado no nosso caso redimensionamos até 65 x 44px. São estas fotos que vão servir de thumbs para o nosso album.

Crie um Slice com a ferramenta abaixo, de dimensões 250 x 166px, pois é neste espaço que nossa imagem vai aparecer ao passar o mouse em cima do thumbs.

A aparência do seu álbum deve ser esta:

.

Aperte SHFT+F3 para aparecer a janela de Comportamentos que será necessário para aplicarmos nosso efeito.

Clique na foto e no sinal de (+) que está localizado na parte superior da janela Comportamentos.

Aparecerá uma nova janela. Nela, escolha Slice e clique ok. aparecerá mais uma onde iremos definir nosso efeito. Nesta nova janela escolha Swap Image e depois, na última janela que aparecer, escolha as opções que você vê na imagem abaixo:

.

Na opção Image file: procure a imagem original, pois é esta que vai aparecer ao passar o mouse em cima do seu thumbs. Não esquecendo que você deve apontar para onde vai a foto original

.

Após isto, repita as etapas para todas as fotos e estará pronto o nosso álbum. Semana que vem tem mais.

Atualizando listas dinamicamente sem refresh


Vou tratar de um assunto que vejo direto em fóruns de discussão sobre ASP. Como atualizar dinamicamente campos do tipo select, sem precisar dar refresh na página? Por exemplo, tenho 2 boxes, um com marcas de carros, e o outro com os carros, e gostaria de que quando eu mudasse a marca do carro, a caixa com os nome dos carros alterasse sem ter que dar refresh. Isso é possível?

Bom, apenas com ASP isso é impossível! ASP é uma tecnologia “server-side”, ou seja, ela só roda no servidor. Depois do momento em que todo o código é enviado para o browser do cliente, ele perde todo o controle da página. Ele não sabe se você alterou algum textbox, ou mudou o item do select. O único modo de fazer o ASP saber o que aconteceu é postando novamente a página.

Para resolver isso, podemos usar uma pequena “gambiarra”, mesclando ASP com JavaScript. Nós vamos fazer com que o ASP escreva um código JavaScript que faça essa atualização!

Como eu dei o exemplo dos carros, vamos utilizá-lo pelo resto do artigo. Vamos criar um arquivo no Access, de nome carros.mdb, com as duas tabelas abaixo:

Marcas

Carros

ID – AutoNumeração
Marca – Texto

ID – AutoNumeração
Marca – Número
Carro – Texto

Crie o seguinte relacionamento: Carros.Marca = Marcas.ID

Agora vamos colocar alguns dados na nossa tabela:

Fiat

– Stilo
– Palio
– Siena

Volks

– Gol
– Bora
– Golf

Ford

– KA
– Focus
– Ranger

Pronto! Já temos nossa tabela, com dados falsos! Vamos criar agora nossa página, onde iremos listar as marcas e os carros (que por enquanto não vai listar nada). Até aí não temos nada de mais, isso é feito com frequência.

<%
“Criando conexão com o banco de dados!
Set Conexao = Server.CreateObject(“ADODB.Connection”)
Conexao.Open “Provider=Microsoft.Jet.OleDB.4.0;Data Source=” & Server.MapPath(“carros.mdb”)

“Abrindo a tabela MARCAS!
Sql = “SELECT * FROM Marcas ORDER BY Marca”
Set Rs = Conexao.Execute ( Sql )
%>
<html>
<head></head>
<body>
<form name=”iMasters”>
Marcas:<br>
<select name=”marcas” onChange=”javascript:atualizacarros(this.form);”>

<% While NOT Rs.EoF %>
<option value=”<% = Rs(“id”) %>“><% = Rs(“Marca”) %></option>
<% Rs.MoveNext %>
<% Wend %>

</select>
<br><br>Carros:<br>
<select name=”carros”></select>
</form>
</body>
</html>

<%
“Fechando os objetos!
Rs.Close
Set Rs = Nothing

Conexao.Close
Set Conexao = Nothing
%>

Pronto! Salve como carros.asp! Se rodarmos este script, iremos ver apenas um select, e dentro do select, todas as marcas. Embaixo dele, temos o Select dos carros, que ainda está vazio. Repare no método onChange do SELECT marcas. Esse método é chamado toda vez que acontece alguma troca de item, ou seja, cada vez que o usuário mudar a marca, a função AtualizaCarros será chamada!

O que essa função tem que fazer? Cada vez que o usuário selecionar uma marca, ela deve atualizar o SELECT dos carros.

Bom, o JavaScript, ao contrário do ASP, é uma linguagem “client-side”, ou seja, ele só roda na máquina do cliente, portanto ela não tem acesso à nossa base de dados. O que faremos então? Vamos fazer com que o ASP forneça ao JavaScript todos os dados de que ele precisa!

Vamos escrever a função EscreveFuncaoJavaScript no ASP:

<%
Function EscreveFuncaoJavaScript ( Conexao )

“O parametro conexao receberá uma conexao aberta!
“Em funcoes, geralmente não criamos objetos do tipo conexões!
“Opte por sempre deixar sua função o mais compatível possível com qualquer projeto!

“Primeiro vamos escrever o cabecalho de qualquer script javascript!
Response.Write “<script language=””JavaScript””>” & vbcrlf
Response.Write “function atualizacarros (form) {” & vbcrlf

“Essa função JavaScript recebe o form em que estão os campos a serem atualizados!
“Veja na chamada da função no método OnChange em que se passa o this.form!

“Vamos criar um switch para ele verificar qual opção foi selecionada!!

Response.Write “switch (form.marcas.options[form.marcas.selectedIndex].value) {
” & vbcrlf

“Agora entramos com o banco de dados! Temos que jogar aqui todas as opções de carro!
SqlMarcas = “SELECT * FROM Marcas ORDER BY Marca”

Set rsMarcas = Conexao.Execute ( SqlMarcas )

While NOT rsMarcas.EOF

“Caso tenha sido essa marca selecionada…

Response.Write “case “” & rsMarcas(“ID”) & “”:” & vbcrlf

“Apagamos tudo o que tem na caixa dos carros!
Response.Write “form.carros.length=0;” & vbcrlf

“Abrimos todos os carros relativos a essa marca!
SqlCarros = “SELECT ID, Carro FROM Carros WHERE Marca = ” & rsMarcas(“ID”)
Set rsCarros = Conexao.Execute ( SqlCarros )

“Fazemos um loop por todos os carros, criando uma nova opção no SELECT!
i = 0
While NOT rsCarros.EoF

Response.Write “form.carros.options[” & i & “] = new Option(“” & rsCarros(“carro”) & “”,”” & rsCarros(“ID”) & “”);” & vbcrlf
i=i+1

rsCarros.MoveNext
Wend

“Imprimos um break! (Verifique tutoriais de JavaScript, se tiverem alguma dúvida da sua utilização!
Response.Write “break;” & vbcrlf

“Próxima marca!
rsMarcas.MoveNext
Wend

“Fecha chaves do switch e da função! E fecha o script!
Response.Write “}}” & vbcrlf & “</script>” & vbcrlf

End Function
%>

Pronto! Nossa função ASP escreve uma função JavaScript pronta para atualizar nosso SELECT carros ! Para colocarmos ela em nossa página, basta colarmos essa função no início do arquivo, e modificarmos a tag HEAD para:

<head><% EscreveFuncaoJavaScript ( Conexao ) %></head>

Teste o script! Ele atualiza corretamente o SELECT! Clique aqui para baixar o código inteiro!

Considerações finais

Esse exemplo é muito bom quando temos poucos dados. Quando a quantidade de dados é grande, isso causa uma grande perda de desempenho, pois você está jogando o conteúdo das duas tabelas INTEIRAS no arquivo ! Ou seja, se você tiver 1 milhão de registros, a página vista pelo usuário conterá 1 milhão de linhas de comandos JavaScript, deixando sua página pesada e mais demorada para o usuário baixar ela inteira!

Bom, espero que tenham gostado desse meu primeiro artigo! Se alguém tiver alguma dúvida em relação ao script, basta me mandar um e-mail!

Abraços, e até a próxima!

Famílias Improvisadas – Por Vanessa Campanario (Viva Favela)


Estima-se que 80 mil crianças e adolescentes vivam em abrigos no Brasil, segundo dados levantados pela Associação dos Magistrados do Brasil (AMB), em 2006.

Só no Morro do Salgueiro, o Projeto “Vidinha”, que funciona há 15 anos na comunidade, desenvolve um programa de ressocialização e reabilitação para jovens vindo de lares desfeitos. A iniciativa é de Doralice Araújo, dona da casa que funciona como abrigo e acolhe crianças que estão sob disputa de guarda, provenientes de conflitos familiares, negligências ou violência doméstica.

O projeto é regularizado dentro do sistema Casa-Dia, nomenclatura dada a instituições voltadas a recuperação de dependentes químicos ou restabelecimento da integridade física e emocional. “No caso do “Vidinha”, o uso desse aparelho foi permitido pela justiça, devido a metodologia de trabalho alternativa que aplicávamos”, explica Dora.

Alex cuida da parte burocrática da casa.
Alex cuida da parte burocrática da casa

As crianças chegam de manhã, recebem educação básica, atividades esportivas, aulas de inglês, informática e artes plásticas, tratamento médico e psicológico e à noite voltam para seus lares.
Elas são inseridas no projeto através de denúncias de vizinhos, às vezes levadas pelos próprios pais ou Conselho Tutelar de Vila Isabel.

A principal dificuldade desses abrigos está relacionada ao tempo de permanência dos casos, que podem durar anos. “Hoje, temos 20 jovens que estão fora do enquadramento de Casa-Dia. São crianças, praticamente excluídas de seus lares e sem ter onde ficar. Como foram cadastradas na justiça, recebemos autorização do próprio para trabalharmos com elas”, diz Alex Araújo, filho de Dora e responsável pela parte burocrática da casa.

Alessandro Barreto, 18 anos, é um dos jovens que passou a vida sob os cuidados de Dora e vive atualmente fora do sistema Casa-Dia. “Eu a considero como mãe, porque é graças a sua iniciativa que estou aqui. Ela me conhece tão bem que só de olhar sabe quando estou com problema. Ainda que eu tenha outras conquistas e forme uma família não me vejo longe dela”, garante.

De acordo com Alex, muitas sofrem problemas de adaptação. “Elas chegam desconfiadas, acuadas e tristes por causa das brigas que presenciaram. Há crianças que absorveram a violência de tal maneira que descarregam tudo aqui”.

Alessandro passou a vida sob os os cuidados de Dora
Alessandro passou a vida sob os os cuidados de Dora

Adotar para mudar

Segundo os resultados da pesquisa, inédita, realizada pela AMB, 57,9% da população consideram a adoção a melhor alternativa para mudar a realidade dos jovens que vivem nos abrigos.

Depois de perder o filho em um acidente de carro, a aposentada Nescy Fernandes de 70 anos, procurou curar sua dor ajudando crianças que viviam em uma creche na Zona Norte.

“Eu estava muito carente quando me fizeram a proposta de trabalhar na creche comunitária, em Higienópolis. O serviço voluntário de cuidar dos filhos dos outros preenchia um enorme vazio dentro de mim desde a perda do meu menino. A adoção de sete jovens foi uma conseqüência natural da convivência e apego com eles”, conta. A aposentada está entre 15,5% dos entrevistados que adotariam uma criança de abrigo.

trabalho volutário para curar a dor
Nescy: trabalho volutário para curar a dor

Para a advogada Wanda Benedicto, a quantidade de crianças que vivem nos abrigos está diretamente ligada a problemas jurídicos que atrasam os processos de adoção. “É um ato pessoal e de amor e que encontra barreiras impostas, como a morosidade do judiciário e a questão de estar ou não habilitado para isto”.

A diferença na história de Nescy é que primeiro ela adotou e depois resolveu fundar uma instituição para ajudar mais crianças. O lar “Luz e Amor”, semelhante ao de Doralice, também funciona no sistema Casa-Dia para os filhos de moradores da comunidade. E os jovens que são encaminhados pelo conselho tutelar têm a idade máxima de três anos e meio.

A questão é que muitas dessas crianças acabam prolongando a estadia por falta de um novo lar ou pela espera da reintegração na família. Passando do tempo limite que deveriam ficar para a adoção, o abrigo vira um lar permanente para aquele jovem. Segundo a pesquisa da AMB, 27% dos entrevistados procuram crianças do sexo feminino com até seis meses de vida para adotar.

Estágio na Petrobrás


A pessoa interessada a Estagiar na Petrobras precisa ir ao Edihb (Rua General Canabarro, 500, Maracanã) para fazer a inscrição. Existe um terminal de inscrições na recepção. Só precisa levar os documentos pessoais, RG, CPF, Comp. residência. Não é obrigatório levar currículo.

Os contratos são de no máximo 11 meses, para nível médio e superior. A única exceção são os estagiários de Direito, com 24 meses de estágio.

OBS: Os três primeiros dias úteis do mês, os estagiários assistem Palestras de Ambientação no Compartilhado, iniciando no 4º dia útil na gerência solicitante.

Para 6 horas, o estagiário recebe uma bolsa no valor de R$ 480,00.
Auxílio alimentação em dinheiro, no valor de R$ 381,26, mais transporte, também em dinheiro que varia, dependendo do número de conduções necessária ao itinerário, residência estágio/estágio residência.

Horário de 6 horas: 08:00h às 14:00h ou de, 11:00h às 17:00h de segunda a sexta feira.

Oportunidades de Trabalho


Estou abrindo oportunidades de trabalho para este ano de 2009.

As áreas são: Representantes Externos e Designers.

Para Representantes

Requisitos
Ter experiência na área de vendas externas entre 3 e 5 anos, noções de informática (word, excel, power point, msn, skype, internet explorer, firefox e outros), 2º grau completo e disponibilidade para trabalhar em outro bairro 1 vez na semana.

Vantagens
Comissão de 20% sobre o total de vendas + bônus de 100% do valor do sinal no ato do fechamento do contrato com o cliente + 5% de comissão sobre o total mensal de vendas.

OBS: Não pago salário, apenas as comissões discriminadas acima.

Observações
Dou treinamento, material de apoio, conta virtual profissional para controle de vendas e comissões e brindes por recordes de vendas.

Para Designers

Requisitos
Ter experiência em animações, criação de sites em Flash, desenvolvimento de banners, programação em Action Script e 2º grau completo.

Vantagens
Comissão de 50% sobre o valor do projeto a ser realizado e brindes.

Observações
Material de apoio, conta virtual profissional para controle de criação de layouts e projetos.

Vagas

Para Representantes: 4
Para Designers: 1

Se você estiver interessado, basta enviar seu currículo para: complexovirtual@yahoo.com.br .