home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 16 / CD_ASCQ_16_0994.iso / news / 4611 / fw16d.ins / SAMPLES / WBANCO.PRG < prev   
Text File  |  1994-05-14  |  16KB  |  591 lines

  1.  
  2. // Ante todo darte las gracias por esta deferencia que tienes hacia mí
  3. // me gustaría poder ayudarte en lo que sea... lo pienso un montón de
  4. // veces !!. De cualquier modo cuenta con migo para lo que quieras...
  5.  
  6. // Espero que alguna idea de éste engendro te guste y la tomes para
  7. // tus programas.
  8.  
  9. // Gracias por estar ahí
  10.  
  11. // Tu amigo Manolo de Sevilla
  12.  
  13.  
  14. //-----------------------------------------------------------------------//
  15. //                                                                       //
  16. //      Versión del programa BANCO52 del MS-DOS ahora en Windows         //
  17. //                                                                       //
  18. //      FiveWin 1.5                                                      //
  19. //-----------------------------------------------------------------------//
  20.  
  21. #include "FiveWin.ch"
  22.  
  23. // Antonio lo declaro todo STATIC para no tenerlos que pasar en las funciones y
  24. // sean visibles en toda la aplicación:
  25.  
  26. STATIC  oWnd
  27.  
  28. STATIC  cIncPath,;
  29.         cLibPath
  30.  
  31. STATIC  wBnCod,;
  32.         wBcNom,;
  33.         wBcSuc,;
  34.         wBcCue,;
  35.         wBcTe1,;
  36.         wBcTe2,;
  37.         wBcAti,;
  38.         wBnSal
  39.  
  40. STATIC nCod,;
  41.        nImp,;
  42.        cEstado
  43.  
  44. STATIC  wHnOpe,;
  45.         wHnCod,;
  46.         wHdFec,;
  47.         wHcDes,;
  48.         wHnImp
  49.  
  50. // Obgetos GET's:
  51.  
  52. STATIC  oBnCod,;
  53.         oBcNom,;
  54.         oBcSuc,;
  55.         oBcCue,;
  56.         oBcTe1,;
  57.         oBcTe2,;
  58.         oBcAti,;
  59.         oBnSal
  60.  
  61. STATIC  oHnOpe,;
  62.         oHnCod,;
  63.         oHdFec,;
  64.         oHcDes,;
  65.         oHnImp
  66.  
  67. // Objetos BUTTONS:
  68.  
  69. Static oBBusca,;
  70.        oBMidif,;
  71.        oBAltas,;
  72.        oBBajas,;
  73.        oBPrime,;
  74.        oBUltim,;
  75.        oBSalir
  76.  
  77. // Objetos BROWSE's:
  78.  
  79. STATIC oLbx
  80.  
  81. //----------------------------------------------------------------------------//
  82.  
  83. FUNCTION Main()
  84.  
  85.     LOCAL oBrush, oIco, oBar
  86.     LOCAL hBorland := LoadLibrary( ".\BWCC.dll" )
  87.  
  88.     cEstado := "I"
  89.  
  90.     nCod    := 0
  91.     nImp    := 0
  92.  
  93.     wBnCod  :=  0
  94.     wBcNom  :=  Space(35)
  95.     wBcSuc  :=  Space(35)
  96.     wBnSal  :=  0
  97.  
  98.     wHnOpe  :=  0
  99.     wHnCod  :=  0
  100.     wHdFec  :=  CTod("  /  /  ")
  101.     wHcDes  :=  Space( 20 )
  102.     wHnImp  :=  0
  103.  
  104.  
  105.     SET RESOURCES TO ".\WBanco.dll"
  106.     SET 3DLOOK ON
  107.  
  108.     DEFINE BRUSH oBrush STYLE TILED
  109.  
  110.     DEFINE WINDOW oWnd FROM 03, 03 TO MaxRow() - 2, MaxCol() - 3 ;
  111.         TITLE "Windows Bancos" ;
  112.         BRUSH oBrush ;
  113.         MENU BuildMenu()
  114.  
  115.     SET MESSAGE OF oWnd TO "Progrma realizado por M.E.S."
  116.  
  117.     USE D_Bancos    INDEX D_BaCodi  ALIAS BB NEW
  118.     USE D_Histor    INDEX D_HiOper,;
  119.                           D_HiFech,;
  120.                           D_HiCodi  ALIAS HH NEW
  121.  
  122.     ACTIVATE WINDOW oWnd MAXIMIZED
  123.  
  124.     DbCloseAll( )
  125.  
  126.     SET RESOURCES TO
  127.  
  128.     FreeLibrary( hBorland )
  129.  
  130. RETURN nil
  131.  
  132. //----------------------------------------------------------------------------//
  133.  
  134. FUNCTION BuildMenu()
  135.  
  136.    LOCAL oMenu
  137.  
  138.    MENU oMenu
  139.         MENUITEM "&Bancos"      ;
  140.             ACTION Bancos() MESSAGE "Mantenimiento del ficero de Cuentas"
  141.         MENUITEM "&Movimientos" ;
  142.             ACTION Movimientos() MESSAGE "Mantenimiento de Movimientos en las cuentas"
  143.         MENUITEM "&Fin"         ;
  144.             ACTION Fin() MESSAGE OemToAnsi( "Finalizar la ejecución del programa." )
  145.    ENDMENU
  146.  
  147. RETURN oMenu
  148.  
  149. //----------------------------------------------------------------------------//
  150.  
  151. FUNCTION Bancos()
  152.  
  153.     MsgInfo( OemToAnsi( "Aquí va el mantenimiento de bancos" ) )
  154.  
  155. RETURN nil
  156.  
  157.  
  158. //-----------------------------------------------------------------------//
  159.  
  160. FUNCTION Movimientos()
  161.  
  162.     LOCAL oDlg
  163.  
  164.     DEFINE DIALOG oDlg NAME "MOVIMIENTOS"
  165.  
  166.     HRegAVar()
  167.     RegAvar()
  168.  
  169.  
  170. //  Para los datos del maestro:
  171.  
  172.     REDEFINE SAY oBnCod PROMPT AllTrim( Str( wBnCod ) ) ID 10 OF oDlg CENTERED
  173.     REDEFINE SAY oBcNom PROMPT wBcNom ID 20 OF oDlg CENTERED
  174.     REDEFINE SAY oBcSuc PROMPT wBcSuc ID 30 OF oDlg CENTERED
  175.     REDEFINE SAY oBcCue PROMPT wBcSuc ID 40 OF oDlg CENTERED
  176.     REDEFINE SAY oBnSal PROMPT wBnSal ID 50 OF oDlg CENTERED
  177.  
  178.  
  179. // Movimientos en el historico:
  180.  
  181.     REDEFINE LISTBOX oLbx FIELDS ID 100 ;
  182.         OF oDlg ;
  183.         ON CHANGE Refresca();
  184.         FIELDSIZES 70,               50,        70,       250,        90 ;
  185.         HEAD      "Oper.",OemToAnsi("Cód."),"Fecha","Concepto","Importe"
  186.  
  187.  
  188. // Registro del histórico activo:
  189.  
  190.     REDEFINE SAY oHnOpe PROMPT AllTrim( Str( wHnOpe ) ) ID 60 ;
  191.              OF oDlg CENTERED
  192.  
  193.     REDEFINE GET oHnCod VAR wHnCod ID 101 ;            // Antonio las PICT
  194.         PICTURE "999" VALID( VHCod( wHnCod ) ) OF oDlg // no van bien sobre
  195.     REDEFINE GET oHdFec VAR wHdFec ID 102 OF oDlg      // la de la fecha (prueba
  196.     REDEFINE GET oHcDes VAR wHcDes ID 103 ;            // a meter una errónea y
  197.         PICTURE "@!" OF oDlg                           // dale a ENTER |:-/
  198.     REDEFINE GET oHnImp VAR wHnImp ID 104 ;            // Aquí he tenido que quitar
  199.         PICTURE "999999999" OF oDlg ;                  // PICT "@E 999,999,99".
  200.         VALID( Gestor( ) )                              // Para que no meta
  201.                                                         // sin ser controlados
  202.                                                         // por los 'Buttones'...
  203. // Botones de acciones:
  204.  
  205.     REDEFINE BUTTON oBBusca ID 105 OF oDlg ;
  206.         ACTION  HBusca( )                               // OK!!  :-)
  207.     REDEFINE BUTTON oBMidif ID 106 OF oDlg ;
  208.         ACTION  ( cEstado := "M", Acepta( oDlg ) )      // KO!! 8-(
  209.     REDEFINE BUTTON oBAltas ID 107 OF oDlg ;
  210.         ACTION  ( cEstado := "A", Acepta( oDlg ) )      // KO!! 8-(
  211.     REDEFINE BUTTON oBBajas ID 108 OF oDlg ;
  212.         ACTION  HBorraReg( )                            // OK!! :-)
  213.     REDEFINE BUTTON oBPrime ID 109 OF oDlg ;            //
  214.         ACTION  IrPrimero( )                            // OK!! :-) con los bug
  215.     REDEFINE BUTTON oBUltim ID 110 OF oDlg ;            //            del
  216.         ACTION  IrUltimo( )                             // OK!! :-) BROWSE
  217.     REDEFINE BUTTON oBSalir ID 111 OF oDlg ;
  218.         ACTION If( MsgYesNo( OemToAnsi( "¿ Desea terminar ?" ) ), oDlg:End( ), )
  219.  
  220.  
  221.     ACTIVATE DIALOG oDlg CENTERED
  222.  
  223. RETURN nil
  224.  
  225.  
  226. //-----------------------------------------------------------------------//
  227.  
  228. FUNCTION Fin()
  229.  
  230.     If( MsgYesNo( OemToAnsi( "¿ Desea terminar ?" ) ),;
  231.          oWnd:End(),MsgInfo("Sigue"))
  232.  
  233. RETURN nil
  234.  
  235.  
  236. //-------------------------------------------------------------------------//
  237.  
  238. FUNCTION Acepta( oDlg )
  239.  
  240.     if cEstado == "A"               // Si es un alta
  241.         VaciaVar()                  // vacio el buffer de memoria del maestro
  242.         HVaciaVar()                 // y del historico y luego
  243.         RefrescaGets()              // refresco los oGET's   OK!!
  244.     else                            // si no es una modificacion
  245.  
  246.         HRegAVar()                  // Muevo el registro al buffer de memoria
  247.         RegAvar()                   // Historico y maestro
  248.         RefrescaGets()              // refresco oGET's
  249.  
  250.         nCod := wHnCod              // Capturo codigo de banco y el importe para
  251.         nImp := wHnImp              // saber si se han modificado
  252.  
  253.     endif
  254.  
  255.     Desactiva( )                    // Desactivo todo
  256.  
  257.     oHnCod:SetFocus()           // el foco aqui, me tengo que venir con el
  258.                                 // ratón !!!!!!!! ¿Qué hago mal?
  259. return nil
  260.  
  261. //-------------------------------------------------------------------------//
  262. // Función para controlar que los datos que se metan eb los GETS son buenos
  263. // por que vienen de ALTAS ó MODIFICACION.
  264. //  ¿ Cómo pregunto que me estoy saliendo para que no me dé el mensaje?
  265. // ya que el FOCO se queda ahí después de un ALTA o MODIF.
  266. //
  267. FUNCTION Gestor( )
  268.  
  269. //    LOCAL lVerdad := .F.
  270.  
  271.     if cEstado $ "AM"                   // Los algoritmos para actualizar el
  272.                                         // banco no están muy finos, pero de
  273.         //lVerdad := .T.                // ya me encargaré....
  274.  
  275.         if MsgYesNo( OemToAnsi( "¿ Esá seguro ?" ) )
  276.  
  277.             if cEstado == "A"
  278.  
  279.                 HH->( DbGoBottom() )
  280.                 wHnOpe := HH->H_nOpe + 1
  281.                 HH->( DbAppend() )
  282.                 HVarAReg()
  283.                 BB->B_nSal := BB->B_nSal + HH->H_nImp // Actualizo maestro
  284.  
  285.             elseif cEstado == "M"
  286.  
  287.                 HVarAReg()
  288.  
  289.                 if nCod != wHnCod  // Se ha modificado el banco:
  290.                     if BB->( DbSeek( nCod ) )  // Cambio Saldo Banco final
  291.                         BB->B_nSal := BB->B_nSal - HH->H_nImp
  292.                     else
  293.                         MsgInfo( "Se ha producido ERROR en banco final" )
  294.                     endif
  295.  
  296.                     if BB->( DbSeek( wHnCod ) )  // Cambio Saldo Banco inicial
  297.                         BB->B_nSal := BB->B_nSal + HH->H_nImp
  298.                     else
  299.                         MsgInfo(  "Se ha producido ERROR en banco inicial"  )
  300.                     endif
  301.                 endif
  302.  
  303.                 if nImp != wHnImp  // Se ha modificado el importe
  304.                     BB->B_nSal := BB->B_nSal - ( nImp - wHnImp )
  305.                 endif
  306.  
  307.                 HVarAReg()
  308.  
  309.             else
  310.                 MsgInfo( OemToAnsi( "Ha cancelado la modificación" ) )
  311.             EndIf
  312.  
  313.         endif
  314.  
  315.         Activa( )
  316.         oLbx:Refresh( )
  317.         Refresca( )
  318.         cEstado := "I"
  319.  
  320. // Si no ha pasado por botones que saque esto... ¡Pero como controlo
  321. // que me quiero ir por ejemplo después de un alta!
  322.  
  323.     else
  324.         MsgInfo( "Debe presionar uno de los botones ALTAS o MODIFICA" )
  325.         cEstado := "I"
  326.     endif
  327. // Hay veces que eto tampoco va, creo que interfiere tu protección
  328. // ya lo comprobaré.
  329.     oBBusca:setFocus( .T. )
  330.  
  331. RETURN .T. //lVerdad
  332.  
  333. //-----------------------------------------------------------------------//
  334. //-----------------------------------------------------------------------//
  335. //          Funciones secundarias
  336. //-----------------------------------------------------------------------//
  337. //-----------------------------------------------------------------------//
  338.  
  339. FUNCTION VaciaVar()
  340.  
  341.         wBnCod   :=  0
  342.         wBcNom   :=  Space(35)
  343.         wBcSuc   :=  Space(35)
  344.         wBnSal   :=  0
  345.  
  346. RETURN nil
  347.  
  348.  
  349. //-----------------------------------------------------------------------//
  350.  
  351. FUNCTION HVaciaVar()
  352.  
  353.         wHnOpe   :=  0
  354.         wHnCod   :=  0
  355.         wHdFec   :=  CTod("  /  /  ")
  356.         wHcDes   :=  Space( 20 )
  357.         wHnImp   :=  0
  358.  
  359. RETURN nil
  360.  
  361. //----------------------------------------------------------------------------//
  362. //        Pasa el actual valor de las variables al registro                   //
  363. //----------------------------------------------------------------------------//
  364. FUNCTION RegAVar()
  365.  
  366.     wBnCod   :=  BB->B_nCod
  367.     wBcNom   :=  BB->B_cNom
  368.     wBcSuc   :=  BB->B_cSuc
  369.     wBcCue   :=  BB->B_cCue
  370.     wBcTe1   :=  BB->B_cTe1
  371.     wBcTe1   :=  BB->B_cTe1
  372.     wBcAti   :=  BB->B_cAti
  373.     wBnSal   :=  BB->B_nSal
  374.  
  375. RETURN nil
  376.  
  377.  
  378. //--------------------------------------------------------------------------//
  379.  
  380. FUNCTION HVarAReg( )
  381.  
  382.     HH->H_nOpe :=   wHnOpe
  383.     HH->H_nCod :=   wHnCod
  384.     HH->H_dFec :=   wHdFec
  385.     HH->H_cDes :=   wHcDes
  386.     HH->H_nImp :=   wHnImp
  387.  
  388. RETURN( NIL )
  389.  
  390. //----------------------------------------------------------------------------//
  391. //        Pasa el actual valor de las variables al registro                   //
  392. //----------------------------------------------------------------------------//
  393.  
  394. FUNCTION HRegAVar( )
  395.  
  396.      wHnOpe  :=  HH->H_nOpe
  397.      wHnCod  :=  HH->H_nCod
  398.      wHdFec  :=  HH->H_dFec
  399.      wHcDes  :=  HH->H_cDes
  400.      wHnImp  :=  HH->H_nImp
  401.  
  402. RETURN( NIL )
  403.  
  404. //--------------------------------------------------------------------------//
  405. //          Valida que el código este en D_Bancos.dbf                       //
  406. //--------------------------------------------------------------------------//
  407.  
  408. FUNCTION VHCod( Cod )
  409.  
  410.     LOCAL lVerdad := .F.
  411.  
  412.     if cEstado $ "AM"
  413.  
  414.         if BB->(DbSeek( Cod ))
  415.             lVerdad :=  .T.
  416.         else
  417.             MsgInfo( OemToAnsi( "No existe ese Código de Banco" ) )
  418.             lVerdad :=  .F.
  419.         endif
  420.     else
  421.         MsgInfo( "Debe presionar el boton de ALTAS o MODIFICACIONES" )
  422.         lVerdad := .T.
  423.     endif
  424.  
  425. RETURN lVerdad
  426.  
  427.  
  428. //---------------------------------------------------------------------------//
  429.  
  430. FUNCTION Refresca( )
  431.  
  432.  
  433.     IF BB->( DbSeek( HH->H_nCod ) )
  434.         wBnCod   :=  BB->B_nCod
  435.         wBcNom   :=  OemToAnsi( BB->B_cNom )
  436.         wBcSuc   :=  OemToAnsi( BB->B_cSuc )
  437.         wBcCue   :=  OemToAnsi( BB->B_cCue )
  438.         wBnSal   :=  BB->B_nSal
  439.     else
  440.         wBnCod   := 0
  441.         wBcNom   := "Banco Desconocido"
  442.         wBcSuc   := Space(35)
  443.         wBnSal   := 0
  444.     ENDIF
  445.  
  446.     HRegAVar()
  447.  
  448.       oBnCod:SetText( AllTrim( Str( wBnCod ) ) )
  449.       oBcNom:SetText( wBcNom )
  450.       oBcSuc:SetText( wBcSuc )
  451.       oBcCue:SetText( wBcCue )
  452.       oBnSal:SetText( wBnSal )
  453.  
  454.       oHnOpe:SetText( AllTrim( Str( wHnOpe) ) )
  455.  
  456.       oHnCod:Refresh()
  457.       oHdFec:Refresh()
  458.       oHcDes:Refresh()
  459.       oHnImp:Refresh()
  460.  
  461. RETURN nil
  462.  
  463.  
  464. //--------------------------------------------------------------------------//
  465.  
  466. FUNCTION RefrescaGets()
  467.  
  468.       oHnCod:Refresh()
  469.       oHdFec:Refresh()
  470.       oHcDes:Refresh()
  471.       oHnImp:Refresh()
  472.  
  473. RETURN nil
  474.  
  475.  
  476. //--------------------------------------------------------------------------//
  477.  
  478. FUNC IrPrimero( )
  479.  
  480.     HH->( DbGoTop() )
  481.     oLbx:Refresh()
  482.     Refresca()
  483.  
  484. RETURN nil
  485.  
  486. //--------------------------------------------------------------------------//
  487.  
  488. FUNC IrUltimo( )
  489.  
  490.     HH->( DbGoBottom() )
  491.     oLbx:Refresh()
  492.     Refresca()
  493.  
  494. RETURN nil
  495.  
  496. //----------------------------------------------------------------------------//
  497.  
  498. FUNCT HBorraReg( )
  499.  
  500.     If MsgYesNo( OemToAnsi("¿Borra la operación: " + ;
  501.                         AllTrim( Str( HH->H_nOpe ) ) + " ?") )
  502.         if !Deleted( )
  503.         **********************************************************
  504.             // Repone el saldo anterior:                       //*
  505.             BB->B_nSal := BB->B_nSal - HH->H_nImp              //*
  506.         **********************************************************
  507.             HH->( DbDelete() )
  508.             PACK
  509.         endif
  510.         oLbx:Refresh( )
  511.         Refresca( )
  512.     endif
  513.  
  514. RETURN nil
  515.  
  516. //-----------------------------------------------------------------------//
  517.  
  518. FUNCT HBusca( )
  519.  
  520.     LOCAL oDlg2
  521.     LOCAL oValor
  522.     LOCAL nValor := 0
  523.     LOCAL nPres  := 0
  524.  
  525.     DEFINE DIALOG oDlg2 NAME "HBUSCAR"
  526.  
  527.         REDEFINE SAY ID 100 OF oDlg2 CENTERED
  528.         REDEFINE GET oValor VAR nValor ID 101 OF oDlg2
  529.  
  530.         REDEFINE BUTTON ID 102 OF oDlg2 ACTION ( oDlg2:End( ), nPres := 1 )
  531.         REDEFINE BUTTON ID 103 OF oDlg2 ACTION oDlg2:End( )
  532.  
  533.     ACTIVATE DIALOG oDlg2 CENTERED
  534.  
  535.     If nPres == 1
  536.  
  537.         if HH->( DbSeek( nValor ) )
  538.             oLbx:Refresh( )
  539.             Refresca( )
  540.         else
  541.             HH->( DbSeek( wHnOpe ) )
  542.  
  543.             ////////////////////////////////////////////////
  544.             oLbx:Refresh()   // Por el fallo encontrado   //
  545.             Refresca()     // en el browse  ó ¿¿es mío??  //
  546.             ////////////////////////////////////////////////
  547.  
  548.             MsgInfo( OemToAnsi( "No existe el Nº de Operación " ) +;
  549.                                  AllTrim( Str( nValor ) ) )
  550.         endif
  551.     EndIf
  552.  
  553. RETURN nil
  554.  
  555. //--------------------------------------------------------------------------//
  556.  
  557. FUNCTION Desactiva( )
  558.  
  559.     oBBusca:disable()
  560.     oBMidif:disable()
  561.     oBAltas:disable()
  562.     oBBajas:disable()
  563.     oBPrime:disable()
  564.     oBUltim:disable()
  565.     oBSalir:disable()
  566.  
  567.     oLbx:disable()
  568.  
  569. RETURN nil
  570.  
  571. //--------------------------------------------------------------------------//
  572.  
  573. FUNCTION Activa( )
  574.  
  575.     oBBusca:enable()
  576.     oBMidif:enable()
  577.     oBAltas:enable()
  578.     oBBajas:enable()
  579.     oBPrime:enable()
  580.     oBUltim:enable()
  581.     oBSalir:enable()
  582.  
  583.     oLbx:enable()
  584.  
  585. RETURN nil
  586.  
  587.  
  588. //------------ EOF WBanco.PRG -------------------//
  589.  
  590.  
  591.