segunda-feira, 12 de março de 2012

Como calcular preço de venda [passo-a-passo]


O Brasil tem um mercado informal  muito aberto e, muitas vezes, os trabalhadores autônomos se perdem ao calcular o preço de seus produtos de forma a pagar todas as suas despesas e ainda tirar um lucro legal. Existem alguns cursos voltados para este fim, com dicas de criação, formação de preço e gerenciamento do seu negócio (o SEBRAE é um excelente exemplo disso). Mas para uma pergunta simples, existe também respostas simples. Para facilitar a vida desses pequenos negócios, o Formigueiros também é cultura e explica passo-a-passo como se calcula o preço de venda de um produto. Para calcular é preciso ter as informações conforme exemplo abaixo:

1) Custo unitário do produto: R$ 12,50;
2) Percentual de despesas variáveis*: 9% (sendo 4% do simples nacional + 5% da comissão de vendas);
3) Percentual de despesas fixas**: 25% (esse percentual é medido pelo total das despesas fixas sobre o faturamento. Neste exemplo, utiliza-se o faturamento total de R$ 144.000,00 e despesas fixas de R$ 36.000,00, ou seja, 36.000/144.000,00 = 0,25 *100 = 25%);
4) Defina sua margem de lucro líquido: 12% (aqui você irá definir quanto você quer ter de lucro com o produto vendido já deduzidas todas as despesas);
5) Deduza de 100% as despesas acima citadas (fixas, variáveis e licro líquido): 100% – 46% = 54% (este é o percentual que deve ser aplicado sobre o preço unitário de compra do produto para definir qual o seu preço de venda);
6) Divida o custo unitário (de compra) por 54 (e multiplique por 100): R$ 12,50/54 * 100 = R$ 23,15

NOTA: Despesas fixas são as despesas permanentes da empresa como água, luz, telefone, aluguel, etc. Já as despesas variáveis são, como o próprio nome diz, despesas eventuais ou sem valor permanente como encargos, aquisição de bens ou produtos, etc.
Pronto, este é o valor de venda do seu produto. A dica é do blog do Élcio. Boas vendas e sucesso nos seus negócios.

Cálculo ICMS CST 00

Como prometido, vamos iniciar a explicação para o calculo da CST de ICMS 00, e suas possíveis variações.

ICMS CST 00 quer dizer, Tributada Integralmente. Para calcular este ICMS é simples, basta multiplicar a base de calculo(veja como aqui obter a base de calculo) pelo aliquota estabelecida.

Mais ou menos assim:

Base = 100,00

Alíquota = 17%

Valor ICMS = 100,00 x 17% = 17,00

Simples né? Então vamos começar a complicar

Embora a operação seja tributada integralmente, ela pode possuir Alíquota de ICMS reduzida.
A alíquota de ICMS também muda de acordo com o estado de origem x destino da mercadoria.

Algumas regras básicas:

1 – Venda para consumidor final, não contribuinte do ICMS, residente em UF diversa do emitente da nota fiscal, aplica-se a alíquota interna da UF do emissor da nota fiscal.

2 – Venda para consumidor final, contribuinte do ICMS, residente em UF diversa do emitente da nota fiscal, aplica-se a alíquota interestadual entre as UF’s.

3 – Venda para contribuinte do ICMS que não seja consumidor final, aplica-se a alíquota interestadual.

Obs: Como já citei anteriormente, a alíquota do ICMS é uma característica do ITEM da nota, então dentro de uma nota, pode ter vários itens tributados integralmente, mas cada um com alíquota de ICMS diferente. E isso em operações internas(dentro do estado)

Precisa prestar atenção a tabela de alíquota entre UF’s (Confira a tabela aqui)

Lembrando, essas regras são aplicadas para a operações tributadas integralmente, ou seja, CST 00.

quinta-feira, 8 de março de 2012

Evitar que a aplicação trave ao executar um processo grande

Já devemos ter precisado executar um comando muito grande e, para ficar mais amigável ao usuário, colocar uma barrinha de progresso, para avisá-lo em que estágio de processamento está.

Porém, nos deparamos com um pequeno problema: Nossa aplicação fica travada enquanto executa o comando!! Como resolver isto?

Existe um método chamado Application.ProcessMessages;   que força a aplicação processas as mensagens do sistema operacional, como por exemplo a exibição correta do form. Com isto, não só o form é visualizado corretamente, mas também nossa barrinha de progresso funciona perfeitamente. :D

Vejamos um exemplo simples:

Digamos que tenhamos um ADOTable com vários registros abertos e vamos percorrer um a um:

ADOTable1.First;
  while not (ADOTable1.Eof) do
  begin
      lblStatus.Caption := 'Processando registro...'; // exibimos alguma mensagem
      Application.ProcessMessages; // chamados o método que força o SO a desenha a janela
      ADOTable1.Next; // pula para o próximo registro da tabela
  end;

Pronto. Agora é só você implementar uma barra de progresso e colocar mais algumas perfumarias (objetos que deixam a cara do formulário mais amigável para o usuário) caso seja necessário :)

segunda-feira, 30 de janeiro de 2012

Detectando o Numero Serial do HD

Function SerialNum(FDrive:String) :String;
Var
    Serial:   DWord;
    DirLen,Flags: DWord;
    DLabel : Array[0..11] of Char;
begin
     Try GetVolumeInformation(PChar(FDrive+':\'),dLabel,12,@Serial,DirLen,Flags,nil,0);
            Result := IntToHex(Serial,8);
       Except Result :='';
end;
end;

Recuperar a Velocidade da CPU

Esta interessante função recupera a velocidade de processamento aproximada da CPU:

const
ID_BIT=$200000; // EFLAGS ID bit
 
function GetCPUSpeed: Double;
const
DelayTime = 500;
var
TimerHi, TimerLo: DWORD;
PriorityClass, Priority: Integer;
begin
try
PriorityClass := GetPriorityClass(GetCurrentProcess);
Priority := GetThreadPriority(GetCurrentThread);
 
SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread,THREAD_PRIORITY_TIME_CRITICAL);
 
Sleep(10);
asm
dw 310Fh // rdtsc
mov TimerLo, eax
mov TimerHi, edx
end;
Sleep(DelayTime);
asm
dw 310Fh // rdtsc
sub eax, TimerLo
sbb edx, TimerHi
mov TimerLo, eax
mov TimerHi, edx
end;
 
SetThreadPriority(GetCurrentThread, Priority);
SetPriorityClass(GetCurrentProcess, PriorityClass);
 
Result := TimerLo / (1000.0 * DelayTime);
except end;
end;
No evento OnClick, basta atribuir a saída da função a uma string:

procedure TForm1.Button1Click(Sender: TObject);
var cpuspeed:string;
begin
cpuspeed:=Format('%f MHz', [GetCPUSpeed]);
edit1.text := cpuspeed;
end;

Verificando o tipo de Drive

Verificando o tipo de Drive

O código abaixo implementa uma função para testar qual o tipo de drive da unidade especificada.

Para isto, é necessário utilizar uma função de API do windows chamada GetTypeDrive.

Esta função retorna valores default que indicam o tipo de drive selecionado.(Drive_Removable,Drive_Fixed,Drive_Remote,Drive_CdRom,Drive_RamDisk)

Código Completo:

Function Tipo_Drive(Drive:Char):String;
Const
Drive_Removable = 2;
Drive_Fixed = 3;
Drive_Remote = 4;
Drive_CdRom = 5;
Drive_RamDisk = 6;
var
Tipo: byte;
begin
Tipo := GetDriveType(PChar(Drive + ':\'));
Case Tipo of
0: Result := 'Indeterminado';
1: Result := 'Inexistente ';
2: Result := 'Removível';
3: Result := 'Fixo';
4: Result := 'Rede';
5: Result := 'CD-ROM';
6: Result := 'RAM Disk';
else Result := ' Erro';
End;
end;

Consultar por mês de um campo data

Problema:

Tenho um cadastro de clientes com Codigo, Nome, DataNasc, etc.

Preciso fazer uma consulta onde apareceão apenas os clientes que fazem aniversário em determinado mês. Como fazer?

Solução:

Use uma Query como abaixo:

- Coloque no form os seguintes componentes:

  * TQuery

  * TDataSource

  * TDBGrid

  * TEdit

  * TButton

- Altere as propriedades dos componentes como abaixo:

  * Query1.DatabaseName = (alias do BDE)

  * DataSource1.DataSet = Query1

  * DBGrid1.DataSource = DataSource1

 - Coloque o código abaixo no evento OnClick de Button1:

  Query1.Close;
  Query1.SQL.Clear;
  Query1.SQL.Add('select * from dCli');
  Query1.SQL.Add('where extract(month from DataNasc) = :Mes');
  Query1.ParamByName('Mes').AsInteger := StrToInt(Edit1.Text);
  Query1.Open;
- Execute. Digite um número de 1 a 12 no Edit e clique no botão.

Observações

Os números de 1 a 12 representam, respectivamente, os meses de Janeiro a Dezembro. Este exemplo foi testado com Delphi4, BDE5 e tabela Paradox7.

Curso de Delphi: 7.Consultas SQL