;** Rm_2019  *******************************************************************
;*  Relatorio Restitui‡Æo/Complemento ICMS ST                                  *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 24/03/2019 por Anivel Augusto Rodrigues
;Ultima Alteracao: 20/05/2020 por Bruno Carvalho
;Motivo Alteracao: Alterado CopyReport "...\\ICMS_IPI\\Reprocess" p/ "...\\ICMS_IPI\\RM_0030"

;*******************************************************************************
;* Rotina p/ Selecionar e Ordernar Registros                                   *
;*******************************************************************************
Proc Seleciona()
ClearAll

;*** Notas de Entrada/Estoque ***
If IsTable("\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEC")
   Then 
        {Ask} {\\Sistemas\\Estoque\\Itens}
        Moveto [Codigo do Item           ]       typeIn "_codite"
        Moveto [Descricao do Item        ] check 
        Moveto [Tipo do Item             ] check TypeIn "T"
        Moveto [Tipo Tributacao          ] check TypeIn "..60, as CST"
        Moveto [CSOSN                    ] check 
        Moveto [Aliquota de ICMS         ] check 
        Moveto [Aliquota Reduzida BCICMS ] check 
       
       {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEC" Enter
        Moveto [Numero do Lancamento     ] Check Example "doc"
        Moveto [Codigo da Empresa        ] Check TypeIn "~VSDGEMPRESA.."
        Moveto [Data de Entrada          ] Check TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
        Moveto [Tipo de Operacao         ] Check TypeIn "C"
        Moveto [Tipo do Documento        ] Check
        Moveto [Numero do Documento      ] Check
        Moveto [Serie do Documento       ] Check
        Moveto [UF                       ] Check
        {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEI" Enter
        Moveto [Numero do Lancamento     ] Example "doc"
        Moveto [Sequencia do Lancamento  ] Check
        Moveto [Codigo do Item           ] check TypeIn "_codite, ~VSDGITEM.."
        Moveto [CFO                      ] Check
        Moveto [ICMS_ST_BC               ] Check
        Moveto [Quantidade Convertida    ] Check
        Do_It!
        ClearAll
        Adiciona_Dados("COMPRAS")
EndIf

;*** Notas de Saidas ***              
If IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC")
   Then 
        {Ask} {\\Sistemas\\Estoque\\Itens}
        Moveto [Codigo do Item           ]       typeIn "_codite"
        Moveto [Descricao do Item        ] check 
        Moveto [Tipo do Item             ] check TypeIn "T"
        Moveto [Tipo Tributacao          ] check TypeIn "..60, as CST"
        Moveto [CSOSN                    ] check 
        Moveto [Aliquota de ICMS         ] check 
        Moveto [Aliquota Reduzida BCICMS ] check 
       
        {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC" Enter
        Moveto [Codigo da Empresa        ] Check Example "emp" TypeIn ", ~VSDGEMPRESA.."
        Moveto [Numero do Documento      ] Check Example "doc"
        Moveto [Serie do Documento       ] Check Example "ser"
        Moveto [Tipo do Documento        ] Check
        Moveto [Data de Emissao          ] check TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
        Moveto [Descricao da Destinacao  ]       TypeIn "..VEND.."
        Moveto [Tipo Movimento Estoque   ]       TypeIn "S"
        Moveto [UF                       ] Check
        Moveto [Consumidor Final         ] Check 
        Moveto [IE                       ] Check 
        Moveto [Tipo Pessoa              ] Check 
        Moveto [Situacao                 ]       TypeIn "Not C"
        {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"NotaI" Enter
        Moveto [Codigo da Empresa        ] Example "emp"
        Moveto [Numero do Documento      ] Example "doc"
        Moveto [Serie do Documento       ] Example "ser"
        Moveto [Item do Documento        ] Check
        Moveto [Codigo do Item           ] check TypeIn "_codite, ~VSDGITEM.."
        Moveto [CFO                      ] Check
        Moveto [Quantidade               ] Check
        Moveto [Preco Unitario           ] Check
        Moveto [Situacao_Item            ]       typeIn "Not C"
        Do_It!
        ClearAll
        Adiciona_Dados("VENDAS")
endif

EndProc   ;  (Seleciona)

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc ValoresInicial()

AGUARDE("Aguarde, carregando valores inicial de "+MES+"/"+ANO)

{Ask} {Sdicmsst} Check
Moveto [Codigo da Empresa        ] TypeIn "~VSDGEMPRESA.."
Moveto [Codigo do Item           ] TypeIn "_codite, ~VSDGITEM.."
Moveto [Ano Referencia           ] TypeIn "~ANO"
Moveto [Mes Referencia           ] TypeIn "~MES"
Do_It!
ClearAll

;----------------------------------------------------------------------------------------------------------

View NOWINDOW "Answer" CoEditKey
NR = NRecords("Answer")
Scan

  Barra(NR, RecNo())
  Aguarde("Aguarde, carregando valores inicial de "+MES+"/"+ANO+" "+BARRA_STRING)
 
  [ICMS_ValorMaior    ]=0
  [ICMS_ValorMenor    ]=0
  [ICMS_ValorAcumulado]=0
  [ValorComplemento   ]=0
  [ValorRestituir     ]=0

EndScan
Do_It!
ClearAll

Add "Answer" "Sdicmsst"
ClearAll          

;-----------------------------------------------------------------------------

AGUARDE("Aguarde, carregando valores inicial de "+MES+"/"+ANO)

{Ask} {\\Sistemas\\Estoque\\Itens}
Moveto [Codigo do Item           ]       typeIn "_codite"
Moveto [Descricao do Item        ] check 
Moveto [Tipo do Item             ] check TypeIn "T"
Moveto [Tipo Tributacao          ] check TypeIn "..60, as CST"
Moveto [CSOSN                    ] check 
Moveto [Aliquota de ICMS         ] check 
Moveto [Aliquota Reduzida BCICMS ] check 

{Ask} {Answer} Check
Moveto [Codigo do Item           ] TypeIn "_codite"
moveto [ICMS_ST_BCUnitario       ] typein ">0"
Do_It!
ClearAll

Adiciona_Dados("INICIAL")

LimpAguarde()

EndProc   

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc Adiciona_Dados(tipo)
private tipo,res

If IsEmpty("Answer")
   Then Return
EndIf

View "Reproces"
Coedit "Answer"
scan

  moveto "Reproces"
  end
  down
  
  [Codigo da Empresa      ]=[Answer->Codigo da Empresa  ]
  [Codigo do Item         ]=[Answer->Codigo do Item     ]
  [Descricao do Item      ]=[Answer->Descricao do Item  ]
  [Tipo do Item           ]=[Answer->Tipo do Item       ]

  [Tipo do Documento      ]=[Answer->Tipo do Documento  ]
  [Numero do Documento    ]=[Answer->Numero do Documento]
  [Serie do Documento     ]=[Answer->Serie do Documento ]
  [UF                     ]=[Answer->UF                 ]
  [CST                    ]=[Answer->CST                ]     
  [CSOSN                  ]=[Answer->CSOSN              ]
  
  If [Answer->Aliquota Reduzida BCICMS]>0
     Then 
          res  = Round(([Answer->Aliquota de ICMS] * [Answer->Aliquota Reduzida BCICMS])/100,2)
          [ICMS_Aliquota  ]= [Answer->Aliquota de ICMS] - res
     else 
          [ICMS_Aliquota  ]= [Answer->Aliquota de ICMS]
  endif
      
  Switch
    Case Tipo="VENDAS":
         [Tipo do Movimento      ]="S"
         [Data                   ]=[Answer->Data de Emissao ]
         [Consumidor Final       ]=[Answer->Consumidor Final]
         [IE                     ]=[Answer->IE              ]
         [Tipo Pessoa            ]=[Answer->Tipo Pessoa     ]
         [Quantidade             ]=[Answer->Quantidade      ]
         [Valor Venda            ]=[Answer->Preco Unitario  ]
         [CFOP                   ]=[Answer->CFO             ]
         [OrdemOperacao          ]="1"

    Case Tipo="COMPRAS":
         [Tipo do Movimento      ]="E"
         [Data                   ]=[Answer->Data de Entrada]
         [Quantidade             ]=[Answer->Quantidade Convertida]
         [ICMS_ST_BC             ]=[Answer->ICMS_ST_BC     ]
         [ICMS_ST_BCUnitario     ]=round([ICMS_ST_BC ]/[Quantidade],2)
         [CFOP                   ]=[Answer->CFO             ]
         [OrdemOperacao          ]="1"

    Case Tipo="INICIAL":
         [Tipo do Movimento      ]="E"
         [Data                   ]=[Answer->Data               ]
         [Quantidade             ]=[Answer->Quantidade         ]
         [ICMS_ST_BC             ]=[Answer->ICMS_ST_BC         ]
         [ICMS_ST_BCUnitario     ]=[Answer->ICMS_ST_BCUnitario ]
         [OrdemOperacao          ]="0"

  EndSwitch

  moveto "Answer"
endscan
do_it!
clearall

endproc


;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc Processar()
private NR,COD_EMPRESA,COD_ITEM,
        vrbase,vrmaior,vrmenor,vrdif,difu,
        ordem,vracum,aliqicms

AGUARDE("Aguarde, calculando valores de "+MES+"/"+ANO)

{Ask}{Reproces} typein "Fast Delete"
Moveto [Codigo da Empresa      ] typein "blank"
do_it!
clearall

{Ask}{Reproces} typein "Fast Delete"
Moveto [Codigo do Item         ] typein "blank"
do_it!
clearall

Tabela2=Cria_Temp(PrivDir())
copy "\\sistemas\\icms_ipi\\reproces" Tabela2
empty(Tabela2)
ClearAll

Sort "Reproces" On "Codigo da Empresa","Codigo do Item",
                   "Data","OrdemOperacao","Tipo do Movimento",
                   "Tipo do Documento","Numero do Documento","Serie do Documento"
ClearAll

View   Tabela2
View   "Sdicmsst"
CoEdit "Reproces"   
NR = NRecords("Reproces")

COD_EMPRESA="***"
COD_ITEM   ="***"
scan
  Barra(NR, RecNo())
  Aguarde("Aguarde, calculando valores de "+MES+"/"+ANO+" "+BARRA_STRING)

  If [Codigo da Empresa] <> COD_EMPRESA Or
     [Codigo do Item   ] <> COD_ITEM
     Then 
          COD_EMPRESA  = [Reproces->Codigo da Empresa]
          COD_ITEM     = [Reproces->Codigo do Item   ]

          Moveto "Sdicmsst"
          Moveto [Codigo da Empresa]
          Locate [Reproces->Codigo da Empresa],
                 [Reproces->Codigo do Item   ],
                 ANO,MES
          If Not RetVal
             Then End Down
                  [Codigo da Empresa   ]=COD_EMPRESA
                  [Codigo do Item      ]=COD_ITEM
                  [Ano Referencia      ]=ANO
                  [Mes Referencia      ]=MES
          EndIf
          
          if [sdicmsst->ICMS_ST_BCUnitario]<=0 and [Reproces->OrdemOperacao]="1" and [Reproces->Tipo do Movimento]="S"
             then
                  moveto Tabela2
                  end
                  down
                  [Codigo da Empresa      ]=[Reproces->Codigo da Empresa  ]
                  [Codigo do Item         ]=[Reproces->Codigo do Item     ]
                  [Descricao do Item      ]=[Reproces->Descricao do Item  ]
                  [Tipo do Item           ]=[Reproces->Tipo do Item       ]
                  [CST                    ]=[Reproces->CST                ]     
                  [CSOSN                  ]=[Reproces->CSOSN              ]
                ;;[ICMS_Aliquota          ]=[Reproces->ICMS_Aliquota      ]
                  [ICMS_Aliquota          ]=aliqicms
                
                  [Data                   ]=VSDGDTINI-1
                  [Tipo do Documento      ]="INI"
                  [Numero do Documento    ]="SEM VRST"
                  [Serie do Documento     ]="!!!"
                  [Tipo do Movimento      ]="E"
                  [OrdemOperacao          ]="0"

          endif
          Moveto "Reproces"
   
          itemok  =true
          vrbase  =0
          ordem   =0
          vracum  =0
          aliqicms=0

          getrecord "\\sistemas\\cadastro\\empresas" [Codigo da Empresa] to regempresas
          if retval
             then
                  getrecord "\\sistemas\\vendas\\estados" regempresas["UF Empresa"] to regestados
                  if retval
                     then aliqicms=regestados["Aliquota de ICMS_Interna"]
                  endif
          endif           
   EndIf

   ordem=ordem+1
   [Nome Fantasia Empresa]=regempresas["Nome Fantasia Empresa"]
   [OrdemLancamento      ]=ordem

   [ICMS_Aliquota        ]=aliqicms   ; pode ter itens com %icms diferente de 18, pesquisar posterior  

   switch
     case [Tipo do Movimento]="E":
       vrbase=[ICMS_ST_BCUnitario]

       moveto "sdicmsst"
       if [Reproces->Data]>=[Data] and [Reproces->ICMS_ST_BC]>0
          then 
               [Data                   ]=[Reproces->Data               ]
               [Tipo do Documento      ]=[Reproces->Tipo do Documento  ]
               [Numero do Documento    ]=[Reproces->Numero do Documento]
               [Serie do Documento     ]=[Reproces->Serie do Documento ]
               [CFOP                   ]=[Reproces->CFOP               ]
               [UF                     ]=[Reproces->UF                 ]
               [CST                    ]=[Reproces->CST                ]     
               [CSOSN                  ]=[Reproces->CSOSN              ]     
               [Quantidade             ]=[Reproces->Quantidade         ]
               [ICMS_ST_BC             ]=[Reproces->ICMS_ST_BC         ]
               [ICMS_ST_BCUnitario     ]=[Reproces->ICMS_ST_BCUnitario ]
       endif

     case [Tipo do Movimento]="S":
     
       if itemok and vrbase<=0
          then itemok=false
               Grava_Erro([Reproces->Codigo da Empresa]+" "+[Reproces->Codigo do Item]+" "+
                          format("W30,AL",[Reproces->Descricao do Item])+" - Item com vendas mas sem vr base icms st")          
       endif   
       vrmaior =0
       vrmenor =0
       vrdif   =0
       vrdifu  =0   
    
       switch
         case [Reproces->Valor Venda]>vrbase and vrbase>0:
              vrdifu =[Reproces->Valor Venda]-vrbase
              vrmaior=vrdifu*[Reproces->Quantidade]
              vrmaior=Round((vrmaior*[ICMS_Aliquota])/100,2)
               
         case [Reproces->Valor Venda]<vrbase and vrbase>0 And [Reproces->Consumidor Final]="S":
              vrdifu =[Reproces->Valor Venda]-vrbase
              vrmenor=vrdifu*[Reproces->Quantidade]
              vrmenor=Round((vrmaior*[ICMS_Aliquota])/100,2)

       endswitch      

       vrdif  = (vrmaior-vrmenor)
       vracum = vracum+vrdif

       [DiferencaUnitario   ]=vrdifu 
       [ICMS_ValorMaior     ]=vrmaior
       [ICMS_ValorMenor     ]=vrmenor
       [ICMS_ValorDiferenca ]=vrdif 
       [ICMS_ValorAcumulado ]=vracum
       [ICMS_ST_BCUnitario  ]=vrbase

       
       moveto "sdicmsst"
       [ICMS_ValorMaior    ]=[ICMS_ValorMaior    ]+vrmaior
       [ICMS_ValorMenor    ]=[ICMS_ValorMenor    ]+vrmenor
       [ICMS_ValorAcumulado]=vracum

       if [ICMS_ValorAcumulado]>0
          then [ValorComplemento]=[ICMS_ValorAcumulado]
               [ValorRestituir  ]=0
          else  
               [ValorRestituir  ]=[ICMS_ValorAcumulado]*-1
               [ValorComplemento]=0
       endif   
       
   endswitch

   Moveto "Reproces"
endscan
Do_It!
ClearAll

Add Tabela2 "Reproces"
Delete Tabela2

{Ask}{Reproces} 
Moveto [Codigo da Empresa      ] check
Moveto [Codigo do Item         ] check
Moveto [OrdemOperacao          ] typein"1"
Moveto [Tipo do Movimento      ] typein"S"
do_it!
clearall

If IsEmpty("Answer")
   Then ProcessoOk=False 
        MENSAGEM("N„o existem vendas no per¡odo !")
        Return
EndIf

If CheckTG_OPTRANSF[1]
   Then return
endif    

tabelaVendas=Adiciona_Indice_Temp("Codigo da Empresa,Codigo do Item")

{Ask} typein TabelaVendas Enter 
Moveto [Codigo da Empresa      ] typein "_cemp"
Moveto [Codigo do Item         ] typein "_cite"
{Ask}{Reproces} check 
Moveto [Codigo da Empresa      ] typein "_cemp"
Moveto [Codigo do Item         ] typein "_cite"
do_it!
clearall

Tabela=Cria_Temp(PrivDir())
Switch
  case VSDGCODMODELO="01"  : 
    Copy "Answer" Tabela
 
  case VSDGCODMODELO="02"  : 
    {Ask} {Answer}
    Moveto [Codigo da Empresa    ] check
    Moveto [Nome Fantasia Empresa] check
    Moveto [Codigo do Item       ] check
    Moveto [Descricao do Item    ] check
    Moveto [Tipo do Item         ] check
    Moveto [CST                  ] check
    Moveto [CSOSN                ] check
    Moveto [ICMS_Aliquota        ] check
    moveto [OrdemOperacao        ] typein "1"
    moveto [Tipo do Movimento    ] typein "S"
    Moveto [ICMS_ValorMaior      ] typein "calc sum as \"ICMS_ValorMaior\""
    Moveto [ICMS_ValorMenor      ] typein "calc sum as \"ICMS_ValorMenor\""
    Moveto [ICMS_ValorDiferenca  ] typein "calc sum as \"ICMS_ValorDiferenca\""
    do_It!
    ClearAll
     
    Copy "Answer" Tabela
endSwitch


Delete TabelaVendas

LimpAguarde()

EndProc   

;*******************************************************************************
;* Rotina grava erros                                                          *
;*******************************************************************************
Proc Grava_Erro(erro)
Private erro

If Not ENCONTRADO_INCONSISTENCIA
   Then FileWrite        ARQ_ERRO From  "\027x0\015"+
                                        "** Relatorio de erros ICMS ST Complemento/Restitui‡Æo"+" **\n\n"
EndIf   
FileWrite Append ARQ_ERRO From  erro+"\n"

ENCONTRADO_INCONSISTENCIA=True
EndProc

;*******************************************************************************
; SaldoCont                                                                    *
;*******************************************************************************
Proc TransfereValores()

ClearAll

Aguarde("Aguarde, transferindo valores de "+MES+"/"+ANO+" para "+MESREF+"/"+ANOREF)

{Ask} {Sdicmsst} typein "Fast Delete"              
Moveto [Codigo da Empresa     ] TypeIn "~VSDGEMPRESA.."
Moveto [Codigo do Item        ] TypeIn "~VSDGITEM.."
Moveto [Ano Referencia        ] TypeIn "~ANOREF"
Moveto [Mes Referencia        ] TypeIn "~MESREF"
Do_It!
ClearAll

{Ask} {Sdicmsst} check              
Moveto [Codigo da Empresa     ] TypeIn "~VSDGEMPRESA.."
Moveto [Codigo do Item        ] TypeIn "~VSDGITEM.."
Moveto [Ano Referencia        ] TypeIn "~ANO"
Moveto [Mes Referencia        ] TypeIn "~MES"
Do_It!
ClearAll

If IsEmpty("Answer")
   Then MENSAGEM("N„o existem registros a processar")
        Return
EndIf


{Ask} {Answer}
Moveto [Ano Referencia        ] TypeIn "Changeto ~ANOREF"
Moveto [Mes Referencia        ] TypeIn "Changeto ~MESREF"
Moveto [ICMS_ValorMaior       ] TypeIn "Changeto Blank"
Moveto [ICMS_ValorMenor       ] TypeIn "Changeto Blank"
Moveto [ICMS_ValorAcumulado   ] TypeIn "Changeto Blank"
Moveto [ValorComplemento      ] TypeIn "Changeto Blank"
Moveto [ValorRestituir        ] TypeIn "Changeto Blank"
Do_It!
ClearAll

Add "Answer" "Sdicmsst"
ClearAll          

LimpAguarde()
EndProc

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""
TECLA=""
If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = 9: Temp=False
     Case Evento["KeyCode"] = -59: Dialog_F1()
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"        : Campo="NO"
            Case Campo="TG_ITEM"           : Campo="TG_EMPRESA"
            Case Campo="TG_MESANO"         : Campo="TG_ITEM"
            Case Campo="TG_OPTRANSF"       : Campo="TG_MESANO"
            Case Campo="TG_CODMODELO"      : Campo="TG_OPTRANSF"
            Case Campo="YES" Or Campo="NO" : Campo="TG_EMPRESA"
          EndSwitch
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or 
           Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
           SYS_TECLA_ACIONADA=Evento["KeyCode"]
           Seta_Tecla_Acionada()
           CancelDialog
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_EMPRESA"    : Campo="TG_ITEM"
                    Case Campo="TG_ITEM"       : Campo="TG_MESANO"
                    Case Campo="TG_MESANO"     : Campo="TG_OPTRANSF"
                    Case Campo="TG_OPTRANSF"   : Campo="TG_CODMODELO" 
                    Case Campo="TG_CODMODELO"  : Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
    Case Campo = "" :
         MSG_CAMPO = ""
EndSwitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;************************************
;* ROTINA PARA Ler/Gravacao Opcao   *
;************************************
Proc ModeloRelatoriosCarregaLista()

VSDGCODMODELO     = ""
VSDGMODELO        = ""

;ModeloRelatoriosAdd("XXX XX maximo 70 XX")

ModeloRelatoriosAdd("Criar") ; linha obrigatoria inicial
ModeloRelatoriosAdd("01  Anal¡tico")
ModeloRelatoriosAdd("02  Sint‚tico")
ModeloRelatoriosAdd("Fim")
                           
EndProc ;ModeloRelatoriosCarregaLista


;*******************************************************************************
;* ROTINA PRINCIPAL                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Cadastro\\Bibliot"
LimpAguarde()

VSDGEMPRESA    = ""
VSDGITEM       = ""
VSDGMESANO     = ""
VSDGDTINI      = BlankDate()
VSDGDTFIM      = BlankDate()

Array TG_OPTRANSF[1]
TG_OPTRANSF[1]="Transferir para o pr¢ximo Mˆs"

Array CheckTG_OPTRANSF[ArraySize(TG_OPTRANSF)]
CheckTG_OPTRANSF[1]=False

ModeloRelatoriosCarregaLista()

While True

  ShowDialog "Restitui‡Æo/Complemento ICMS ST" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC","TAB",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
  @ 05,05   Height 15 Width 72

    Label  @ 00,00 "Empresa"  For "TG_EMPRESA"
    Accept @ 01,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_EMPRESA"    To VSDGEMPRESA
    Accept @ 01,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMEMPRESA" To VSDGNOMEMP

    Label  @ 02,00 "Item"  For "TG_ITEM"
    Accept @ 03,01 Width 33 "A10" Picture "#*#" Tag "TG_ITEM"     To VSDGITEM
    Accept @ 04,01 Width 33 "A35" Picture "!*!" Tag "TG_NOMITEM" To VSDGNOMITEM
    
    Label  @ 05,00 "Mˆs/Ano Referente"  For "TG_MESANO"
    Accept @ 06,01 Width 10 "A07"  Picture "##;.####" Tag "TG_MESANO"  To VSDGMESANO

    Label  @ 00,35 "Valores apurados"  For "TG_OPTRANSF"
    CheckBoxes @ 01,35 Height 1 Width 34 Tag "TG_OPTRANSF"
    TG_OPTRANSF[1] to CheckTG_OPTRANSF[1]

    Label  @ 08,00  "Modelo de ~R~elat¢rio"  For "TG_CODMODELO"
    Accept @ 09,01  Width 06 "A3"  Picture "!*!" Tag "TG_CODMODELO" To VSDGCODMODELO
    Accept @ 09,06  Width 63 "A60"  Picture "!*!" Tag "TG_MODELO" To VSDGMODELO

    Pushbutton @ 11,22 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 11,36 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

  EndDialog
  If Not RetVal Then QuitLoop EndIf
  If Not Valida_ShowDialog("") Then Loop EndIf

  If not CheckTG_OPTRANSF[1]
     Then 
          if not ValidarModelosRelatorios() then loop endif
  endif                 

  MES_ATUAL=AlinhM(StrVal(Month(Today())),2)
  ANO_ATUAL=StrVal(Year(Today()))
  
  MES=SubStr(VSDGMESANO,1,2)
  ANO=SubStr(VSDGMESANO,4,4)
  MESANO=MES+"."+ANO
  If NumVal(MES) = 12
     Then MESREF = "01"
          ANOREF = NumVal(ANO)+1
          ANOREF = AlinhM(StrVal(ANOREF),4)
     Else MESREF = NumVal(MES)+1
          MESREF = AlinhM(StrVal(MESREF),2)
          ANOREF = ANO
  Endif
  If NumVal(MES) > 12 Or NumVal(MES) = 0
     Then MENSAGEM("Mˆs inv lido!")
          Loop
  EndIf

  DataOk=True
  Switch
    Case NumVal(ANO)=Year(Today()) And NumVal(MES)>Month(Today()) : DataOk=False
    Case NumVal(ANO)>Year(Today())                                : DataOk=False
  EndSwitch
  If Not DataOk
     Then Mensagem("O Mes/Ano "+VSDGMESANO+" informado maior que da data atual "+Format("D13",Today())+" !")
          Loop
  EndIf        

;  If (numval(ANO)<2019) or (numval(ANO)=2019 and numval(MES)<3)
;     Then Mensagem("O Mes/Ano "+VSDGMESANO+" fora do per¡do obrigat¢rio !")
;          Loop
;  EndIf        


  If CheckTG_OPTRANSF[1] And NumVal(ANO)=Year(Today()) And NumVal(MES)=Month(Today())
     Then MSG=    "O novo Mes/Ano "+MESREF+"."+ANOREF+" informado maior que da data atual "+Format("D13",Today())+" !// //"
          MSG=MSG+"Voce esta encerrando o mes de "+VSDGMESANO+". // //"
          MSG=MSG+"Deseja transferir o valores de "+VSDGMESANO+" para "+MESREF+"."+ANOREF+" ?"
          If Not ConfGeral_N(MSG)
             Then Mensagem("Opera‡„o Cancelada !")
                  Loop
          EndIf   
  endif
  If not CheckTG_OPTRANSF[1]
     Then 
          DISPOSITIVO()
          If OK="" Then Loop EndIf
  EndIf   

  VSDGDTINI = DateVal("01."+MES+"."+ANO)
  VSDGDTFIM = Ultimo_Dia_Data(VSDGDTINI)

  empty("Reproces")

  Monta_Dir_Trab(VSDGDTINI,VSDGDTFIM)
  While Novo_Dir_Trab()
    Seleciona()
  EndWhile
  ValoresInicial()
  
  ENCONTRADO_INCONSISTENCIA=false
  ARQ_ERRO= Privdir()+"ICMSST.ERR"
  Deleta_Arquivo(ARQ_ERRO)
  
  ProcessoOk=True
  Processar()
  
  If CheckTG_OPTRANSF[1]
     Then 
          TransfereValores()
     else
          If ProcessoOk
             Then 
                  Switch
                    case VSDGCODMODELO="01"  : copyreport "\\base\\sistemas\\icms_ipi\\RM_0030" "R" Tabela "R"
                    case VSDGCODMODELO="02"  : copyreport "\\base\\sistemas\\icms_ipi\\RM_0030" "1" Tabela "R"
                  endSwitch
                  IMPRIREL(Tabela,"R")
                  
                  Delete Tabela
          EndIf
  EndIf

   if ENCONTRADO_INCONSISTENCIA
      then
           MSG=" //"
           MSG=MSG+"Relat¢rio de ocorrˆncia de erros ICMS ST !// //"
           MSG=MSG+"Verificar o relat¢rio se houve inconsistˆncias !"
           mensagem(MSG)
   
           DISPOSITIVO_OPCAO="V"
           PDFZEBRA = False
           
           ImpriArq(ARQ_ERRO)
   endif

EndWhile
ClearAll
Release Vars All
Release Procs All
