Jump to content
Fivewin Brasil

HB_VMDO() INRECOVERABLE ERROR 9015


edmandc

Recommended Posts

Olá a todos.

 

Trabalho com o   FWH10.09

                              Xharbour1.2.3 Intl. (SimpLex) (Build 20161218)

                             e BCC582

 

A anos tenho criado meus aplicativos sem nenhum problema.

Recentemente (AGOSTO/2021) começou a ocorrer este erro e de forma intermitente.

Não mudei nada no meu pc .

Alguém poderia me dar uma luz de como resolver isto?

O erro acontece quando retorno da rotina que segue em anexo.

 

 

Outra dúvida que não tem nada a ver com o problema anterior: quando coloco os arquivos do fwh bcc e xharbour em um Disco RAM  ocorrem erros que não acontecem quando estes arquivos esteão em Hd.

 

rotina.txt

Link to comment
Share on other sites

Olá, em uma olhada rápida, já que estou meio enrolado, veja com calma, o que eu vi e mudaria:


// *************************************************************************
// GETSPLA.PRG - CAPTURA DADOS PARA UM REGISTRO DO CADASTRO DE PLANILHAS  *
// ROTINA CHAMADA DE INREVPLA.PRG                                         *
// *************************************************************************
	#include "fivewin.ch"
#include "vkey.ch"
#include "inkey.ch"
#include "tsbutton.ch"
	// *******************************
FUNC getspla( modocapt, odlgantes )
	   // *******************************
   LOCAL area        := Select()
   LOCAL l_retu      := .F.
   LOCAL ctitulo     := if( modocapt == 'inclusao', 'Inclusão de uma nova planilha', 'Inclusão de nova Revisão da Planilha: ' + trans( vnridplan, '@r 9999/99-99' ) )
   LOCAL crecurso    := if( modocapt == 'inclusao', 'rcadplan_in', 'rcadplan_rev' )
   LOCAL arrsolicita := {}
   LOCAL arranalista := {}
   LOCAL cAias
	   PRIVA vctpm := vcfabcli := vccircret := ' - '
   PRIVA nk          :=  0
   PRIVA idtecla     :=  0
   PRIVA xx          := .F. // UTILIZADO PARA QUANDO SE CLICA NO BOTAO DE SELECAO E O GET AINDA ESTA VÁZIO
   PRIVA ltrocoucel  := .F.
   PRIVA lppassagem  := .T.
   PRIVA lspassagem  := .F.
   PRIVA ndatasele
   PRIVA l_liberado  := .F.
	   HB_GCALL( .F. )  // LIMPA LIXO NA MEMORIA
	   cor_verdf := nrgb( 199, 220, 175 )
	   IF modocapt == 'inclusao'
      odlgantes:hide()
   ENDIF
	   // CRIA ARRAY DE ANALISTAS
	   // USE analista INDE analista NEW
   USE ANALISTA INDEX ANALISTA NEW SHARED
   // SET ORDER TO...
   GO TOP
	   cAlias := ALIAS()
	   //analista->( dbGoTop() )
	   AAdd( arranalista, Space( 15 ) )
	   WHILE( .NOT. EOF() )           //! analista->( Eof() )
	      SYSREFRESH()  // REFRESQUE O PROCESSADOR...
	      AAdd( arranalista, ( analista )->analista )
      // AAdd( arranalista, ( cAlias )->analista )
	      // analista->( dbSkip() )
	      SKIP
	   ENDDO
	   dbCloseArea()
	   // CRIA ARRAY DE SOLICITANTES
   USE solicita INDEX solicita NEW SHARED // EXCLUSIVE ??
   // SET ORDER TO...
	   // ( solicita )->( dbGoTop() )
   GO TOP
	   AAdd( arrsolicita, Space( 15 ) )
	   WHILE( .NOT. EOF() )  //! solicita->( Eof() )
	      SYSREFRESH()
	      AAdd( arrsolicita, ( solicita )->solicita )
	      // ( solicita )->( dbSkip() )
	      SKIP
	   ENDDO
	   dbCloseArea()
	   dbSelectArea( area )
	   // AS PRIVATES DEVERIAM ESTAR SEMPRES EM CIMA, ABAIXO DAS LOCALS.
	   PRIVA mododecaptur := modocapt //??? NAO CONCORDO QUE SEJAM AQUI.
	   PRIVA odlgipl
	   // QUADRO DO NUMERO DA PLANILHA E DA SITUAÇÃO
   PRIVA os_frmpla_3000    // quadro num. planilha
   PRIVA os_numpla_3100    // say n.plani
   PRIVA ogetvnridplan     // 3200
	   // QUADRO DA SITUAÇÃO E NUMERO DO ORÇAMENTO
   PRIVA os_frmsit_4104    // quadro situação
   PRIVA os_situacao_4030  // say situação
   PRIVA ocbx_situacao_603 // combobox situações
   PRIVA os_numorcam_4099  // say nº do orçamento
   // priva os_dtregsit_4011  // say data de registro da situaçao
   PRIVA ogetvdocorcam     // 4103
	   // QUADRO DO CÓDIGO DA PEÇA DADO PELO FABRICANTE ()
   PRIVA os_frmcodfab_4070 // quadro num.cod peça pelo fabricante
   PRIVA os_codpcfabr_4006 // say cod.pç fabric.
   PRIVA ogetvidpcfabr     // 4031 id peça pelo fabr (fabr.)
   PRIVA ogetvidpcclie     // 4038 id peça pelo cliente
	   // QUADRO DOS DADOS DO CLIENTE E DO PEDIDO
   PRIVA os_frmcli_1000 // quadro dos dados do cliente
   PRIVA os_nomcli_1100 // say cliente
   PRIVA ogetvcliente   // 1101
   PRIVA obtselcli      // 1110
   PRIVA os_numdes_1200 // say desenho
   PRIVA ogetvdesenho   // 1201
   PRIVA os_numite_1300 // say item
   PRIVA ogetvitem      // 1301
   PRIVA os_desmes_1400 // say des mestre
   PRIVA ogetvdesmestre // 1401
   PRIVA os_despro_1500 // descriçao prod.
   PRIVA ogetvdescricao // get descrição do produto 1501
   PRIVA obtseldescr    // 1510
   PRIVA os_codpccl4004 // codigo da pela dado pelo cliente
   PRIVA os_volanua4033 // say volume anual
   PRIVA ogetvvolumeano // 4035
   PRIVA os_qtdpro_1600 // quant total pedido
   PRIVA ogetvquantpedd // 1601
   PRIVA os_qtdmil_1610 // say "quant em milhares..."
   PRIVA os_qtdal1_1700 // say altern 1
   PRIVA ogetvquantped2 // 1701
   PRIVA os_qtdal2_1750 // say altern 2
   PRIVA ogetvquantped3 // 1751
   PRIVA os_qtdal3_1800 // say altern 3
   PRIVA ogetvquantped4 // 1801
   PRIVA os_qtdal4_1850 // say altern 4
   PRIVA ogetvquantped5 // 1851
   PRIVA obtcalcqtdd    // 1950
	   // QUADRO DADOS DO PRODUTO (MOLA)
   PRIVA os_frmmol_2000 // quadro dados da molas
	   PRIVA oq_tipomol_4128 // tipo
   PRIVA oq_fabrcli_4129 // fornecimento
   PRIVA oq_circret_4130 // secao
	   PRIVA os_tipmol_2010 // say tipo de mola
   PRIVA obtzeramatp    // 2300
   PRIVA obtcompressao  // 4058
   PRIVA obttracao      // 4115
   PRIVA obttorcao      // 4124
   PRIVA obtartefato    // 4125
   PRIVA obtfabfornmp   // 4068
   PRIVA obtclifornmp   // 4072
   PRIVA obtselematp    // 2035
   PRIVA obtcircular    // 4126
   PRIVA obtretangular  // 4127
   PRIVA os_forsec_2020 // say formato da seçao
   PRIVA os_matpri_2030 // say mat prima
   PRIVA ogetvmaterial  // 2031
	   PRIVA os_respmp_4010 // quem fornecera mat.pr clie ou fabr.
   PRIVA oslotminmp     // 4005
   PRIVA ogetvlotminmp  // 4009
	   PRIVA os_dimara_2040 // say diam arame
   PRIVA ogetvd_arame   // 2041
   PRIVA os_nespic_2050 // say nº espir circular
   PRIVA ogetvespirasc  // 2051
   PRIVA os_ladaxi_2042 // say lado axial
   PRIVA ogetvldaxial   // 2043
   PRIVA os_ladrad_2052 // say lado radial
   PRIVA ogetvldradial  // 2053
   PRIVA os_nespiR_2060 // say nº espir
   PRIVA ogetvespirasR  // 2061
   PRIVA os_dimmed_2070 // say diam médio
   PRIVA ogetvd_medio2  // 2071
   PRIVA os_dimint_2080 // say diam int
   PRIVA ogetvd_intern2 // 2081
   PRIVA os_dimext_2090 // say diam ext
   PRIVA ogetvd_extern2 // 2091
   PRIVA os_haste1_2100 // say tam. haste 1
   PRIVA ogetvhaste1    // 2101
   PRIVA os_haste2_2110 // say tam. haste 2
   PRIVA ogetvhaste2    // 2111
   PRIVA os_fornmp_2120 // say nome do fornecedor
   PRIVA os_forsel_2121 // apresenta nome do fornecedor escolhido automat.
   PRIVA os_cusmat_2130 // say Custo Mat.Prima/kg:
   PRIVA os_vcusmp_2131 // apresenta custo mat prima por kg
   PRIVA os_presuc_4002 // say preço da sucata
   PRIVA ogetvcustosuc  // 4036
   PRIVA os_aprsuc_4003 // say % aproveitamento da sucata
   PRIVA ogetvaprovsuc  // 4037
   PRIVA osvc_matprim   // 4028
   PRIVA os_vc_matprim  // 4057
   PRIVA ossv_pesomilha // 4158 say peso/K
   PRIVA osv_pesomilha  // 4159 valor peso/K
	   // QUADRO SUCATA E COND.PAGTO
   PRIVA os_frmcpg_4017 // quadro sucata e cond.PAGTO
   PRIVA os_codpag_4007 // say condições de pagamento
   PRIVA ogetvcondpagt  // 4040
	   // ARTEFATOS
   PRIVA os_artfdim_4122 // say Dimens. Artefato
   PRIVA ogetvarteftdim  // 4123
   PRIVA os_artfvol_4116 // say Vol/Mil [mm3]
   PRIVA ogetvarteftvol   // 4117
   PRIVA os_artfmas_4118 // say Massa/Mil [kg]
   PRIVA ogetvarteftmas   // 4119
	   // QUADRO DAS TAXAS
   PRIVA os_frmtxs_4018 // quadro das taxas
   PRIVA os_csll_4012
   PRIVA ogetvtxcsll    // 4021
   PRIVA os_irpj_4013
   PRIVA o7getvtxirpj   // 4022
   PRIVA os_icms_4015
   PRIVA ogetvtxicms    // 4023
   PRIVA os_piscof_4014
   PRIVA ogetvtxpiscof  // 4024
   PRIVA os_lucro_4019
   PRIVA ogetvtxlucro   // 4025
   PRIVA os_tran_4020
   PRIVA ogetvtxtransp  // 4026 // 5935
   PRIVA os_despad_4016
   PRIVA ogetvtxdespad  // 4027
   PRIVA os_indtottax   // mostra valor tx total e o indice
   PRIVA ogetvtxirpj
   PRIVA os_frmdgf_5716 // quadro
   PRIVA os_txdgf_5717
   PRIVA ogetvtxdgf     // 5718
   PRIVA osvc_tottxdgf  // 5719
	   // priva vos_itottax    // movido para inrevpla.prg
   // priva os_despgr_5920 // say Desp Ger Fabr
   // priva os_inddes_5930 // say indice desp geral
   // priva ogetvtaxadgf   // 5931
   // priva os_ttdesp_5940 // say tot -> vC_TOTTAXV
	   // QUADRO DE MENSAGENS
   // priva qdrmsg_10000   // bmp do quadro de mensagens
   PRIVA os_msg         // 10001 apresenta mensagens
   PRIVA cmsgqdr := ''  // conteudo da mensagem
	   // QUADRO DO NUMERO DA CELULA E SEUS CUSTOS PADROES
   PRIVA os_frmcel_4000 // quadro número celula
   PRIVA os_numcel_4100 // say número da celula
   PRIVA ogetvcelula    // 4101
   PRIVA obtselecel     // 4102
   PRIVA os_tpadra_4200 // say tempo padrao
   PRIVA os_tpadra_4201 // apresenta tempo padrao
   PRIVA os_hrmqen_4300 // say hr maq enrolar
   PRIVA os_hrmqen_4301 // apresenta hr maq enrolar
   PRIVA os_hrmqre_4400 // say hr maq retif
   PRIVA os_hrmqre_4401 // apresenta hr maq retif
   PRIVA os_hrmaes_4500 // say hr maq estampar
   PRIVA os_hrmaes_4501 // apresenta hr maq estampar
   // priva os_hrpren_4600 // say hora Prensa para Estampar
   // priva os_hrpren_4601 // apresenta valor da hora prensa estamp
	   // QUADRO DAS OPERAÇÕES DA CELULA SELECIONADA
   PRIVA os_frmope_4071  // quadro operacões da celula
	   // EMBALAR
   PRIVA os_embala_5700  // 5700 "say Embalar"
   PRIVA osvc_totembala  // 5711
   PRIVA obtembalar // 5712
	   // vostipselemb := space(20)  // variavel de prompt do objeto say: ostipselemb
	   PRIVA obtzeraemb      // 5715  * ESTE BOTAO FICA NA ROTINA GETSPLOP.PRG
	   // OBSERVAÇÕES
   PRIVA os_frmobs_6000  // say quadro OBSERVAÇOES
   PRIVA os_observ_6010  // say Observações
   PRIVA ogetvobsv1pla   // 6011
   PRIVA ogetvobsv2pla   // 6012
   PRIVA ogetvobsv3pla   // 6013
	   // RESPONSABILIDADES E DATAS
   PRIVA os_frresp_7000  // say quadro dos responsaveis e datas
   PRIVA os_solici_7100  // say solicitado por:
   PRIVA ocbxvsolicita   // 7101
   PRIVA os_analis_7200  // say analisado por:
   PRIVA ocbxvanalista   // 7201
   PRIVA os_dtregs_7300  // say  "registrado em:"
   PRIVA ogetvdtanalise  // 7301
   PRIVA obtcalend       // 7302
   PRIVA os_validd_7400  // say validade:
   PRIVA ogetvvalidade   // 7401
   PRIVA os_aprova_7500  // say aprovado por:
   PRIVA ogetvaprovador  // 7501 get nome do aprovador
   PRIVA os_dtapro_7600  // say data Aprov.:
   PRIVA ogetvdtaprova   // 7601
	   // TOTALIZAÇÕES
   PRIVA osvcustotpla    // CUSTO INDUSTRIAL 1
   PRIVA osvcustotpl2    // CUSTO INDUSTRIAL 2
   PRIVA osvcustotpl3    // CUSTO INDUSTRIAL 3
   PRIVA osvcustotpl4    // CUSTO INDUSTRIAL 4
   PRIVA osvcustotpl5    // CUSTO INDUSTRIAL 5
   PRIVA oscustotpla     // say custo indl 20133
   PRIVA osvtotvdpla     // VALOR VENDA 1
   PRIVA osvtotvdpl2     // VALOR VENDA 2
   PRIVA osvtotvdpl3     // VALOR VENDA 3
   PRIVA osvtotvdpl4     // VALOR VENDA 4
   PRIVA osvtotvdpl5     // VALOR VENDA 5
   PRIVA ostotvdpla      // say
   PRIVA ostotvdpl2      // say
   PRIVA ostotvdpl3      // say
   PRIVA ostotvdpl4      // say
   PRIVA ostotvdpl5      // say
   PRIVA ostottaxv       // say
   PRIVA osvc_tottaxv    // VALOR DO MARKUP
	   // BOTÕES REGISTRA E CANCELA
   PRIVA obtprepreg      // 8000
   PRIVA obtcancela      // 9000
   PRIVA vmatprimini := if( modocapt == 'inclusao', '', ( Planilha )->material )
	   PRIVA vsituaesc   := if( modocapt == 'inclusao',           'G-AGUARDANDO APROVAÇÃO  ', ;
      if( ( Planilha )->situacao == Upper( 'V' ), 'V-ANALISANDO VIABILIDADE', ;
      if( ( Planilha )->situacao == Upper( 'G' ), 'G-AGUARDANDO APROVAÇÃO  ', ;
      if( ( Planilha )->situacao == Upper( 'A' ), 'A-APROVADO              ', ;
      if( ( Planilha )->situacao == Upper( 'C' ), 'C-CANCELADO             ', ;
      if( ( Planilha )->situacao == Upper( 'T' ), 'T-COTANDO MATÉRIA PRIMA ', ;
      if( ( Planilha )->situacao == Upper( 'O' ), 'O-OUTRAS >> ver observ. ', ;
      if( ( Planilha )->situacao == Upper( 'R' ), 'R-REPROVADO             ', '' ) ) ) ) ) ) ) )
	   PRIVA obmp  // deveria ser LOCAL
	   // CRIA ARRAY COM  AS SITUAÇÕES POSSIVEIS PARA UMA PLANILHA
   PRIVA a_situs := {}
   PRIVA c_situs := MemoRead( "situacao.rel" )
	   FOR nitem := 1 TO MLCount( c_situs )
      AAdd( a_situs, MemoLine( c_situs,, nitem ) )
   NEXT
	   // asort(a_situs) // ordenar nomes dos arquivos
	   PRIVA csitubmp := 'no.bmp'
	   // EXCESSO DE PRIVATES E FORA DO LOCAL, EX:
   // FIELD
   // LOCAL
   // MEMVAR
   // PRIVATE
   // PUBLIC
	   // obmp:loadbmp( "yes.bmp")
   // oBmp:refresh()
	   cor_texto   := if( modocapt == 'inclusao', cor_azule, cor_pret  )
   cor_fundo   := if( modocapt == 'inclusao', cor_azulff, cor_amarv )
   cor_textog  := if( modocapt == 'inclusao', cor_verd, cor_pret  )
   cor_fundog  := if( modocapt == 'inclusao', nrgb( 192, 213, 237 ), cor_verdf ) // cor de fundo gotfocus
   cor_textosg := if( modocapt == 'inclusao', cor_verd, cor_azule )
   cor_fundosg := if( modocapt == 'inclusao', cor_verde, cor_amarv )         // cor fundo lostfocus
   cor_txtsay  := if( modocapt == 'inclusao', cor_pret, cor_pret   )
   cor_funsay  := if( modocapt == 'inclusao', nrgb( 150, 181, 210 ), cor_fundo )
	   DEFINE FONT oFnt3 NAME "ARIAL" SIZE 14, 28 BOLD
	   define dialog odlgipl resource crecurso font ofntprinc
	   odlgipl:SetColor( cor_texto, cor_fundo )
   odlgipl:ctitle := ctitulo
	   // ATIVA OU DESATIVA OS CAMPOS TEXTO (SAYS) DA INCLUSAO OU REVISAO DA PLANILHA
   fdefinesays()  // ALTAMENTE RECOMENDAVEL TRAZER OS SAYS PARA DENTRO DO
                  // DEFINE DIALOG... ACTIVATE DIALOG... PODE DAR ESOUTO COM
                  // RECURSOS EM CODIGO NAO TERIA PROBLEMAS.
	   IF modocapt == Lower( 'inclusao' )
	      redefine GET ogetvnridplan VAR vnridplan;
         id 3200 of odlgipl;
         PICTURE '@r 9999/99-99';
         VALID fchknrid( modocapt );
         MESSAGE 'Aceite o número sugerido quando for uma nova planilha' + CRLF + 'Ou informe o número da planilha que está sendo reincluida !';
         COLOR cor_texto, cor_fundog;
         font ofntbold;
         update
	      ogetvnridplan:ctooltip   := 'Aceite o número sugerido quando for uma nova planilha' + CRLF + 'Ou informe o número da planilha que está sendo re-incluida !'
	      // ISTO NAO CAUSA NENHUM TRANSTORNO?
      ogetvnridplan:bgotfocus  := {|| cmsgqdr := 'Aceite o número sugerido quando for uma nova planilha!' + CRLF + ;
         'Ou informe o número da planilha que está sendo reincluida!', ;
         os_msg:refresh(), ;
         ogetvnridplan:SetColor( cor_textog, cor_fundog ) }
	      // ISTO NAO CAUSA NENHUM TRANSTORNO?
      ogetvnridplan:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ;
         ogetvnridplan:SetColor( cor_textosg, cor_fundosg ) }
	      redefine combobox ocbx_situacao_603;
         VAR vsituaesc ;
         items a_situs;
         id 603;
         of odlgipl;
         COLOR cor_bran, cor_azule;
         STYLE CBS_DROPDOWNLIST;
         ON change  ( vsituacao := Upper( subs( vsituaesc, 1, 1 ) ), ;
         if( vsituacao == Upper( 'A' ), ;
         ( os_aprova_7500:enable(), ogetvaprovador:enable(), os_dtapro_7600:enable() ), ;
         ( os_aprova_7500:disable(), ogetvaprovador:disable(), os_dtapro_7600:disable(), ogetvdtaprova:disable() ) ) )
	      ocbx_situacao_603:bgotfocus  := {|| cmsgqdr := 'Selecione a situação atual do orçamento!', ;
         os_msg:refresh(), ocbx_situacao_603:SetColor( cor_texto, cor_fundogf  ) }
	      ocbx_situacao_603:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ;
         ocbx_situacao_603:SetColor( cor_amar, cor_verm_ ), ;
         vsituacao := subs( vsituaesc, 1, 1 ), ;
         if( vsituacao == Upper( 'A' ), ;
         ( os_aprova_7500:enable(), ogetvaprovador:enable(), os_dtapro_7600:enable(), ogetvdtaprova:enable() ), ;
         ( os_aprova_7500:disable(), ogetvaprovador:disable(), os_dtapro_7600:disable(), ogetvdtaprova:disable() ) ) }
	      ocbx_situacao_603:ctooltip   := 'Informe a situação desta planilha'
	
      // REDEFINE GET oObjs[1] VAR aGets[1] ID 101 OF oDlg UPDATE PICTURE "@KR!"
      redefine GET ogetvdtregsit;
         VAR vdtregsit;
         id 4032;
         of odlgipl UPDATE // COLOQUE UPADATE EN TODOS OS GETS
	      ogetvdtregsit:bgotfocus  := {|| cmsgqdr := 'Informe a data em que ocorreu a situação agora registrada!', ;
         os_msg:refresh(), ;
         ogetvdtregsit:SetColor( cor_verm, cor_fundogf  ) }
	      ogetvdtregsit:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ;
         ogetvdtregsit:SetColor( cor_textosg, cor_fundosg ) }
	      ogetvdtregsit:ctooltip   := 'Informe a data em que ocorreu a situação agora registrada!'
	      redefine GET ogetvdocorcam;
         VAR vdocorcam;
         id 4103;
         of odlgipl;
         PICTURE '@k';
         COLOR cor_texto, cor_fundog;
         update
	      ogetvdocorcam:ctooltip   := 'Informe (caso haja) a identificação do documento de orçamento referente a esta planilha!'
	      ogetvdocorcam:bgotfocus  := {|| cmsgqdr := 'Informe (caso exista) a identificação do documento de orçamento referente a esta planilha!', ;
         os_msg:refresh(), ;
         ogetvdocorcam:SetColor( cor_textog, cor_fundogf  ) }
      ogetvdocorcam:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ;
         ogetvdocorcam:SetColor( cor_textosg, cor_fundosg ) }
	      ogetvdocorcam:bkeydown   := {| nk | if( nk == VK_F9, ;
         ( ogetvdocorcam:undo(), ogetvdocorcam:refresh(), ogetvdocorcam:setfocus() ), ) }
	      redefine GET ogetvidpcfabr;
         VAR vidpcfabr;
         id 4031;
         PICTURE '@kr 999-999';
         of odlgipl;
         COLOR cor_texto, cor_fundog;
         update
	      ogetvidpcfabr:ctooltip   := 'Informe a identificação que o fabricante dá a este produto !'
      ogetvidpcfabr:bgotfocus  := {|| cmsgqdr := 'Informe a identificação que o fabricante dá a este produto !', ;
         os_msg:refresh(), ogetvidpcfabr:SetColor( cor_textog, cor_fundog  ) }
      ogetvidpcfabr:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ogetvidpcfabr:SetColor( cor_textosg, cor_fundosg ) }
	      ogetvidpcfabr:bkeydown   := {| nk | if( nk == VK_F9, ;
         ( ogetvidpcfabr:undo(), ogetvidpcfabr:refresh(), ogetvidpcfabr:setfocus() ), ) }
	      redefine GET ogetvidpcclie;
         VAR vidpcclie;
         id 4038;
         of odlgipl;
         PICTURE '@k';
         COLOR cor_texto, cor_fundog;
         update
	      ogetvidpcclie:ctooltip   := 'Informe a identificação que o cliente dá a este produto!'
      ogetvidpcclie:bgotfocus  := {|| cmsgqdr := 'Informe a identificação que o cliente dá a este produto!', ;
         os_msg:refresh(), ;
         ogetvidpcclie:SetColor( cor_texto, cor_fundogf  ) }
      ogetvidpcclie:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ;
         ogetvidpcclie:SetColor( cor_textog, cor_fundosg ) }
	      ogetvidpcclie:bkeydown   := {| nk | if( nk == VK_F9, ;
         ( ogetvidpcclie:undo(), ogetvidpcclie:refresh(), ogetvidpcclie:setfocus() ), ) }
	      redefine GET ogetvcliente;
         VAR vcliente;
         id 1101;
         of odlgipl;
         bitmap "on";
         PICTURE '@k!';
         COLOR cor_texto, cor_fundog;
         action( idtecla := nk, obtselcli:setfocus(), Eval( obtselcli:baction ) ) ;
         update;
         VALID if( idtecla == VK_F2, ;
         ( xx := .F., idtecla := 0, .T. ), ;
         conferin( 'clientes', 'clientes', vcliente, 30, 'cliente', Upper( 'GETSPLA' ), '' ) )
	      ogetvcliente:lBtnTransparent := .F.
	      ogetvcliente:ctooltip   := 'Informe o nome do cliente ou tecle F2 ou clique no botão ao lado para obte-lo do cadastro de clientes!'
	      ogetvcliente:bkeydown   := {| nk | if( nk == VK_F2, ;
         ( idtecla := nk, obtselcli:setfocus(), Eval( obtselcli:baction ) ), ;
         if( nk == VK_F9, ;
         ( ogetvcliente:undo(), ogetvcliente:refresh(), ogetvcliente:setfocus() ), ) ) }
	      ogetvcliente:bgotfocus  := {|| idtecla := 0, xx := .F., lrettabel := .F., ;
         cmsgqdr := 'Informe o nome do cliente ou tecle F2 ou clique no botão ao lado para obte-lo do cadastro de clientes!', ;
         os_msg:refresh(), ;
         ogetvcliente:SetColor( cor_texto, cor_fundogf ) }
	      ogetvcliente:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ;
         ogetvcliente:SetColor( cor_textog, cor_fundosg ) }
	      redefine btnbmp obtselcli;
         FILE DiskName() + ':\' + CurDir() + '\imagens\lupa.bmp';
         noborder;
         id 1110;
         of odlgipl;
         cancel;
         update;
         tooltip 'Clique aqui para selecionar um cliente do cadastro de clientes!';
         action if( tabelas( ProcFile(), Upper( 'vcliente' ) ), ;
         ( xx := .F., idtecla := 0, ogetvcliente:refresh(), ogetvdesenho:setfocus() ), ;
         ( ogetvcliente:refresh(), ogetvcliente:setfocus() ) )
	      obtselcli:bgotfocus := {|| xx := .T. } // ????
	   ELSEIF modocapt == 'revisao'
	      // RETIRE OS UPDATES DOS BOTOES PROVOCAM EFEITOS INDESEJADOS.
      redefine button obtdadosold;
         id 3300 of odlgipl;
         action ( mostrapl( nil, nil, Lower( 'revisao' ) ), ;
         odlgipl:goprevctrl( obtdadosold:hwnd ), .T.  );
         cancel  ;
         update
	      obtdadosold:ctooltip := 'Clique aqui para visualizar os valores originais desta planilha!'
	      redefine GET ogetvnridplan VAR vnridplarv;
         id 3200 of odlgipl;
         PICTURE '@r 9999/99-99';
         font ofntbold;
         COLOR cor_texto, cor_fundog;
         update
	      ogetvnridplan:disable()
	      redefine GET ogetvcliente VAR vcliente;
         id 1101;
         of odlgipl;
         PICTURE '@!';
         font ofntbold;
         COLOR cor_texto, cor_fundog;
         update
      ogetvcliente:disable()
	      redefine combobox ocbx_situacao_603;
         VAR vsituaesc ;
         items a_situs;
         id 603;
         of odlgipl;
         COLOR cor_bran, cor_azule;
         STYLE CBS_DROPDOWNLIST;
         ON change ( vsituacao := Upper( subs( vsituaesc, 1, 1 ) ), ;
         if( vsituacao == Upper( 'A' ), ;
         ( os_aprova_7500:enable(), ogetvaprovador:enable(), os_dtapro_7600:enable(), ogetvdtaprova:enable(), os_numorcam_4099:enable(), ogetvdocorcam:enable() ), ;
         ( os_aprova_7500:disable(), ogetvaprovador:disable(), os_dtapro_7600:disable(), ogetvdtaprova:disable(), os_numorcam_4099:disable(), ogetvdocorcam:disable() ) ) )
	      ocbx_situacao_603:bkeydown   := {| nk | if( nk == VK_F9, ;
         ( vsituaesc := defsituacao( ( Planilha )->situacao ), ocbx_situacao_603:refresh(), ocbx_situacao_603:setfocus() ), ) }
	      ocbx_situacao_603:bgotfocus  := {|| cmsgqdr := ( 'Selecione a situação atual do orçamento!' + ;
         CRLF + CRLF + 'Pressione F9 para voltar ao valor original' ), ;
         os_msg:refresh(), ;
         ocbx_situacao_603:SetColor( cor_texto, cor_fundogf  ) }
	      ocbx_situacao_603:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ;
         ocbx_situacao_603:SetColor( cor_amar, cor_verm_ ), ;
         vsituacao := subs( vsituaesc, 1, 1 ), ;
         if( vsituacao == Upper( 'A' ), ;
         ( os_aprova_7500:enable(), ogetvaprovador:enable(), os_dtapro_7600:enable(), ogetvdtaprova:enable(), os_numorcam_4099:enable(), ogetvdocorcam:enable() ), ;
         ( os_aprova_7500:disable(), ogetvaprovador:disable(), os_dtapro_7600:disable(), ogetvdtaprova:disable(), ogetvdocorcam:disable() ) ) }
	      ocbx_situacao_603:ctooltip   := 'Informe a situação desta planilha!'
	
      redefine GET ogetvdtregsit;
         VAR vdtregsit;
         id 4032;
         of odlgipl;
         update
	      ogetvdtregsit:bkeydown   := {| nk | if( nk == VK_F9, ;
         ( vdtregsit := ( Planilha )->dtregsit, ogetvdtregsit:refresh(), ogetvdtregsit:setfocus() ), ) }
	      ogetvdtregsit:ctooltip   := 'Informe a data em que ocorreu a situação agora registrada!'
	      ogetvdtregsit:bgotfocus  := {|| cmsgqdr := ( 'Informe a data em que ocorreu a situação agora registrada!' + ;
         CRLF + CRLF + 'Pressione F9 para voltar ao valor original' ), ;
         os_msg:refresh(), ;
         ogetvdtregsit:SetColor( cor_texto, cor_fundogf  ) }
      ogetvdtregsit:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ;
         ogetvdtregsit:SetColor( cor_textog, cor_fundosg ) }
	      redefine GET ogetvdocorcam;
         VAR vdocorcam;
         id 4103;
         of odlgipl;
         PICTURE '@k';
         COLOR cor_texto, cor_fundog;
         update
	      ogetvdocorcam:bkeydown   := {| nk | if( nk == VK_F9, ;
         ( vdocorcam := ( Planilha )->docorcam, ogetvdocorcam:refresh(), ogetvdocorcam:setfocus() ), ) }
	      ogetvdocorcam:ctooltip   := 'Informe (caso haja) a identificação do documento de orçamento referente a esta planilha!'
      ogetvdocorcam:bgotfocus  := {|| cmsgqdr := ( 'Informe (caso haja) a identificação do documento de orçamento referente a esta planilha!' + ;
         CRLF + CRLF + 'Pressione F9 para voltar ao valor original' ), ;
         os_msg:refresh(), ;
         ogetvdocorcam:SetColor( cor_texto, cor_fundogf  ) }
      ogetvdocorcam:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ;
         ogetvdocorcam:SetColor( cor_textog, cor_fundosg ) }
	      redefine GET ogetvidpcfabr;
         VAR vidpcfabr;
         id 4031;
         PICTURE '@kr 999-999';
         of odlgipl;
         COLOR cor_texto, cor_fundog;
         update
	      ogetvidpcfabr:bkeydown   := {| nk | if( nk == VK_F9, ;
         ( vidpcfabr := ( Planilha )->idpcfabr, ogetvidpcfabr:refresh(), ogetvidpcfabr:setfocus() ), ) }
	      ogetvidpcfabr:ctooltip   := 'Informe a identificação que o fabricante dá a este produto !'
	      ogetvidpcfabr:bgotfocus  := {|| cmsgqdr := ( 'Informe a identificação que o fabricante dá a este produto !' + ;
         CRLF + CRLF + 'Pressione F9 para voltar ao valor original' ), ;
         os_msg:refresh(), ;
         ogetvidpcfabr:SetColor( cor_texto, cor_fundogf  ) }
      ogetvidpcfabr:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ogetvidpcfabr:SetColor( cor_textog, cor_fundosg ) }
	      redefine GET ogetvidpcclie;
         VAR vidpcclie;
         id 4038;
         of odlgipl;
         PICTURE '@k';
         COLOR cor_texto, cor_fundog;
         update
	      ogetvidpcclie:bkeydown   := {| nk | if( nk == VK_F9, ;
         ( vidpcclie := ( Planilha )->idpcclie, ogetvidpcclie:refresh(), ogetvidpcclie:setfocus() ), ) }
	      ogetvidpcclie:ctooltip   := 'Informe a identificação que o cliente dá a este produto!'
	      ogetvidpcclie:bgotfocus  := {|| cmsgqdr := 'Informe a identificação que o cliente dá a este produto!' + ;
         if( modocapt == 'revisao', ( CRLF + CRLF + 'Pressione F9 para voltar ao valor original' ), '' ), ;
         os_msg:refresh(), ;
         ogetvidpcclie:SetColor( cor_texto, cor_fundogf  ) }
      ogetvidpcclie:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ;
         ogetvidpcclie:SetColor( cor_textog, cor_fundosg ) }
	   ENDIF
	   redefine GET ogetvdesenho;
      VAR vdesenho;
      id 1201 of odlgipl;
      PICTURE '@k!';
      COLOR cor_texto, cor_fundog;
      update
	   IF modocapt == 'revisao'
      ogetvdesenho:bkeydown   := {| nk | if( nk == VK_F9, ;
         ( vdesenho := ( Planilha )->desenho, ogetvdesenho:refresh(), ogetvdesenho:setfocus() ), ) }
   ENDIF
	   ogetvdesenho:ctooltip   := 'Informe o número do desenho !'
	   ogetvdesenho:bgotfocus  := {|| cmsgqdr := ( 'Informe o número do desenho !' + ;
      if( modocapt == 'revisao', ( CRLF + CRLF + 'Pressione F9 para voltar ao valor original' ), '' ) ), ;
      os_msg:refresh(), ogetvdesenho:SetColor( cor_texto, cor_fundogf  ) }
   ogetvdesenho:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ogetvdesenho:SetColor( cor_textog, cor_fundosg ) }
	   redefine GET ogetvdesmestre VAR vdesmestre;
      id 1401 of odlgipl;
      PICTURE '@k';
      COLOR cor_texto, cor_fundog;
      update
	   IF modocapt == 'revisao'
      ogetvdesmestre:bkeydown   := {| nk | if( nk == VK_F9, ;
         ( vdesmestre := ( Planilha )->desmestre, ogetvdesmestre:refresh(), ogetvdesmestre:setfocus() ), ) }
   ENDIF
	   ogetvdesmestre:ctooltip   := 'Informe o número do desenho mestre !'
   ogetvdesmestre:bgotfocus  := {|| cmsgqdr := ( 'Informe o número do desenho mestre! (se houver)' + ;
      if( modocapt == 'revisao', ( CRLF + CRLF + 'Pressione F9 para voltar ao valor original' ), '' ) ), ;
      os_msg:refresh(), ogetvdesmestre:SetColor( cor_texto, cor_fundogf ) }
   ogetvdesmestre:blostfocus  := {|| cmsgqdr := '', os_msg:refresh(), ogetvdesmestre:SetColor( cor_textog, cor_fundosg ) }
	   redefine GET ogetvitem VAR vitem;
      id 1301 of odlgipl;
      PICTURE '@k';
      COLOR cor_texto, cor_fundog;
      update
	   IF modocapt == 'revisao'
      ogetvitem:bkeydown   := {| nk | if( nk == VK_F9, ;
         ( vitem := ( Planilha )->item, ogetvitem:refresh(), ogetvitem:setfocus() ), ) }
   ENDIF
	   ogetvitem:ctooltip   := 'Informe o número do item pedido !'
   ogetvitem:bgotfocus  := {|| cmsgqdr := ( 'Informe o número do item do desenho ou pedido! (se houver)' + ;
      if( modocapt == 'revisao', ( CRLF + CRLF + 'Pressione F9 para voltar ao valor original' ), '' ) ), ;
      os_msg:refresh(), ogetvitem:SetColor( cor_texto, cor_fundogf  ) }
   ogetvitem:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ogetvitem:SetColor( cor_textog, cor_fundosg ) }
	   redefine GET ogetvdescricao;
      VAR vdescricao;
      id 1501 of odlgipl;
      PICTURE '@!k';
      COLOR cor_texto, cor_fundog;
      update;
      VALID if( idtecla == VK_F2, ;
      ( xx := .F., idtecla := 0, ogetvdescricao:refresh(), .T. ), ;
      conferin( 'descric', 'descric', vdescricao, 40, 'descricao', Upper( 'GETSPLA' ), '' ) )
	   ogetvdescricao:bkeydown   := {| nk | if( nk == VK_F2, ( idtecla := nk, obtseldescr:setfocus(), Eval( obtseldescr:baction ) ), ;
      if( nk == VK_F9 .AND. modocapt == 'revisao', ;
      ( vdescricao := ( Planilha )->descricao, ogetvdescricao:refresh(), ogetvdescricao:setfocus() ), ) ) }
	   ogetvdescricao:ctooltip   := 'Informe a descrição do produto conforme designação do cliente, ou tecle F2 ou clique no botão ao lado para obtê-lo do CADASTRO DE DESCRIÇÕES!'
	   ogetvdescricao:bgotfocus  := {|| idtecla := 0, xx := .F., cmsgqdr := 'Informe a descrição do produto conforme designação do cliente!'    + CRLF + ;
      'Tecle F2 ou clique no botão ao lado para obtê-lo do CADASTRO DE DESCRIÇÕES!' + CRLF + CRLF + ;
      if( modocapt == 'revisao', 'Pressione F9 para voltar ao valor original!', '' ), ;
      os_msg:refresh(), ogetvdescricao:SetColor( cor_texto, cor_fundogf )  }
	   ogetvdescricao:blostfocus  := {|| cmsgqdr := '', os_msg:refresh(), ogetvdescricao:SetColor( cor_textog, cor_fundosg ) }
	   redefine btnbmp obtseldescr;
      id 1510 of odlgipl;
      FILE DiskName() + ':\' + CurDir() + '\imagens\lupa.bmp';
      noborder;
      cancel;
      update;
      action if( tabelas( ProcFile(), Upper( 'vdescricao' ) ), ;
      ( xx := .F., idtecla := 0, ogetvdescricao:refresh(), ogetvvolumeano:setfocus() ), ;
      ( ogetvdescricao:refresh(), ogetvdescricao:setfocus() ) )
	   obtseldescr:ctooltip := 'Clique aqui para selecionar uma descrição do cadastro de descrições!'
   obtseldescr:bgotfocus := {|| xx := .T. }
	   // *************************************************************************
   // INICIO DA CAPTURA DE DADOS QUE INFLUENCIAM NO CALCULO DO VALOR DE VENDA
   // *************************************************************************
	   redefine GET ogetvvolumeano VAR vvolumeano;
      id 4035 of odlgipl;
      PICTURE '@kzer 9,999.999 K';
      COLOR cor_texto, cor_fundog;
      spinner;
      update
	   IF modocapt == 'revisao'
      ogetvvolumeano:bkeydown   := {| nk | if( nk == VK_F9, ;
         ( vvolumeano := ( Planilha )->volumeano, ogetvvolumeano:refresh(), ogetvvolumeano:setfocus() ), ) }
   ENDIF
	
   ogetvvolumeano:ctooltip   := 'Informe a quantidade do volume anual (EM MILHEIROS)!'
   ogetvvolumeano:bgotfocus  := {|| cmsgqdr := 'Informe a quantidade do volume anual (EM MILHEIROS)!' + CRLF + ;
      'Exemplo:  para 1000 peças -> digite apenas 1'   + CRLF + CRLF + ;
      if( modocapt == 'revisao', 'Pressione F9 para voltar ao valor original', '' ), ;
      os_msg:refresh(), ogetvvolumeano:SetColor( cor_texto, cor_fundogf )  }
	   ogetvvolumeano:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ogetvvolumeano:SetColor( cor_textog, cor_fundosg ) }
	   redefine GET ogetvquantpedd VAR vquantpedd;
      id 1601 of odlgipl;
      PICTURE '@kzer 9,999.999 K';
      COLOR cor_texto, cor_fundog;
      spinner;
      update;
      VALID ( calcqtdds( '', modocapt ), odlgipl:update(), .T. )
	   IF modocapt == 'revisao'
      ogetvquantpedd:bkeydown   := {| nk | if( nk == VK_F9, ;
         ( vquantpedd := ( Planilha )->quantpedd, ogetvquantpedd:refresh(), ogetvquantpedd:setfocus() ), ) }
   ENDIF
	   ogetvquantpedd:ctooltip   := 'Informe a quantidade total de peças que serao produzidas (EM MILHEIROS)!'
   ogetvquantpedd:bgotfocus  := {|| cmsgqdr := 'Informe a quantidade total de peças que serao produzidas (EM MILHEIROS)!' + CRLF + ;
      'Exemplo: Para 1000 peças -> digite apenas 1'                              + CRLF + ;
      'Ao informar a quantidade nominal do pedido: as demais quantidades (alternativas)' + ;
      'serão calculadas automaticamente, mas ainda assim, poderão serem informadas individualmente!' + CRLF + CRLF + ;
      if( modocapt == 'revisao', 'Pressione F9 para voltar ao valor original', '' ), ;
      os_msg:refresh(), ogetvquantpedd:SetColor( cor_texto, cor_fundogf )  }
   ogetvquantpedd:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ogetvquantpedd:SetColor( cor_textog, cor_fundosg ) }
	   redefine GET ogetvquantped2 VAR vquantped2;
      id 1701 of odlgipl;
      PICTURE '@kzer 9,999.999 K'; // when !empty(vquantpedd);
      COLOR cor_texto, cor_fundog;
      spinner;
      update
	   IF modocapt == 'revisao' // VERIFICAR
      ogetvquantped2:bkeydown   := {| nk | if( nk == VK_F9, ;
         ( vquantped2 := ( Planilha )->quantped2, ogetvquantped2:refresh(), ogetvquantped2:setfocus() ), ) }
   ENDIF
	   ogetvquantped2:ctooltip    := 'Informe a primeira alternativa para a quantidade solicitada! (EM MILHEIROS)' // + CRLF +;
   // 'Atenção! Se uma das quantidades alternativas não for informada:'+ CRLF +;
   // 'Esta e as demais quantidades serão calculadas automáticamente!'
	   ogetvquantped2:bgotfocus   := {|| cmsgqdr := 'Informe a primeira alternativa para a quantidade solicitada! (EM MILHEIROS)' + CRLF + CRLF + ; // + CRLF +;//                                                          // 'Atenção! Se uma das quantidades alternativas não for informada:'+ CRLF +;// 'Esta e as demais quantidades serão calculadas automáticamente!'+CRLF+CRLF+;
      'Exemplo:  para 1000 peças -> digite apenas 1', os_msg:refresh(), ogetvquantped2:SetColor( cor_texto, cor_fundogf  ) }
	   ogetvquantped2:blostfocus  := {|| cmsgqdr := '', os_msg:refresh(), ogetvquantped2:SetColor( cor_textog, cor_fundosg )  }
   ogetvquantped2:lDisColors  := .F.       // Desativa  disable color
   ogetvquantped2:nClrTextDis := cor_cinz  // Cor texto disable status
   ogetvquantped2:nClrPaneDis := cor_fundo // Cor fundo disable status
	
   // SPINNER / PICTURE '@kzer 9,999.999 K' ??? QUE RESULTA?
   redefine GET ogetvquantped3 VAR vquantped3;
      id 1751 of odlgipl;
      PICTURE '@kzer 9,999.999 K'; // when !empty(vquantped2);
      MESSAGE 'Informe a segunda alternativa para a quantidade solicitada!'; // + CRLF +; //'Atenção! Se uma das quantidades alternativas não for informada:'+ CRLF +;'Esta e as demais quantidades serão calculadas automáticamente!';
      COLOR cor_texto, cor_fundog;
      spinner;
      update
	   IF modocapt == 'revisao' // VERIFICAR
      ogetvquantped3:bkeydown   := {| nk | if( nk == VK_F9, ;
         ( vquantped3 := ( Planilha )->quantped3, ogetvquantped3:refresh(), ogetvquantped3:setfocus() ), ) }
   ENDIF
	
   ogetvquantped3:ctooltip    := 'Informe a segunda alternativa para a quantidade solicitada!'
	   ogetvquantped3:bgotfocus   := {|| cmsgqdr := 'Informe a segunda alternativa para a quantidade solicitada! (EM MILHEIROS)' + CRLF + CRLF + ;
      'Exemplo:  para 10.000 peças -> digite apenas 10  -  Para 50 peças digite .050', ;
      os_msg:refresh(), ogetvquantped3:SetColor( cor_texto, cor_fundogf  ) }
	   ogetvquantped3:blostfocus  := {|| cmsgqdr := '', os_msg:refresh(), ogetvquantped3:SetColor( cor_textog, cor_fundosg ) }
	   ogetvquantped3:lDisColors  := .F.       // Desativa  disable color
   ogetvquantped3:nClrTextDis := cor_cinz  // Cor texto disable status
   ogetvquantped3:nClrPaneDis := cor_fundo // Cor fundo disable status
	
   redefine GET ogetvquantped4 VAR vquantped4;
      id 1801 of odlgipl;
      PICTURE '@kzer 9,999.999 K'; // when !empty(vquantped3);
      MESSAGE 'Informe a terceira alternativa para a quantidade solicitada!'; // 'Atenção! Se uma das quantidades alternativas não for informada:'+ CRLF +;'Esta e as demais quantidades serão calculadas automáticamente!';
      COLOR cor_texto, cor_fundog;
      spinner;
      update
	   IF modocapt == 'revisao' // VERIFICAR
      ogetvquantped4:bkeydown   := {| nk | if( nk == VK_F9, ;
         ( vquantped4 := ( Planilha )->quantped4, ogetvquantped4:refresh(), ogetvquantped4:setfocus() ), ) }
   ENDIF
	   ogetvquantped4:ctooltip   := 'Informe a terceira alternativa para a quantidade solicitada!' // + CRLF +;
   // 'Atenção! Se uma das quantidades alternativas não for informada:'+ CRLF +;
   // 'Esta e as demais quantidades serão calculadas automáticamente!'
	   ogetvquantped4:bgotfocus  := {|| cmsgqdr := 'Informe a terceira alternativa para a quantidade solicitada! (EM MILHEIROS)' + CRLF + CRLF + ; // 'Atenção! Se uma das quantidades alternativas não for informada:'+ CRLF +;'Esta e as demais quantidades serão calculadas automáticamente!'+CRLF+CRLF+;
      'Exemplo:  para 10.000 peças -> digite apenas 10', os_msg:refresh(), ogetvquantped4:SetColor( cor_texto, cor_fundogf  ) }
   ogetvquantped4:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ogetvquantped4:SetColor( cor_textog, cor_fundosg ) }
   ogetvquantped4:lDisColors  := .F.       // Desativa  disable color
   ogetvquantped4:nClrTextDis := cor_cinz  // Cor texto disable status
   ogetvquantped4:nClrPaneDis := cor_fundo // Cor fundo disable status
	   redefine GET ogetvquantped5 VAR vquantped5;
      id 1851;
      of odlgipl;
      PICTURE '@kzer 9,999.999 K'; // when !empty(vquantped4);
      MESSAGE 'Informe a quarta alternativa para a quantidade solicitada!'; // + CRLF +;'Atenção! Se uma das quantidades alternativas não for informada:'+ CRLF +;'Esta e as demais quantidades serão calculadas automáticamente!';
      COLOR cor_texto, cor_fundog;
      spinner;
      update
	   IF modocapt == 'revisao'
      ogetvquantped4:bkeydown   := {| nk | if( nk == VK_F9, ;
         ( vquantped4 := ( Planilha )->quantped5, ogetvquantped5:refresh(), ogetvquantped5:setfocus() ), ) }
   ENDIF
	   ogetvquantped5:ctooltip   := 'Informe a quarta alternativa para a quantidade solicitada!' // + CRLF +;
   // 'Atenção! Se uma das quantidades alternativas não for informada:'+ CRLF +;
   // 'Esta e as demais quantidades serão calculadas automáticamente!'
	   ogetvquantped5:bgotfocus  := {|| cmsgqdr := 'Informe a quarta alternativa para a quantidade solicitada! (EM MILHEIROS)' + CRLF + CRLF + ; // 'Atenção! Se uma das quantidades alternativas não for informada:'+ CRLF +;'Esta e as demais quantidades serão calculadas automáticamente!'+CRLF+CRLF+;
      'Exemplo:  para 200.000 peças -> digite apenas 200', os_msg:refresh(), ogetvquantped5:SetColor( cor_texto, cor_fundogf  ) }
   ogetvquantped5:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ogetvquantped5:SetColor( cor_textog, cor_fundosg ) }
   ogetvquantped5:lDisColors  := .F.       // Desativa  disable color
   ogetvquantped5:nClrTextDis := cor_cinz  // Cor texto disable status
   ogetvquantped5:nClrPaneDis := cor_fundo // Cor fundo disable status
	   // botao para calculo das quantidades alternativas
   // RETIRE O CANCEL - DEIXE SOMENTE NO BOTAO DE SAIDA DO MODULO
   redefine button obtcalcqtdd;
      id 1950;
      WHEN !Empty( vquantpedd );
      action ( calcqtdds( 'dobotao', modocapt ), odlgipl:update() );
      cancel;
      update
	   obtcalcqtdd:ctooltip := 'Clique aqui para calcular a quantidades alternativas automaticamente!'
	   redefine sbutton oq_tipomol_4128;
      id 4128;
      colors CLR_BLUE, { CLR_HRED, cor_fundog, 0 };
      update
	
   redefine sbutton oq_fabrcli_4129;
      id 4129;
      colors CLR_BLUE, { CLR_HRED, cor_fundog, 2 };
      update
	
   redefine sbutton oq_circret_4130;
      id 4130;
      colors CLR_BLUE, { CLR_HRED, cor_fundog, 2 };
      update
	   redefine sbutton obtcompressao;
      id 4058;
      tooltip 'Clique neste botão se desejar selecionar mola de Compressão';
      action ( vtipomola := 1, fmudagets() );
      PROMPT  'Compressão';
      noborder ;
      cancel;
      update;
      colors cor_azule, cor_fundog
	   obtcompressao:bgotfocus := {|| oq_tipomol_4128:show(), oq_fabrcli_4129:hide(), oq_circret_4130:hide(), odlgipl:update() }
	   redefine sbutton obttracao;
      id 4115;
      tooltip 'Clique neste botão se desejar selecionar mola de Tração';
      action ( vtipomola := 2, fmudagets() );
      PROMPT  'Tração';
      noborder;
      cancel;
      update;
      colors cor_azule, cor_fundog
	   obtcompressao:bgotfocus := {|| oq_tipomol_4128:show(), oq_fabrcli_4129:hide(), oq_circret_4130:hide(), odlgipl:update() }
	   redefine sbutton obttorcao;
      id 4124;
      tooltip 'Clique neste botão se desejar selecionar mola de Torção';
      action ( vtipomola := 3, fmudagets() );
      PROMPT  'Torção';
      noborder;
      cancel;
      update;
      colors cor_azule, cor_fundog
	   obtcompressao:bgotfocus := {|| oq_tipomol_4128:show(), oq_fabrcli_4129:hide(), oq_circret_4130:hide(), odlgipl:update() }
	   redefine sbutton obtartefato;
      id 4125;
      tooltip 'Clique neste botão se desejar selecionar Artefato';
      action ( vtipomola := 4, fmudagets() );
      PROMPT  'Artefato';
      noborder;
      cancel;
      update;
      colors cor_azule, cor_fundog
	   obtcompressao:bgotfocus := {|| oq_tipomol_4128:show(), oq_fabrcli_4129:hide(), oq_circret_4130:hide(), odlgipl:update() }
	   redefine sbutton obtfabfornmp;
      id 4068;
      tooltip 'Clique neste botão para informar que o fabricante fornecerá a Mat.Prima';
      action ( vtipoforesc := 1, vfabfornmp := .T., fmudagetsmp() );
      PROMPT  'Fabricante';
      noborder;
      cancel;
      update;
      colors cor_azule, cor_fundog
	   obtfabfornmp:bgotfocus := {|| oq_fabrcli_4129:show(), oq_tipomol_4128:hide(), oq_circret_4130:hide(), odlgipl:update() }
	   redefine sbutton obtclifornmp;
      id 4072;
      tooltip 'Clique neste botão para informar que o Cliente fornecerá a Mat.Prima';
      action ( vtipoforesc := 2,, vfabfornmp := .F., fmudagetsmp() );
      PROMPT  'Cliente';
      noborder;
      cancel;
      update;
      colors cor_azule, cor_fundog
	   obtclifornmp:bgotfocus := {|| oq_fabrcli_4129:show(), oq_tipomol_4128:hide(), oq_circret_4130:hide(), odlgipl:update() }
	   redefine sbutton obtcircular;
      id 4126 ;
      tooltip 'Clique neste botão para selecionar seção do arame "CIRCULAR"';
      action  ( vtiposecesc := 1, fmudagetsec() );
      PROMPT  'Circular';
      noborder;
      cancel;
      update;
      colors cor_azule, cor_fundog
	   obtcircular:bgotfocus := {|| oq_circret_4130:show(), oq_tipomol_4128:hide(), oq_fabrcli_4129:hide(), odlgipl:update() }
	   redefine sbutton obtretangular;
      id 4127 ;
      tooltip 'Clique neste botão para selecionar seção do arame "RETANGULAR"';
      action  ( vtiposecesc := 2, fmudagetsec() );
      PROMPT  'Retangular';
      noborder;
      cancel;
      update;
      colors cor_azule, cor_fundog
   obtretangular:bgotfocus := {|| oq_circret_4130:show(), oq_tipomol_4128:hide(), oq_fabrcli_4129:hide(), odlgipl:update() }
	   redefine sbutton obtzeramatp;
      id 2300;
      of odlgipl;
      tooltip 'Clique neste botão se desejar apaguar todos os dados da Matéria Prima!';
      PROMPT  'Limpa' + CRLF + 'Mat.Prima';
      noborder;
      colors cor_pret, cor_fundog;
      cancel;
      update;
      action ( fzeramatp( '' ), obtcompressao:setfocus()  )
	   obtzeramatp:ocursor := ocursorx
   obtzeramatp:lmulti := .T.
	   redefine GET ogetvmaterial;
      VAR vmaterial;
      id 2031;
      of odlgipl;
      PICTURE '@k!';
      COLOR cor_texto, cor_fundog;
      update;
      VALID if( modocapt == 'inclusao' .OR. ( modocapt == 'revisao' .AND. vmaterial # ( Planilha )->material ), ;
      if( idtecla == VK_F2,  ( xx := .F., idtecla := 0, .T. ), fvalidmat( modocapt ) ), .T. )
	   // ações apos pressionamento de teclas F9 e F2
   ogetvmaterial:bkeydown := {| nk | if( nk == VK_F9 .AND. modocapt == 'revisao', ;
      ( vmaterial := ( Planilha )->material, ogetvmaterial:refresh(), ogetvmaterial:setfocus() ), ;
      if( nk == VK_F2, ( idtecla := nk, obtselematp:setfocus(), Eval( obtselematp:baction ) ), ) ) }
	   // mostra mensagem e ajusta cores
   ogetvmaterial:bgotfocus  := {|| cmsgqdr := ( ( vctpm + vcfabcli + vccircret )  + CRLF + 'Informe o material ou tecle F2 ou clique no botão à direita para seleciona-lo do Cadastro de Materias-Primas!' + ;
      if( modocapt == 'revisao', ( CRLF + CRLF + 'Pressione F9 para voltar ao valor original' ), '' ) ), ;
      os_msg:refresh(), ogetvmaterial:SetColor( cor_texto, cor_fundogf ) }
	   ogetvmaterial:ctooltip   := 'Informe o material ou tecle F2 ou clique no botão a direita para seleciona-lo do Cadastro de Materias-Primas!'
	   // sequencia depois do valid
   ogetvmaterial:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ogetvmaterial:SetColor( cor_textog, cor_fundosg ), precalc() }
	   redefine btnbmp obtselematp;
      id 2035;
      of odlgipl;
      FILE DiskName() + ':\' + CurDir() + '\imagens\lupa.bmp';
      noborder;
      action if( fselematp( modocapt ), ;
      ( xx := .F., idtecla := 0, linfmpmanual := .F., precalc(), ogetvmaterial:refresh(), if( vtipoforesc == 1, ogetvlotminmp:setfocus(), ) ), ;
      ( ogetvmaterial:refresh(), ogetvmaterial:setfocus() ) );
      cancel;
      update
	   obtselematp:bgotfocus := {|| xx := .T. }  // ????
	   obtselematp:ctooltip  := 'Clique aqui para selecionar um material do cadastro de Materias-Primas!'
	   redefine GET ogetvlotminmp;
      VAR vlotminmp;
      id 4009;
      of odlgipl;
      PICTURE '@kze 999,999'; // picture '@kzer Ø 999.99 mm';
      COLOR cor_texto, cor_fundog;
      update;
      MESSAGE 'Informe o peso do lote minino (se houver) para compra da Matéria Prima! [em kilogramas]'
	   ogetvlotminmp:bkeydown    := {| nk | if( nk == VK_F9 .AND. modocapt == 'revisao', ;
      ( vlotminmp := ( Planilha )->lotminmp, ogetvlotminmp:refresh(), ogetvlotminmp:setfocus() ), ) }
	   ogetvlotminmp:ctooltip    := 'Informe o peso do lote minino (se houver) para compra da Matéria Prima! [em kilogramas]' + ;
      if( modocapt == 'revisao', ( CRLF + CRLF + 'Pressione F9 para voltar ao valor original' ), '' )
	   ogetvlotminmp:bgotfocus   := {|| cmsgqdr := 'Informe o peso do lote minino (se houver) para compra da Matéria Prima! [em kilogramas]', os_msg:refresh(), ogetvlotminmp:SetColor( cor_texto, cor_fundogf  ) }
	   ogetvlotminmp:blostfocus  := {|| cmsgqdr := '', os_msg:refresh(), ogetvlotminmp:SetColor( cor_textog, cor_fundosg ), precalc() }
   ogetvlotminmp:lDisColors  := .F.       // Desativa  disable color
   ogetvlotminmp:nClrTextDis := cor_cinz  // Cor texto disable status
   ogetvlotminmp:nClrPaneDis := cor_fundo // Cor fundo disable status
	
   redefine GET ogetvd_arame;
      VAR vd_arame;
      id 2041;
      of odlgipl;
      PICTURE '@kzer 999.99 mm'; // picture '@kzer Ø 999.99 mm';
      COLOR cor_texto, cor_fundog;
      spinner;
      update;
      MESSAGE 'Informe o diâmetro do arame! [em milímetros]';
      VALID if( vtipoforesc == 1, ;
      ( if( !linfmpmanual, ;
      if( fvalidarame( Lower( 'circular' ), modocapt ), ;
      ( if( modocapt == 'revisao' .AND. mudoucusto(),, ), os_vcusmp_2131:setfont( ofntbold ), ;
      os_vcusmp_2131:SetColor( cor_vermt, cor_fundosg ), os_vcusmp_2131:refresh(), odlgipl:update(), ogetvespirasc:refresh(), precalc(), odlgipl:update(), ogetvespirasc:setfocus(), .T. ), ;
      ( vd_arame := 0, ogetvd_arame:refresh(), ogetvd_arame:setfocus(), .F. ) ), .T. ) ), .T. )
	   ogetvd_arame:bkeydown   := {| nk | if( vtipoforesc == 1, ( if( ( nk == VK_F9 .AND. modocapt == 'revisao' ), ;
      ( vd_arame := ( Planilha )->d_arame, ogetvd_arame:refresh(), ogetvd_arame:setfocus() ), ;
      if(  nk == 27, ogetvmaterial:setfocus(), ) ) ), )    }
	   ogetvd_arame:ctooltip   := 'Informe o diâmetro do arame! [em milimetros]' + ;
      if( vtipoforesc == 1, ( if( modocapt == 'revisao', ( CRLF + CRLF + 'Pressione F9 para voltar ao valor original' ), '' ) ), '' )
	   ogetvd_arame:bgotfocus  := {|| cmsgqdr := 'Informe o diâmetro do arame! [em milimetros]' + ;
      if( vtipoforesc == 1, ;
      if( modocapt == 'revisao', CRLF + CRLF + 'Pressione F9 para voltar ao valor original!', '' ), '' ), ;
      os_msg:refresh(), ogetvd_arame:SetColor( cor_texto, cor_fundogf ) }
	   ogetvd_arame:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ogetvd_arame:SetColor( cor_textog, cor_fundosg ), precalc() }
	   ogetvd_arame:nClrTextDis := cor_cinz
   ogetvd_arame:nClrPaneDis := cor_fundo
   ogetvd_arame:disable()
	   redefine GET ogetvespirasc;
      VAR vespiras;
      id 2051;
      of odlgipl;
      PICTURE '@kzer 999.99 e.t.';
      MESSAGE 'Informe o número de espiras completas!';
      COLOR cor_texto, cor_fundog;
      spinner;
      VALID !Empty( vespiras );
      update
	   IF modocapt == 'revisao'
      ogetvespirasc:bkeydown := {| nk | if( nk == VK_F9, ;
         ( vespiras    := ( Planilha )->espiras, ;
         voldespiras := ( Planilha )->espiras, ;
         ogetvespirasc:refresh(), ;
         ogetvespirasc:setfocus() ), .T. ) }
   ENDIF
	   ogetvespirasc:ctooltip   := 'Informe o número de espiras completas ou tecle F9 para retornar ao valor original!'
	   ogetvespirasc:bgotfocus  := {|| cmsgqdr := 'Informe o número de espiras completas ou tecle F9 para retornar ao valor original' + ;
      if( modocapt == 'revisao', CRLF + CRLF + 'Pressione F9 para voltar ao valor original!', '' ), ;
      os_msg:refresh(), ogetvespirasc:SetColor( cor_texto, cor_fundogf ), precalc() }
	   ogetvespirasc:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ogetvespirasc:SetColor( cor_textog, cor_fundosg ), precalc() }
	   ogetvespirasc:nClrTextDis := cor_cinz
   ogetvespirasc:nClrPaneDis := cor_fundo
   ogetvespirasc:disable()
	   redefine GET ogetvldaxial VAR vldaxial;
      id 2043 of odlgipl;
      PICTURE '@kzer 999.99 mm';
      MESSAGE ( 'Informe a medida do lado AXIAL (largura) da seção do arame [em milimetros]' );
      COLOR cor_texto, cor_fundog; // when (alltrim(upper(vtiposecao))==upper('RETANGULAR').and.!empty(vmaterial) ) ;
      spinner;
      VALID !Empty( vldaxial );
      update
	   IF modocapt == 'revisao'
      ogetvldaxial:bkeydown := {| nk | if( nk == VK_F9, ;
         ( vldaxial := ( Planilha )->ldaxial, ogetvldaxial:refresh(), ogetvldaxial:setfocus() ), ) }
   ENDIF
	   ogetvldaxial:ctooltip   := 'Informe a medida do lado AXIAL (largura) da seção do arame [em milimetros]!'
	   ogetvldaxial:bgotfocus  := {|| cmsgqdr := 'Informe a medida do LADO AXIAL (largura) da seção do arame [em milimetros]' + ;
      if( modocapt == 'revisao', CRLF + CRLF + 'Pressione F9 para voltar ao valor original!', '' ), os_msg:refresh(), ogetvldaxial:SetColor( cor_texto, cor_fundogf ) }
	   ogetvldaxial:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ogetvldaxial:SetColor( cor_textog, cor_fundosg ), precalc() }
	   ogetvldaxial:nClrTextDis := cor_cinz
   ogetvldaxial:nClrPaneDis := cor_fundo
   ogetvldaxial:disable()
	   redefine GET ogetvldradial VAR vldradial;
      id 2053 of odlgipl;
      PICTURE '@kzer 999.99 mm';
      MESSAGE ( 'Informe a medida do lado RADIAL (altura) da seção do arame [em milimetros]' );
      COLOR cor_texto, cor_fundog;
      spinner;
      update;
      VALID if( vtipoforesc == 1, ( if( !linfmpmanual, ;
      if( fvalidarame( Lower( 'retangular' ), modocapt ), ;
      ( if( modocapt == 'revisao' .AND. mudoucusto(),, ), os_vcusmp_2131:refresh(), ogetvespirasr:refresh(), precalc(), odlgipl:update(), ogetvespirasr:setfocus(), .T. ), ;
      ( vldaxial := 0, vldradial := 0, ogetvldaxial:refresh(), ogetvldradial:refresh(), ogetvldaxial:setfocus(), .F. ) ), .T. ) ), .T. )
	   IF modocapt == 'revisao'
      ogetvldradial:bkeydown := {| nk | if( nk == VK_F9, ;
         ( vldradial := ( Planilha )->ldradial, ogetvldradial:refresh(), ogetvldradial:setfocus() ), ;
         if( nk == 27, ogetvldradial:setfocus(), ) ) }
   ENDIF
	   ogetvldradial:ctooltip   := 'Informe a medida do lado RADIAL (altura) da seção do arame [em milimetros]!'
	   ogetvldradial:bgotfocus  := {|| cmsgqdr := 'Informe a medida do LADO RADIAL (altura) da seção do arame [em milimetros]' + ;
      if( modocapt == 'revisao', CRLF + CRLF + 'Pressione F9 para voltar ao valor original!', '' ), os_msg:refresh(), ogetvldradial:SetColor( cor_texto, cor_fundogf ) }
	   ogetvldradial:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ogetvldradial:SetColor( cor_textog, cor_fundosg ), precalc() }
	   ogetvldradial:nClrTextDis := cor_cinz
   ogetvldradial:nClrPaneDis := cor_fundo
   ogetvldradial:disable()
	   redefine GET ogetvespirasR;
      VAR vespiras;
      id 2061 of odlgipl;
      PICTURE '@kzer 999.99 e.t.'; // when ( vtiposecao==upper('RETANGULAR').and.!empty(vldaxial+vldradial) );
      MESSAGE 'Informe o número de espiras completas!';
      COLOR cor_texto, cor_fundog;
      spinner;
      VALID !Empty( vespiras );
      update
	   IF modocapt == 'revisao'
      ogetvespirasr:bkeydown := {| nk | if( nk == VK_F9, ;
         ( vespiras := ( Planilha )->espiras, ogetvespirasr:refresh(), ;
         ogetvespirasr:setfocus() ), ) }
   ENDIF
	   ogetvespirasr:ctooltip   := 'Informe o número de espiras completas!'
   ogetvespirasr:bgotfocus  := {|| cmsgqdr := 'Informe o número de espiras completas!' + ;
      if( modocapt == 'revisao', CRLF + CRLF + 'Pressione F9 para voltar ao valor original!', '' ), ;
      os_msg:refresh(), ogetvespirasr:SetColor( cor_texto, cor_fundogf  ) }
   ogetvespirasr:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ogetvespirasr:SetColor( cor_textog, cor_fundosg ), precalc() }
	   ogetvespirasr:nClrTextDis := cor_cinz
   ogetvespirasr:nClrPaneDis := cor_fundo
   ogetvespirasr:disable()
	   redefine GET ogetvd_medio2 VAR vd_medio2;
      id 2071 of odlgipl;
      PICTURE '@kzer 999.99 mm'; // picture '@kzer Ø 999.99 mm'; // when ( empty(vd_intern2) .and. empty(vd_extern2).and.!empty(vmaterial) );
      MESSAGE 'Informe o diâmetro medio da espira da mola! [em milimetros]';
      COLOR cor_texto, cor_fundog;
      spinner;
      update;
      VALID if( vd_medio2 > 0, ;
      if( fchkdims( 'medio', vd_medio2, modocapt ), ( precalc(), ogetvhaste1:setfocus(), .T. ), .F. ), ;
      ( vd_medio2 := 0, ogetvd_medio2:refresh(), .T. )  )
	   ogetvd_medio2:ctooltip   := 'Informe o diâmetro médio da espira da mola! [em milimetros]'
   ogetvd_medio2:bkeydown   := {| nk | if( nk == VK_F2, msgalert( 'completar' ), ) } // COMPLETAR ogetvdescricao:bkeydown := {|nk| if( nk == VK_F2,( obtselcli:setfocus(),eval(obtselcli:baction)),)}
	   IF modocapt == 'revisao'
      ogetvd_medio2:bkeydown   := {| nk | if( nk == VK_F9, ;
         ( vd_medio2 := ( Planilha )->d_medio, ogetvd_medio2:refresh(), ogetvd_medio2:setfocus() ), ) }
   ENDIF
	   ogetvd_medio2:bgotfocus  := {|| cmsgqdr := 'Informe o diâmetro médio da espira da mola! [em milimetros]' + ;
      if( modocapt == 'revisao', CRLF + CRLF + 'Pressione F9 para voltar ao valor original!', '' ), ;
      os_msg:refresh(), ogetvd_medio2:SetColor( cor_texto, cor_fundogf ), precalc() }
	   ogetvd_medio2:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ogetvd_medio2:SetColor( cor_textog, cor_fundosg ), precalc() }
	   ogetvd_medio2:nClrTextDis := cor_cinz
   ogetvd_medio2:nClrPaneDis := cor_fundo
   ogetvd_medio2:disable()
	   redefine GET ogetvd_intern2 VAR vd_intern2;
      id 2081 of odlgipl;
      PICTURE '@kzer 999.99 mm';  // picture '@kzer Ø 999.99 mm'; //  when ( empty(vd_extern2) .and. empty(vd_medio2).and.!empty(vmaterial) );
      MESSAGE 'Informe o diâmetro interno da espira da mola! [em milimetros]';
      COLOR cor_texto, cor_fundog;
      spinner;
      update;
      VALID if( vd_intern2 > 0, ;
      if( fchkdims( 'interno', vd_intern2, modocapt ), ( precalc(), ogetvhaste1:setfocus(), .T. ), .F. ), ;
      ( vd_intern2 := 0, ogetvd_intern2:refresh(), .T. ) )
	   IF modocapt == 'revisao'
      ogetvd_intern2:bkeydown := {| nk | if( nk == VK_F9, ;
         ( vd_intern2 := ( Planilha )->d_interno, ogetvd_intern2:refresh(), ogetvd_intern2:setfocus() ), ) }
   ENDIF
	   ogetvd_intern2:ctooltip   := 'Informe o diâmetro interno da espira da mola! [em milimetros]'
   ogetvd_intern2:bgotfocus  := {|| cmsgqdr := 'Informe o diâmetro interno da espira da mola! [em milimetros]' + ;
      if( modocapt == 'revisao', CRLF + CRLF + 'Pressione F9 para voltar ao valor original!', '' ), os_msg:refresh(), ogetvd_intern2:SetColor( cor_texto, cor_bran   ) }
   ogetvd_intern2:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ogetvd_intern2:SetColor( cor_textog, cor_fundosg ), precalc() }
	   ogetvd_intern2:nClrTextDis := cor_cinz
   ogetvd_intern2:nClrPaneDis := cor_fundo
   ogetvd_intern2:disable()
	   redefine GET ogetvd_extern2 VAR vd_extern2;
      id 2091 of odlgipl;
      PICTURE '@kzer 999.99 mm'; // Ø 999.99 mm'; // when (empty(vd_intern2).and.empty(vd_medio2).and.!empty(vmaterial) );
      MESSAGE 'Informe o diâmetro externo da espira da mola! [em milimetros]';
      COLOR cor_texto, cor_fundog;
      spinner;
      update;
      VALID if( vd_extern2 > 0, ;
      if( fchkdims( 'externo', vd_extern2,, modocapt ), ( precalc(), ogetvhaste1:setfocus(), .T. ), .F. ), ;
      ( vd_extern2 := 0, ogetvd_extern2:refresh(), .T. ) )
	   IF modocapt == 'revisao'
      ogetvd_extern2:bkeydown := {| nk | if( nk == VK_F9, ;
         ( vd_extern2 := ( Planilha )->d_externo, ogetvd_extern2:refresh(), ogetvd_extern2:setfocus() ), ) }
   ENDIF
	   ogetvd_extern2:ctooltip   := 'Informe o diâmetro externo da espira da mola! [em milimetros]'
   ogetvd_extern2:bgotfocus  := {|| cmsgqdr := 'Informe o diâmetro externo da espira da mola! [em milimetros]' + ;
      if( modocapt == 'revisao', CRLF + CRLF + 'Pressione F9 para voltar ao valor original!', '' ), os_msg:refresh(), ogetvd_extern2:SetColor( cor_texto, cor_fundogf ) }
   ogetvd_extern2:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ogetvd_extern2:SetColor( cor_textog, cor_fundosg ), precalc() }
	   ogetvd_extern2:nClrTextDis := cor_cinz
   ogetvd_extern2:nClrPaneDis := cor_fundo
   ogetvd_extern2:disable()
	   redefine GET ogetvhaste1;
      VAR vhaste1;
      id 2101 of odlgipl;
      PICTURE '@kzer 9999.99 mm'; // when !empty( vd_intern2+vd_medio2+vd_extern2 );
      MESSAGE 'Informe o tamanho da haste 1 da mola! [em milimetros] - (SE HOUVER!)';
      COLOR cor_texto, cor_fundog;
      spinner;
      update
	   IF modocapt == 'revisao'
      ogetvhaste1:bkeydown   := {| nk | if( nk == VK_F9, ;
         ( vhaste1 := ( Planilha )->haste1, ogetvhaste1:refresh(), ogetvhaste1:setfocus() ), ) }
   ENDIF
	   ogetvhaste1:ctooltip   := 'Informe o tamanho da haste 1 da mola! [em milimetros] - (SE HOUVER!)'
   ogetvhaste1:bgotfocus  := {|| cmsgqdr := 'Informe o tamanho da haste 1 da mola! [em milimetros] - (SE HOUVER!)' + ;
      if( modocapt == 'revisao', CRLF + CRLF + 'Pressione F9 para voltar ao valor original!', '' ), os_msg:refresh(), ogetvhaste1:SetColor( cor_texto, cor_fundogf  ) }
   ogetvhaste1:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ogetvhaste1:SetColor( cor_textog, cor_fundosg ), precalc() }
	   ogetvhaste1:nClrTextDis := cor_cinz
   ogetvhaste1:nClrPaneDis := cor_fundo
   ogetvhaste1:disable()
	   redefine GET ogetvhaste2 VAR vhaste2;
      id 2111 of odlgipl;
      PICTURE '@kzer 9999.99 mm'; // when !empty(vd_intern2+vd_medio2+vd_extern2);
      MESSAGE 'Informe o tamanho da haste 2 da mola [em milimetros] - (SE HOUVER!)';
      COLOR cor_texto, cor_fundog;
      spinner;
      update
	   IF modocapt == 'revisao'
      ogetvhaste2:bkeydown := {| nk | if( nk == VK_F9, ;
         ( vhaste2 := ( Planilha )->haste2, ogetvhaste2:refresh(), ogetvhaste2:setfocus() ), ) }
   ENDIF
	   ogetvhaste2:ctooltip   := 'Informe o tamanho da haste 2 da mola [em milimetros] - (SE HOUVER!)'
   ogetvhaste2:bgotfocus  := {|| cmsgqdr := 'Informe o tamanho da haste 2 da mola! [em milimetros] - (SE HOUVER!)' + ;
      if( modocapt == 'revisao', CRLF + CRLF + 'Pressione F9 para voltar ao valor original!', '' ), ;
      os_msg:refresh(), ogetvhaste2:SetColor( cor_texto, cor_fundogf  ) }
   ogetvhaste2:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ogetvhaste2:SetColor( cor_textog, cor_fundosg ), precalc() }
	   ogetvhaste2:nClrTextDis := cor_cinz
   ogetvhaste2:nClrPaneDis := cor_fundo
   ogetvhaste2:disable()
	   redefine GET ogetvcustosuc VAR vcustosuc;
      id 4036 of odlgipl;
      PICTURE '@kze 99,999.99';
      MESSAGE 'Informe o valor do kg de sucata para o material selecionado!';
      COLOR cor_texto, cor_fundog;
      update
	   IF modocapt == 'revisao'
      ogetvcustosuc:bkeydown   := {| nk | if( nk == VK_F9, ;
         ( vcustosuc := ( Planilha )->custosuc, ogetvcustosuc:refresh(), ogetvcustosuc:setfocus() ), ) }
   ENDIF
	   ogetvcustosuc:ctooltip   := 'Informe o valor do kg de sucata para o material selecionado!'
   ogetvcustosuc:bgotfocus  := {|| cmsgqdr := 'Informe o valor do kg de sucata para o material selecionado!' + ;
      if( modocapt == 'revisao', CRLF + CRLF + 'Pressione F9 para voltar ao valor original!', '' ), ;
      os_msg:refresh(), ogetvcustosuc:SetColor( cor_texto, cor_fundogf  ) }
   ogetvcustosuc:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ogetvcustosuc:SetColor( cor_textog, cor_fundosg ), precalc() }
	   ogetvcustosuc:lDisColors  := .F.       // Desativa  disable color
   ogetvcustosuc:nClrTextDis := cor_cinz  // Cor texto disable status
   ogetvcustosuc:nClrPaneDis := cor_fundo // Cor fundo disable status
	   ogetvcustosuc:nClrTextDis := cor_cinz
   ogetvcustosuc:nClrPaneDis := cor_fundo
   ogetvcustosuc:disable()
	   redefine GET ogetvaprovsuc VAR vaprovsuc;
      id 4037 of odlgipl;
      PICTURE '@kzer 999.99 %';
      MESSAGE 'Informe a porcentagem de aproveitamento do material sucateado!';
      COLOR cor_texto, cor_fundog;
      update
	   IF modocapt == 'revisao'
      ogetvaprovsuc:bkeydown   := {| nk | if( nk == VK_F9, ;
         ( vaprovsuc := ( Planilha )->aprovsuc, ogetvaprovsuc:refresh(), ogetvaprovsuc:setfocus() ), ) }
   ENDIF
	   ogetvaprovsuc:ctooltip   := 'Informe a porcentagem de aproveitamento do material sucateado!'
   ogetvaprovsuc:bgotfocus  := {|| cmsgqdr := 'Informe a porcentagem de aproveitamento do material sucateado!' + ;
      if( modocapt == 'revisao', CRLF + CRLF + 'Pressione F9 para voltar ao valor original!', '' ), ;
      os_msg:refresh(), ogetvaprovsuc:SetColor( cor_texto, cor_fundogf  ) }
   ogetvaprovsuc:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ogetvaprovsuc:SetColor( cor_textog, cor_fundosg ), precalc() }
	   ogetvaprovsuc:lDisColors  := .F.       // Desativa  disable color
   ogetvaprovsuc:nClrTextDis := cor_cinz  // Cor texto disable status
   ogetvaprovsuc:nClrPaneDis := cor_fundo // Cor fundo disable status
	   ogetvaprovsuc:nClrTextDis := cor_cinz
   ogetvaprovsuc:nClrPaneDis := cor_fundo
   ogetvaprovsuc:disable()
	   redefine GET ogetvarteftdim VAR varteftdim;
      id 4123 of odlgipl;
      PICTURE '@k';
      MESSAGE 'Informe as principais dimensões do artefato!';
      COLOR cor_texto, cor_fundog;
      update
	   IF modocapt == 'revisao'
      ogetvarteftdim:bkeydown   := {| nk | if( nk == VK_F9, ;
         ( varteftdim := ( Planilha )->arteftdim, ogetvarteftdim:refresh(), ogetvarteftdim:setfocus() ), ) }
   ENDIF
	
   ogetvarteftdim:ctooltip   := 'Informe as condições de pagamento!'
   ogetvarteftdim:bgotfocus  := {|| cmsgqdr := 'Informe as principais dimensões do artefato!' + ;
      if( modocapt == 'revisao', CRLF + CRLF + 'Pressione F9 para voltar ao valor original!', '' ), ;
      os_msg:refresh(), ogetvarteftdim:SetColor( cor_texto, cor_fundogf  ) }
	   ogetvarteftdim:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ogetvarteftdim:SetColor( cor_textog, cor_fundosg ) }
	   ogetvarteftdim:nClrTextDis := cor_cinz
   ogetvarteftdim:nClrPaneDis := cor_fundo
   ogetvarteftdim:disable()
	   redefine GET ogetvarteftvol VAR varteftvol;
      id 4117 of odlgipl;
      PICTURE '@k';
      MESSAGE 'Informe o volume do artefato em mm3 !';
      COLOR cor_texto, cor_fundog;
      update
	   IF modocapt == 'revisao'
      ogetvarteftvol:bkeydown   := {| nk | if( nk == VK_F9, ;
         ( varteftvol := ( Planilha )->arteftdim, ogetvarteftvol:refresh(), ogetvarteftvol:setfocus() ), ) }
   ENDIF
	   ogetvarteftvol:ctooltip   := 'Informe o volume do artefato em mm3 !'
   ogetvarteftvol:bgotfocus  := {|| cmsgqdr := 'Informe o volume do artefato em mm3 !' + ;
      if( modocapt == 'revisao', CRLF + CRLF + 'Pressione F9 para voltar ao valor original!', '' ), ;
      os_msg:refresh(), ogetvarteftvol:SetColor( cor_texto, cor_fundogf  ) }
	   ogetvarteftvol:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ogetvarteftvol:SetColor( cor_textog, cor_fundosg ) }
	   ogetvarteftvol:nClrTextDis := cor_cinz
   ogetvarteftvol:nClrPaneDis := cor_fundo
   ogetvarteftvol:disable()
	   redefine GET ogetvarteftmas VAR varteftmas;
      id 4119 of odlgipl;
      PICTURE '@k';
      MESSAGE 'Informe o peso do "MILHEIRO" do artefato em kg !';
      COLOR cor_texto, cor_fundog;
      update
	   IF modocapt == 'revisao'
      ogetvarteftmas:bkeydown   := {| nk | if( nk == VK_F9, ;
         ( varteftmas := ( Planilha )->arteftdim, ogetvarteftmas:refresh(), ogetvarteftmas:setfocus() ), ) }
   ENDIF
	   ogetvarteftmas:ctooltip   := 'Informe o peso do "MILHEIRO" do artefato em kg !'
   ogetvarteftmas:bgotfocus  := {|| cmsgqdr := 'Informe o peso do "MILHEIRO" do artefato em kg !' + ;
      if( modocapt == 'revisao', CRLF + CRLF + 'Pressione F9 para voltar ao valor original!', '' ), ;
      os_msg:refresh(), ogetvarteftmas:SetColor( cor_texto, cor_fundogf  ) }
	   ogetvarteftmas:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ogetvarteftmas:SetColor( cor_textog, cor_fundosg ) }
	   ogetvarteftmas:nClrTextDis := cor_cinz
   ogetvarteftmas:nClrPaneDis := cor_fundo
   ogetvarteftmas:disable()
	
   redefine GET ogetvcondpagt VAR vcondpagt;
      id 4040 of odlgipl;
      PICTURE '@k!';
      MESSAGE 'Informe as condições de pagamento!' + CRLF + 'Pode ser informado, posteriormente, pelo Deptº Comercial!';
      COLOR cor_texto, cor_fundog;
      update
	   IF modocapt == 'revisao'
      ogetvcondpagt:bkeydown   := {| nk | if( nk == VK_F9, ;
         ( vcondpagt := ( Planilha )->condpagt, ogetvcondpagt:refresh(), ogetvcondpagt:setfocus() ), ) }
   ENDIF
	
   ogetvcondpagt:ctooltip   := 'Informe as condições de pagamento!'
   ogetvcondpagt:bgotfocus  := {|| cmsgqdr := 'Informe as condições de pagamento!' + ;
      if( modocapt == 'revisao', CRLF + CRLF + 'Pressione F9 para voltar ao valor original!', '' ), ;
      os_msg:refresh(), ogetvcondpagt:SetColor( cor_texto, cor_fundogf  ) }
   ogetvcondpagt:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ogetvcondpagt:SetColor( cor_textog, cor_fundosg ) }
	   redefine GET ogetvtxcsll VAR vtxcsll;
      id 4021 of odlgipl;
      PICTURE '@ker 999.99 %';
      MESSAGE 'Informe a taxa CSLL em porcentagem!';
      COLOR cor_texto, cor_fundog;
      update;
      spinner;
      VALID if( vtxcsll >= 0, ( precalc(), .T. ), .F. )
	   ogetvtxcsll:bkeydown   := {| nk | if( nk == VK_F9 .AND. modocapt == 'revisao', ;
      ( vtxcsll := ( Planilha )->txcsll, ogetvtxcsll:refresh(), ogetvtxcsll:setfocus() ), ;
      if( nk == VK_F8, ;
      ( vtxcsll := cfgtxcsll, ogetvtxcsll:refresh(), ogetvtxcsll:setfocus() ), ) ) }
	   ogetvtxcsll:ctooltip   := 'Informe a taxa CSLL em porcentagem!'
	   ogetvtxcsll:bgotfocus  := {|| cmsgqdr := 'Informe a taxa CSLL em porcentagem!' + CRLF + CRLF + ;
      'Explo.: Meio por cento = 0,50 %' + CRLF + CRLF + ;
      if( modocapt == 'revisao', 'Pressione F9 para voltar ao valor original ou pressione F8 para obter valor padrão!', 'Pressione F8 para obter valor padrão!' ), ;
      os_msg:refresh(), ogetvtxcsll:SetColor( cor_texto, cor_fundogf ), precalc() }
	   ogetvtxcsll:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ogetvtxcsll:SetColor( cor_textog, cor_fundosg ) }
	   redefine GET ogetvtxirpj VAR vtxirpj;
      id 4022 of odlgipl;
      PICTURE '@ker 999.99 %';
      MESSAGE 'Informe a taxa IRPJ em porcentagem!';
      COLOR cor_texto, cor_fundog;
      update;
      spinner;
      VALID if( vtxirpj >= 0, ( precalc(), .T. ), .F. )
	   ogetvtxirpj:bkeydown   := {| nk | if( nk == VK_F9 .AND. modocapt == 'revisao', ;
      ( vtxirpj := ( Planilha )->txirpj, ogetvtxirpj:refresh(), ogetvtxirpj:setfocus() ), ;
      if( nk == VK_F8, ;
      ( vtxirpj := cfgtxirpj, ogetvtxirpj:refresh(), ogetvtxirpj:setfocus() ), ) ) }
	   ogetvtxirpj:ctooltip   := 'Informe a taxa IRPJ em porcentagem!'
	   ogetvtxirpj:bgotfocus  := {|| cmsgqdr := 'Informe a taxa IRPJ em porcentagem!' + CRLF + CRLF + ;
      'Explo.: Cinco por cento = 5,00 %' + CRLF + CRLF + ;
      if( modocapt == 'revisao', 'Pressione F9 para voltar ao valor original ou pressione F8 para obter valor padrão!', 'Pressione F8 para obter valor padrão!' ), ;
      os_msg:refresh(), ogetvtxirpj:SetColor( cor_texto, cor_fundogf ) }
	   ogetvtxirpj:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ogetvtxirpj:SetColor( cor_textog, cor_fundosg ), precalc() }
	   redefine GET ogetvtxicms VAR vtxicms;
      id 4023 of odlgipl;
      PICTURE '@ker 999.99 %';
      MESSAGE 'Informe a taxa ICMS em porcentagem!';
      COLOR cor_texto, cor_fundog;
      update;
      spinner;
      VALID if( vtxicms >= 0, ( precalc(), .T. ), .F. )
	   ogetvtxicms:bkeydown   := {| nk | if( nk == VK_F9 .AND. modocapt == 'revisao', ;
      ( vtxicms := ( Planilha )->txicms, ogetvtxicms:refresh(), ogetvtxicms:setfocus() ), ;
      if( nk == VK_F8, ;
      ( vtxicms := cfgtxicms, ogetvtxicms:refresh(), ogetvtxicms:setfocus() ), ) ) }
	   ogetvtxicms:ctooltip   := 'Informe a taxa ICMS em porcentagem!'
	   ogetvtxicms:bgotfocus  := {|| cmsgqdr := 'Informe a taxa ICMS em porcentagem!' + CRLF + CRLF + ;
      'Explo.: Dez por cento = 10,00 %' + CRLF + CRLF + ;
      if( modocapt == 'revisao', 'Pressione F9 para voltar ao valor original ou pressione F8 para obter valor padrão!', 'Pressione F8 para obter valor padrão!' ), ;
      os_msg:refresh(), ogetvtxicms:SetColor( cor_texto, cor_fundogf ) }
	   ogetvtxicms:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ogetvtxicms:SetColor( cor_textog, cor_fundosg ), precalc() }
	   redefine GET ogetvtxpiscof VAR vtxpiscof;
      id 4024 of odlgipl;
      PICTURE '@ker 999.99 %';
      MESSAGE 'Informe a taxa PIS/COFINS em porcentagem!';
      COLOR cor_texto, cor_fundog;
      update;
      spinner;
      VALID if( vtxpiscof >= 0, ( precalc(), .T. ), .F. )
	   ogetvtxpiscof:bkeydown   := {| nk | if( nk == VK_F9 .AND. modocapt == 'revisao', ;
      ( vtxpiscof := ( Planilha )->txpiscof, ogetvtxpiscof:refresh(), ogetvtxpiscof:setfocus() ), ;
      if( nk == VK_F8, ;
      ( vtxpiscof := cfgtxpisco, ogetvtxpiscof:refresh(), ogetvtxpiscof:setfocus() ), ) ) }
	   ogetvtxpiscof:ctooltip   := 'Informe a taxa PIS/COFINS em porcentagem!'
	   ogetvtxpiscof:bgotfocus  := {|| cmsgqdr := 'Informe a taxa PIS/COFINS em porcentagem!' + CRLF + CRLF + ;
      'Explo.: Dez por cento = 10,00 %' + CRLF + CRLF + ;
      if( modocapt == 'revisao', 'Pressione F9 para voltar ao valor original ou pressione F8 para obter valor padrão!', 'Pressione F8 para obter valor padrão!' ), ;
      os_msg:refresh(), ogetvtxpiscof:SetColor( cor_texto, cor_fundogf ) }
	   ogetvtxpiscof:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ogetvtxpiscof:SetColor( cor_textog, cor_fundosg ), precalc() }
	   redefine GET ogetvtxlucro VAR vtxlucro;
      id 4025 of odlgipl;
      PICTURE '@ker 999.99 %';
      MESSAGE 'Informe a taxa de LUCRO em porcentagem!';
      COLOR cor_texto, cor_fundog;
      update;
      spinner;
      VALID if( vtxlucro >= 0, ( precalc(), .T. ), .F. )
	   ogetvtxlucro:bkeydown   := {| nk | if( nk == VK_F9 .AND. modocapt == 'revisao', ;
      ( vtxlucro := ( Planilha )->txlucro, ogetvtxlucro:refresh(), ogetvtxlucro:setfocus() ), ;
      if( nk == VK_F8, ;
      ( vtxlucro := cfgtxlucro, ogetvtxlucro:refresh(), ogetvtxlucro:setfocus() ), ) ) }
	   ogetvtxlucro:ctooltip   := 'Informe a taxa de LUCRO em porcentagem!'
	   ogetvtxlucro:bgotfocus  := {|| cmsgqdr := 'Informe a taxa de LUCRO em porcentagem!' + CRLF + CRLF + ;
      'Explo.: Doze por cento = 12,00 %' + CRLF + CRLF + ;
      if( modocapt == 'revisao', 'Pressione F9 para voltar ao valor original ou pressione F8 para obter valor padrão!', 'Pressione F8 para obter valor padrão!' ), ;
      os_msg:refresh(), ogetvtxlucro:SetColor( cor_texto, cor_fundogf ) }
	
   ogetvtxlucro:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ogetvtxlucro:SetColor( cor_textog, cor_fundosg ), precalc() }
	   redefine GET ogetvtxtransp VAR vtxtransp;
      id 4026 of odlgipl;
      PICTURE '@ker 999.99 %';
      MESSAGE 'Informe a taxa de TRANSPORTE em porcentagem!';
      COLOR cor_texto, cor_fundog;
      update;
      spinner;
      VALID if( vtxtransp >= 0, ( precalc(), .T. ), .F. )
	   ogetvtxtransp:bkeydown   := {| nk | if( nk == VK_F9 .AND. modocapt == 'revisao', ;
      ( vtxtransp := ( Planilha )->txtransp, ogetvtxtransp:refresh(), ogetvtxtransp:setfocus() ), ;
      if( nk == VK_F8, ;
      ( vtxtransp := cfgtxtransp, ogetvtxtransp:refresh(), ogetvtxtransp:setfocus() ), ) ) }
	   ogetvtxtransp:ctooltip   := 'Informe a taxa de TRANSPORTE em porcentagem!'
	   ogetvtxtransp:bgotfocus  := {|| cmsgqdr := 'Informe a taxa de TRANSPORTE em porcentagem!' + CRLF + CRLF + ;
      'Explo.: Noventa e nove por cento = 99,00 %' + CRLF + CRLF + ;
      if( modocapt == 'revisao', 'Pressione F9 para voltar ao valor original ou pressione F8 para obter valor padrão!', 'Pressione F8 para obter valor padrão!' ), ;
      os_msg:refresh(), ogetvtxtransp:SetColor( cor_texto, cor_fundogf ) }
	   ogetvtxtransp:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ogetvtxtransp:SetColor( cor_textog, cor_fundosg ), precalc() }
	   redefine GET ogetvtxdespad VAR vtxdespad;
      id 4027 of odlgipl;
      PICTURE '@ker 999.99 %';
      MESSAGE 'Informe a taxa de DESPESAS ADMINISTRATIVAS em porcentagem!';
      COLOR cor_texto, cor_fundog;
      update;
      spinner;
      VALID if( vtxdespad >= 0, ( precalc(), .T. ), .F. )
	   ogetvtxdespad:bkeydown   := {| nk | if( nk == VK_F9 .AND. modocapt == 'revisao', ;
      ( vtxdespad := ( Planilha )->txdespad, ogetvtxdespad:refresh(), ogetvtxdespad:setfocus() ), ;
      if( nk == VK_F8, ;
      ( vtxdespad := cfgtxdespa, ogetvtxdespad:refresh(), ogetvtxdespad:setfocus() ), ) ) }
	   ogetvtxdespad:ctooltip   := 'Informe a taxa de DESPESAS ADMINISTRATIVAS em porcentagem!'
	   ogetvtxdespad:bgotfocus  := {|| cmsgqdr := 'Informe a taxa de DESPESAS ADMINISTRATIVAS em porcentagem!' + CRLF + CRLF + ;
      'Explo.: Um por cento = 1,00 %' + CRLF + CRLF + ;
      if( modocapt == 'revisao', 'Pressione F9 para voltar ao valor original ou pressione F8 para obter valor padrão!', 'Pressione F8 para obter valor padrão!' ), ;
      os_msg:refresh(), ogetvtxdespad:SetColor( cor_texto, cor_fundogf ) }
	   ogetvtxdespad:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ogetvtxdespad:SetColor( cor_textog, cor_fundosg ), precalc() }
	       /*
       redefine get ogetvcelula;
                var vcelula;
                id 4101;
                of odlgipl;
                picture '@k 9999';
                color cor_texto,cor_fundog;
                update;
                valid  if( val(vcelula) > 0 ,;
                           if( idtecla == VK_F9 , ( xx := .f. , idtecla:=0,  fvalidcel(modocapt) ),;
                                                    fvalidcel(modocapt,odlgipl) ), .t.    )
	                * F9 -> VOLTA AOS VALORES ORIGINAIS NA REVISAO
                ogetvcelula:bkeydown   := {|nk| if( nk==VK_F9 .and. modocapt=='revisao',;
                                                if( fddanterior('redadoscel'),;
                                                    ( xx:=.t., idtecla:=0 , ogetvcelula:refresh(),ogetvcelula:setfocus(),.T. ), ), )}
	                ogetvcelula:bgotfocus  := {|| precalc(),odlgipl:update(), idtecla:=0, xx:=.t. ,;
                                              cmsgqdr:='Informe a célula de fabricação!'+ CRLF+CRLF+;
                                              'ou clique na "LUPA", à direita, para selecioná-la!' +;
                                              if( modocapt=='revisao', CRLF + CRLF + ;
                                              'Caso queira voltar aos valores originais "DA CÉLULA" pressione a tecla F9 !',''),;
                                               os_msg:refresh(),ogetvcelula:setcolor(cor_texto,cor_fundogf)}
	                ogetvcelula:blostfocus := {||   cmsgqdr:='', os_msg:refresh(),ogetvcelula:setcolor(cor_textog,cor_fundosg), precalc() }
	                ogetvcelula:ctooltip   := 'Informe a célula de fabricação!'+ CRLF+CRLF+;
                                          'ou clique na "LUPA", à direita, para selecioná-la!'+;
                                           if(modocapt=='revisao', CRLF+CRLF+'Caso queira voltar aos valores originais pressione a tecla F9 !','')
       */
	
   redefine GET ogetvcelula;
      VAR vcelula;
      id 4101;
      of odlgipl;
      PICTURE '@k 9999';
      COLOR cor_texto, cor_fundog;
      update;
      bitmap "on"; // action( idtecla:=nk, obtselecel:setfocus(),eval(obtselecel:baction)) ;
      action( if( selecelu( modocapt, odlgipl ), ;
      ( getcelul(), precalc(), ogetvcelula:setfocus() ), ;
      ogetvcelula:setfocus() ), xx := .T. );
      VALID if( Val( vcelula ) > 0, ;
      if( idtecla == VK_F2, ( xx := .F., idtecla := 0, .T. ), ;
      if( idtecla == VK_F9 .AND. modocapt == 'revisao', ;
      ( xx := .F., idtecla := 0, fvalidcel( modocapt ) ), ;
      fvalidcel( modocapt, odlgipl ) ) ), .F. )
	   ogetvcelula:lBtnTransparent := .F.
	   ogetvcelula:bkeydown        := {| nk | if( nk == VK_F9 .AND. modocapt == 'revisao', ;
      if( fddanterior( 'redadoscel' ), ( xx := .T., idtecla := 0, ogetvcelula:refresh(), ogetvcelula:setfocus(), .T. ), ), ;
      ) }
	   ogetvcelula:bgotfocus  := {|| precalc(), odlgipl:update(), idtecla := 0, xx := .T., ;
      cmsgqdr := 'Informe a célula de fabricação!' + CRLF + CRLF + ;
      'ou clique na "LUPA", à direita, para selecioná-la!' + ;
      if( modocapt == 'revisao', CRLF + CRLF + ;
      'Caso queira voltar aos valores originais "DA CÉLULA" pressione a tecla F9 !', '' ), ;
      ;
      os_msg:refresh(), ;
      ogetvcelula:SetColor( cor_texto, cor_fundogf ) }
	   ogetvcelula:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ;
      ogetvcelula:SetColor( cor_textog, cor_fundosg ), precalc() }
	   ogetvcelula:ctooltip   := 'Informe a célula de fabricação!' + CRLF + ;
      'ou clique na quadradinho, à direita, para selecioná-la!' + ;
      if( modocapt == 'revisao', CRLF + CRLF + 'Caso queira voltar aos valores originais pressione a tecla F9 !', '' )
	       /*
       redefine btnbmp obtselecel;
                id 4102;
                of odlgipl;
                file diskname()+':\'+curdir()+'\imagens\lupa.bmp';
                noborder;
                update;
                cancel;
                action if( selecelu(modocapt,odlgipl),;
                         ( getcelul(), precalc(), odlgipl:gonextctrl(ogetvcelula:hwnd)),;
                           ogetvcelula:setfocus() )  // selecelu() é igual a tabelas porem de forma especial para células
	                obtselecel:bgotfocus := {|| xx:=.t. }
                obtselecel:ctooltip  := 'Clique aqui para selecionar uma célula do cadastro de células!'
       */
	   // ***********************************************************************************
   // ROTINA QUE CRIA OS GETS DE OPERAÇÕES DA CELULA QUE SERA SELECIONADA NO OGETVCELULA
   getsplop( @odlgipl, modocapt )
   // ***********************************************************************************
	   redefine GET ogetvtxdgf VAR vtxdgf;
      id 5718 of odlgipl;
      PICTURE '@ker 999.99 %';
      MESSAGE 'Informe a taxa de Despesas Gerais de Fabricação!';
      COLOR cor_texto, cor_fundog;
      update;
      spinner;
      VALID if( vtxdgf >= 0, ( precalc(), .T. ), .F. )
	   ogetvtxdgf:bkeydown   := {| nk | if( nk == VK_F9 .AND. modocapt == 'revisao', ;
      ( vtxdgf := ( Planilha )->txdgf, ogetvtxdgf:refresh(), ogetvtxdgf:setfocus() ), ;
      if( nk == VK_F8, ;
      ( vtxdgf := cfgtxdgf, ogetvtxdgf:refresh(), ogetvtxdgf:setfocus() ), ) ) }
	   ogetvtxdgf:ctooltip   := 'Informe a taxa de Despesas Gerais de Fabricação!'
	   ogetvtxdgf:bgotfocus  := {|| cmsgqdr := 'Informe a taxa de Despesas Gerais de Fabricação!' + CRLF + CRLF + ;
      'Explo.: Meio por cento = 0,50 %' + CRLF + CRLF + ;
      if( modocapt == 'revisao', 'Pressione F9 para voltar ao valor original ou pressione F8 para obter valor padrão!', 'Pressione F8 para obter valor padrão!' ), ;
      os_msg:refresh(), ogetvtxdgf:SetColor( cor_texto, cor_fundogf ), precalc() }
	   ogetvtxdgf:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ogetvtxdgf:SetColor( cor_textog, cor_fundosg ) }
	   redefine GET ogetvobsv1pla;
      VAR vobsv1pla;
      id 6011 of odlgipl;
      PICTURE '@k!';
      COLOR cor_texto, cor_fundog;
      update
	   ogetvobsv1pla:bkeydown   := {| nk | if( nk == VK_F9 .AND. modocapt == 'revisao', ;
      ( vobsv1pla := ( Planilha )->obsv1pla, ogetvobsv1pla:refresh(), ogetvobsv1pla:setfocus() ), ) }
	   ogetvobsv1pla:bgotfocus  := {|| cmsgqdr := 'Linha 1 -Informe quaisquer tipos de inforamacoes nestas 3 linhas!' + CRLF + CRLF + ;
      'Capacidade: 80 caracteres para cada linha.', ;
      os_msg:refresh(), ogetvobsv1pla:SetColor( cor_texto, cor_fundogf  ) }
	   ogetvobsv1pla:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ogetvobsv1pla:SetColor( cor_textog, cor_fundosg ) }
	   ogetvobsv1pla:disable()
	   redefine GET ogetvobsv2pla;
      VAR vobsv2pla;
      id 6012 of odlgipl;
      PICTURE '@k!';
      COLOR cor_texto, cor_fundog;
      update
	   IF modocapt == 'revisao'
      ogetvobsv2pla:bkeydown   := {| nk | if( nk == VK_F9, ;
         ( ogetvobsv2pla := ( Planilha )->obsv2pla, ogetvobsv2pla:refresh(), ogetvobsv2pla:setfocus() ), ) }
   ENDIF
	
   ogetvobsv2pla:bgotfocus  := {|| cmsgqdr := 'Linha 2 -Informe quaisquer tipos de inforamacoes nestas 3 linhas!' + CRLF + CRLF + 'Capacidade: 80 caracteres para cada linha.', os_msg:refresh(), ogetvobsv2pla:SetColor( cor_texto, cor_fundogf  ) }
   ogetvobsv2pla:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ogetvobsv2pla:SetColor( cor_textog, cor_fundosg ) }
   ogetvobsv2pla:disable()
	   redefine GET ogetvobsv3pla;
      VAR vobsv3pla;
      id 6013 of odlgipl;
      PICTURE '@k!';
      COLOR cor_texto, cor_fundog;
      update
   ogetvobsv3pla:bgotfocus  := {|| cmsgqdr := 'Linha 3 -Informe quaisquer tipos de inforamacoes nestas 3 linhas!' + CRLF + CRLF + 'Capacidade: 80 caracteres para cada linha.', os_msg:refresh(), ogetvobsv3pla:SetColor( cor_texto, cor_fundogf  ) }
   ogetvobsv3pla:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ogetvobsv3pla:SetColor( cor_textog, cor_fundosg ) }
   ogetvobsv3pla:disable()
	   IF modocapt == 'revisao'
      ogetvobsv3pla:bkeydown   := {| nk | if( nk == VK_F9, ;
         ( ogetvobsv3pla := ( Planilha )->obsv3pla, ogetvobsv3pla:refresh(), ogetvobsv3pla:setfocus() ), ) }
   ENDIF
	   redefine combobox ocbxvsolicita;
      VAR vsolicita;
      items arrsolicita; // DEIXAR VAZIO QUANDO NAO FOR NENHUMA DAS CAIXAS PADRAO
      id 7101 of odlgipl;
      COLOR cor_texto, cor_fundo;
      update;
	      // STYLE CBS_DROPDOWNLIST
	                /*if modocapt=='revisao'
                    :bkeydown   := {|nk| if( nk == VK_F9,;
                    (   :=( Planilha )->  , :refresh(), :setfocus() ), )}
                endif*/
	
   ocbxvsolicita:bgotfocus   := {|| cmsgqdr := 'Selecione o nome de quem solicitou esta planilha!', os_msg:refresh(), ;
      ocbxvsolicita:SetColor( cor_texto, cor_fundogf ) }
   ocbxvsolicita:blostfocus  := {|| cmsgqdr := '', os_msg:refresh(), ocbxvsolicita:SetColor( cor_textog, cor_fundosg ) }
	   redefine combobox ocbxvanalista;
      VAR vanalista;
      items arranalista; // DEIXAR VAZIO QUANDO NAO FOR NENHUMA DAS CAIXAS PADRAO
      id 7201 of odlgipl;
      COLOR cor_texto, cor_fundo;
      update;
      STYLE CBS_DROPDOWNLIST  // DEVERIA ESTA NO RECURSO.
	                /*if modocapt=='revisao'
                    :bkeydown   := {|nk| if( nk == VK_F9,;
                         (   :=( Planilha )->  , :refresh(), :setfocus() ), )}
                endif*/
	   ocbxvanalista:bgotfocus   := {|| cmsgqdr := 'Selecione o nome de quem analisou esta planilha !', os_msg:refresh(), ;
      ocbxvanalista:SetColor( cor_texto, cor_fundogf ) }
	   ocbxvanalista:blostfocus  := {|| cmsgqdr := '', os_msg:refresh(), ocbxvanalista:SetColor( cor_textog, cor_fundosg ) }
	
   redefine GET ogetvdtanalise;
      VAR vdtanalise; // VARIAVEL UTILIZADA TAMBEM NA VERSAO ANTERIOR
      id 7301 of odlgipl; // picture '@r 99/99/9999';
      COLOR cor_texto, cor_fundog;
      update;
      VALID .T. // CONCLUIR  colocar um calendario e checador
	   ogetvdtanalise:bkeydown   := {| nk | if( nk == VK_F9 .AND. modocapt == 'revisao', ;
      ( vdtanalise := ( Planilha )->dtanalise, ogetvdtanalise:refresh(), ogetvdtanalise:setfocus() ), ;
      if( nk == VK_F2, ;
      ( obtcalend:setfocus(), Eval( obtcalend:baction ) ), ) ) }
	   ogetvdtanalise:ctooltip   := 'Informe a data em que esta planilha esta sendo confeccionada ou tecle F2 para selecionar o calendario!'
   ogetvdtanalise:bgotfocus  := {|| cmsgqdr := 'Informe a data em que esta planilha esta sendo confeccionada ou tecle F2 para selecionar o calendario!', os_msg:refresh(), ogetvdtanalise:SetColor( cor_texto, cor_fundogf )    }
   ogetvdtanalise:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ogetvdtanalise:SetColor( cor_textog, cor_fundosg ) }
   ogetvdtanalise:disable()
	   redefine btnbmp obtcalend;
      id 7302;
      of odlgipl;
      action  if( calendar(), ;
      ( vdtanalise := ndatasele, ogetvdtanalise:refresh(), ogetvdtanalise:setfocus() ), ;
      ogetvdtanalise:setfocus() );
      FILE DiskName() + ':\' + CurDir() + '\imagens\lupa.bmp';
      noborder;
      cancel;
      update
	   obtcalend:ctooltip := 'Clique aqui para selecionar um calendario!'
   obtcalend:disable()
	   redefine GET ogetvvalidade;
      VAR vvalidade;
      id 7401 of odlgipl;
      PICTURE '@k 999';
      spinner;
      COLOR cor_texto, cor_fundog;
      update;
      VALID .T. // CONCLUIR
	   IF modocapt == 'revisao'
      ogetvvalidade:bkeydown   := {| nk | if( nk == VK_F9, ;
         ( vvalidade := ( Planilha )->validade, ogetvvalidade:refresh(), ogetvvalidade:setfocus() ), ) }
   ENDIF
	   ogetvvalidade:ctooltip   := 'Informe o prazo de validade para esta planilha!'
   ogetvvalidade:bgotfocus  := {|| cmsgqdr := 'Informe o prazo de validade para esta planilha!', os_msg:refresh(), ogetvvalidade:SetColor( cor_texto, cor_fundogf )    }
   ogetvvalidade:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ogetvvalidade:SetColor( cor_textog, cor_fundosg ) }
   ogetvvalidade:disable()
	   redefine GET ogetvaprovador; // 7501 get nome do aprovador
      VAR vaprovador;
      id 7501 of odlgipl;
      PICTURE '@k!';
      COLOR cor_texto, cor_fundog;
      update
	   IF modocapt == 'revisao'
      ogetvaprovador:bkeydown   := {| nk | if( nk == VK_F9, ;
         ( vaprovador := ( Planilha )->aprovador, ogetvaprovador:refresh(), ogetvaprovador:setfocus() ), ) }
   ENDIF
	   ogetvaprovador:ctooltip   := 'Informe o nome de quem aprovou os resultados da planilha!'
   ogetvaprovador:bgotfocus  := {|| cmsgqdr := 'Informe o nome de quem aprovou os resultados da planilha!', os_msg:refresh(), ogetvaprovador:SetColor( cor_texto, cor_fundogf )    }
   ogetvaprovador:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ogetvaprovador:SetColor( cor_textog, cor_fundosg ) }
   ogetvaprovador:disable()
	   redefine GET ogetvdtaprova;
      VAR vdtaprova;
      id 7601 of odlgipl;
      PICTURE '@k';
      COLOR cor_texto, cor_fundog;
      update
	   ogetvdtaprova:bkeydown   := {| nk | if( nk == VK_F9 .AND. modocapt == 'revisao', ;
      ( vdtaprova := ( Planilha )->dtaprova, ogetvdtaprova:refresh(), ogetvdtaprova:setfocus() ), ;
      if( nk == VK_F8, ;
      ( vdtaprova := diatual, ogetvdtaprova:refresh(), ogetvdtaprova:setfocus() ), ) ) }
	   ogetvdtaprova:ctooltip   := 'Informe a data da aprovação da planilha!'
	   ogetvdtaprova:bgotfocus  := {|| cmsgqdr := 'Informe a data da aprovação da planilha!' + CRLF + CRLF + ;
      if( modocapt == 'revisao', 'Pressione F9 para voltar ao valor original!', ;
      'Pressione F8 para obter a data de hoje!' ), ;
      os_msg:refresh(), ogetvdtaprova:SetColor( cor_texto, cor_fundogf ) }
	   ogetvdtaprova:blostfocus := {|| cmsgqdr := '', os_msg:refresh(), ogetvdtaprova:SetColor( cor_textog, cor_fundosg ) }
   ogetvdtaprova:disable()
	   redefine button obtprepreg;
      id 8000;
      of odlgipl;
      action if( fchecatudo( modocapt ), ( regidado( modocapt ), l_liberado := .T., odlgipl:end() ),  );
      cancel;
      update;
	
      obtprepreg:ctooltip := 'Analisa os dados informados e, não encontrando inconsistências, realiza o registro.';
	      // color {|ob| if(ob:lmouseover,if(ob:lpressed,ct_bcs1p1,ct_bcs1p0),ct_bc)},;
   // {|ob| if(ob:lmouseover,if(ob:lpressed,cf_bcs1p1,cf_bcs1p0),cf_bc)}
	   obtprepreg:disable()
	   redefine button obtcancela;
      id 9000;
      of odlgipl;
      action odlgipl:end();
      update;
      cancel;
	      // color {|ob| if(ob:lmouseover,if(ob:lpressed,ct_bcs1p1,ct_bcs1p0),ct_bc)},;
   // {|ob| if(ob:lmouseover,if(ob:lpressed,cf_bcs1p1,cf_bcs1p0),cf_bc)}
	   // odlgipl:bgotfocus := {|| alerta('zz'),;
   // HB_KeyPut( K_LEFT  ) }
	   odlgipl:lhelpicon := .F.
	   activate dialog odlgipl center; // on paint poenotopo(odlgipl); // on right click if( GetKeyState(VK_CONTROL), fsopratestes(),if( l_testando,(ondestou(procfile()),owndprinc:end()), ));
      ON INIT ( odlgipl:lballoon := .T., ;
      oq_tipomol_4128:hide(), ;
      oq_fabrcli_4129:hide(), ;
      oq_circret_4130:hide() );
      ON right click if( GetKeyState( VK_CONTROL ), ;
      fsopratestes(), ;
      if( l_testando, ( owndprinc:end(), l_retu := .T. ), ) );
      VALID if( l_liberado, ( l_retu := .T., .T. ), ;
      if( naosim( 'Deseja cancelar esta ' + ;
      if( modocapt == 'inclusao', 'inclusão ?', if( modocapt == 'revisao', 'revisão ?', '' ) ) ), ;
      ( l_retu := .F., .T. ), .F. ) )
	   IF modocapt == Lower( 'inclusao' )
      odlgantes:show()
   ENDIF
	   olstbplan:setfocus( .T. )
	   // CONCLUSAO: EXCESSO DE PRIVATES, SPINNERs, CANCEL E UPDATES
   // OS REDEFINES SAYS ESTAO EM LOCAL ERRADO, PODENDO PROVOCAR ESTOURO
   // DA PILHA - REVEJA. DEPOIS DE MODIFICAR, TESTE E DIGA QUAL O EFEITO.
	   HB_GCALL( .T. ) // NA SAIDA FORCAR LIMPEZA
	RETU l_retu
	// **********************
	STAT FUNC ftranstmola()
	// **********************
   IF AllTrim( ( Planilha )->tipomola ) == Upper( 'COMPRESSÃO' )
      vtipomola := 1
   ELSEIF AllTrim( ( Planilha )->tipomola ) == Upper( 'TRAÇÃO' )
      vtipomola := 2
   ELSEIF AllTrim( ( Planilha )->tipomola ) == Upper( 'TORÇÃO' )
      vtipomola := 3
   ELSEIF AllTrim( ( Planilha )->tipomola ) == Upper( 'ARTEFATO' )
      vtipomola := 4
   ELSE
      vtipomola := 0
   ENDIF
	   RETU .T.
	// *******************
	STAT FUNC fvertxinic
	// *******************
   LOCAL ctaxa, cindice
	   IF vtxdespad  >= 0 .AND. ;  // colocanco " >= 0  " garante que valor será sempre positivo
      vtxpiscof  >= 0 .AND. ;
      vtxicms    >= 0 .AND. ;
      vtxlucro   >= 0 .AND. ;
      vtxcsll    >= 0 .AND. ;
      vtxirpj    >= 0 .AND. ;
      vtxtransp  >= 0
	
      vc_tottaxi  := ( vtxdespad + vtxpiscof + vtxicms + vtxlucro + vtxcsll + vtxirpj + vtxtransp )
      ctaxa       := AllTrim( trans( vc_tottaxi, '@e 999.99' ) ) + '%'
      cindice     := '  ( i = ' + AllTrim( trans( ( 100 / ( 100 - vc_tottaxi ) ), '@e 999.999' ) ) + ')'
      vos_itottax := ctaxa + cindice
   ENDIF
	   RETU NIL
	// ************************
	STAT FUNC fzeramatp( v_ori )
	// *************************
   vmaterial  := Space( 40 )
   ogetvmaterial:refresh()
	   IF v_ori # 'fmudagets' .AND. v_ori # 'material'
      vtipomola := 0
   ENDIF
	   vtiposecao  := Space( 10 ) // vtiposecao := padr(upper('CIRCULAR'),10)
   vtiposecesc := 0
   vtipoforesc := 0
   vfabfornmp  := nil
   varteftdim  := Space( 30 ) // Dimensoes do Artefato
   varteftvol  := 0         // Vol Artef
   varteftmas  := 0         // Massa Artef
   ogetvarteftdim:refresh()
   ogetvarteftvol:refresh()
   ogetvarteftmas:refresh()
	   voldsecao  := ''
   vmatprimini := ''
   vc_matprim := 0
	   vforneced  := Space( 30 )
   os_forsel_2121:refresh()
	   vcustosec  := 0
   os_vcusmp_2131:refresh()
   vlotminmp  := 0
   ogetvlotminmp:refresh()
   vdevetrata := ' '
   vdeveolear := ' '
   vpespecif  := 0
   vd_arame   := 0
   ogetvd_arame:refresh()
   vold_arame := 0
   vldaxial   := 0
   ogetvldaxial:refresh()
   voldaxial  := 0
   vldradial  := 0
   ogetvldradial:refresh()
   voldradial := 0
   vbdcustmp  := Space( 8 )
   vd_extern2 := 0
   ogetvd_extern2:refresh()
   vd_externo := 0
	   vd_intern2 := 0
   ogetvd_intern2:refresh()
   vd_interno := 0
	   vd_medio   := 0
   vd_medio2  := 0
   ogetvd_medio2:refresh()
	   vespiras   := 0
	   ogetvespirasc:refresh()
   ogetvespirasr:refresh()
	   vhaste1    := 0
   ogetvhaste1:refresh()
	   vhaste2    := 0
   ogetvhaste2:refresh()
	   vdesenvol  := 0
   varea      := 0
   vvolume    := 0
   vmassa     := 0
   v_pesopedd := 0
   vc_matprim := 0
	   RETU NIL
	// ********************************
	STAT FUNC fvalidmat( cmodo, lvimde )
	// ********************************
   LOCAL lretu
	   linfmpmanual := .F.
	   IF xx
      idtecla := 0
      RETU .T.
   ELSEIF idtecla == VK_F2
      xx := .F.
      idtecla := 0
      RETU .T.
   ELSE
	      fresetparcial( Lower( 'material' ), '' )
	      IF conferin( 'matprima', 'matprima', vmaterial, 40, 'nomematp', Upper( 'GETSPLA' ), '' )
	         IF AllTrim( Upper( vtiposecao ) ) == Upper( 'CIRCULAR' )
            ogetvd_arame:refresh()
         ELSE
            ogetvldaxial:refresh()
         ENDIF
	         IF Empty( vmatprimini )
            vmatprimini := vmaterial
         ENDIF
	         ogetvlotminmp:setfocus()
	         lretu := .T.
      ELSE
         lretu := .F.
      ENDIF
	   ENDIF
   resetcel( cmodo )
   odlgipl:update()
   RETU lretu
	// *************************
	STAT FUNC fselematp( cmodo )
	// *************************
   LOCAL lresetp := .F.
   IF tabelas( ProcFile(), Upper( 'VMATERIAL' ) )
      IF cmodo == 'revisao' .AND.  vmaterial == vmatprimini
         RETU .T.
      ELSEIF cmodo == 'revisao' .AND. vmaterial # vmatprimini
         vmatprimini := vmaterial
      ENDIF
      IF cmodo == 'inclusao' .AND. vmaterial == vmatprimini
         RETU .T.
      ELSEIF ( cmodo == 'inclusao' .AND. Empty( vmatprimini ) ) .OR. ;
            ( cmodo == 'inclusao' .AND. vmaterial # vmatprimini )
         vmatprimini := vmaterial
         resetcel( cmodo )
      ENDIF
      fresetparcial( 'material', '' )
      RETU .T.
   ENDIF
   RETU .F.
	// ********************************
	STAT FUNC fvalidarame( vsec, cmodo )
	// ********************************
   LOCAL lretu := .F.
	   vsec := Lower( vsec )
	   IF GetKeyState( VK_ESCAPE )  .OR. ;
         GetKeyState( VK_UP )      .OR. ;
         GetKeyState( VK_LBUTTON ) .OR. ;
         linfmpmanual
	      ogetvmaterial:setfocus()
      RETU .T.
	   ENDIF
	   IF Empty( vmaterial )
      msgalert( 'Informe a MATÉRIA-PRIMA do arame!', 'Atenção!' )
      RETU .F.
   ENDIF
	   IF vsec == 'circular' .AND. Empty( vd_arame )
      msgalert( 'Informe o diametro do arame!', 'Atenção!' )
      RETU .F.
   ENDIF
	   IF vsec == 'retangular' .AND. ( Empty( vldaxial ) .OR. Empty( vldradial ) )
      msgalert( 'Informe as dimensões (radial e axial) da seção do arame!', 'Atenção!' )
      RETU .F.
   ENDIF
	   IF vsec == 'circular'
	      IF mododecaptur == 'revisao'            .AND. ;
            Empty( vold_arame )                    .AND. ;
            AllTrim( vforneced ) == Upper( 'N/INF' ) .AND. ;
            !Empty( ( Planilha )->d_arame )
	         // SIGNIFICA QUE, ANTES DESTA REVISAO, OS DADOS DE:
         // CUSTOS DO MATERIAL, OLEAMENTO E TRATAMENTO
         // FORAM INFORMADOS MANUALMENTE.
	         RETU .T.
	      ENDIF
	      IF Empty( vold_arame )
         vold_arame := vd_arame
      ELSE
         IF vold_arame # vd_arame
            fresetparcial( 'arame', vsec )
            resetcel( '' )
            odlgipl:update()
            vold_arame := vd_arame
         ENDIF
      ENDIF
	   ENDIF
	   IF vsec == 'retangular'
	      IF mododecaptur == 'revisao'            .AND. ;
            Empty( voldaxial )                     .AND. ;
            Empty( voldradial )                    .AND. ;
            AllTrim( vforneced ) == Upper( 'N/INF' ) .AND. ;
            !Empty( ( Planilha )->ldaxial )            .AND. ;
            !Empty( ( Planilha )->ldradial )
	         // SIGNIFICA QUE, ANTES DESTA REVISAO, OS DADOS DE:
         // CUSTOS DO MATERIAL, OLEAMENTO E TRATAMENTO
         // FORAM INFORMADOS MANUALMENTE.
	         RETU .T.
	      ENDIF
	      IF Empty( voldaxial )
         voldaxial := vldaxial
      ELSE
         IF voldaxial # vldaxial
            fresetparcial( 'arame', vsec )
            resetcel( cmodo )
            odlgipl:update()
            voldaxial := vldaxial
         ENDIF
      ENDIF
      IF Empty( voldradial )
         voldradial := vldradial
      ELSE
         IF voldradial # vldradial
            fresetparcial( 'arame', vsec )
            resetcel( cmodo )
            odlgipl:update()
            voldradial := vldradial
         ENDIF
      ENDIF
   ENDIF
	   IF chkmpfor()
      os_forsel_2121:refresh()
      os_vcusmp_2131:refresh()
      ogetvespirasc:setfocus()
      lretu := .T.
   ELSE
      vforneced := Space( 30 )
      vcustosec := 0
      os_forsel_2121:refresh()
      os_vcusmp_2131:refresh()
      lretu := .F.
   ENDIF
   RETU lretu
	
// **************************
	STAT FUNC fchknrid( c_modop )
	// **************************
   LOCAL registro  := ( Planilha )->( RecNo() )
   LOCAL ordem     := ( Planilha )->( dbOrderInfo( 5 ) )
   LOCAL lretu     := .F.
   LOCAL lresposta := .F.
	// checagem da parte inicial do número da planilha
   IF Val( subs( vnridplan, 1, 4 ) ) = 0
      msgalert( 'O número da planilha deve estar contido no intervalo: 0001 a 9999 ' )
      RETU .F.
   ENDIF
	// checagem do ano do planilha
   IF Val( subs( vnridplan, 5, 2 ) ) # Val( subs( AllTrim( Str( Year( Date() ) ) ), 3, 2 ) )
      lreposta := msgyesno( 'O ano da planilha esta correto ?' )
      IF lresposta == .T.
         lretu := .T.
      ELSE
         lretu := .F.
      ENDIF
      IF ! lretu
         RETU .F.
      ENDIF
   ENDIF
	// o número de revisão da planilha deve ser zero quando for inclusao de uma nova
   IF Val( subs( vnridplan, 7, 2 ) ) > 0 .AND. c_modop == 'inclusao'
      msgalert( 'Nas inclusões o número de revisão só pode ser igual a 00' )
      RETU .F.
   ENDIF
	   vnridplan := StrZero( Val( subs( vnridplan, 1, 4 ) ), 4, 0 ) + ;
      StrZero( Val( subs( vnridplan, 5, 2 ) ), 2, 0 ) + ;
      StrZero( Val( subs( vnridplan, 7, 2 ) ), 2, 0 )
	   ( Planilha )->( dbSetOrder( 'plidplan' ) )
   ( Planilha )->( dbGoTop() )
	   IF ( Planilha )->( dbSeek( subs( vnridplan, 5, 2 ) + subs( vnridplan, 1, 4 ) + subs( vnridplan, 7, 2 ) ) )
      alerta( 'Este número de planilha já está cadastrado!.' + CRLF + 'Por favor, tente outro!' )
      ( Planilha )->( dbSetOrder( ordem ) )
      ( Planilha )->( dbGoTop() )
      ( Planilha )->( dbGoto( registro ) )
      RETU .F.
   ENDIF
	   ( Planilha )->( dbSetOrder( ordem ) )
   ( Planilha )->( dbGoTop() )
   ( Planilha )->( dbGoto( registro ) )
	RETU .T.
	// ********************
	STAT FUNC fdefinesays
	
   // COM RECURSOS, E MELHOR COLOCAR DENTRO DA FUNCAO QUE CONTEM O
   // DIALOGO DEFINE DIA... ACTIVATE DIA... PODE DAR ESTOURO DE PILHA AQUI.
   // DEPOIS DE POR NO LOCAL CORRETO, USE O UPDATE NELES. VEJA \SAMPLES
	// ********************
	// QUADRO DO NUMERO DA PLANILHA E SITUAÇÃO
   redefine SAY os_frmpla_3000    id 3000 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_frmsit_4104    id 4104 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_numpla_3100    id 3100 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_situacao_4030  id 4030 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_dtregsit_4011  id 4011 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_numorcam_4099  id 4099 COLOR cor_txtsay, cor_fundo of odlgipl
	// QUADRO DO CÓDIGO DA PEÇA DADO PELO FABRICANTE (FABR.)
   redefine SAY os_frmcodfab_4070 id 4070 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_codpcfabr_4006 id 4006 COLOR cor_txtsay, cor_fundo of odlgipl
	// QUADRO DOS DADOS DO CLIENTE E DO PEDIDO
   redefine SAY os_frmcli_1000    id 1000 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_nomcli_1100 id 1100 COLOR cor_txtsay, cor_fundo of odlgipl font ofntbold
   redefine SAY os_numdes_1200 id 1200 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_numite_1300 id 1300 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_desmes_1400 id 1400 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_despro_1500 id 1500 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_codpccl4004 id 4004 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_volanua4033 id 4033 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_qtdpro_1600 id 1600 COLOR cor_txtsay, cor_fundo of odlgipl font ofntbold
   redefine SAY os_qtdmil_1610 id 1610 COLOR cor_txtsay, cor_fundo of odlgipl // say "quant em milhares..."
   redefine SAY os_qtdal1_1700 id 1700 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_qtdal2_1750 id 1750 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_qtdal3_1800 id 1800 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_qtdal4_1850 id 1850 COLOR cor_txtsay, cor_fundo of odlgipl
	// QUADRO DOS DADOS DO PRODUTO (MOLA)
   redefine SAY os_frmmol_2000 id 2000 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_tipmol_2010 id 2010 COLOR cor_txtsay, cor_fundo of odlgipl update
   redefine SAY os_forsec_2020 id 2020 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_matpri_2030 id 2030 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY oslotminmp     id 4005 COLOR cor_txtsay, cor_fundo of odlgipl
	// redefine say id 4128 color cor_verm,cor_azule of odlgipl
	// oslotminmp:disable()
   redefine SAY os_respmp_4010 id 4010 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_dimara_2040 id 2040 COLOR cor_txtsay, cor_fundo of odlgipl
// os_dimara_2040:disable()
   redefine SAY os_nespic_2050 id 2050 COLOR cor_txtsay, cor_fundo of odlgipl
// os_nespic_2050:disable()
   redefine SAY os_ladaxi_2042 id 2042 COLOR cor_txtsay, cor_fundo of odlgipl
// os_ladaxi_2042:disable()
   redefine SAY os_ladrad_2052 id 2052 COLOR cor_txtsay, cor_fundo of odlgipl
// os_ladrad_2052:disable()
   redefine SAY os_nespiR_2060 id 2060 COLOR cor_txtsay, cor_fundo of odlgipl
// os_nespiR_2060:disable()
   redefine SAY os_dimmed_2070 id 2070 COLOR cor_txtsay, cor_fundo of odlgipl
// os_dimmed_2070:disable()
   redefine SAY os_dimint_2080 id 2080 COLOR cor_txtsay, cor_fundo of odlgipl
// os_dimint_2080:disable()
   redefine SAY os_dimext_2090 id 2090 COLOR cor_txtsay, cor_fundo of odlgipl
// os_dimext_2090:disable()
   redefine SAY os_haste1_2100 id 2100 COLOR cor_txtsay, cor_fundo of odlgipl
// os_haste1_2100:disable()
   redefine SAY os_haste2_2110 id 2110 COLOR cor_txtsay, cor_fundo of odlgipl
// os_haste2_2110:disable()
   redefine SAY os_fornmp_2120 id 2120 COLOR cor_txtsay, cor_fundo of odlgipl
// os_fornmp_2120:disable()
   redefine SAY os_forsel_2121 id 2121 of odlgipl PROMPT AllTrim( vforneced ) COLOR cor_azul, cor_fundo update
// os_forsel_2121:disable()
   redefine SAY os_cusmat_2130 id 2130 COLOR cor_txtsay, cor_fundo of odlgipl
// os_cusmat_2130:disable()
   redefine SAY os_vcusmp_2131 id 2131 of odlgipl PROMPT AllTrim( trans( vcustosec, '@ez 99,999.99' ) ) COLOR cor_azul, cor_fundo update
// os_vcusmp_2131:disable()
   redefine SAY os_presuc_4002 id 4002 COLOR cor_txtsay, cor_fundo of odlgipl // say preço da sucata
// os_presuc_4002:disable()
   redefine SAY os_aprsuc_4003 id 4003 COLOR cor_txtsay, cor_fundo of odlgipl // say % aproveitamento da sucata
// os_aprsuc_4003:disable()
   redefine SAY osvc_matprim   id 4028 COLOR cor_txtsay, cor_fundo of odlgipl update
// osvc_matprim:disable()
   redefine SAY os_vc_matprim  id 4057 of odlgipl PROMPT AllTrim( trans( vc_matprim, '@ez 999,999,999.99' ) ) COLOR cor_vermt, cor_fundo UPDATE font ofntbold
// os_vc_matprim:disable()
   redefine SAY ossv_pesomilha id 4158 COLOR cor_txtsay, cor_fundo of odlgipl update
   redefine SAY osv_pesomilha  id 4159 of odlgipl PROMPT AllTrim( trans( vmassa, '@ze 99,999.999' ) ) COLOR cor_azul, cor_fundo update
	// DADOS DO ARTEFATO
   redefine SAY os_artfdim_4122 id 4122 COLOR cor_txtsay, cor_fundo of odlgipl  // say dimensoes do artefato
   os_artfdim_4122:disable()
   redefine SAY os_artfvol_4116 id 4116 COLOR cor_txtsay, cor_fundo of odlgipl // say condições de pagamento
   os_artfvol_4116:disable()
   redefine SAY os_artfmas_4118 id 4118 COLOR cor_txtsay, cor_fundo of odlgipl // say condições de pagamento
   os_artfmas_4118:disable()
	// QUADRO COND.PAGTO
   redefine SAY os_frmcpg_4017 id 4017 COLOR cor_txtsay, cor_fundo of odlgipl // quadro sucata e cond.PAGTO
   redefine SAY os_codpag_4007 id 4007 COLOR cor_txtsay, cor_fundo of odlgipl // say condições de pagamento
	// QUADRO DAS TAXAS
   redefine SAY os_frmtxs_4018 id 4018 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_csll_4012   id 4012 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_irpj_4013   id 4013 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_icms_4015   id 4015 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_piscof_4014 id 4014 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_lucro_4019  id 4019 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_tran_4020   id 4020 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_despad_4016 id 4016 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_indtottax PROMPT vos_itottax id 4008 COLOR cor_txtsay, cor_fundo of odlgipl UPDATE   // mostra valor tx total
	// QUADRO DAS MENSAGENS
   redefine SAY os_msg PROMPT cmsgqdr id 10001 of odlgipl COLOR rgb( 0, 255, 255 ), cor_pret font ofntbold
	// QUADRO NUMERO DA CELULA E SUAS CONSTANTES
   redefine SAY os_frmcel_4000 id 4000 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_numcel_4100 id 4100 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_tpadra_4200 id 4200 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_hrmqen_4300 id 4300 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_hrmqre_4400 id 4400 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_hrmaes_4500 id 4500 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_tpadra_4201 id 4201 of odlgipl PROMPT AllTrim( trans( vpadrao, '@r 99.99 h' ) ) COLOR cor_azul, cor_fundo update
   redefine SAY os_hrmqen_4301 id 4301 of odlgipl PROMPT AllTrim( trans( vhrmaqerl, '@ 999.99' ) ) COLOR cor_azul, cor_fundo update
   redefine SAY os_hrmqre_4401 id 4401 of odlgipl PROMPT AllTrim( trans( vhrmaqret, '@ 999.99' ) ) COLOR cor_azul, cor_fundo update
   redefine SAY os_hrmaes_4501 id 4501 of odlgipl PROMPT AllTrim( trans( vhrmaqest, '@ 999.99' ) ) COLOR cor_azul, cor_fundo update
	// QUADRO DAS OPERAÇÕES
   redefine SAY os_frmope_4071 id 4071 COLOR cor_txtsay, cor_fundo of odlgipl
	// ENROLAR 7000
   redefine SAY os_enro7k_5100 id 5100 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_hrhm7k_5110 id 5110 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_pontil_5115 id 5115 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
   redefine SAY os_pontil_20140 id 20140 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
   redefine SAY os_tp1k7k_5130 id 5130 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY osvc_TotEnrl7 id 20005 of odlgipl PROMPT trans( vc_totenrl7, '@rez 999,999,999.99' ) COLOR cor_azul, cor_fundo update
	// ENROLAR
   redefine SAY os_enrola_5150 id 5150 COLOR cor_azule, cor_fundo of odlgipl  font ofntbold
   redefine SAY os_hmenro_5160 id 5160 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_padenr_5170 id 5170 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_pherol_5180 id 5180 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_pontil_20141 id 20141 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
   redefine SAY osvc_TotEnrl id 20009 of odlgipl PROMPT trans( vc_totenrl, '@rez 999,999,999.99' ) COLOR cor_azul, cor_fundo update
	// ESTAMPAR COM PRENSA
   redefine SAY os_estamP_5200 id 5200 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_nopest_5210 id 5210 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_pontil_4001 id 4001 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
   redefine SAY os_pontil_20142 id 20142 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
   redefine SAY os_pdestP_5230 id 5230 COLOR cor_txtsay, cor_fundo of odlgipl // say peças/dia
   redefine SAY osvc_TotEstp id 20028 of odlgipl PROMPT trans( vc_totestp, '@rez 999,999,999.99' ) COLOR cor_azul, cor_fundo update
	// ESTAMPAR COM MAQUINA
   redefine SAY os_estamM_5250 id 5250 COLOR cor_azule, cor_fundo of odlgipl font ofntbold// COR AZUL ESCURO SIGNIFICA QUE ESTA OPERAÇÃO INFLUENCIA NO VALOR DE VENDA PELA VARIAÇÃO DAS QUANTIDADE
	   redefine SAY os_hrmaqe_5260 id 5260 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_padrae_5270 id 5270 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_phestM_5280 id 5280 COLOR cor_vermt, cor_fundo of odlgipl
   redefine SAY os_pontil_20143 id 20143 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
   redefine SAY osvc_totestm id 20057 of odlgipl PROMPT trans( vc_totEstm, '@rez 999,999,999.99' ) COLOR cor_azul, cor_fundo update
// REVENIR
   redefine SAY os_reveni_5300 id 5300 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_pontil_5305 id 5305 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
   redefine SAY os_cmreve_4059 id 4059 COLOR cor_txtsay, cor_fundo of odlgipl // custo/mil
   redefine SAY os_pontil_20144 id 20144 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
   redefine SAY osvc_totrevn id 20058 of odlgipl PROMPT trans( vc_totrevn, '@rez 999,999,999.99' ) COLOR cor_azul, cor_fundo update
	// CALIBRAR
   redefine SAY os_calibr_5330 id 5330 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_pontil_5335 id 5335 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
   redefine SAY os_prdica_5340 id 5340 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_pontil_20145 id 20145 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
   redefine SAY osvc_totclbr id 20059 of odlgipl PROMPT trans( vc_totclbr, '@rez 999,999,999.99' ) COLOR cor_azul, cor_fundo update
	// ENDIREITAR-CORTAR
   redefine SAY os_cortar_5360 id 5360 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_pontil_5365 id 5365 COLOR cor_txtsay, cor_fundo of odlgipl // pontilh
   redefine SAY os_prdico_5370 id 5370 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_pontil_20146 id 20146 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
   redefine SAY osvc_totendr id 20061 of odlgipl PROMPT trans( vc_TotEndr, '@rez 999,999,999.99' ) COLOR cor_azul, cor_fundo update
	// LEV.OLHAL
   redefine SAY os_lolhal_5390 id 5390 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_opolha_5400 id 5400 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_pontil_5405 id 5405 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
   redefine SAY os_prdiol_5410 id 5410 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_pontil_20147 id 20147 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
   redefine SAY osvc_totolha id 20084 of odlgipl PROMPT trans( vc_TotOlha, '@rez 999,999,999.99' ) COLOR cor_azul, cor_fundo update
	// DOBRAR
   redefine SAY os_dobrar_5430 id 5430 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_opdobr_5440 id 5440 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_pontil_5445 id 5445 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
   redefine SAY os_prdido_5450 id 5450 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_pontil_20148 id 20148 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
   redefine SAY osvc_totdobr id 20085 of odlgipl PROMPT trans( vc_TotDobr, '@rez 999,999,999.99' ) COLOR cor_azul, cor_fundo update
	// RECORTAR
   redefine SAY os_recort_5470 id 5470 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_opreco_5480 id 5480 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_pontil_5485 id 5485 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
   redefine SAY os_prdire_5490 id 5490 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_pontil_20149 id 20149 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
   redefine SAY osvc_totreco id 20086 of odlgipl PROMPT trans( vc_TotReco, '@rez 999,999,999.99' ) COLOR cor_azul, cor_fundo update
	
// CHANFRAR
   redefine SAY os_chanfr_5510 id 5510 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_opchan_5520 id 5520 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_pontil_5525 id 5525 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
   redefine SAY os_prdich_5530 id 5530 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_pontil_20150 id 20150 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
   redefine SAY osvc_totchfr id 20108 of odlgipl PROMPT trans( vc_TotChfr, '@rez 999,999,999.99' ) COLOR cor_azul, cor_fundo update
	// RETIFICAR
   redefine SAY os_retifi_5550 id 5550 COLOR cor_AZULE, cor_fundo of odlgipl font ofntbold
   redefine SAY os_numpas_4079 id 4079 COLOR cor_txtsay, cor_fundo of odlgipl// say passes
   redefine SAY os_pontil_5555 id 5555 COLOR cor_txtsay, cor_fundo of odlgipl // pontilh
   redefine SAY os_phreti_5560 id 5560 COLOR cor_vermt, cor_fundo of odlgipl
   redefine SAY os_pontil_20151 id 20151 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
   redefine SAY osvc_totretf id 20109 of odlgipl PROMPT trans( vc_TotRetf, '@rez 999,999,999.99' ) COLOR cor_azul, cor_fundo update
	// OLEAR
   redefine SAY os_olear__5580 id 5580 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_pontil_5585 id 5585 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
   redefine SAY os_pontil_20152 id 20152 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
   redefine SAY os_cmolea_4061  id 4061  COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY osvc_totolea id 20112 of odlgipl PROMPT trans( vc_TotOlea, '@rez 999,999,999.99' ) COLOR cor_azul, cor_fundo update
	// SELEÇAO 100%
   redefine SAY os_sel100_5860 id 5860 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_pontil_5865 id 5865 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_prdise_5870 id 5870 COLOR cor_txtsay, cor_fundo of odlgipl // say peças/dia
   redefine SAY os_pontil_20153 id 20153 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
   redefine SAY osvc_totsele id 20113 of odlgipl PROMPT trans( vc_TotSele, '@rez 999,999,999.99' ) COLOR cor_azul, cor_fundo update
	// LAVAR
   redefine SAY os_lavar__5950 id 5950 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_pontil_5952 id 5952 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_cmlava_4084 id 4084 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_pontil_20154 id 20154 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
   redefine SAY osvc_totlava id 20114 of odlgipl PROMPT trans( vc_TotLava, '@rez 999,999,999.99' ) COLOR cor_azul, cor_fundo update
	// TAMBOREAR
   redefine SAY os_tambor_5955 id 5955 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_pontil_5956 id 5956 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_cmtamb_4085 id 4085 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_pontil_20155 id 20155 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
   redefine SAY osvc_tottamb id 20115 of odlgipl PROMPT trans( vc_Tottamb, '@rez 999,999,999.99' ) COLOR cor_azul, cor_fundo update
	// OPER.EXTRA 1,2 E 3
// 1
   redefine SAY os_opext1_5961  id 5961 COLOR cor_txtsay, cor_fundo of odlgipl // say Op Extr 1
   redefine SAY os_pontil_5963  id 5963 COLOR cor_txtsay, cor_fundo of odlgipl //
   redefine SAY os_cmopx1_4086  id 4086 COLOR cor_txtsay, cor_fundo of odlgipl //
   redefine SAY osvc_totopx1    id 20116 of odlgipl PROMPT trans( vc_totopx1, '@rez 999,999,999.99' ) COLOR cor_azul, cor_fundo update
   redefine SAY os_pontil_20156 id 20156 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
// 2
   redefine SAY os_opext2_5966  id 5966 COLOR cor_txtsay, cor_fundo of odlgipl // say Op Extr 2
   redefine SAY os_pontil_5968  id 5968 COLOR cor_txtsay, cor_fundo of odlgipl //
   redefine SAY os_cmopx2_4102  id 4102 COLOR cor_txtsay, cor_fundo of odlgipl //
   redefine SAY osvc_totopx2    id 20117 of odlgipl PROMPT trans( vc_totopx2, '@rez 999,999,999.99' ) COLOR cor_azul, cor_fundo update
   redefine SAY os_pontil_20157 id 20157 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
// 3
   redefine SAY os_opext3_5971  id 5971 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_pontil_5973  id 5973 COLOR cor_txtsay, cor_fundo of odlgipl //
   redefine SAY os_cmopx3_4108  id 4108 COLOR cor_txtsay, cor_fundo of odlgipl //
   redefine SAY osvc_totopx3    id 20118 of odlgipl PROMPT trans( vc_totopx3, '@rez 999,999,999.99' ) COLOR cor_azul, cor_fundo update
   redefine SAY os_pontil_20158 id 20158 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
	// AMORTIZAÇAO DO FERRAMENTAL 1,2 e 3
   redefine SAY os_amortz_5890 id 5890 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_hrfabr_5892 id 5892 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_pontil_5895 id 5895 COLOR cor_txtsay, cor_fundo of odlgipl // pontilh
   redefine SAY os_loteam_5896 id 5896 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_pontil_20159 id 20159 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
   redefine SAY osvc_totfer1 id 20119 of odlgipl PROMPT trans( vC_TotFer1, '@rez 999,999,999.99' ) COLOR cor_azul, cor_fundo update
// 2
   redefine SAY os_amort2_4087 id 4087 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_hrfab2_4088 id 4088 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_ponti2_4090 id 4090 COLOR cor_txtsay, cor_fundo of odlgipl // pontilh
   redefine SAY os_lotea2_4091 id 4091 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_pontil_20160 id 20160 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
   redefine SAY osvc_totfer2 id 20120 of odlgipl PROMPT trans( vC_TotFer2, '@ez 999,999,999.99' ) COLOR cor_azul, cor_fundo update
// 3
   redefine SAY os_amort3_4093 id 4093 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_hrfab3_4094 id 4094 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_ponti3_4096 id 4096 COLOR cor_txtsay, cor_fundo of odlgipl // pontilh
   redefine SAY os_lotea3_4097 id 4097 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_pontil_20161 id 20161 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
   redefine SAY osvc_totfer3 id 20121 of odlgipl PROMPT trans( vC_TotFer3, '@ez 999,999,999.99' ) COLOR cor_azul, cor_fundo update
	// TRAT.SUPERFICIAL
   redefine SAY os_tratam_5610  id 5610 COLOR cor_AZULE, cor_fundo of odlgipl font ofntbold
   redefine SAY os_forntt_5631  id 5631 COLOR cor_txtsay, cor_fundo of odlgipl // say fornec.
   redefine SAY os_pontil_20162 id 20162 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
   redefine SAY osvc_tottsup    id 20122 of odlgipl PROMPT trans( vc_tottsup, '@ez 999,999,999.99' ) COLOR cor_azul, cor_fundo update
	// JATEAR
   redefine SAY os_jatear_5670  id 5670 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_pontil_5675  id 5675 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_cmjate_4109  id 4109 COLOR cor_txtsay, cor_fundo of odlgipl // say custo/mil
   redefine SAY os_pontil_20163 id 20163 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
   redefine SAY osvc_totjato    id 20123 of odlgipl PROMPT AllTrim( trans( vc_totjato, '@ez 999,999,999.99' ) ) COLOR cor_azul, cor_fundo update
	// COMPONENTES DE TERCEIROS
   redefine SAY os_comp3s_4029  id 4029  COLOR cor_txtsay, cor_fundo of odlgipl // say componentes de terceiros
   redefine SAY os_pontil_4034  id 4034  COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
   redefine SAY os_cmcp3s_4110  id 4110  COLOR cor_txtsay, cor_fundo of odlgipl // say componentes de terceiros
   redefine SAY os_pontil_20168 id 20168 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
   redefine SAY osvc_totcp3s    id 20124 of odlgipl PROMPT AllTrim( trans( vc_totcp3s, '@ez 999,999,999.99' ) ) COLOR cor_azul, cor_fundo update
	// USINAR
   redefine SAY os_usinar_4073  id 4073 COLOR cor_txtsay, cor_fundo of odlgipl  // say usinar
   redefine SAY os_pontil_4074  id 4074 COLOR cor_txtsay, cor_fundo of odlgipl  // pontilhado
   redefine SAY os_cmusin_4111  id 4111  COLOR cor_txtsay, cor_fundo of odlgipl // say custo/mil
   redefine SAY os_pontil_20164 id 20164 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
   redefine SAY osvc_totusin    id 20125 of odlgipl PROMPT AllTrim( trans( vc_totusin, '@ez 999,999,999.99' ) ) COLOR cor_azul, cor_fundo update
	// SOLDAR
   redefine SAY os_soldar_4076  id 4076 COLOR cor_txtsay, cor_fundo of odlgipl // say soldar
   redefine SAY os_pontil_4077  id 4077 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
   redefine SAY os_cmsold_4112  id 4112  COLOR cor_txtsay, cor_fundo of odlgipl // say custo/mil
   redefine SAY os_pontil_20165 id 20165 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
   redefine SAY osvc_totsold    id 20126 of odlgipl PROMPT AllTrim( trans( vc_totsold, '@ez 999,999,999.99' ) ) COLOR cor_azul, cor_fundo update
	// ROSCAR
   redefine SAY os_roscar_4081 id 4081 COLOR cor_txtsay, cor_fundo of odlgipl // say roscar
   redefine SAY os_pontil_4082 id 4082 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
   redefine SAY os_cmrosc_4113 id 4113  COLOR cor_txtsay, cor_fundo of odlgipl // say custo/mil
   redefine SAY os_pontil_20166 id 20166 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
   redefine SAY osvc_totrosc id 20127 of odlgipl PROMPT AllTrim( trans( vc_totrosc, '@ez 999,999,999.99' ) ) COLOR cor_azul, cor_fundo update
	// PINTAR
   redefine SAY os_pintar_5640 id 5640 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_pontil_5645 id 5645 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
   redefine SAY os_cmpint_4114 id 4114  COLOR cor_txtsay, cor_fundo of odlgipl // say custo/mil
   redefine SAY os_pontil_20167 id 20167 COLOR cor_txtsay, cor_fundo of odlgipl // pontilhado
   redefine SAY osvc_totpint id 20128 of odlgipl PROMPT AllTrim( trans( vc_totpint, '@ez 999,999,999.99' ) ) COLOR cor_azul, cor_fundo update
	// QUADRO DGF
   redefine SAY os_frmdgf_5716 id 5716 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY os_txdgf_5717  id 5717 COLOR cor_txtsay, cor_fundo of odlgipl // say Desp Ger.Fab
   redefine SAY osvc_tottxdgf  id 5719 of odlgipl PROMPT AllTrim( trans( vc_tottxdgf, '@e 999,999,999.99' ) ) COLOR cor_azul, cor_fundo update
	// TOTALIZAÇÕES
// CUSTO INDUSTRIAL
   redefine SAY oscustotpla id 20133 COLOR cor_bran, cor_verd of odlgipl
   oscustotpla:lwantclick := .T.
   oscustotpla:blclicked  := {|| oscustotpla:refresh(), msginfo( " Concluir: mostrar os demais custos industriais " ) }
   redefine SAY osvcustotpla id 20130 of odlgipl PROMPT AllTrim( trans( vcustotpla, '@ez 999,999,999.9999' ) ) COLOR cor_azul, cor_fundo update
	// TAXAS
// VALOR
// SAY
	// VALOR DE VENDA 1 2 3 4 5
   redefine SAY ostotvdpla  id 20135 COLOR cor_bran, cor_verm of odlgipl
// ostotvdpla:lWantClick := .t.
// ostotvdpla:bLClicked  := { || ostotvdpla:refresh(), msginfo( " concluir: mostrar os demais preços de venda " ) }
	   redefine SAY ostotvdpl2   id 20129 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY ostotvdpl3   id 20169 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY ostotvdpl4   id 20170 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY ostotvdpl5   id 20171 COLOR cor_txtsay, cor_fundo of odlgipl
   redefine SAY ostottaxv    id 20134 COLOR cor_txtsay, cor_fundo of odlgipl
	   redefine SAY osvc_tottaxv id 20131 of odlgipl PROMPT AllTrim( trans( vtotvdpla - vcustotpla, '@ez 999,999,999.9999' ) ) COLOR cor_azul, cor_fundo update
   redefine SAY osvtotvdpla  id 20132 of odlgipl PROMPT AllTrim( trans( vTotVdPla, '@ez 999,999,999.9999' ) ) COLOR cor_azul, cor_fundo update
   redefine SAY osvtotvdpl2  id 20136 of odlgipl PROMPT AllTrim( trans( vTotVdPl2, '@ez 999,999,999.9999' ) ) COLOR cor_azul, cor_fundo update
   redefine SAY osvtotvdpl3  id 20137 of odlgipl PROMPT AllTrim( trans( vTotVdPl3, '@ez 999,999,999.9999' ) ) COLOR cor_azul, cor_fundo update
   redefine SAY osvtotvdpl4  id 20138 of odlgipl PROMPT AllTrim( trans( vTotVdPl4, '@ez 999,999,999.9999' ) ) COLOR cor_azul, cor_fundo update
   redefine SAY osvtotvdpl5  id 20139 of odlgipl PROMPT AllTrim( trans( vTotVdPl5, '@ez 999,999,999.9999' ) ) COLOR cor_azul, cor_fundo update
	// OBSERVAÇÕES
   redefine SAY os_frmobs_6000 id 6000 COLOR cor_txtsay, cor_fundo of odlgipl // say quadro OBSERVAÇOES
   redefine SAY os_observ_6010 id 6010 COLOR cor_txtsay, cor_fundo of odlgipl // say Observações
	// RESPONSABILIDADES E DATAS
   redefine SAY os_frresp_7000 id 7000 COLOR cor_txtsay, cor_fundo of odlgipl // say quadro dos responsaveis e datas
   redefine SAY os_solici_7100 id 7100 COLOR cor_txtsay, cor_fundo of odlgipl // say solicitado por:
   redefine SAY os_analis_7200 id 7200 COLOR cor_txtsay, cor_fundo of odlgipl // say analisado por:
   redefine SAY os_dtregs_7300 id 7300 COLOR cor_txtsay, cor_fundo of odlgipl // say  "registrado em:"
   redefine SAY os_validd_7400 id 7400 COLOR cor_txtsay, cor_fundo of odlgipl // say validade:
   redefine SAY os_aprova_7500 id 7500 COLOR cor_txtsay, cor_fundo of odlgipl // say aprovado por:
   redefine SAY os_dtapro_7600 id 7600 COLOR cor_txtsay, cor_fundo of odlgipl // say data Aprov.:
	
RETU NIL
	// ***************************
	STAT FUNC fchecatudo( modoin )
	// ***************************
   LOCAL n_ordem  := ( Planilha )->( dbOrderInfo( 5 ) )
   LOCAL registro := ( Planilha )->( RecNo() )
   LOCAL l_ret    := .F.
	   IF ! maximo()
      RETU .F.
   ENDIF
	   IF Empty( vnridplan )
      msgalert( 'Informe o número da planilha!' )
      ogetvnridplan:setfocus()
      RETU .F.
   ENDIF
	   IF Empty( vcliente )
      msgalert( 'Informe o nome do cliente!' )
      ogetvcliente:setfocus()
      RETU .F.
   ENDIF
	   IF Empty( vsituaesc )
      alerta( 'É obrigatório informar a situação atual desta panilha!' )
      ocbx_situacao_603:setfocus()
      RETU .F.
   ENDIF
	   IF Empty( vdtregsit )
      alerta( 'É obrigatório informar a data de registro da situação desta panilha!' )
      ogetvdtregsit:setfocus()
   ENDIF
	// *******************************************************
// VERIFICA SE EXISTE OUTRA PLANILHA COM:               *
// CLIENTE, DESENHO, DESMESTRE, ITEM E DESCRICAO IGUAIS *
   IF ! fchkrepet( modoin )
      RETU .F.
   ENDIF
// *******************************************************
	/*
if empty(vidpcfabr)
   if ! msgyesno( 'Não foi informado o codigo utilizado pela "FABRICANTE" para a peça!'+CRLF+'Deseja continuar sem este dado?','Responda à pergunta abaixo!')
      ogetvidpcfabr:setfocus()
      retu .f.
   endif
endif
	if empty(vidpcclie)
   if ! msgyesno( 'Não foi informado o codigo utilizado pelo "Cliente" para a peça!'+CRLF+'Deseja continuar sem este dado?','Responda à pergunta abaixo!')
      ogetvidpcclie:setfocus()
      retu .f.
   endif
endif
*/
	   IF Empty( vcliente )
      alerta( 'Informe o nome/razão social do cliente!' )
      ogetvcliente:setfocus()
      RETU .F.
   ENDIF
	   IF Empty( vquantpedd )
      alerta( 'Informe a quantidade de peças do produto!' )
      ogetvquantpedd:setfocus()
      RETU .F.
   ENDIF
	   IF Empty( vquantped2 ) .OR. ;
         Empty( vquantped3 ) .OR. ;
         Empty( vquantped4 ) .OR. ;
         Empty( vquantped5 )
      alerta( 'Informe as quantidades alternativas do pedido!' )
      ogetvquantpedd:setfocus()
      RETU .F.
   ENDIF
	   IF Empty( vmaterial )
      alerta( 'Informe o nome da matéria-prima!' )
      ogetvmaterial:setfocus()
      RETU .F.
   ENDIF
	   IF vtipomola = 0
      alerta( 'Selecione o tipo de produto!' )
      obtcompressao:setfocus()
      RETU .F.
   ENDIF
	   IF Empty( vtiposecao ) .AND. vtipomola # 4
      alerta( 'Informe o formato da seção transversal do arame!' )
      obtcircular:setfocus()
      RETU .F.
   ENDIF
	   IF AllTrim( Upper( vtiposecao ) ) == Upper( 'CIRCULAR' ) .AND. Empty( vd_arame )
      alerta( 'Informe o diâmetro do arame !' )
      ogetvd_arame:setfocus()
      RETU .F.
   ENDIF
	   IF AllTrim( Upper( vtiposecao ) ) == Upper( 'RETANGULAR' ) .AND. ( Empty( vldaxial ) .OR. Empty( vldradial ) )
      alerta( 'Informe as dimensões do arame !' )
      ogetvldaxial:setfocus()
      RETU .F.
   ENDIF
	   IF vd_arame <= 1 .AND. vcelula == '5100'
      alerta( 'Para o diâmetro informado utilize a célula 5000' )
      ogetvcelula:setfocus()
      RETU .F.
   ENDIF
   IF vd_arame > 1 .AND. vcelula == '5000'
      alerta( 'Para o diãmetro informado utilize a célula 5100' )
      ogetvcelula:setfocus()
      RETU .F.
   ENDIF
   IF vd_arame <= 4 .AND. vcelula == '3100'
      alerta( 'Para o diâmetro informado utilize a célula 3000' )
      ogetvcelula:setfocus()
      RETU .F.
   ENDIF
   IF vd_arame > 4 .AND. vcelula == '3000'
      alerta( 'Para o diãmetro informado utilize a célula 3100' )
      ogetvcelula:setfocus()
      RETU .F.
   ENDIF
	   IF vtipomola # 4 .AND. ( vd_intern2 <= 0 .OR. ;
         vd_medio2  <= 0 .OR. ;
         vd_extern2 <= 0 )
	      vd_intern2 := vd_medio2 := vd_extern2 := 0
      ogetvd_intern2:refresh()
      ogetvd_medio2:refresh()
      ogetvd_extern2:refresh()
      alerta( 'Informe um dos diâmetros da peça! (interno,externo ou médio)' )
      ogetvd_medio2:setfocus()
      RETU .T.
   ENDIF
	
   IF AllTrim( Str( vtipomola ) ) $ '123' .AND. Empty( vmassa )
      alerta( 'Estão faltando dados para obtenção do custo da Matéria-Prima! - VERIFIQUE!!' )
      ogetvmaterial:setfocus()
      RETU .F.
   ENDIF
	   IF vfabfornmp .AND. vcustosec < 0
      alerta( 'Estão faltando dados para obtenção do custo da Matéria-Prima! - VERIFIQUE!!' )
      ogetvmaterial:setfocus()
      RETU .F.
   ENDIF
	   IF vsituacao == Upper( 'A' ) .AND. Empty( vdtaprova )
      alerta( 'Informe a data da aprovação do orçamento' )
      os_numorcam_4099:enable()
      ogetvdocorcam:enable()
      os_aprova_7500:enable()
      os_dtapro_7600:enable()
      ogetvdtaprova:enable()
      ogetvaprovador:enable()
      ogetvaprovador:setfocus()
      RETU .F.
   ENDIF
	   IF vsituacao == Upper( 'A' ) .AND. Empty( vdocorcam )
      os_numorcam_4099:enable()
      ogetvdocorcam:enable()
      os_aprova_7500:enable()
      os_dtapro_7600:enable()
	      alerta( 'Informe a identificação do documento da aprovação deste orçamento' )
      ogetvdocorcam:setfocus()
      RETU .F.
   ENDIF
	// TAXAS MARKUP
   IF vtxdespad < 0
      alerta( 'A taxa DESP.ADMIN. não pode ser MENOR DO QUE ZERO! (i.é.: negativa)' )
      ogetvtxdespad:setfocus()
      RETU .F.
   ENDIF
   IF vtxpiscof < 0
      alerta( 'A taxa PIS/COFINS não pode ser MENOR DO QUE ZERO! (i.é.: negativa)' )
      ogetvtxpiscof:setfocus()
      RETU .F.
   ENDIF
   IF vtxicms < 0
      alerta( 'A taxa ICMS não pode ser MENOR DO QUE ZERO! (i.é.: negativa)' )
      ogetvtxicms:setfocus()
      RETU .F.
   ENDIF
   IF vtxlucro < 0
      alerta( 'A taxa LUCRO não pode ser MENOR DO QUE ZERO! (i.é.: negativa)' )
      ogetvtxlucro:setfocus()
      RETU .F.
   ENDIF
   IF vtxcsll < 0
      alerta( 'A taxa CSLL não pode ser MENOR DO QUE ZERO! (i.é.: negativa)' )
      ogetvtxcsll:setfocus()
      RETU .F.
   ENDIF
   IF vtxirpj < 0
      alerta( 'A taxa IRPJ não pode ser MENOR DO QUE ZERO! (i.é.: negativa)' )
      ogetvtxirpj:setfocus()
      RETU .F.
   ENDIF
   IF vtxtransp < 0
      alerta( 'A taxa TRANSPORTE não pode ser MENOR DO QUE ZERO! (i.é.: negativa)' )
      ogetvtxtransp:setfocus()
      RETU .F.
   ENDIF
   IF vtxdgf < 0
      alerta( 'A taxa DGF não pode ser MENOR DO QUE ZERO! (i.é.: negativa)' )
      ogetvtxdgf:setfocus()
      RETU .F.
   ENDIF
	// OPERAÇÃO EXTRA 1 2 E 3
   IF vc_totopx1 > 0 .AND. Empty( vc_desopx1 )
      alerta( 'Informe a descrição da operação extra 1!' )
      ogetvc_desopx1:setfocus()
      RETU .F.
   ENDIF
   IF Empty( vc_totopx1 ) .AND. !Empty( vc_desopx1 )
      alerta( 'Informe o custo/milheiro para a operação extra 1 ou exclua sua descrição!' )
      ogetvc_totopx1:setfocus()
      RETU .F.
   ENDIF
   IF vc_totopx2 > 0 .AND. Empty( vc_desopx2 )
      alerta( 'Informe a descrição da operação extra 2!' )
      ogetvc_desopx2:setfocus()
      RETU .F.
   ENDIF
   IF Empty( vc_totopx2 ) .AND. !Empty( vc_desopx2 )
      alerta( 'Informe o custo/milheiro para a operação extra 2 ou exclua sua descrição!' )
      ogetvc_totopx2:setfocus()
      RETU .F.
   ENDIF
   IF vc_totopx3 > 0 .AND. Empty( vc_desopx3 )
      alerta( 'Informe a descrição da operação extra 3!' )
      ogetvc_desopx3:setfocus()
      RETU .F.
   ENDIF
   IF Empty( vc_totopx3 ) .AND. !Empty( vc_desopx3 )
      alerta( 'Informe o custo/milheiro para a operação extra 3 ou exclua sua descrição!' )
      ogetvc_totopx3:setfocus()
      RETU .F.
   ENDIF
	// CONCLUIR VERIFICAÇÕES
// Obs.: Os dados de embalagem foram verificados na propria rotina
	   precalc()
	   RETU .T.
	
// ********************
	STAT FUNC fmudagets()  // GETS PARA TIPO DE PRODUTO - COMPRESSAO TRACAO TORCAO ARTEFATO
	// ********************
	/*
If GetKeyState( VK_ESCAPE ).or.;
   GetKeyState( VK_UP ).or.;
   GetKeyState( VK_LBUTTON )
   if vtipomola == 2
      obtcompressao:aitems[2]:setfocus()
      retu .t.
   elseif vtipomola == 3
      obtcompressao:aitems[3]:setfocus()
      retu .t.
   elseif vtipomola == 4
      obtcompressao:aitems[4]:setfocus()
      retu .t.
   endif
   obtcompressao:aitems[1]:setfocus()
   retu .t.
endif
*/
	// fresetparcial('','')
	// ********************************************************
// ** ATENÇÃO : NÃO MODIFICAR A SEQUENCIA DAS LINHAS ABAIXO
// ********************************************************
	   fzeramatp( 'fmudagets' )
	   os_respmp_4010:enable() // say fornecimento cliente fabricante
   os_matpri_2030:enable() // say Mat.Prima
   ogetvmaterial:enable()  // 2031
   ogetvmaterial:refresh()
   obtfabfornmp:SetColor( cor_azule, cor_fundog )
   obtfabfornmp:refresh()
   obtclifornmp:SetColor( cor_azule, cor_fundog )
   obtclifornmp:refresh()
   obtretangular:SetColor( cor_azule, cor_fundog )
   obtretangular:refresh()
   obtcircular:SetColor( cor_azule, cor_fundog )
   obtcircular:refresh()
	   IF AllTrim( Str( vtipomola ) ) $ '123' // SE FOR COMPRESSÃO TRAÇÃO OU TORÇÃO
      obtcircular:enable()
      obtretangular:enable()
      os_forsec_2020:enable()// say SEÇÃO DO ARAME
      os_haste1_2100:enable() // say haste1
      ogetvhaste1:enable()    // 2101 get haste1
      os_haste2_2110:enable() // say haste2
      ogetvhaste2:enable()    // 2111 get haste2
      os_dimmed_2070:enable() // say diam. médio
      ogetvd_medio2:enable()  // 2071 get diam. medio
      os_dimint_2080:enable() // say diam. interno
      ogetvd_intern2:enable() // 2081 get diam. interno
      os_dimext_2090:enable() // say diam externo
      ogetvd_extern2:enable() // 2091 get diam externoo
      os_artfdim_4122:disable()// say dimensoes do artef
      ogetvarteftdim:disable() // 4123 get dimens. artf
      os_artfvol_4116:disable()// say volume artf
      ogetvarteftvol:disable() // 4117 get volume artf
      os_artfmas_4118:disable()// say say massa do artef
      ogetvarteftmas:disable() // 4119 get massa do artef
      IF vtipomola == 1 // compressão
	         obtcompressao:SetColor( cor_verm, cor_verdf )
         obttracao:SetColor( cor_azule, cor_fundog )
         obttorcao:SetColor( cor_azule, cor_fundog )
         obtartefato:SetColor( cor_azule, cor_fundog )
      ELSEIF vtipomola == 2
         obtcompressao:SetColor( cor_azule, cor_fundog )
         obttracao:SetColor( cor_verm, cor_verdf )
         obttorcao:SetColor( cor_azule, cor_fundog )
         obtartefato:SetColor( cor_azule, cor_fundog )
      ELSEIF vtipomola == 3
         obtcompressao:SetColor( cor_azule, cor_fundog )
         obttracao:SetColor( cor_azule, cor_fundog )
         obttorcao:SetColor( cor_verm, cor_verdf )
         obtartefato:SetColor( cor_azule, cor_fundog )
      ENDIF
	      IF vtipomola == 1
         vctpm := ' COMPRESSÃO '
      ELSEIF vtipomola == 2
         vctpm := ' TRAÇÃO '
      ELSEIF vtipomola == 3
         vctpm := ' TORÇÃO '
      ENDIF
	   ELSEIF vtipomola == 4  // SE FOR ARTEFATO
	      vd_arame   := 0
      vespiras   := 0
      vldaxial   := 0
      vldradial  := 0
      vespiras   := 0
      vd_medio2  := 0
      vd_intern2 := 0
      vd_extern2 := 0
      vhaste1    := 0
      vhaste2    := 0
	      os_forsec_2020:disable()// say SEÇÃO DO ARAME
      obtcircular:disable()   //
      obtretangular:disable()
      os_dimara_2040:disable() // say diam.arame
      ogetvd_arame:disable()   // 2041 get diam arame p/seçao circular (vd_arame)
      os_nespic_2050:disable() // say num. espiras circ
      ogetvespirasc:disable()  // 2051 get num. espiras circ
      os_ladaxi_2042:disable() // say lado axial
      ogetvldaxial:disable()   // 2043 get ld axial
      os_ladrad_2052:disable() // say ld radial
      ogetvldradial:disable()  // 2053 get ld radial
      os_nespiR_2060:disable() // say num esp para secao retang
      ogetvespirasR:disable()  // 2061 get num esp para secao retang
      os_dimmed_2070:disable() // say diam. médio
      ogetvd_medio2:disable()  // 2071 get diam. medio
      os_dimint_2080:disable() // say diam. interno
      ogetvd_intern2:disable() // 2081 get diam. interno
      os_dimext_2090:disable() // say diam externo
      ogetvd_extern2:disable() // 2091 get diam externoo
      os_haste1_2100:disable() // say haste1
      ogetvhaste1:disable()    // 2101 get haste1
      os_haste2_2110:disable() // say haste2
      ogetvhaste2:disable()    // 2111 get haste2
      ossv_pesomilha:enable() // 4158 say peso do milheiro
      osv_pesomilha:enable()  // 4159 peso do milheiro (vmassa)
      os_artfdim_4122:enable()// say dimensoes do artef
      ogetvarteftdim:enable() // 4123 get dimens. artf
      os_artfvol_4116:enable()// say volume artf
      ogetvarteftvol:enable() // 4117 get volume artf
      os_artfmas_4118:enable()// say say massa do artef
      ogetvarteftmas:enable() // 4119 get massa do artef
      obtcompressao:SetColor( cor_azule, cor_fundog )
      obttracao:SetColor( cor_azule, cor_fundog )
      obttorcao:SetColor( cor_azule, cor_fundog )
      obtartefato:SetColor( cor_verm, cor_verdf )
      vctpm := ' ARTEFATO '
   ELSE
      vctpm := ' - '
   ENDIF
   oq_tipomol_4128:hide()
   oq_fabrcli_4129:show()
   oq_circret_4130:hide()
   obtfabfornmp:setfocus()
	   odlgipl:update() //???
	   RETU NIL
// **********************
	STAT FUNC fmudagetsmp()
	// **********************
   vtiposecesc  := 0
   vlotminmp    := 0
   vcustosec    := 0
   vforneced    := Space( 30 )
   vcustosuc    := 0
   vaprovsuc    := 0
   vmaterial    := Space( 40 )
   vfabfornmp   := nil
	   obtretangular:SetColor( cor_azule, cor_fundog )
   obtcircular:SetColor( cor_azule, cor_fundog )
	   IF vtipoforesc == 1 // FABRICANTE FORNECE MAT.PRIMA
      vfabfornmp := .T.
      osvc_matprim:enable()   // 4028
      os_vc_matprim:enable()  // 4057
      oslotminmp:enable()     // 4005  say lote min.
      ogetvlotminmp:enable()  // 4009 get lote min (vlotminmp)
      os_fornmp_2120:enable() // say fornecedor da m.p
      os_forsel_2121:enable() // say nome do fornecedor (vforneced)
      os_cusmat_2130:enable() // say custo do kg da mat p
      os_vcusmp_2131:enable() // valor do custo do kk da mp 9 (vcustosec)
      os_presuc_4002:enable() // say custo do kg da sucata
      ogetvcustosuc :enable() // 4036 get custo do kg da sucata
      os_aprsuc_4003:enable() // say reaprov. sucata
      ogetvaprovsuc:enable()  // 4037 get aproveita// da sucata
      obtfabfornmp:SetColor( cor_verm, cor_verdf )
      obtclifornmp:SetColor( cor_azule, cor_fundog )
      vcfabcli := ' FABRICANTE '
   ELSEIF vtipoforesc == 2  // CLIENTE FORNECE M.PRIMA
      vfabfornmp := .F.
      osvc_matprim:disable()   // 4028
      os_vc_matprim:disable()  // 4057
      oslotminmp:disable()     // 4005  say lote min.
      ogetvlotminmp:disable()  // 4009 get lote min (vlotminmp)
      os_fornmp_2120:disable() // say fornecedor da m.p
      os_forsel_2121:disable() // say nome do fornecedor (vforneced)
      os_cusmat_2130:disable() // say custo do kg da mat p
      os_vcusmp_2131:disable() // valor do custo do kk da mp 9 (vcustosec)
      os_presuc_4002:disable() // say custo do kg da sucata
      ogetvcustosuc:disable() // 4036 get custo do kg da sucata
      os_aprsuc_4003:disable() // say reaprov. sucata
      ogetvaprovsuc:disable()  // 4037get aprov. da sucata
      obtfabfornmp:SetColor( cor_azule, cor_fundog )
      obtclifornmp:SetColor( cor_verm, cor_verdf )
      vcfabcli := ' CLIENTE '
   ENDIF
	   IF vtipomola == 4
      oq_tipomol_4128:hide()
      oq_fabrcli_4129:hide()
      oq_circret_4130:hide()
      ogetvmaterial:setfocus()
   ELSEIF AllTrim( Str( vtipomola ) ) $ '123'
      obtretangular:setfocus()
      oq_tipomol_4128:hide()
      oq_fabrcli_4129:hide()
      oq_circret_4130:show()
   ELSE
      vtipomola    := 0
      vtipoforesc  := 0
      vtiposecesc  := 0
      vfabfornmp   := nil
      obtcompressao:SetColor( cor_azule, cor_fundog )
      obtcompressao:setfocus()
      obttracao:SetColor( cor_azule, cor_fundog )
      obttracao:setfocus()
      obttorcao:SetColor( cor_azule, cor_fundog )
      obttorcao:setfocus()
      obtartefato:SetColor( cor_azule, cor_fundog )
      obtartefato:setfocus()
      obtfabfornmp:SetColor( cor_azule, cor_fundog )
      obtfabfornmp:refresh()
      obtclifornmp:SetColor( cor_azule, cor_fundog )
      obtclifornmp:refresh()
      oq_tipomol_4128:show()
      oq_fabrcli_4129:hide()
      oq_circret_4130:hide()
   ENDIF
	   odlgipl:update() //???
	   RETU NIL
	// **********************
	STAT FUNC fmudagetsec()
	// **********************
   vmaterial  := Space( 40 )
   vtiposecao := Space( 10 )
   vd_arame   := 0
   vespirasc  := 0
   vldaxial   := 0
   vldradial  := 0
   vespirasR  := 0
   vlotminmp  := 0
   vcustosec  := 0
   vforneced  := Space( 30 )
   vcustosuc  := 0
   vaprovsuc  := 0
	   ogetvmaterial:refresh()
   ossv_pesomilha:enable() // 4158 say peso do milheiro
   osv_pesomilha:enable()  // 4159 peso do milheiro (vmassa)
	   IF vtiposecesc == 1 // CIRCULAR
      vtiposecao := Upper( PadR( 'CIRCULAR', 10 ) )
      os_dimara_2040:enable() // say diam.arame
      ogetvd_arame:enable()   // 2041 get diam arame p/seçao circular (vd_arame)
      os_nespic_2050:enable() // say num. espiras circ
      ogetvespirasc:enable()  // 2051 get num. espiras circ
      os_ladaxi_2042:disable() // say lado axial
      ogetvldaxial:disable()   // 2043 get ld axial
	      os_ladrad_2052:disable() // say ld radial
      ogetvldradial:disable()  // 2053 get ld radial
      os_nespiR_2060:disable() // say num esp para secao retang
      ogetvespirasR:disable()  // 2061 get num esp para secao retang
      obtcircular:SetColor( cor_verm, cor_verdf )
      obtretangular:SetColor( cor_azule, cor_fundog )
      vccircret := ' CIRCULAR '
   ELSEIF vtiposecesc == 2
      vtiposecao := Upper( PadR( 'RETANGULAR', 10 ) )
      os_dimara_2040:disable() // say diam.arame
      ogetvd_arame:disable()   // 2041 get diam arame p/seçao circular (vd_arame)
      os_nespic_2050:disable() // say num. espiras circ
      ogetvespirasc:disable()  // 2051 get num. espiras circ
      os_ladaxi_2042:enable() // say lado axial
      ogetvldaxial:enable()   // 2043 get ld axial
      os_ladrad_2052:enable() // say ld radial
      ogetvldradial:enable()  // 2053 get ld radial
      os_nespiR_2060:enable() // say num esp para secao retang
      ogetvespirasR:enable()  // 2061 get num esp para secao retang
      obtcircular:SetColor( cor_azule, cor_fundog )
      obtretangular:SetColor( cor_verm, cor_verdf )
      vccircret := ' RETANGULAR '
   ENDIF
   IF vtipoforesc == 1 .OR. vtipoforesc == 2
      ogetvmaterial:setfocus()
      oq_tipomol_4128:hide()
      oq_fabrcli_4129:hide()
      oq_circret_4130:hide()
   ELSE
      vtipoforesc  := 0
      vtiposecesc  := 0
      vfabfornmp   := nil
      obtfabfornmp:SetColor( cor_azule, cor_fundog )
      obtclifornmp:SetColor( cor_azule, cor_fundog )
      obtcircular:SetColor( cor_azule, cor_fundog )
      obtretangular:SetColor( cor_azule, cor_fundog )
      oq_tipomol_4128:hide()
      oq_fabrcli_4129:show()
      oq_circret_4130:hide()
      obtfabfornmp:setfocus()
   ENDIF
	   odlgipl:update() // MOTIVO? SE FOR O CASO, REFRESQUE O OBJETO.
	RETU .T.
	// ***************************************
	STAT FUNC fchkdims( dimesp, valinfo, cmodo ) // calcula os outros diâmetros ao ser informado um deles
	// ***************************************
   LOCAL vmax, vmed, vmin
	   IF GetKeyState( VK_ESCAPE ) .OR. ;
         GetKeyState( VK_UP ) .OR. ;
         GetKeyState( VK_LBUTTON )
      IF AllTrim( Upper( vtiposecao ) ) == Upper( 'CIRCULAR' )
         ogetvespirasC:setfocus()
      ELSEIF AllTrim( Upper( vtiposecao ) ) == Upper( 'RETANGULAR' )
         ogetvespirasR:setfocus()
      ENDIF
      RETU .T.
   ENDIF
	// Combinações válidas:
// lado axial e dmedio
// lado axial e dexterno
// lado axial e dinterno
// Formulas decorrentes:
// dmedio e dinterno   -> lado axial= dm-di   -> dm = lado axial+di   -> di=dm- lado axial
// dmedio e dexterno   -> lado axial= de-dm   -> de = lado axial+dm   -> dm=de- lado axial
// dinterno e dexterno -> lado axial= de-di/2 -> de = lado axial+di/2 -> di =2.(de- lado axial)
//
	// Obrigatorio: Dexterno > Dmedio > Dinterno
	   // Combinaçoes validas:
   // diam arame e dmedio
   // diam arame e dexterno
   // diam arame e dinterno
	   // Formulas decorrentes:
   // dmedio e dinterno   -> d = dm-di   -> dm=d+di   -> di=dm-d
   // dmedio e dexterno   -> d = de-dm   -> de=d+dm   -> dm=de-d
   // dinterno e dexterno -> d = de-di/2 -> de=d+di/2 -> di =2.(de-d)
	/*
if valinfo <= 0
   if dimesp == 'interno'
      vd_intern2 := 0
      ogetvd_intern2:refresh()
   elseif dimesp == 'medio'
      vd_medio2 := 0
      ogetvd_medio2:refresh()
   elseif dimesp == 'externo'
      vd_extern2 := 0
      ogetvd_extern2:refresh()
   endif
   retu .t.
endif
*/
	   IF AllTrim( Upper( vtiposecao ) ) == Upper( 'CIRCULAR' )
	      IF Empty( vd_arame )
         alerta( 'Informe o diâmetro do arame!' )
         ogetvd_arame:setfocus()
         RETU .F.
      ENDIF
	      IF dimesp == 'interno'
	         vd_interno := vd_intern2
         vd_extern2 := vd_externo := vd_interno + ( 2 * vd_arame )
         vd_medio2  := vd_medio   := vd_interno + vd_arame
	         IF vd_medio < ( if( cmodo == 'revisao', vwmola, cfg_w_mola ) * vd_arame )
            IF ! frespwmola( cmodo )
               vd_interno := 0
               vd_extern2 := vd_externo := 0
               ogetvd_extern2:refresh()
               vd_medio2  := vd_medio   := 0
               ogetvd_medio2:refresh()
               RETU .F.
            ENDIF
         ENDIF
	      ELSEIF dimesp == 'medio'
	         vd_medio   := vd_medio2
         vd_externo := 0
         vd_interno := 0
	         IF vd_medio < ( if( cmodo == 'revisao', vwmola, cfg_w_mola ) * vd_arame )
	            IF ! frespwmola( cmodo )
               vd_medio := 0
               vd_extern2 := vd_externo := 0
               ogetvd_extern2:refresh()
               vd_intern2 := vd_interno := 0
               ogetvd_intern2:refresh()
               RETU .F.
            ENDIF
	         ENDIF
	         vd_extern2 := vd_externo := vd_medio + vd_arame
         vd_intern2 := vd_interno := vd_medio - vd_arame
	      ELSEIF dimesp == 'externo'
	         vd_externo := vd_extern2
         vd_intern2 := vd_interno := vd_externo - ( 2 * vd_arame )
         vd_medio2  := vd_medio   := vd_externo - vd_arame
	         IF vd_medio < ( if( cmodo == 'revisao', vwmola, cfg_w_mola ) * vd_arame )
            IF ! frespwmola( cmodo )
               vd_externo := 0
               vd_intern2 := vd_interno := 0
               ogetvd_intern2:refresh()
               vd_medio2 := vd_medio := 0
               ogetvd_medio2:refresh()
               RETU .F.
            ENDIF
         ENDIF
	      ELSE
         msgalert( 'Informe um dos três diâmetros solicitados!' )
         RETU .F.
      ENDIF
	   ELSEIF AllTrim( Upper( vtiposecao ) ) == Upper( 'RETANGULAR' )
	      IF Empty( vldaxial )
         msgalert( 'Informe as dimensões dos lados axial e radial da seção retângular do arame!' )
         ogetvldaxial:setfocus()
         RETU .F.
      ENDIF
	      IF dimesp == 'interno'
	         vd_interno := vd_intern2
         vd_extern2 := vd_externo := vd_interno + ( 2 * vldaxial )
         vd_medio2  := vd_medio   := vd_interno +    vldaxial
	         IF vd_medio < (  if( cmodo == 'revisao', vwmola, cfg_w_mola ) * vldaxial  )
            IF ! frespwmola( cmodo )
               vd_interno := 0
               vd_extern2 := vd_externo := 0
               ogetvd_extern2:refresh()
               vd_medio2  := vd_medio   := 0
               ogetvd_medio2:refresh()
               RETU .F.
            ENDIF
         ENDIF
	      ELSEIF dimesp == 'medio'
	         vd_medio   := vd_medio2
         vd_externo := 0
         vd_interno := 0
	         IF vd_medio < (  if( cmodo == 'revisao', vwmola, cfg_w_mola ) * vldaxial  )
            IF ! frespwmola( cmodo )
               vd_medio := 0
               vd_extern2 := vd_externo := 0
               ogetvd_extern2:refresh()
               vd_intern2 := vd_interno := 0
               ogetvd_intern2:refresh()
               RETU .F.
            ENDIF
         ENDIF
	         vd_extern2 := vd_externo := vd_medio + vldaxial
         vd_intern2 := vd_interno := vd_medio - vldaxial
	      ELSEIF dimesp == 'externo'
	         vd_externo := vd_extern2
         vd_intern2 := vd_interno := vd_externo - ( 2 * vldaxial )
         vd_medio2  := vd_medio   := vd_externo - vldaxial
	
         IF vd_medio < (  if( cmodo == 'revisao', vwmola, cfg_w_mola ) * vldaxial  )
	            IF ! frespwmola( cmodo )
               vd_externo := 0
               vd_intern2 := vd_interno := 0
               ogetvd_intern2:refresh()
               vd_medio2 := vd_medio := 0
               ogetvd_medio2:refresh()
               RETU .F.
            ENDIF
         ENDIF
      ENDIF
   ELSE
      alerta( 'Informe o tipo de seção! ( CIRCULAR OU RETANGULAR )' )
      obtcircular:setfocus()
      RETU .F.
   ENDIF
	// muda as cores dos gets disabled
   ogetvd_medio2:ldiscolors  := .F.
   ogetvd_medio2:nclrpanedis := cor_fundosg
   ogetvd_medio2:nclrtextdis := cor_textog
   settextcolor( ogetvd_medio2:hdc, ogetvd_medio2:nclrtextdis  )
   nclrbtcdxt := ogetvd_medio2:nclrtextdis
	   ogetvd_extern2:ldiscolors  := .F.
   ogetvd_extern2:nclrpanedis := cor_fundosg
   ogetvd_extern2:nclrtextdis := cor_textog
   settextcolor( ogetvd_extern2:hdc, ogetvd_extern2:nclrtextdis  )
   nclrbtcdxt := ogetvd_extern2:nclrtextdis
	   ogetvd_intern2:ldiscolors  := .F.
   ogetvd_intern2:nclrpanedis := cor_fundosg
   ogetvd_intern2:nclrtextdis := cor_textog
   settextcolor( ogetvd_intern2:hdc, ogetvd_intern2:nclrtextdis  )
   nclrbtcdxt := ogetvd_intern2:nclrtextdis
	   ogetvd_extern2:refresh()
   ogetvd_intern2:refresh()
   ogetvd_medio2:refresh()
   ogetvhaste1:setfocus()
	   IF fcalcmassa()
      RETU .T.
   ENDIF
   RETU .F.
	// **************************
	STAT FUNC frespwmola( cmodo )
	// **************************
   LOCAL lret := .F.
   LOCAL cfrase, cfras1, cfras2, cfras3, cfras4
	   cfras1 := ' "W" (Índice da mola) atualmente configurado para: '  + ;
      if( cmodo == 'revisao', AllTrim( Str( vwmola ) ), AllTrim( Str( cfg_w_mola ) ) ) + CRLF + ;
      ' não pode ser atendido para as dimensões informadas: '
	   IF AllTrim( Upper( vtiposecao ) ) == Upper( 'CIRCULAR' )
      cfras2 := ' "DIÂMETRO DO ARAME" '
   ELSEIF AllTrim( Upper( vtiposecao ) ) == Upper( 'RETANGULAR' )
      cfras2 := ' "LADO RADIAL" '
   ELSE
      cfras2 := ' '
   ENDIF
   IF cmodo == 'revisao'
      cfras3 := ' ( w atual= ' + AllTrim( Str( vwmola ) )     + ' )'
   ELSE
      cfras3 := ' ( w atual= ' + AllTrim( Str( cfg_w_mola ) ) + ' )'
   ENDIF
   cfras4 := CRLF + 'Deseja continuar ASSIM MESMO?'
   cfrase := cfras1 + cfras2 + cfras3 + CRLF + cfras4
	   IF msgnoyes( cfrase, 'Reponda a pergunta abaixo!' )
      lret := .T.
   ELSE
      lret := .F.
   ENDIF
	   ogetvd_extern2:refresh()
   ogetvd_intern2:refresh()
   ogetvd_medio2:refresh()
   RETU lret
	// *******************
	STAT FUNC fcalcmassa
	// *******************
   IF Empty( vpespecif ) .OR. ;
         ( AllTrim( Upper( vtiposecao ) ) == Upper( 'CIRCULAR' ) .AND. Empty( vd_arame ) )  .OR. ;
         ( AllTrim( Upper( vtiposecao ) ) == Upper( 'RETANGULAR' ) .AND. ( Empty( vldaxial ) .OR. ;
         Empty( vldradial ) ) )
	      alerta( 'Faltam dados físicos da materia-prima! (peso específico e/ou dimensões do material) ' )
      RETU .F.
	   ENDIF
	   vdesenvol := ( pi() *  vd_medio * vespiras ) + vhaste1 + vhaste2
	   IF AllTrim( Upper( vtiposecao ) ) == Upper( 'CIRCULAR' )
      varea :=  pi() * ( vd_arame ^ 2 ) / 4
   ELSEIF AllTrim( Upper( vtiposecao ) ) == Upper( 'RETANGULAR' )
      varea := vldaxial * vldradial
   ENDIF
	   vvolume := vdesenvol * varea
   vmassa  := ( vvolume * vpespecif / 10 ^ 6 ) / ( 1 - ( vpercperdpp / 100 ) )    // .95 para gramas e com refugo de 5%
	// say trans(vdesenvol, '@ez 9,999,999.99') + ' mm'
// say trans(varea    , '@ez 9,999,999.99') + ' mm2'
// say trans(vvolume  , '@ez 9,999,999.99') + ' mm3'
// say trans(vmassa   , '@ez 9,999,999.99') + ' g'
	   RETU .T.
	// *************************************
	STAT FUNC fresetparcial( r_origem, vsec )
	// *************************************
   r_origem := Lower( r_origem )
	   IF r_origem == 'material'
	      IF Empty( vmatprimini )
         vmatprimini := vmaterial
         RETU .T.
      ENDIF
	      IF vmaterial == vmatprimini
         RETU .T.
      ENDIF
	      vmatprimini := vmaterial
	   ENDIF
	   IF r_origem == 'arame'
      IF vsec == Lower( 'circular' )
         vldradial := 0
         vldaxial  := 0
         vespirasr := 0
      ELSEIF vsec == Lower( 'retangular' )
         vd_arame  := 0
         vespirasc := 0
      ENDIF
   ENDIF
	   IF r_origem # 'arame'
	      varteftdim := Space( 30 )
      varteftvol := 0
      varteftmas := 0
      voldartfmas := 0
      voldartfvol := 0
	      IF r_origem # 'material'
         vtiposecao := Space( 10 )
         vtiposecesc := 0
         voldsecao  := ''
      ENDIF
	      vd_arame   := 0
      vldradial  := 0
      vldaxial   := 0
      vespiras   := 0
      vd_extern2 := 0
      vd_medio2  := 0
      vd_intern2 := 0
      vd_externo := 0
      vd_medio   := 0
      vd_interno := 0
      vhaste1    := 0
      vhaste2    := 0
      varteftdim := Space( 30 )
      varteftvol := 0
      varteftmas := 0
   ENDIF
	   vpespecif  := 0
   vdesenvol  := 0
   vvolume    := 0
   vmassa     := 0
   varea      := 0
   vcustosec  := 0
   vforneced  := Space( 30 )
   v_pesopedd := 0
   vc_matprim := 0
   vlotminmp  := 0
	   ogetvlotminmp:refresh()
   os_forsel_2121:refresh()
   os_vcusmp_2131:refresh() // custo do material por kilo na seleç
   ogetvldradial:refresh()
   ogetvldaxial:refresh()
   ogetvd_arame:refresh()
   ogetvespirasr:refresh()
   ogetvespirasc:refresh()
   ogetvd_extern2:refresh()
   ogetvd_medio2:refresh()
   ogetvd_intern2:refresh()
   ogetvhaste1:refresh()
   ogetvhaste2:refresh()
   ogetvmaterial:refresh()
   ogetvarteftdim:refresh()
   ogetvarteftvol:refresh()
   ogetvarteftmas:refresh()
   odlgipl:update()
   RETU .T.
	// *************************
	STAT FUNC fchkrepet( c_mod )
	// *************************
   LOCAL n_ordem   := ( Planilha )->( dbOrderInfo( 5 ) )
   LOCAL nregistro := ( Planilha )->( RecNo() )
   LOCAL l_ret     := .F.
	   vcliente   := PadR( AllTrim( vcliente ), 30 )
   vdesenho   := PadR( AllTrim( vdesenho ), 30 )
   vdesmestre := PadR( AllTrim( vdesmestre ), 30 )
   vdescricao := PadR( AllTrim( vdescricao ), 40 )
   vitem      := StrZero( Val( vitem ), 10, 0 )
	   IF c_mod == 'revisao'
      RETU .T.
   ENDIF
	   IF Empty( vcliente )   .OR. ;
         Empty( vdesenho )   .OR. ;
         Empty( vdesmestre )
      RETU .T.
   ENDIF
	   ( Planilha )->( dbSetOrder( 'PCLDSDMI' ) )
	   IF ( Planilha )->( dbSeek( vcliente + vdesenho + vdesmestre + vitem ) ) .AND. ( Planilha )->( RecNo() ) != nregistro
      IF msgnoyes( 'A planilha de nº ' + ;
            trans( ( Planilha )->nridplan, '@r 9999/99-99' ) + ;
            ' do mesmo cliente utiliza mesmo nº de desenho, mesmo nº de des.mestre e mesmo nº deítem! ' + CRLF + ;
            'Deseja continuar com este registro ?', ;
            'Responda a pergunta abaixo' )
	         l_ret := .T.
      ELSE
         l_ret := .F.
      ENDIF
   ELSE
      l_ret := .T.
   ENDIF
	   ( Planilha )->( dbSetOrder( n_ordem ) )
   ( Planilha )->( dbGoTop() )
   ( Planilha )->( dbGoto( nregistro ) )
	   RETU l_ret
	// ************************************
	STAT FUNC fvalidcel( vmodus, odlgantes )
	// ************************************
   LOCAL vceltemp := vcelula
   PRIVA i, z
	   IF vmodus == 'redadoscel'
      voldcelula := Space( 4 )
   ENDIF
	   IF Val( vcelula ) <= 0
      msgalert( 'A informação da célula de fabricação é obrigatória!', 'Atenção!' )
      voldcelula := Space( 4 )
      IF vmodus # 'revisao'
         resetcel()
      ENDIF
      ogetvcelula:refresh()
      ogetvcelula:setfocus()
      odlgipl:update()
      RETU .F.
   ELSE
      IF vmodus == 'inclusao'
         resetcel()
         vcelula := vceltemp
      ENDIF
   ENDIF
	
   IF fchkdtobrig()
	      xx      := .F.
      idtecla :=  0
	      vcelula := PadL( AllTrim( Str( Val( vcelula ) ) ), 4, '0' )
	      IF Empty( voldcelula )
         voldcelula := vcelula
      ENDIF
	      IF vcelula # voldcelula .AND. vmodus # 'revisao'
         resetcel( vmodus )
         odlgipl:update()
      ENDIF
	      IF vmodus == 'revisao' .AND. vcelula # ( Planilha )->celula
         IF simnao( 'Voce está modificando a célula de fabricação previamente registrada!' + CRLF + ;
               'Se continuar: As operações registradas anteriormente serão apagadas!' + CRLF + ;
               'Deseja continuar assim mesmo?' )
	            resetcel( 'trocacel' )
            FOR i = 1 TO 30
               z := StrZero( i, 2 )
               w := StrZero( i, 2 ) + 'i'
               voperacao&z := voperacao&w := Space( 20 )
            NEXT
            getsplop( @odlgipl, 'trocacel' ) // desativa todos os gets da celula
            odlgipl:update()
            voldcelula := vcelula
         ELSE
            dadoscel()
            vcelula    := ( Planilha )->celula
            voldcelula := Space( 4 )
            ogetvcelula:refresh()
            ogetvcelula:setfocus()
            odlgipl:update()
            RETU .F.
         ENDIF
	      ELSEIF vmodus == 'revisao' .AND. vcelula = ( Planilha )->celula
	         dadoscel()
         voldcelula := Space( 4 ) // 11.03
         ogetvcelula:refresh()
         ogetvcelula:setfocus()
         odlgipl:update()
	      ENDIF
	      voldcelula := vcelula
	      IF conferin( 'celulas', 'celulas', vcelula, 4, 'celula', Upper( 'getspla' ), vmodus )
         // conferin : Confere se a celula ja esta cadastrada
         // se sim : registra as operaçoes da célula
         // se nÃo : solicita cadastro e captura das operaçoes
	         if( l_testando, msgwait( 'testar 5100 com diam > 1 ',, 1 ), )
	            IF vd_arame <= 1 .AND. vcelula == '5100'
               msgalert( 'Para o diâmetro informado utilize a célula 5000', 'Atenção' )
               vcelula    := '5000'
               voldcelula := Space( 4 )
               resetcel()
               ogetvcelula:refresh()
               ogetvcelula:setfocus()
               odlgantes:update()
               RETU .F.
            ELSEIF vd_arame > 1 .AND. vcelula == '5000'
               msgalert( 'Para o diãmetro informado utilize a célula 5100', 'Atenção' )
               vcelula    := '5100'
               voldcelula := Space( 4 )
               resetcel()
               ogetvcelula:refresh()
               ogetvcelula:setfocus()
               odlgantes:update()
               RETU .F.
            ELSEIF vd_arame <= 4 .AND. vcelula == '3100'
               msgalert( 'Para o diâmetro informado utilize a célula 3000', 'Atenção' )
               vcelula    := '5100'
               voldcelula := Space( 4 )
               resetcel()
               ogetvcelula:refresh()
               ogetvcelula:setfocus()
               odlgantes:update()
               RETU .F.
            ELSEIF vd_arame > 4 .AND. vcelula == '3000'
               msgalert( 'Para o diãmetro informado utilize a célula 3100', 'Atenção' )
               vcelula    := '3100'
               voldcelula := Space( 4 )
               resetcel()
               ogetvcelula:refresh()
               ogetvcelula:setfocus()
               odlgantes:update()
               RETU .F.
            ENDIF
	
            // Custo Mat.Prima por milheiro = Massa da mola x custo da mat.prima x 1000pçs
	            IF ! Empty( vlotminmp )
	               IF v_pesopedd < vlotminmp
	                  vc_maTprim := ( vcustosec * vlotminmp / vquantpedd ) * 1000
	               ELSEIF v_pesopedd >= vlotminmp
	                  // Custo Mat.Prima por milheiro = Massa da mola x custo da mat.prima x 1000pçs
                  // como o calculo da massa está em grama deve-se dividi-la por 1000 para transforma-la em kg
	                  vc_matprim := ( vmassa / 1000 ) * vcustosec * 1000
	               ENDIF
	            ELSE
	               // Custo Mat.Prima por milheiro = Massa da mola x custo da mat.prima x 1000pçs
               // como o calculo da massa está em grama deve-se dividi-la por 1000 para transforma-la em kg
               vc_matprim := ( vmassa / 1000 ) * vcustosec * 1000
	            ENDIF
	
            // Peso total do pedido = qtd peças total do pedido x peso da mola
            v_pesopedd := ( vquantpedd * 1000 ) * ( vmassa / 1000 )
	            // Variações da quantidade original caso não tenham sido informadas as quatro quantidades
            IF Empty( vquantped2 ) .OR. ;
                  Empty( vquantped3 ) .OR. ;
                  Empty( vquantped4 ) .OR. ;
                  Empty( vquantped5 )
	               vcalcqtd := vquantpedd * 1000
               vk       := 10 ^ ( Len( AllTrim( Str( Int( vcalcqtd ) ) ) ) - 1 )
	               FOR i = 2 TO 5
                  z = AllTrim( Str( i ) )
                  vquantped&z := ( ( Int( vcalcqtd / vk ) * vk ) + ( ( i - 1 ) * vk ) ) / 1000
                  v_pesoped&z := ( vquantped&z * 1000 ) * ( vmassa / 1000 )
               NEXT
	            ELSE
	               v_pesoped2 := ( vquantped2 * 1000 ) * ( vmassa / 1000 )
               v_pesoped3 := ( vquantped3 * 1000 ) * ( vmassa / 1000 )
               v_pesoped4 := ( vquantped4 * 1000 ) * ( vmassa / 1000 )
               v_pesoped5 := ( vquantped5 * 1000 ) * ( vmassa / 1000 )
	            ENDIF
	            os_tpadra_4201:refresh()
            os_hrmqen_4301:refresh()
            os_hrmqre_4401:refresh()
            os_hrmaes_4501:refresh()
            ogetvpadraoenr:refresh()
            ogetvpadraoestm:refresh()
            ogetvhrmaqerl:refresh()
            ogetvhrmaqest:refresh()
	            getcelul( vmodus, odlgipl ) // ativa os gets das operações da célula escolhida
            precalc()
            voldcelula := vcelula
            odlgipl:gonextctrl( ogetvcelula:hwnd )
            RETU .T. // vai para a captura dos dados da planilha referente a celula selecionada
         ELSE
            vcelula := Space( 4 )
            ogetvcelula:refresh()
            ogetvcelula:setfocus()
            odlgipl:update()
            RETU .F.
         ENDIF
      ENDIF
	      IF vmodus # 'revisao'
         vcelula    := Space( 4 )
      ENDIF
      voldcelula := Space( 4 )
      ogetvcelula:refresh()
      ogetvcelula:setfocus()
      odlgipl:update()
      RETU .F.
	/*
******************
stat func fmkpplan
******************
   if empty(vtaxamkp)
      retu .f.
   endif
	   vtotvdpla := vCusTotPla * vtaxamkp
	   // @ 24,61 say trans(vtaxamkp,'@ke 9.999')   color 'gr+/b'
   // @ 24,67 say vtotvdpla picture   '@e 99,999.99'  color 'r+/b'
   // maximo()  // CONCLUIR
retu .t.
*/
	// *********************
STAT FUNC fsopratestes
	// *********************
	// ***************************************************
// *  PREDEFINIÇÃO DE VARIAVEIS PARA TESTE AUTOMáTICO
// mudar parametro para .t. se desejar utilizar esta
// função.
// ***************************************************
	   msgwait( 'dados só para testes',, 1 )
	   vfabfornmp  := .T.
   vtipomola   := 1
   vtiposecao  := PadR( 'CIRCULAR', 10 )
   vtiposecesc := 1
   vtipoforesc := 1
   vwmola      := 4
   vdtregsit   := Date()
   vsituacao   := 'G' // AGUARDANDO APROV
   vdocorcam   := 'orç.: ' + vnridplan // nº documento do orçamento // so deve ser registrados em revisoes
   vcliente    := PadR( '3 F DO BRASIL', 30 )
   vdesenho    := PadR( '123456789-ABC', 30 )
   vitem       := 'ITEM-10-AB'
   vdesmestre  := PadR( '123456789-ABC-DES MESTR', 30 )
   vdescricao  := PadR( 'MOLA DO FUSCA', 40 )
   vidpcfabr   := '123456'
   vidpcclie   := '12345678890123456789012345'
   vquantpedd  := 10
   vquantped2  := 20
   vquantped3  := 30
   vquantped4  := 40
   vquantped5  := 50
   vvolumeano  := 100
	   vseltipemb  := 1 // posição invisivel
   vseltipembi := 1 // posição invisivel tempor.
   vtipoembl   := Upper( 'P' )
   vmaterial   := PadR( 'DIN 17223 CLASSE B', 40 )
   vmatprimini := vmaterial
   vlotminmp   := 0
   vdeveolear  := 'S'
   vdevetrata  := 'S'
   vpespecif   := 7850
   vd_arame    := .5 // 1
   vd_medio2   := vd_medio   := 20
   vd_extern2  := vd_externo := 20.5
   vd_intern2  := vd_interno := 19.5
   vespiras    := 10 // 20
   vhaste1     := 4 // 10
   vhaste2     := 6 // 20
   vforneced   := PadR( 'BELGO MINEIRA', 30 )
   vcustosec   := 13.4
   vdesenvol   := ( pi() *  vd_medio * vespiras ) + vhaste1 + vhaste2
   varea       :=  pi() * ( vd_arame ^ 2 ) / 4
   vvolume     := vdesenvol * varea
   vmassa      := ( vvolume * vpespecif / 10 ^ 6 ) / ( 1 - ( vpercperdpp / 100 ) )  // .95 para gramas e com refugo de 5%
   v_pesopedd  := ( vquantpedd * 1000 ) * ( vmassa / 1000 )
   v_pesoped2  := ( vquantped2 * 1000 ) * ( vmassa / 1000 )
   v_pesoped3  := ( vquantped3 * 1000 ) * ( vmassa / 1000 )
   v_pesoped4  := ( vquantped4 * 1000 ) * ( vmassa / 1000 )
   v_pesoped5  := ( vquantped5 * 1000 ) * ( vmassa / 1000 )
   vcelula     := '1000'
   vpercperdpp := 5
   vanalista   := 'EDC'
   vsolicita   := 'EDMAN D.C.'
   vc_matprim  := 13.8777
	   odlgipl:update()
   ogetvcelula:setfocus()
	RETU .T.
	// **********************
	STAT FUNC fchkdtobrig()
	   // **********************
   // CHECA SE OS DADOS OBRIGATORIOS PARA POSSIBILITAR A REALIZAÇÃO
   // DOS CÁLCULOS FORAM INFORMADOS.
	   IF Empty( vquantpedd )
      msgalert( 'Informe a quantidade total de peças solicitadas!', 'Atenção!' )
      ogetvquantpedd:setfocus()
      RETU .F.
   ENDIF
	   IF vfabfornmp .AND. AllTrim( Str( vtipomola ) ) $ '123'
	      IF Empty( vmassa ) .OR. Empty( vcustosec )
         msgalert( 'Informe todos os dados da matéria-prima e/ou dimensões da mola!', 'Atenção!' )
         ogetvmaterial:setfocus()
         RETU .F.
      ENDIF
   ELSEIF vfabfornmp .AND. vtipomola == 4
      IF varteftmas <= 0 .OR. varteftvol <= 0
         msgalert( 'Informe todos os dados de massa (peso) ou volume do ARTEFATO!', 'Atenção!' )
         RETU .F.
      ENDIF
   ENDIF
	   IF !vfabfornmp .AND. AllTrim( Str( vtipomola ) ) $ '123' .AND. Empty( vmassa )
      msgalert( 'Informe todos os dados da matéria-prima e/ou dimensões da mola!', 'Atenção!' )
      ogetvmaterial:setfocus()
      RETU .F.
   ENDIF
	RETU .T.
	// **********************
	STAT FUNC fddanterior() // * RETORNA OS DADOS DA CELULA REGISTRADOS ORIGINALMENTE
	   // **********************
   IF  simnao( 'Deseja retornar aos dados registrados das "OPERAÇÕES DESTA CÉLULA" antes das modificações?' )
	      vcelula := ( Planilha )->celula
	      voldcelula := Space( 4 )
	      resetcel( 'redadoscel' )
	      FOR i = 1 TO 30
         z := StrZero( i, 2 )
         w := StrZero( i, 2 ) + 'i'
         voperacao&z := voperacao&w := Space( 20 )
      NEXT
	      dadoscel()  // captura dados originais de célula
	      getsplop( @odlgipl, 'redadoscel' ) // desativa todos os gets da celula
	      voldcelula := Space( 4 )
	      odlgipl:update()
	   ENDIF
	RETU .T.
	// *********************
	STAT FUNC mudoucusto()
	   // *********************
   IF ( AllTrim( Upper( vtiposecao ) ) == Upper( 'CIRCULAR' )  .AND. ;
         vd_arame  = ( Planilha )->d_arame  .AND. ;
         vmaterial = ( Planilha )->material .AND. ;
         vforneced = ( Planilha )->forneced .AND. ;
         vcustosec # ( Planilha )->custosec     );
         .OR. ;
         ( AllTrim( Upper( vtiposecao ) ) == Upper( 'RETANGULAR' ) .AND. ;
         vldradial = ( Planilha )->ldradial .AND. ;
         vldaxial  = ( Planilha )->ldaxial  .AND. ;
         vmaterial = ( Planilha )->material .AND. ;
         vforneced = ( Planilha )->forneced .AND. ;
         vcustosec # ( Planilha )->custosec     )
	      IF simnao( 'O custo atual desta matéria-prima para a dimensão informada foi posteriormente "REAJUSTADO" !' + CRLF + CRLF + ;
            'Deseja "MANTER" o custo oferecido antes desta revisão? ' + CRLF + CRLF + ;
            'Custo mais recente..........: R$/kg ' + AllTrim( trans( vcustosec, '@ez 99,999.99' ) ) + CRLF + CRLF + ;
            'Custo Antes desta revisão...: R$/kg ' + AllTrim( trans( ( Planilha )->custosec, '@ez 99,999.99' ) ) )
	         vcustosec := ( Planilha )->custosec
         os_vcusmp_2131:refresh()
         RETU .F.
	      ELSE
	         // caso contrario o vcustosec já está ajustado
         os_vcusmp_2131:SetColor( cor_vermt, cor_verdf )
         os_vcusmp_2131:setfont( ofntbold )
         os_vcusmp_2131:refresh()
         RETU .T.
	      ENDIF
	   ENDIF
	RETU .F.
// FIM

Regards, saludos.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...