Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public Function geraNotaFiscal(parCodigoCliente As String, parNumeroFatura As String, parValorConta As Currency, parVencimentoConta As Date, Optional parEmissao As Date) As Boolean
- On Error GoTo erro
- Dim ultimoNumeroNF As Double
- Dim dataUltimaNF As Date
- Dim novoNumeroNF As String
- Dim reducaoBaseCalculoICMS As String
- Dim percentualReducaoBaseCalculoICMS As Double
- Dim percentualAliquotaICMS As Double
- Dim valorBaseCalculoICMS As Currency
- Dim valorBaseCalculoICMS_NF As Currency
- Dim valorICMS As Currency
- Dim valorICMS_NF As Currency
- Dim vMD5Dados As String
- Dim vDataEmissao As Date
- Dim rec001 As DAO.Recordset
- Dim rs015 As ADODB.Recordset
- Dim Rec16NN As ADODB.Recordset
- Dim Rec57NN As ADODB.Recordset
- Dim Arquivo As DAO.Database
- Dim vCNPJ As String
- Dim vCFOP As String
- Set Arquivo = OpenDatabase(atual & "\SCA_DADOS.MDB")
- Dim strSQL As String
- Call Conectar_MYSQL
- geraNotaFiscal = False
- If parValorConta <= 0 Or parNumeroFatura <= 0 Then
- ' MsgBox "Valores inválidos para a geração da Nota fiscal, Confira", vbOKOnly + vbCritical, "Erro ao Gerar Nota fiscal"
- geraNotaFiscal = False
- Exit Function
- End If
- 'Verifica dados do cliente da fatura.
- Set rs015 = New ADODB.Recordset
- rs015.Open "SELECT COUNT(*) AS total FROM cadcli WHERE codigo = '" & parCodigoCliente & "'", ConMysql, adOpenStatic, adLockReadOnly
- If rs015!total = 0 Then
- MsgBox "Erro ao encontrar cliente selecionado para geração NF : Codigo cliente = " & parCodigoCliente, vbOKOnly + vbCritical, "rs015 - Erro ao pesquisar Cliente"
- geraNotaFiscal = False
- Exit Function
- End If
- rs015.Close
- rs015.Open "SELECT * FROM cadcli WHERE codigo = '" & parCodigoCliente & "'", ConMysql, adOpenStatic, adLockReadOnly
- 'VERIFICAR CFOP ====================================================================================================================>
- If DadosEmpresa("estado") = rs015!estado Then
- If rs015!tipo_empresa = "Provedor de Internet" Then
- vCFOP = "5301"
- ElseIf rs015!tipo_empresa = "Industria" Then
- vCFOP = "5302"
- ElseIf rs015!tipo_empresa = "Comércio" Then
- vCFOP = "5303"
- ElseIf rs015!tipo_empresa = "Transportadora" Then
- vCFOP = "5304"
- ElseIf rs015!tipo_empresa = "Gerador de Energia Elétrica" Then
- vCFOP = "5305"
- ElseIf rs015!tipo_empresa = "Produtor Rural" Then
- vCFOP = "5306"
- ElseIf rs015!tipo_empresa = "Pessoa Física" Then
- vCFOP = "5307"
- Else
- vCFOP = "5307"
- End If
- Else
- If rs015!tipo_empresa = "Provedor de Internet" Then
- vCFOP = "6301"
- ElseIf rs015!tipo_empresa = "Industria" Then
- vCFOP = "6302"
- ElseIf rs015!tipo_empresa = "Comércio" Then
- vCFOP = "6303"
- ElseIf rs015!tipo_empresa = "Transportadora" Then
- vCFOP = "6304"
- ElseIf rs015!tipo_empresa = "Gerador de Energia Elétrica" Then
- vCFOP = "6305"
- ElseIf rs015!tipo_empresa = "Produtor Rural" Then
- vCFOP = "6306"
- ElseIf rs015!tipo_empresa = "Pessoa Física" Then
- vCFOP = "6307"
- Else
- vCFOP = "6307"
- End If
- End If
- '=============================================
- 'Verifica se o cliente exige emissão de NF.
- '=============================================
- If NaoNull(rs015!NotaFiscal) = "" Then
- geraNotaFiscal = True
- Set rs015 = Nothing
- Exit Function
- End If
- 'Verifica valores da tabela de parametros.
- '============================================
- 'Dados de NOTAS FISCAIS
- '============================================
- ultimoNumeroNF = DadosEmpresa("ininumnotas")
- dataUltimaNF = DadosEmpresa("DataultimaNF")
- novoNumeroNF = StrZero(Val(ultimoNumeroNF) + 1, 9)
- '============================================
- 'Taxas de impostos ICMS
- '============================================
- reducaoBaseCalculoICMS = DadosEmpresa("ReduzBCICMS") 'vReduzBCICMS
- percentualReducaoBaseCalculoICMS = DadosEmpresa("valreduzbcicms") 'vValReduzBCICMS = DadosEmpresa("valreduzbcicms")
- percentualAliquotaICMS = DadosEmpresa("aliquotaicms") ' vAliquotaICMS = DadosEmpresa("aliquotaicms")
- 'Zera variaveis de acumuladores de valores.
- valorICMS = 0
- valorICMS_NF = 0
- valorBaseCalculoICMS = 0
- valorBaseCalculoICMS_NF = 0
- 'verificando os itens da conta para calcular o valor do icms e a base de calculo
- Set Rec57NN = New ADODB.Recordset
- Rec57NN.Open "SELECT * FROM mjconrec WHERE fatura = '" & parNumeroFatura & "'", ConMysql, adOpenStatic, adLockReadOnly
- 'Se houver algum lançamento para essa fatura verifica impostos.
- If Rec57NN.RecordCount > 0 Then
- Do While Rec57NN!fatura = parNumeroFatura
- 'Verifica se há redução da base de ICMS de acordo com o cadastro da empresa.
- If reducaoBaseCalculoICMS = "true" Then 'vReduzBCICMS = "True" Then
- valorBaseCalculoICMS = valorBaseCalculoICMS + CCur((Rec57NN!valor * percentualReducaoBaseCalculoICMS) / 100)
- 'valorBaseCalculoICMS_NF = Split(valorBaseCalculoICMS, ",")
- valorBaseCalculoICMS_NF = ArredondaNum(valorBaseCalculoICMS)
- valorICMS = valorICMS + CCur((percentualAliquotaICMS * valorBaseCalculoICMS) / 100)
- valorICMS_NF = ArredondaNum(valorICMS)
- Else
- '
- 'SERÁ CÁLCULADO O ICMS SOBRE O VALOR CHEIO DA NOTA
- '01/10/2012
- '
- 'VOLTOU A SER CALCULADO ICMS APENAS NO SCM
- '01/03/2013
- 'só será calculado ICMS no item onde o campo 'SCM' for igual a 'TRUE'
- '03/02/2014 a emoresa mudou o regime para simples nacional e nao vai gerar mais ICMS
- 'e se a aliquota de ICMS estiver igual a zero nas opcões do sistema não será mais calculado na base de calculo.
- If Rec57NN!SCM = True And percentualAliquotaICMS > 0 Then
- 'calculando valor da Base de Calculo do ICMS
- 'vBCICMS = vBCICMS + Rec57NN!valor
- 'calculando valor do ICMS
- valorBaseCalculoICMS = valorBaseCalculoICMS + Rec57NN!valor
- 'calculando valor do ICMS
- valorICMS = valorICMS + Format(Int(Val(percentualAliquotaICMS) * Rec57NN!valor) / 100, "currency")
- End If
- End If
- Rec57NN.MoveNext
- If Rec57NN.EOF Then
- Exit Do
- End If
- Loop
- End If
- 'validando o parametro de data de emissao guardado no sistema
- If dataUltimaNF = Empty Or IsNull(dataUltimaNF) Then dataUltimaNF = Date
- 'validando a data de emissao passada por parametro
- If ValidaEmissao(parEmissao) Then
- If parEmissao < dataUltimaNF Then
- MsgBox "Data de Emissão para Nota Fiscal Inválida !", vbInformation, App.ProductName
- Exit Function
- Else
- vDataEmissao = parEmissao
- End If
- Else
- 'se a data de hoje for menor que a data da ultima nota,
- 'vDataEmissao recebera o valor da ultima nota
- 'para nao emitir nota com data inferior a ultima nota emitida
- If Date < dataUltimaNF Then
- vDataEmissao = dataUltimaNF
- Else
- vDataEmissao = Date
- End If
- End If
- 'verificando qual se o numero da nova nota não existe
- Set Rec16NN = New ADODB.Recordset
- Rec16NN.Open "SELECT COUNT(*) AS total FROM conrec WHERE NumNota = '" & novoNumeroNF & "'", ConMysql, adOpenStatic, adLockReadOnly
- If Rec16NN!total > 0 Then
- Do While True
- novoNumeroNF = StrZero(Val(novoNumeroNF) + 1, 9)
- Set Rec16NN = New ADODB.Recordset
- Rec16NN.Open "SELECT COUNT(*) AS total FROM conrec WHERE NumNota = '" & novoNumeroNF & "'", ConMysql, adOpenStatic, adLockReadOnly
- If Rec16NN!total = 0 Then Exit Do
- Loop
- End If
- If Rec16NN.State = 1 Then Rec16NN.Close
- Rec16NN.Open "SELECT * FROM conrec WHERE fatura = '" & parNumeroFatura & "'", ConMysql, adOpenStatic, adLockReadOnly
- 'mudanca 08/10 - mudanca para asegurar que o CNPJ nao venha em branco
- If NaoNull(Rec16NN!cgc) = "" Then
- vCNPJ = rs015!cgc
- Else
- vCNPJ = Rec16NN!cgc
- End If
- vMD5Dados = StrZero(vCNPJ, 14) & novoNumeroNF & StrZero(Int(parValorConta * 100), 12) & StrZero(Int(valorBaseCalculoICMS * 100), 12) & StrZero(Int(valorICMS * 100), 12)
- 'Atualiza o lançamento de contas a receber com a nova NF.
- strSQL = "UPDATE conrec SET " _
- & "cgc = '" & vCNPJ & "', " _
- & "valornf = '" & ValMySQL(CStr(parValorConta)) & "', " _
- & "numnota = '" & novoNumeroNF & "', " _
- & "DataNF = '" & Format(vDataEmissao, "YYYY-MM-DD") & "', " _
- & "md5dados = '" & vMD5Dados & "', " _
- & "md5hash = '" & UCase(HashMD5(vMD5Dados)) & "', " _
- & "basecalcicms = '" & StrZero(Int(valorBaseCalculoICMS * 100), 12) & "', " _
- & "valicms = '" & StrZero(Int(valorICMS * 100), 12) & "', " _
- & "empresa = '" & Format(rs015!NotaFiscal, "0000") & "' " _
- If reducaoBaseCalculoICMS = 1 Then
- strSQL = strSQL & ", reduz = 1"
- End If
- strSQL = strSQL & ", cfop = '" & vCFOP & "'"
- strSQL = strSQL _
- & " WHERE fatura = '" & parNumeroFatura & "'"
- ConMysql.Execute (strSQL)
- Call Conectar_MYSQL
- ConMysql.Execute ("update opcoes_sistema set IniNumNotas = " & Val(novoNumeroNF) & " , dataUltimaNF = '" & Format(vDataEmissao, "yyyy/mm/dd") & "'")
- If ValConta <> 0 Then
- 'gravando no servidor o LOG dessa inclusão de conta
- Call UserLog(rs015!Codigo, "INCLUSÃO DE CONTA: " & "Nº " & StrZero(Val(parNumeroFatura), 11) & " ||", fLoginTxTUserName, Format(Date, "yyyy-mm-dd"), Format(Now, "yyyy-mm-dd hh:mm:ss"))
- End If
- rs015.Close
- If Rec16NN.State = 1 Then Rec16NN.Close
- Rec57NN.Close
- Set Rec57NN = Nothing
- geraNotaFiscal = True
- Exit Function
- erro:
- GravaErro err.Description, "geraNotaFiscal : Modulo GeraNF"
- End Function
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement