;** FT_NCDEV  *******************************************************************
;*  Rotina de faturamento de Nota de Compra/Devolu‡Æo                           *
;********************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 13/03/2021 por Anivel Augusto Rodrigues
;Motivo Alteracao: 16/03/2021 por Bruno Carvalho
;Ultima Alteracao: Ajustes para buscar itens da nota de entrada quando devolu‡Æo for referenciada a terceiro 
;Ultima Alteracao: 19/04/2021 por Anivel Augusto Rodrigues                            
;Motivo Alteracao: Ajustes mensagens, layout, rodape, qtd, confirmar excluir 

;*******************************************************************************
;* Rotina de Entra Reajuste de Preco                                           *
;*******************************************************************************
Proc SD_Consulta_MudaQuantidade(Disparo,Campo,Evento,Elemento)
Private Disparo,Campo,Evento,Elemento,REGISTRO

Temp=True
TECLA="Esc=Retornar  "
MSGCAMPO=""

If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = -59: 
           If Campo="I_UN_Item" 
             Then Seleciona_Opcoes("Unidade","F1_Temp")
          EndIf
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="I_Quantidade"     : CancelDialog
          EndSwitch
     Case Evento["KeyCode"] = 13:      
          Temp=False
          Switch
            Case Campo="I_Quantidade"        : 
                 VSD_I_Quantidade=ControlValue("I_Quantidade")
                 If VSD_I_Quantidade>0
                    Then Array_Registro[Indice] = SubStr(Array_Registro[Indice],1,49)+Format("W10.3,EIC",VSD_I_Quantidade)+" "+
                                                  SubStr(Array_Registro[Indice],61,len(Array_Registro[Indice]))
                         AcceptDialog
                 EndIf
          EndSwitch
          RefreshDialog
   EndSwitch
EndIf

SelectControl Campo

MontaRodapeSD(MSGCAMPO, TECLA)
RefreshDialog

Return Temp

EndProc ;SD_Consulta_MudaQuantidade()


;*******************************************************************************
;* Ajusta Quantidade                                                           *
;*******************************************************************************
Proc Ajusta_Quantidade(QTD)
Private QTD

If QTD=""
   Then QTD = BlankNum()
   Else PosI = Search(".",QTD)
        If PosI>0
           Then QTD = SubStr(QTD,1,PosI-1)+SubStr(QTD,PosI+1,Len(QTD))
        EndIf
        PosI = Search(",",QTD)
        If PosI>0
           Then QTD = SubStr(QTD,1,PosI-1)+"."+SubStr(QTD,PosI+1,Len(QTD))
        EndIf
        QTD = NumVal(QTD)    
EndIf 

Return QTD

EndProc ;Ajusta_Quantidade()

;*******************************************************************************
;* Ajusta Pre‡o                                                                *
;*******************************************************************************
Proc Ajusta_Preco(PRECO)
Private PRECO

If PRECO=""
   Then PRECO = BlankNum()
   Else PosI = Search(".",PRECO)
        If PosI>0
           Then PRECO = SubStr(PRECO,1,PosI-1)+SubStr(PRECO,PosI+1,Len(PRECO))
        EndIf
        PosI = Search(",",PRECO)
        If PosI>0
           Then PRECO = SubStr(PRECO,1,PosI-1)+"."+SubStr(PRECO,PosI+1,Len(PRECO))
        EndIf
        PRECO = NumVal(PRECO)
EndIf

Return PRECO

EndProc ;Ajusta_Preco()

;*******************************************************************************
;* Rotina Principal De Reajuste de Preco                                       *
;*******************************************************************************
Proc MudaQuantidade()
Private QTD,PRECO

Indice = ControlValue("TG_Registro")
QTD   = Ajusta_Quantidade(SWCONS2_Pega_Valor_String("Quantidade",Indice)) 
PRECO = Ajusta_Preco(SWCONS2_Pega_Valor_String("Preco do Item",Indice))

VSD_I_Quantidade     = QTD 
VSD_I_UN_Item        = SWCONS2_Pega_Valor_String("Unidade",Indice)
VSD_I_Preco_Unitario = PRECO

Showdialog "Quantidade" Proc "SD_Consulta_MudaQuantidade" 
  Trigger "OPEN","ARRIVE","UPDATE","CLOSE"
  Key "ENTER","ESC","INS","F8","F9","F1"
   @ 10,20 height 05 width 20

   Label  @ 00,00 "" For "I_Quantidade"
   Accept @ 01,02 Width 14 "N" picture "#*#.[###]" Tag "I_Quantidade" to VSD_I_Quantidade

Enddialog

EndProc ;MudaQuantidade()
 
;*******************************************************************************
;* Rotina para pegar valor da string                                           *
;*******************************************************************************
Proc SWCONS2_Pega_Valor_String(PARAM,POSICAO)
Private PARAM, RESULT, PosI, SWCONS2_QTD
             
RESULT = ""              
Switch
  Case PARAM = "Codigo do Item"     : RESULT = SubStr(Array_Registro[POSICAO],71,10)
  Case PARAM = "Preco do Item"      : RESULT = Ltrim(Rtrim(SubStr(Array_Registro[POSICAO],61,9)))
  Case PARAM = "Quantidade"         : RESULT = Ltrim(Rtrim(SubStr(Array_Registro[POSICAO],50,10)))
  Case PARAM = "Unidade"            : RESULT = Ltrim(Rtrim(SubStr(Array_Registro[POSICAO],47,2)))                    
EndSwitch

Return RESULT    

EndProc ;SWCONS2_Pega_Valor_String()

;*******************************************************************************
;* Rotina para limpar array e variaveis com informa‡Æo dos itens               *
;*******************************************************************************
Proc FTDEVOL_Verifica_Array_Registro()

If ArraySize(Array_Registro)=0 Or (ArraySize(Array_Registro)=1 And Rtrim(Array_Registro[1])="")
   Then Return False
   Else Return True
EndIf

EndProc ;FTDEVOL_Verifica_Array_Registro()
            
;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Consulta_NotaDevol(Disparo,Campo,Evento,Elemento)
Private Disparo,Campo,Evento,Elemento,ct

Temp=True
TECLA    =""
MSGCAMPO=""

If INICIO_DIALOG
   Then Campo="TG_Registro"
        INICIO_DIALOG=False 
        Item=SWCONS2_Pega_Valor_String("Codigo do Item",ControlValue("TG_Registro"))
EndIf

If Disparo="UPDATE" And Campo="TG_Registro"
   Then Temp=True
        Item=SWCONS2_Pega_Valor_String("Codigo do Item",ControlValue("TG_Registro"))
        Return Temp
EndIf

If Disparo="EVENT" And Evento["Type"]="KEY" Then
    Switch
     Case Evento["KeyCode"] = 9 Or Evento["KeyCode"] = -15:
          Temp=False             
     Case Evento["KeyCode"] = -83 And Campo="TG_Registro":
          If FTDEVOL_Verifica_Array_Registro()
             Then Indice = ControlValue("TG_Registro")
                  Item = SWCONS2_Pega_Valor_String("Codigo do Item",Indice)
                  ;ConfGeral("Confirma a exclus„o do item "+Item+" desta rela‡Æo?")
                  Ok="S"
                  If Ok="S"
                     Then Array_Registro[Indice]=""
        
                          DynArray Array_RegistroI[]
                          c=0
                          For i From 1 To ArraySize(Array_Registro)
                            If IsBlank(Array_Registro[i]) Then Loop EndIf
                            c=c+1
                            Array_RegistroI[c]=Array_Registro[i]
                          EndFor
        
                          If DynArraySize(Array_RegistroI)>0
                             Then Release Vars Array_Registro
                                  Array Array_Registro[DynArraySize(Array_RegistroI)]
                                  For i From 1 To DynArraySize(Array_RegistroI)
                                    Array_Registro[i]=Array_RegistroI[i]
                                  EndFor
                                  Release Vars Array_RegistroI
                                  ArrayElement = Indice
                                  WCSW_NITENS = ArraySize(Array_Registro)
                             Else WCSW_NITENS = 0
                                  Array Array_Registro[1]
                                  Array_Registro[1]=""    
                          EndIf
                  EndIf      
          EndIf
     Case Evento["KeyCode"] = -67 :
          Temp=False
          If Not FTDEVOL_Verifica_Array_Registro()
             Then Mensagem("N„o h  item nesta rela‡Æo a ser incluido!")
             Else If ArraySize(Array_Registro)>1
                     Then MSG = "Deseja incluir os itens desta rela‡Æo?" 
                     Else MSG = "Deseja incluir o item desta rela‡Æo?"
                  EndIf
                  If ConfGeral(MSG)
                     Then Moveto TabelaItensFatura
                          CoEditKey
                          For ct From 1 To ArraySize(Array_Registro)
                            Item  = SWCONS2_Pega_Valor_String("Codigo do Item",ct)
                            QTD   = Ajusta_Quantidade(SWCONS2_Pega_Valor_String("Quantidade",ct))
                            PRECO = Ajusta_Preco(SWCONS2_Pega_Valor_String("Preco do Item",ct))
                            
                            Aguarde("Aguarde, adicionado item "+Item)
                            GetRecord "\\Sistemas\\Estoque\\Itens" Item To REGITENS
                            If Not Retval
        			                 Then Mensagem("Item: "+Item+" nÆo cadastrado!")
                               Else CHAVEI=1
                                    NotaDevol=True
                                    Moveto TabelaItensFatura
                                    While True
                                      End
                                      SEQI=SEQI+1
                                      If SEQI>900
                                         Then Mensagem("Numero Maximo de Itens 900 permitidos !")
                                              NotaDevol=False
                                              QuitLoop
                                      EndIf
                                      Down
                                      [Numero da Of]=[FaturaC->Numero da Of]
                                      [Item da Of  ]=SEQI
                                      If Not IsLockRecord()
                                         Then QuitLoop
                                         Else Del
                                      EndIf   
                                    EndWhile
                                   
                                    If Not NotaDevol
                                       Then Moveto ANT_TAB
                                            Moveto Field ANT_FIE
                                            QuitLoop
                                       Else [Codigo do Item ]=Item
                                            [Quantidade     ]=QTD
                                            
                                            VSD_I_Codigo_Item=Item
                                            
                                            GetRecord "\\Sistemas\\Estoque\\Iten_Com" Item To REG_ITEMCOMP
                                            If Not RetVal
                                               Then Mensagem("Item "+Item+" n„o localizado na tabela de complementos!")
                                                    QuitLoop
                                            EndIf
                                          		 
                                         	  [Preco Unitario       ]=PRECO
                                            [Preco Unitario Tabela]=PRECO
                                             
                                            VSD_I_Preco_Unitario=[Preco Unitario       ]
                                            VSD_I_Preco_Tabela  =[Preco Unitario Tabela]
	 	 
                                         		Ajusta_Dados_Item()
                                         		Registro_Item("Ler")
                                            CalcularPrecoTotal_Item()
                                            Registro_Item("Gravar")
                                                    
                                            ESTOQUE()
                                            SaveTables
                                    EndIf
                            EndIf
                          EndFor
                          Do_it!
                          AcceptDialog
                  EndIf
          EndIf 
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_Registro"   :   
                 If FTDEVOL_Verifica_Array_Registro()
                    Then MSG="Deseja sair sem Incluir os itens ?"
                         If Not ConfGeral(MSG)
                            Then Return  
                         EndIf
                 EndIf
                 CHAVEI=1
                 CancelDialog
          EndSwitch

     Case Evento["KeyCode"] =  13:  
          Temp=False
          If FTDEVOL_Verifica_Array_Registro()
             Then MudaQuantidade()
          EndIf     
   EndSwitch
EndIf

SelectControl Campo
Switch
  Case Campo="TG_Registro":
       MSGCAMPO=" "+ltrim(Format("W5",WCSW_NITENS)+" iten(s)")
       TECLA="Esc=Retornar  =Selecionar  Enter=AltereQtde/Vr  Del=Excluir  F9=IncluirItens"
EndSwitch

MontaRodapeSD(MSGCAMPO, TECLA)
RefreshDialog

Return Temp

EndProc ;SD_Consulta_NotaDevol() 
 
;*******************************************************************************
;* Rotina para processar dados                                                 *
;*******************************************************************************
Proc Processa()
Private Contador,FAZ_PROCESSO,NLANC,Array_RegistroI,REGITENS

If ACHOU_DOCUMENTO="" Or (ACHOU_DOCUMENTO="CUP" And Localiza_Nota())
   Then FAZ_PROCESSO=False
        Contador = 0
        DynArray Array_RegistroI[]
        
        Switch
           Case INDICACAO_EMITENTE="0" : 
                Moveto "NotaI"
                Moveto [Codigo da Empresa]
                Locate [FaturaC->Codigo da Empresa],VSDGNDOCTO,VSDGSDOCTO
                If RetVal
                   Then FAZ_PROCESSO=True 
                        While [Codigo da Empresa  ]=[FaturaC->Codigo da Empresa] And
                              [Numero do Documento]=VSDGNDOCTO                   And 
                              [Serie do Documento ]=VSDGSDOCTO 
                          
                          GetRecord "\\Sistemas\\Estoque\\Itens" [Codigo do Item] To REGITENS
                          If not Retval
                             then Mensagem("Item: "+[Codigo do Item]+" nÆo cadastrado!")
      			                 else If REGITENS["Unidade Interna"]<>[Unidade Fiscal]
      			                         then
                                          MSG=    "Item: "+[Codigo do Item]+" "+[Descricao do Item]+"// //"
                                          MSG=MSG+"Unidade de Compra ["+[Unidade Fiscal]+"] difere do controle de estoque -> ["+REGITENS["Unidade Interna"]+"]"
                                          MSG=MSG+"// //Procedimento nÆo pode ser automatico para este item, verificar !"
                                          Mensagem(MSG)
                                     else     
                                          Contador = Contador + 1
                                          Array_RegistroI[Contador] = Completa([Codigo do Item],11," ")+
                                                                      Completa(Ltrim(SubStr([Descricao do Item],1,30)),34," ")+" "+
                                                                      Completa([Unidade Fiscal],02," ")+" "+
                                                                      Format("W10.3,EIC",[Quantidade])+" "+   
                                                                      Format("W9.2,EIC",[Preco Unitario])+" "+
                                                                      Completa([Codigo do Item],10," ")
                                  endif                                    
                          endif                              
                          Skip
                          If Eot() Then QuitLoop EndIf
                        EndWhile
                EndIf
                
           Case INDICACAO_EMITENTE="1" : 
                ;---------- Terceiros ------------------------------------------ 
                Moveto "\\Sistemas\\Estoque\\NotaEI"
                Moveto [Numero do Lancamento]
                Locate [\Sistemas\Estoque\NotaEc->Numero do Lancamento]
                If RetVal
                   Then FAZ_PROCESSO=True 
                        While [Numero do Lancamento]=[\Sistemas\Estoque\NotaEc->Numero do Lancamento]
                          
                          GetRecord "\\Sistemas\\Estoque\\Itens" [Codigo do Item] To REGITENS
                          If not Retval
                             then Mensagem("Item: "+[Codigo do Item]+" nÆo cadastrado!")
      			                 else If REGITENS["Unidade Interna"]<>[Unidade Entrada]
      			                         then
                                          MSG=    "Item: "+[Codigo do Item]+" "+[Descricao do Item]+"// //"
                                          MSG=MSG+"Unidade de Entrada ["+[Unidade Entrada]+"] difere do controle de estoque -> ["+REGITENS["Unidade Interna"]+"]"
                                          MSG=MSG+"// //Procedimento nÆo pode ser automatico para este item, verificar !"
                                          Mensagem(MSG)
                                     else     
                                          Contador = Contador + 1
                                          Array_RegistroI[Contador] = Completa([Codigo do Item],11," ")+
                                                                      Completa(Ltrim(SubStr([Descricao do Item],1,30)),34," ")+" "+
                                                                      Completa([Unidade Entrada],02," ")+" "+
                                                                      Format("W10.3,EIC",[Quantidade])+" "+   
                                                                      Format("W9.2,EIC",[Preco Unitario])+" "+
                                                                      Completa([Codigo do Item],10," ")
                                  endif                                    
                          endif                              
                          Skip
                          If Eot() Then QuitLoop EndIf
                        EndWhile
                EndIf     
        EndSwitch      
                
        If FAZ_PROCESSO and DynArraySize(Array_RegistroI)>0
           Then Release Vars Array_Registro
                Array Array_Registro[DynArraySize(Array_RegistroI)]
                
                For i From 1 To DynArraySize(Array_RegistroI)
                  Array_Registro[i]=Array_RegistroI[i]
                EndFor
                Release Vars Array_RegistroI
                
                WCSW_NITENS   = ArraySize(Array_Registro) 
                INICIO_DIALOG = True
                
                tit = "  C¢digo     Descri‡„o do Item                  Un       Qtde    PrUnit"
                Sw_Item_Pesquisado = ""

                While True
                  ShowDialog "[Itens da Nota "+DOCTO+"] - Devolu‡Æo de Compra" Proc "SD_Consulta_NotaDevol"
                  Trigger "OPEN","ARRIVE","CLOSE","SELECT"
                  Key "F1","ENTER","ESC","F9",-82,-67,"F9",-83,
                  -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
                  @ 04,01   Height 18 Width 75
                  @ 00,00 ?? tit
                  
                  PickArray @01,01 Height 13 width 71
                  Columns 1
                    Array_Registro
                     Tag "TG_Registro"
                      To ArrayElement
           
                  @ 15,01 ?? "- Selecione/altere os itens que deseja informar na nota"
                EndDialog
                Message("")
                
                QuitLoop
              EndWhile
        EndIf     
        Moveto ANT_TAB
        Moveto Field ANT_FIE
        
        Release Vars FAZ_PROCESSO
EndIf 
   
EndProc ;Processa()

;*******************************************************************************
;* Rotina para localizar o numero do documento                                 *
;*******************************************************************************
Proc Localiza_Nota()
Private ACHOU_NOTA,NOTA_CANCELADA,DATA_LOCALIZA

DOCTO          = Ltrim(VSDGTPDOCTO+" ")+Ltrim(VSDGSDOCTO+" ")+VSDGNDOCTO
NOTA_CANCELADA = False
ACHOU_NOTA     = False

Switch
  Case INDICACAO_EMITENTE="0" :
       GetRecord "NotaC" [FaturaC->Codigo da Empresa],VSDGNDOCTO,VSDGSDOCTO To REG_NOTA
       If RetVal
          Then If REG_NOTA["Situacao"]="C"           
                  Then NOTA_CANCELADA = True
               EndIf
               ACHOU_NOTA = True         
       EndIf
  Case INDICACAO_EMITENTE="1" :
       Moveto "\\Sistemas\\Estoque\\NotaEC"
       Moveto [Codigo]
       Locate IndexOrder By "NotaEC01" [FaturaC->Codigo],VSDGNDOCTO,VSDGSDOCTO
       If RetVal
          Then CopyToArray REG_NOTA
               ACHOU_NOTA = True  
       EndIf      
EndSwitch

Switch
  Case NOTA_CANCELADA :
       Mensagem("Documento "+DOCTO+" CANCELADA!")  
       Return False
  Case Not ACHOU_NOTA :
       MSG = ""
       MSG = MSG + "Documento "+DOCTO+" n„o foi localizado!"
       ;If INDICACAO_EMITENTE="1"
       ;   Then MSG = MSG + "Documento emitido por terceiros!"
       ;   Else MSG = MSG + "Documento "+DOCTO+" n„o foi localizado!" 
       ;EndIf   
       Mensagem(MSG)
       Return False
EndSwitch
        
If ACHOU_NOTA And Not NOTA_CANCELADA
   Then DATA_LOCALIZA = Format("D13",REG_NOTA["Data de Emissao"])
        If Len(Ltrim(DATA_LOCALIZA))=9
           Then DATA_LOCALIZA = "0" + Ltrim(DATA_LOCALIZA)
        EndIf
        MSG = ""
        If Upper(SubStr(VSDGTPDOCTO,1,3))="CUP"
           Then MSG = MSG + Completa("     Cupom: "+DOCTO,60," ")+"//" 
           Else MSG = MSG + Completa(" Documento: "+DOCTO,60," ")+"//"
        EndIf    
        MSG = MSG + Completa("Fornecedor: "+REG_NOTA["Codigo"]+" "+REG_NOTA["Razao Social"],60," ")+"//"
        MSG = MSG + Completa("      Data: "+DATA_LOCALIZA,60," ")+"//"
        MSG = MSG + Completa("     Valor: "+Ltrim(Format("W12.2",REG_NOTA["Valor Nota Fiscal"])),60," ")+"//"
        MSG = MSG + "Confirma este documento ?"
        If Not ConfGeral(MSG)
           Then Return False
        EndIf 
EndIf
                
Return True

EndProc ;Localiza_Nota()

;*******************************************************************************
;* Controle do ShowDialog                                                      *
;*******************************************************************************
Proc SD_SDialogNFDEVOL(Disparo,Campo,Evento,Elemento)
Private 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"] =  27 :
          Temp=False
          Switch
            Case Campo="TG_TPDOC"     : CancelDialog
            Case Campo="TG_NDOCTO"    : Campo="TG_TPDOC"
            Case Campo="TG_SDOCTO"   Or
                 Campo="TG_ECF"       : Campo="TG_NDOCTO"
          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_TPDOC"       : Campo="TG_NDOCTO"
                         VSDGTPDOCTO = ControlValue("TG_TPDOC")
                         If IsBlank(VSDGTPDOCTO) 
                            Then VSDGTPDOCTO="CUP"
                         EndIf
                         If Upper(SubStr(VSDGTPDOCTO,1,3))<>"CUP" And  
                            Upper(SubStr(VSDGTPDOCTO,1,3))<>"NFE" And  
                            Upper(SubStr(VSDGTPDOCTO,1,3))<>"ROM" And  
                            Upper(SubStr(VSDGTPDOCTO,1,3))<>"NCE"
                            Then Mensagem("Tipo de documento informado ‚ diferente de CUP/NCE/NFE/ROM!")
                                 Campo="TG_TPDOC"     
                         EndIf   
                    Case Campo="TG_NDOCTO"        : Campo="TG_SDOCTO"
                         VSDGNDOCTO=ControlValue("TG_NDOCTO")
                         If Not IsBlank(VSDGNDOCTO)
                            Then If INDICACAO_EMITENTE="0" Or INDICACAO_EMITENTE="1" 
                                    Then If Type(NumVal(VSDGNDOCTO))="N" And Len(NumVal(VSDGNDOCTO))<=6
                                            Then VSDGNDOCTO=AlinhM(StrVal((NumVal(VSDGNDOCTO))),6)
                                         EndIf   
                                    Else VSDGNDOCTO=AlinhM(VSDGNDOCTO,6)
                                 EndIf        
                                 If Search("CUP",VSDGTPDOCTO)>0
                                    Then Campo="TG_ECF"
                                 EndIf
                            Else Campo="TG_NDOCTO"          
                         EndIf
                    Case Campo="TG_SDOCTO"        : 
                         VSDGSDOCTO=ControlValue("TG_SDOCTO")
                         If Not Localiza_Nota()
                            Then Campo="TG_SDOCTO"
                            Else ACHOU_DOCUMENTO = ""
                                 AcceptDialog
                         EndIf           
                    Case Campo="TG_ECF"        : 
                         VSDGECF=ControlValue("TG_ECF")                         
                         If Not IsBlank(VSDGECF)
                            Then ACHOU_CUPOM     = False
                                 VSDGECF         = AlinhM(VSDGECF,3) 
                                 CUPOM_CANCELADO = False
                         
                                 SDOC = ""
                                 Moveto "NotaC"
                                 Moveto [Numero do Documento]
                                 Locate VSDGNDOCTO
                                 If ReTVal
                                    Then While [Numero do Documento]=VSDGNDOCTO
                                           If [Codigo da Empresa  ]=[FaturaC->Codigo da Empresa] And
                                              [Tipo do Documento  ]="CUP"                        And 
                                              StrVal(NumVal([Numero da OF]))=StrVal(NumVal(VSDGECF))
                                              Then ACHOU_CUPOM = True
                                                   If [Situacao]="C"
                                                      Then CUPOM_CANCELADO = True
                                                   EndIf
                                                   SDOC = [Serie do Documento]
                                                   QuitLoop                                              
                                           EndIf
                                           Skip
                                           If Eot() Then QuitLoop EndIf
                                           Locate Next VSDGNDOCTO
                                           If Not RetVal
                                              Then QuitLoop
                                           EndIf   
                                         EndWhile       
                                 EndIf   
                                 MSG = ""
                                 If ACHOU_CUPOM 
                                    Then VSDGSDOCTO = SDOC
                                         If CUPOM_CANCELADO 
                                            Then MSG  = "Cupom "+VSDGNDOCTO+" / Serie "+SDOC+" CANCELADO!"
                                         EndIf   
                                    Else MSG = "Cupom "+VSDGNDOCTO+" / ECF "+VSDGECF+" n„o encontrado!"
                                 EndIf    
                                 If MSG <> ""
                                    Then Mensagem(MSG)    
                                    Else ACHOU_DOCUMENTO = "CUP"
                                         AcceptDialog       
                                 EndIf      
                         EndIf
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch  
  Case Campo="TG_TPDOC"   : MSG_CAMPO="Tipo do Documento: CUP/NCE/NFE/ROM"
  Case Campo="TG_NDOCTO"  : If SubStr(VSDGTPDOCTO,1,3)="CUP"
                               Then MSG_CAMPO="N£mero do COO do cupom fiscal"
                               Else MSG_CAMPO="N£mero do Documento"
                            EndIf   
  Case Campo="TG_SDOCTO"  : MSG_CAMPO="S‚rie do Documento"
  Case Campo="TG_ECF"     : MSG_CAMPO="N£mero do emissor do cupom fiscal"
EndSwitch

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp

EndProc ;SD_SDialogNFDEVOL()

;*******************************************************************************
;* Carrega Nota/Cupom                                                          *
;*******************************************************************************
Proc Carrega_Documento_Referente()
Private REG_FATURAR,VSDGMODELO

PED_ORC_FATURAR    = ""
PED_ORC_FAT        = ""
ABORTA_PROCESSO    = False
TEMP               = False
VSDGTPDOCTO        = ""
VSDGNOMTPDOCTO     = ""
VSDGNDOCTO         = ""
VSDGSDOCTO         = ""
VSDGECF            = ""
VSDGFLAG           = ""  
INDICACAO_EMITENTE = ""

GetRecord "FaturaR" [FaturaC->Numero da OF],1 To REG_FATURAR
If Not RetVal
   Then Return
EndIf
   
VSDGMODELO=REG_FATURAR["Modelo_Documento"]
Switch
  Case VSDGMODELO="55" OR VSDGMODELO="RO" or VSDGMODELO="65":
   VSDGTPDOCTO        = "NFE"
   if VSDGMODELO="55" then VSDGTPDOCTO = "NFE"  endif 
   if VSDGMODELO="65" then VSDGTPDOCTO = "NCE" endif 
   if VSDGMODELO="RO" then VSDGTPDOCTO = "ROM"  endif 
   
   VSDGNDOCTO         = REG_FATURAR["Numero_Documento"]
   VSDGSDOCTO         = REG_FATURAR["Serie_Documento" ]
   VSDGSECF           = "" 
   INDICACAO_EMITENTE = REG_FATURAR["IND_EMIT"]
   
  Case VSDGMODELO="2B" Or
       VSDGMODELO="2C" Or
       VSDGMODELO="2D"  :
   
   VSDGTPDOCTO        = "CUP"
   VSDGNDOCTO         = REG_FATURAR["Numero_Documento"]
   VSDGSECF           = REG_FATURAR["Numero_Serie_ECF"]
   VSDGSDOCTO         = ""
   INDICACAO_EMITENTE = REG_FATURAR["IND_EMIT"]
EndSwitch
        
EndProc ;Carrega_Documento_Referente()
        
;*******************************************************************************
;* Digitacao da Nota                                                           *
;*******************************************************************************
Proc Digita_Nota_Cupom()
Private TEMP

Moveto TabelaItensFatura
End
SEQI=[Item da Of]
  
Moveto "FaturaC"
UnLockRecord
FormKey
IsLockRecord()

Do_It!
Carrega_Documento_Referente()

If INDICACAO_EMITENTE="1"
   Then View NOWINDOW "\\Sistemas\\Estoque\\NotaEc" 
        View NOWINDOW "\\Sistemas\\Estoque\\NotaEI"
EndIf        

While True
  Echo Normal
  Echo Off
  ShowDialog "Nota de compra para devolu‡Æo" Proc "SD_SDialogNFDEVOL"
  Trigger "OPEN","ARRIVE","CLOSE","SELECT"
  Key "F1","ENTER","ESC","F9",-82,-83,
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
       @ 06,10   Height 05 Width 42
  
      Label  @ 00,00 "TDoc"  For "TG_TPDOC"
      Accept @ 01,01 Width 07 "A4"  Picture "CUP,NCE,NFE,ROM" Tag "TG_TPDOC" To VSDGTPDOCTO
      
      Label  @ 00,08 "N£mero" For "TG_NDOCTO"
      Accept @ 01,09 Width 13 "A10"  Picture "######" Tag "TG_NDOCTO" To VSDGNDOCTO
      
      Label  @ 00,22 "S‚rie" For "TG_SDOCTO"
      Accept @ 01,23 Width 7 "A4"  Picture "!*!" Tag "TG_SDOCTO" To VSDGSDOCTO
          
      Label  @ 00,30 "ECF" For "TG_ECF"
      Accept @ 01,31 Width 6 "A3"  Picture "!*!" Tag "TG_ECF" To VSDGECF                
  EndDialog
  If Not RetVal 
     Then QuitLoop 
  EndIf 
  
  PED_ORC_FATURAR=PED_ORC_FAT
  PED_ORC_FATURAR=AlinhM(PED_ORC_FATURAR,6)
  
  TEMP = True
  Processa()
  QuitLoop
EndWhile
Release Vars REG_OCI,VSDGITENSOC,AUX_ARRAY_COMPRA,ARRAY_CODIGO_BARRA, EDITAR_COMPRA,
             VSDGOC,VSDGNOMOC,VSDGFLAG,VSDGFLAG2,indice,ANT_VSDGQTD,VSDGQTD,VSDGPRUNIT,VSDGPRTOTAL

If INDICACAO_EMITENTE="1"
   Then Moveto "\\Sistemas\\Estoque\\NotaEc" ClearImage
        Moveto "\\Sistemas\\Estoque\\NotaEI" ClearImage
EndIf 

Moveto "FaturaC"
CoEditKey
FormKey
IsLockRecord()

Moveto TabelaItensFatura
      
Return TEMP    
    
EndProc ;Digita_Nota_Cupom()

;*******************************************************************************
;* Rotina Principal Emissao Nota Fiscal ou Romaneio                            *
;*******************************************************************************
ANT_TAB = Table()
ANT_FIE = Field()

TabelaItensFatura=Table()
Digita_Nota_Cupom()

Release Vars ANT_TAB,ANT_FIE,TEMP,TabelaItensFatura
Release Procs Digita_Nota_Cupom,SD_SDialogNFDEVOL,Processa,Localiza_Nota,
              SD_Consulta_MudaQuantidade, Ajusta_Quantidade, Ajusta_Preco,MudaQuantidade,
      			  SWCONS2_Pega_Valor_String, FTDEVOL_Verifica_Array_Registro,SD_Consulta_NotaDevol,
      			  Carrega_Documento_Referente
