Advertisement
Guest User

Untitled

a guest
Sep 23rd, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VBScript 11.46 KB | None | 0 0
  1. public Function geraNotaFiscal(parCodigoCliente As String, parNumeroFatura As String, parValorConta As Currency, parVencimentoConta As Date, Optional parEmissao As Date) As Boolean
  2.                        
  3. On Error GoTo erro
  4.                        
  5. Dim ultimoNumeroNF As Double
  6. Dim dataUltimaNF As Date
  7. Dim novoNumeroNF As String
  8. Dim reducaoBaseCalculoICMS As String
  9. Dim percentualReducaoBaseCalculoICMS As Double
  10. Dim percentualAliquotaICMS As Double
  11.  
  12. Dim valorBaseCalculoICMS As Currency
  13. Dim valorBaseCalculoICMS_NF As Currency
  14. Dim valorICMS As Currency
  15. Dim valorICMS_NF As Currency
  16. Dim vMD5Dados As String
  17. Dim vDataEmissao As Date
  18.  
  19. Dim rec001 As DAO.Recordset
  20. Dim rs015  As ADODB.Recordset
  21. Dim Rec16NN As ADODB.Recordset
  22. Dim Rec57NN As ADODB.Recordset
  23. Dim Arquivo As DAO.Database
  24. Dim vCNPJ As String
  25. Dim vCFOP As String
  26.  
  27.  
  28.     Set Arquivo = OpenDatabase(atual & "\SCA_DADOS.MDB")
  29.    
  30.     Dim strSQL As String
  31.    
  32.     Call Conectar_MYSQL
  33.    
  34.     geraNotaFiscal = False
  35.  
  36.     If parValorConta <= 0 Or parNumeroFatura <= 0 Then
  37.    
  38.         ' MsgBox "Valores inválidos para a geração da Nota fiscal, Confira", vbOKOnly + vbCritical, "Erro ao Gerar Nota fiscal"
  39.        
  40.         geraNotaFiscal = False
  41.        
  42.         Exit Function
  43.        
  44.     End If
  45.    
  46.     'Verifica dados do cliente da fatura.
  47.    Set rs015 = New ADODB.Recordset
  48.     rs015.Open "SELECT COUNT(*) AS total FROM cadcli WHERE codigo = '" & parCodigoCliente & "'", ConMysql, adOpenStatic, adLockReadOnly
  49.    
  50.     If rs015!total = 0 Then
  51.        
  52.         MsgBox "Erro ao encontrar cliente selecionado para geração NF : Codigo cliente = " & parCodigoCliente, vbOKOnly + vbCritical, "rs015 - Erro ao pesquisar Cliente"
  53.        
  54.         geraNotaFiscal = False
  55.        
  56.         Exit Function
  57.    
  58.     End If
  59.    
  60.    
  61.     rs015.Close
  62.     rs015.Open "SELECT * FROM cadcli WHERE codigo = '" & parCodigoCliente & "'", ConMysql, adOpenStatic, adLockReadOnly
  63.    
  64.     'VERIFICAR CFOP ====================================================================================================================>
  65.    
  66.     If DadosEmpresa("estado") = rs015!estado Then
  67.    
  68.         If rs015!tipo_empresa = "Provedor de Internet" Then
  69.        
  70.             vCFOP = "5301"
  71.        
  72.         ElseIf rs015!tipo_empresa = "Industria" Then
  73.            
  74.             vCFOP = "5302"
  75.        
  76.         ElseIf rs015!tipo_empresa = "Comércio" Then
  77.            
  78.             vCFOP = "5303"
  79.          
  80.         ElseIf rs015!tipo_empresa = "Transportadora" Then
  81.        
  82.             vCFOP = "5304"
  83.        
  84.         ElseIf rs015!tipo_empresa = "Gerador de Energia Elétrica" Then
  85.        
  86.             vCFOP = "5305"
  87.        
  88.         ElseIf rs015!tipo_empresa = "Produtor Rural" Then
  89.        
  90.             vCFOP = "5306"
  91.        
  92.         ElseIf rs015!tipo_empresa = "Pessoa Física" Then
  93.        
  94.             vCFOP = "5307"
  95.        
  96.         Else
  97.        
  98.             vCFOP = "5307"
  99.        
  100.         End If
  101.        
  102.     Else
  103.        
  104.         If rs015!tipo_empresa = "Provedor de Internet" Then
  105.        
  106.             vCFOP = "6301"
  107.        
  108.         ElseIf rs015!tipo_empresa = "Industria" Then
  109.            
  110.             vCFOP = "6302"
  111.        
  112.         ElseIf rs015!tipo_empresa = "Comércio" Then
  113.            
  114.             vCFOP = "6303"
  115.          
  116.         ElseIf rs015!tipo_empresa = "Transportadora" Then
  117.        
  118.             vCFOP = "6304"
  119.        
  120.         ElseIf rs015!tipo_empresa = "Gerador de Energia Elétrica" Then
  121.        
  122.             vCFOP = "6305"
  123.        
  124.         ElseIf rs015!tipo_empresa = "Produtor Rural" Then
  125.        
  126.             vCFOP = "6306"
  127.        
  128.         ElseIf rs015!tipo_empresa = "Pessoa Física" Then
  129.        
  130.             vCFOP = "6307"
  131.        
  132.         Else
  133.        
  134.             vCFOP = "6307"
  135.        
  136.         End If
  137.    
  138.     End If
  139.    
  140.     '=============================================
  141.    'Verifica se o cliente exige emissão de NF.
  142.    '=============================================
  143.    If NaoNull(rs015!NotaFiscal) = "" Then
  144.        
  145.         geraNotaFiscal = True
  146.        
  147.         Set rs015 = Nothing
  148.        
  149.         Exit Function
  150.        
  151.     End If
  152.        
  153.     'Verifica valores da tabela de parametros.
  154.    '============================================
  155.    'Dados de NOTAS FISCAIS
  156.    '============================================
  157.    ultimoNumeroNF = DadosEmpresa("ininumnotas")
  158.     dataUltimaNF = DadosEmpresa("DataultimaNF")
  159.    
  160.     novoNumeroNF = StrZero(Val(ultimoNumeroNF) + 1, 9)
  161.    
  162.     '============================================
  163.    'Taxas de impostos ICMS
  164.    '============================================
  165.    reducaoBaseCalculoICMS = DadosEmpresa("ReduzBCICMS")     'vReduzBCICMS
  166.    
  167.     percentualReducaoBaseCalculoICMS = DadosEmpresa("valreduzbcicms")     'vValReduzBCICMS = DadosEmpresa("valreduzbcicms")
  168.    
  169.     percentualAliquotaICMS = DadosEmpresa("aliquotaicms")    ' vAliquotaICMS = DadosEmpresa("aliquotaicms")
  170.    
  171.     'Zera variaveis de acumuladores de valores.
  172.    valorICMS = 0
  173.     valorICMS_NF = 0
  174.     valorBaseCalculoICMS = 0
  175.     valorBaseCalculoICMS_NF = 0
  176.    
  177.     'verificando os itens da conta para calcular o valor do icms e a base de calculo
  178.    Set Rec57NN = New ADODB.Recordset
  179.     Rec57NN.Open "SELECT * FROM mjconrec WHERE fatura = '" & parNumeroFatura & "'", ConMysql, adOpenStatic, adLockReadOnly
  180.    
  181.     'Se houver algum lançamento para essa fatura verifica impostos.
  182.    If Rec57NN.RecordCount > 0 Then
  183.    
  184.         Do While Rec57NN!fatura = parNumeroFatura
  185.        
  186.             'Verifica se há redução da base de ICMS de acordo com o cadastro da empresa.
  187.            If reducaoBaseCalculoICMS = "true" Then  'vReduzBCICMS = "True" Then
  188.    
  189.                 valorBaseCalculoICMS = valorBaseCalculoICMS + CCur((Rec57NN!valor * percentualReducaoBaseCalculoICMS) / 100)
  190.                 'valorBaseCalculoICMS_NF = Split(valorBaseCalculoICMS, ",")
  191.                
  192.                 valorBaseCalculoICMS_NF = ArredondaNum(valorBaseCalculoICMS)
  193.                
  194.                 valorICMS = valorICMS + CCur((percentualAliquotaICMS * valorBaseCalculoICMS) / 100)
  195.                
  196.                 valorICMS_NF = ArredondaNum(valorICMS)
  197.                
  198.                                                              
  199.             Else
  200.                                    
  201.                 '
  202.                'SERÁ CÁLCULADO O ICMS SOBRE O VALOR CHEIO DA NOTA
  203.                '01/10/2012
  204.                '
  205.                'VOLTOU A SER CALCULADO ICMS APENAS NO SCM
  206.                '01/03/2013
  207.                
  208.                 'só será calculado ICMS no item onde o campo 'SCM' for igual a 'TRUE'
  209.                '03/02/2014 a emoresa mudou o regime para simples nacional e nao vai gerar mais ICMS
  210.                'e se a aliquota de ICMS estiver igual a zero nas opcões do sistema não será mais calculado na base de calculo.
  211.                If Rec57NN!SCM = True And percentualAliquotaICMS > 0 Then
  212.    
  213.                     'calculando valor da Base de Calculo do ICMS
  214.                    'vBCICMS = vBCICMS + Rec57NN!valor
  215.                    'calculando valor do ICMS
  216.                    valorBaseCalculoICMS = valorBaseCalculoICMS + Rec57NN!valor
  217.                     'calculando valor do ICMS
  218.                    valorICMS = valorICMS + Format(Int(Val(percentualAliquotaICMS) * Rec57NN!valor) / 100, "currency")
  219.                    
  220.                 End If
  221.            
  222.             End If
  223.            
  224.             Rec57NN.MoveNext
  225.            
  226.             If Rec57NN.EOF Then
  227.            
  228.                 Exit Do
  229.                
  230.             End If
  231.            
  232.         Loop
  233.            
  234.     End If
  235.    
  236.    
  237.     'validando o parametro de data de emissao guardado no sistema
  238.    If dataUltimaNF = Empty Or IsNull(dataUltimaNF) Then dataUltimaNF = Date
  239.    
  240.     'validando a data de emissao passada por parametro
  241.    If ValidaEmissao(parEmissao) Then
  242.         If parEmissao < dataUltimaNF Then
  243.             MsgBox "Data de Emissão para Nota Fiscal Inválida !", vbInformation, App.ProductName
  244.             Exit Function
  245.           Else
  246.             vDataEmissao = parEmissao
  247.         End If
  248.       Else
  249.         'se a data de hoje for menor que a data da ultima nota,
  250.        'vDataEmissao recebera o valor da ultima nota
  251.        'para nao emitir nota com data inferior a ultima nota emitida
  252.        If Date < dataUltimaNF Then
  253.             vDataEmissao = dataUltimaNF
  254.           Else
  255.             vDataEmissao = Date
  256.         End If
  257.     End If
  258.    
  259.     'verificando qual se o numero da nova nota não existe
  260.    Set Rec16NN = New ADODB.Recordset
  261.     Rec16NN.Open "SELECT COUNT(*) AS total FROM conrec WHERE NumNota = '" & novoNumeroNF & "'", ConMysql, adOpenStatic, adLockReadOnly
  262.    
  263.     If Rec16NN!total > 0 Then
  264.              
  265.         Do While True
  266.        
  267.             novoNumeroNF = StrZero(Val(novoNumeroNF) + 1, 9)
  268.            
  269.             Set Rec16NN = New ADODB.Recordset
  270.             Rec16NN.Open "SELECT COUNT(*) AS total FROM conrec WHERE NumNota = '" & novoNumeroNF & "'", ConMysql, adOpenStatic, adLockReadOnly
  271.            
  272.             If Rec16NN!total = 0 Then Exit Do
  273.            
  274.         Loop
  275.                        
  276.     End If
  277.              
  278.     If Rec16NN.State = 1 Then Rec16NN.Close
  279.     Rec16NN.Open "SELECT * FROM conrec WHERE fatura = '" & parNumeroFatura & "'", ConMysql, adOpenStatic, adLockReadOnly
  280.    
  281.    'mudanca 08/10 - mudanca para asegurar que o CNPJ nao venha em branco
  282.    If NaoNull(Rec16NN!cgc) = "" Then
  283.         vCNPJ = rs015!cgc
  284.     Else
  285.         vCNPJ = Rec16NN!cgc
  286.     End If
  287.    
  288.     vMD5Dados = StrZero(vCNPJ, 14) & novoNumeroNF & StrZero(Int(parValorConta * 100), 12) & StrZero(Int(valorBaseCalculoICMS * 100), 12) & StrZero(Int(valorICMS * 100), 12)
  289.                
  290.     'Atualiza o lançamento de contas a receber com a nova NF.
  291.    strSQL = "UPDATE conrec SET " _
  292.     & "cgc = '" & vCNPJ & "', " _
  293.     & "valornf  = '" & ValMySQL(CStr(parValorConta)) & "', " _
  294.     & "numnota  = '" & novoNumeroNF & "', " _
  295.     & "DataNF  = '" & Format(vDataEmissao, "YYYY-MM-DD") & "', " _
  296.     & "md5dados = '" & vMD5Dados & "', " _
  297.     & "md5hash  = '" & UCase(HashMD5(vMD5Dados)) & "', " _
  298.     & "basecalcicms = '" & StrZero(Int(valorBaseCalculoICMS * 100), 12) & "', " _
  299.     & "valicms = '" & StrZero(Int(valorICMS * 100), 12) & "', " _
  300.     & "empresa = '" & Format(rs015!NotaFiscal, "0000") & "' " _
  301.  
  302.     If reducaoBaseCalculoICMS = 1 Then
  303.        
  304.         strSQL = strSQL & ", reduz = 1"
  305.        
  306.     End If
  307.     strSQL = strSQL & ", cfop = '" & vCFOP & "'"
  308.    
  309.     strSQL = strSQL _
  310.            & " WHERE fatura = '" & parNumeroFatura & "'"
  311.    
  312.     ConMysql.Execute (strSQL)
  313.    
  314.     Call Conectar_MYSQL
  315.    
  316.     ConMysql.Execute ("update opcoes_sistema set IniNumNotas = " & Val(novoNumeroNF) & " , dataUltimaNF = '" & Format(vDataEmissao, "yyyy/mm/dd") & "'")
  317.        
  318.     If ValConta <> 0 Then
  319.         'gravando no servidor o LOG dessa inclusão de conta
  320.        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"))
  321.                                                        
  322.     End If
  323.    
  324.     rs015.Close
  325.     If Rec16NN.State = 1 Then Rec16NN.Close
  326.  
  327.     Rec57NN.Close
  328.     Set Rec57NN = Nothing
  329.    
  330.     geraNotaFiscal = True
  331.    
  332. Exit Function
  333.  
  334. erro:
  335.  
  336. GravaErro err.Description, "geraNotaFiscal : Modulo GeraNF"
  337.  
  338.  
  339. End Function
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement