Программное обеспечение пункта обмена валюты банка
	
	
связаны  со  скелетом   человека,   обусловлены   длительными   статическими 
нагрузками, вызванными  плохой  организацией  рабочего  места  пользователя: 
неудобной  или  неподходящей  по  размерам   мебелью,   неудобным   взаимным 
расположением компонентов системы персонального компьютера  или  отсутствием 
достаточного  для  свободных  движений  и  смены   позы   места.   Неудачная 
организация клавиатуры, либо неудобная  конструкция  мыши  способны  вызвать 
“накапливание” заболеваний сухожилий, мышц и нервных окончаний. Кроме  того, 
возникновение болезней спины, шеи и рук специалисты объясняют тем,  что  при 
работе с клавиатурой компьютера пользователи с высокой  скоростью  повторяют 
одни и те же  движения  (типа  быстрых  нажатий  клавиш,  перемещения  мыши, 
наклонов  и  поворотов  головы  и  т.п.).   Каждое   нажатие   на   клавишу, 
естественно,  сопряжено  с  множественным  сокращением  мышц,   перемещением 
сухожилий вдоль костей и  соприкосновениями  их  с  внутренними  тканями.  В 
итоге из-за  чрезмерной  напряженности  работы  или  увлеченности  ею  могут 
развиваться болезненные и воспалительные процессы. 
   Кожные   заболевания   (лица)   связаны   в   основном   с   тем,    что 
наэлектризованный экран дисплея притягивает  частицы  взвешенной  в  воздухе 
пыли, так что вблизи него “качество” воздуха ухудшается и оператор  вынужден 
работать в более запыленной атмосфере. 
   На основе сказанного можно сформулировать определенные рекомендации  для 
пользователей персональных компьютеров с точки зрения  охраны  их  труда.  В 
принципе,  основной  подход  к  решению  проблем  такого  рода  сводится   к 
установлению строгого контроля за  соответствием  аппаратных  и  программных 
средств,  а  также  условий  их  эксплуатации  эргономическим   требованиям. 
Приведем некоторые из них: 
       . соблюдение ограничений по медицинским показаниям; 
       . внимательное отношение к характеристикам дисплеев; 
       . правильная организация рабочего места оператора; 
       . правильная организация рабочего времени оператора. 
   Рассматривая  подробно  каждую  из  них,  можно  привести   рекомендации 
частного характера: 
       .  необходимо  соблюдать  ограничения  на  работу   с   персональными 
         компьютерами  для  служащих,   страдающих   заболеваниями   опорно- 
         двигательного аппарата, глаз, кожи, а также для беременных женщин; 
       .  предпочтительнее  использовать  дисплеи  с   высокой   разрешающей 
         способностью и размером экрана не менее  14”  (Hi-Resolution,  Non- 
         Interlaced, Low-Radiation); 
       . лучше выбирать  видеоадаптеры  с  высоким  разрешением  и  частотой 
         кадровой развертки не менее 70-72Гц; 
       . обязательно ставить на дисплеи экранные фильтры  с  антистатическим 
         покрытием,  в  несколько  раз   снижающие   утомляемость   глаз   и 
         концентрацию пылевых частиц в близи экрана монитора; 
       . сидеть не ближе 70 см от дисплея; 
       .  экран  дисплея  должен  быть  ориентирован  таким  образом,  чтобы 
         исключить блики от источников света; 
       . не  следует  располагать  дисплей  непосредственно  под  источником 
         освещения или вплотную с ним; 
       .  желательно,  чтобы  освещенность  рабочего  места   оператора   не 
         превышала 2/3 нормальной освещенности помещения; 
       . стена позади дисплея должна быть освещена примерно так же, как  его 
         экран; 
       . при размещении в одной комнате нескольких персональных  компьютеров 
         расстояние от рабочего места каждого оператора до задних и  боковых 
         стенок соседних персональных компьютеров должно составлять не менее 
         1.2м; 
       .  рабочее  место  должно  быть  оборудовано  так,  чтобы   исключить 
         неудобные позы и длительные статические напряжения тела; 
       . общее время  работы  с  дисплеем  не  должно  превышать  50%  всего 
         рабочего времени оператора; 
       . не следует превышать темп работы порядка 10 тысяч нажатий клавиш  в 
         час (примерно 1500 слов); 
       . при обычной работе  с  компьютером  необходимо  делать  15-минутные 
         перерывы через каждые 2 часа, а  при  интенсивной  работе  (  через 
         каждый час. 
   Помимо безопасности пользователя, необходимо сказать несколько слов и  о 
безопасности  компьютера  и,   что  особенно  важно,  безопасности   данных, 
хранящихся в нем. ПК, используемые  для  хранения  особо  важной  информации 
необходимо оборудовать устройствами бесперебойного питания,  поддерживающими 
питающее напряжение в течение некоторого времени при аварийных  ситуациях  в 
электрической сети. 
   Нельзя  загораживать  заднюю  стенку  системного   блока   или   ставить 
персональный компьютер вплотную к стене ( это приводит к  “тяжелому”  режиму 
охлаждения системного блока  и  его  перегреву.  То  же  самое  относится  к 
дисплею ( нельзя класть на него  бумаги,  книги  и  вообще  все,  что  может 
закрыть его вентиляционные отверстия. Пыль и  электроника  плохо  совместимы 
друг с  другом,  поэтому  необходимо  поддерживать  в  помещении  приемлемый 
пылевой режим. 
Заключение 
  В процессе работы над дипломным проектом был создан комплекс  программных 
средств для обеспечения работы пункта обмена валюты банка. Кроме  того  была 
разработана концепция проектирования информационно  -  справочных  систем  с 
применением функций экранного интерфейса, разработанных в рамках  дипломного 
проекта. Применение специализированных  функций  позволило  сократить  время 
разработки основного модуля программы и обеспечило высвобождение времени  на 
создание процедур обработки данных.  В дипломном  проекте  представлен  один 
из   множества   подходов   к   проектированию   программного    обеспечения 
информационного  плана,  дающий  возможность  на  ранних  этапах  разработки 
учесть все нюансы будущей программы, необходимый  набор  функций,  состав  и 
структуру баз данных, что в дальнейшем исключает  необходимость  переработки 
уже написанных компонентов программы. 
  Кроме  того  в  процессе  работы  были   подготовлены   рекомендации   по 
оборудованию рабочего места оператора ЭВМ, соблюдению норм и правил  ТБ  при 
работе  на  персональных  ЭВМ,   подсчитаны   экономические   характеристики 
разработки. 
  Данное  программное  обеспечение   находится   в   стадии   внедрения   в 
технологический процесс работы одного из финансовых учреждений города. 
Приложение 
Интерфейсные функции 
Функция вывода окна 
  Параметры: 
  координаты левого верхнего и правого нижнего угла окна, 
  [строка символов обрамления] 
  Function _OPEN_T 
  parameters Y1,X1,Y2,X2,SBOX 
  private XT1,XT2,XK2,SBOX 
  SBOX=iif(empty(SBOX).and.SBOX<>space(9),"(((((((( ",SBOX) 
  XT1=iif(X1+2>79,79,X1+2) 
  XT2=iif(X2+2>79,79,X2+2) 
  XK2=iif(X2+1>79,79,X2+1) 
  @ Y1,X1,Y2,X2 BOX SBOX 
  shadow(Y2+1,XT1,Y2+1,XT2,0) 
  shadow(Y1+1,XK2,Y2+1,XT2,0) 
  return 0 
Функция вывода окна с эффектом раскрытия 
  Параметры: 
  координаты левого верхнего и правого нижнего угла окна, 
  [строка символов обрамления],[строка установки цвета] 
  Function _OPEN_N 
  parameters Y1,X1,Y2,X2,S1,COLOR 
  local CL,XT,YT,XC,YC 
  if pcount()=4 
      COLOR=setcolor() 
      S1="" 
  elseif pcount()=5 
      COLOR=setcolor() 
  endif 
  YC=Y1+int((Y2-Y1)/2) 
  XC=X1+int((X2-X1)/2) 
  CL=setcolor() 
  if Y2-Y1 >= 2 
      YC1=YC 
      YC2=YC 
      XT=XC 
      setcolor(COLOR) 
      do while .T. 
          _open_t(YC1,XT,YC2,2*XC-XT,S1) 
          YC1=iif(YC1-2Y2,Y2,YC2+2) 
          if XT=X1 
              exit 
          endif 
          XT=iif(XT-3Y1 
          YT=YC1 
          do while .T. 
              _open_t(YT,X1,2*YC-YT,X2,S1) 
              if YT=Y1 
                  exit 
              endif 
              YT=iif(YT-20.or.STAT<>0 
              exit 
          endif 
      enddo 
      L_hidecurs() 
      restore screen 
      csetall(STATS) 
      setcolor(CLR) 
      return 0 
  elseif empty(M3).and..not.empty(M2) 
      declare MM1[2],MM2[2] 
      MM1[1]=M1 
      MM1[2]=M2 
      XX=X1+int((X2-X1-len(M1+M2)-1)/2) 
      MM2[1]=XX 
      MM2[2]=XX+len(M1)+1 
      do while .T. 
          MM=1 
          MM=selopt(MM,MM1,MM2,"",Y2-2,.F.,.F.,At_E_S,At_E_U,At_E_F) 
          if MM<>0 
              restore screen 
              csetall(STATS) 
              setcolor(CLR) 
              return MM 
          endif 
      enddo 
  elseif .not.empty(M1).and..not.empty(M2).and..not.empty(M3) 
      declare MM1[3],MM2[3] 
      MM1[1]=M1 
      MM1[2]=M2 
      MM1[3]=M3 
      XX=X1+int((X2-X1-len(M1+M2+M3)-2)/2) 
      MM2[1]=XX 
      MM2[2]=XX+len(M1)+1 
      MM2[3]=XX+len(M1+M2)+2 
      do while .T. 
          MM=1 
          MM=selopt(MM,MM1,MM2,"",Y2-2,.F.,.F.,At_E_S,At_E_U,At_E_F) 
          if MM<>0 
              restore screen 
              csetall(STATS) 
              setcolor(CLR) 
              return MM 
          endif 
      enddo 
  endif 
  csetall(STATS) 
  setcolor(CLR) 
  return 0 
Функция вывода линейного индикатора процесса 
  Function _LIN 
  parameters YCOR,XCOR,LENG,LMAX,LUSE 
  private YCOR,XCOR,LENG,LMAX,LUSE,STATS,RW,CL 
  STATS=csetall() 
  RW=row() 
  CL=col() 
  LMAX=iif(LMAX0 
        setcolor(COLORN) 
        @ iif(ORIENT,MC[IN],COLROW),iif(ORIENT,COLROW+POS-1,MC[IN]+POS-1); 
             SAY substr(MO[IN],POS+1,1) 
        setcolor(CL) 
      endif 
      if SHD 
          setcolor (CSD) 
          @ iif(ORIENT,MC[IN]+1,COLROW+1),iif(ORIENT,COLROW+1,MC[IN]+1); 
              SAY repl("-",len(strtran(MO[IN],"~",""))) 
          @ iif(ORIENT,MC[IN],COLROW),iif(ORIENT,COLROW+; 
           len(strtran(MO[IN],"~","")),MC[IN]+; 
           len(strtran(MO[IN],"~",""))) SAY "-" 
          setcolor(CL) 
      endif 
  NEXT 
  COLMO=L_getxposn()/8 
  ROWMO=L_getyposn()/8 
  setcolor(CLRS) 
  L_hidecurs() 
  @ iif(ORIENT,MC[NOPT],COLROW),iif(ORIENT,COLROW,MC[NOPT]); 
      SAY strtran(MO[NOPT],"~","") 
  if (POS:=at("~",MO[NOPT]))>0 
      CL= setcolor(COLORS) 
      @ iif(ORIENT,MC[NOPT],COLROW),iif(ORIENT,COLROW+POS-1,MC[NOPT]+POS-1) 
; 
          SAY substr(MO[NOPT],POS+1,1) 
      setcolor(CL) 
  endif 
  if SAYHELP 
      setcolor(At_M0_N) 
      @ 24,(80-len(ME[INDN]))/2 SAY ME[INDN] 
  endif 
  L_showcurs() 
  KEYPRESSED=.F. 
  do while .T. 
      COLMN=L_getxposn()/8 
      ROWMN=L_getyposn()/8 
      STAT=L_getmstat() 
      KL=inkey() 
      if KL>0 
          KEYPRESSED=.T. 
      else 
          KEYPRESSED=.F. 
      endif 
      if KL=13 
          L_hidecurs() 
          return INDN 
      endif 
      if STAT=2.or.KL=27 
          if KL<>27 
              for TT=1 to COUN 
                  if iif(ORIENT,COLMN>=COLROW.and.COLMN0,; 
                        ROWMN=COLROW.and.COLMN>=MC[TT].and.COLMN=COLROW.AND.COLMNROWMO).or.KEYPRESSED,(ROWMN=COLROW.AND.; 
                    COLMN<>COLMO).or.KEYPRESSED) 
        T1=.F. 
        if ORIENT.and.KL=0 
           TEST=ascan(MC,ROWMN) 
           if TEST<>0 
               T1=.T. 
           endif 
        elseif .not.ORIENT.and.KL=0 
           TEST=INDO 
           for TT=1 to COUN 
                                                                         if 
COLMN>=MC[TT].and.COLMN0 
           T1=.T. 
        endif 
        if T1 
          do case 
            case KL=5.or.KL=19 
              INDN=iif(INDN=1,COUN,INDN-1) 
            case KL=24.or.KL=4 
              INDN=iif(INDN=COUN,1,INDN+1) 
            case KL>=32.and.KL0 
                      INDN=II 
                      keyboard chr(13) 
                      exit 
                  endif 
              next 
            otherwise 
              INDN=TEST 
          endcase 
          setcolor(CLRN) 
          L_hidecurs() 
          @ iif(ORIENT,MC[INDO],COLROW),iif(ORIENT,COLROW,MC[INDO]); 
              SAY strtran(MO[INDO],"~","") 
          if (POS:=at("~",MO[INDO]))>0 
            CL=setcolor(COLORN) 
                 @       iif(ORIENT,MC[INDO],COLROW),iif(ORIENT,COLROW+POS- 
1,MC[INDO]+; 
                 POS-1) SAY substr(MO[INDO],POS+1,1) 
            setcolor(CL) 
          endif 
          if SAYHELP 
              setcolor(At_M0_N) 
              @ 24,(80-len(ME[INDN]))/2 SAY ME[INDN] 
          endif 
          setcolor(CLRS) 
          @ iif(ORIENT,MC[INDN],COLROW),iif(ORIENT,COLROW,MC[INDN]); 
              SAY strtran(MO[INDN],"~","") 
          if (POS:=at("~",MO[INDN]))>0 
            setcolor(COLORS) 
              @ iif(ORIENT,MC[INDN],COLROW),iif(ORIENT,COLROW+POS- 
    1,MC[INDN]+POS-1) 
                   SAY substr(MO[INDN],POS+1,1) 
          endif 
          L_showcurs() 
          INDO=INDN 
          ROWMO=ROWMN 
          COLMO=COLMN 
          if STAT=0 
              loop 
          endif 
        endif 
      elseif COLMN>=COLROW 
        do case 
          case STAT=1 
              for TT=1 to COUN 
                  if iif(ORIENT,COLMN>=COLROW.and.COLMN0,; 
                         ROWMN=COLROW.and.COLMN>=MC[TT].and.COLMN=COLROW.and.COLMN0,; 
                         ROWMN=COLROW.and.COLMN>=MC[TT].and.COLMN0 
      CUR_STYLE=iif(FINSERT,2,1) 
      setcursor(CUR_STYLE) 
  endif 
  clear type 
  return 0 
Функция  перевода строки в верхний регистр 
  Function UpperR(String) 
  local 
SRC:={"а","б","в","г","д","е","ё","ж","з","и","й","к","л","м","н","о","п","р 
","с","т","у","ф","х","ц","ч","ш","щ","ь","ы","ъ","э","ю","я"," "},; 
DST:={"А","Б","В","Г","Д","Е","Ё","Ж","З","И","Й","К","Л","М","Н","О","П","Р 
","С","Т","У","Ф","Х","Ц","Ч","Ш","Щ","Ь","Ы","Ъ","Э","Ю","Я"," "},; 
        STR:="",KEY:="",INDEXKEY,I 
  for I=1 to len(STRING) 
      KEY=substr(STRING,I,1) 
      if (INDEXKEY:=ascan(SRC,KEY))<>0 
          STR=STR+DST[INDEXKEY] 
      else 
          STR=STR+KEY 
      endif 
  next 
  return STR 
Функция контроля выхода 
  Function DOORS 
  private CLR,ME 
  CLR=setcolor() 
  clear type 
  ME=1 
  ME=_err(07,02,"Вы желаете завершить работу ?","","",; 
  " ~Y~es "," ~N~o ","") 
  if ME=1.or.ME=-1 
      close databases 
      set color to 
      clear 
      set printer to 
      setcursor(1) 
      showtime() 
      keyboard chr(0) 
      L_showcurs() 
      return .T. 
  else 
      setcolor(CLR) 
      return .F. 
  endif 
  return .T. 
Функция перевода числовой величины в строку «Сумма прописью» 
  Function NUMSTRING 
  parameters NUM1,CODE_CUR 
  local MR:={.T.,.T.,.F.,.T.},CL,; 
  MG:={{""          ,""         ,""      ,"" },; 
       {"миллиард"  ,"миллион"  ,"тысяча","" },; 
       {"миллиарда" ,"миллиона" ,"тысячи","" },; 
       {"миллиардов","миллионов","тысяч" ,"" }},; 
       SO:=0,DE:=0,ED:=0,TX,NUM,OBL 
  OBL=select() 
  if pcount()1.and.ED4.and.DE*10+ED0 
      STRING=STRING+UNITS[SOT+28]+" " 
  endif 
  if DES>1 
      STRING=STRING+UNITS[DES+19]+" " 
  elseif DES=1 
      STRING=STRING+UNITS[DES*10+EDN+1]+" " 
      SCAN_ED=.F. 
  endif 
  if SCAN_ED 
      STRING=STRING+UNITS[EDN+1] 
  endif 
  return STRING 
Функция получения псевдонима валюты 
  Function GetShort_Name(CODE) 
  local OBL,MR,ST:="    " 
  OBL=select() 
  select CUR 
  MR=recno() 
  seek CODE 
  if found() 
      ST=SHORT_NAME 
  endif 
  goto MR 
  select(OBL) 
  return ST 
Основные функции и процедуры 
Головной модуль программы 
  Function MAIN 
  #Include "Box.ch" 
  setcursor(0) 
  if .not.file("V.mem").or..not.file("C.mem") 
  set curs on 
      return 0    //  Аварийный  выход  при  отсутствии  файлов  глобальных 
переменных 
  else 
            // Объявление глобальных переменных и считывание их из файла 
      public AT_M0_F,AT_M0_N,AT_M0_S,AT_M0_U,AT_M1_F,AT_M1_N,AT_M1_S 
      public AT_M1_U,AT_M2_F,AT_M2_N,AT_M2_S,AT_M2_U,AT_E_F,AT_E_N,AT_E_S 
      public AT_E_U,AT_G_F,AT_G_N,AT_G_S,AT_G_U,AT_S_F,AT_S_N,AT_S_S,AT_S_U 
      public AT_N_I,AT_N_S 
      CLFON="N" 
      clear 
      restore from c.mem addi 
  endif 
            // Глобальные установки 
  setcursor(0) 
  set date german 
  set century on 
  set wrap on 
  set dele off 
  set bell off 
  set confirm on 
  set scoreboard off 
  set message to 24 center 
  restore from v.mem addi 
  public PAROL,DATROAD,USERDSK,PAGELEN,ETLF,UKZGL,UKTXT,ARCROAD 
  public ZEROPRINT,FPREOBR,PAGESIZ,DUBLDSK,KEYCR,C_H 
  public FM,FINSERT,CUR_STYLE,M__EN,MDATE,SETNUM 
  restore from D addi 
  store 0 to CROW,CCOL 
  KEYCR="#4_Ж;V*" 
  PAROL   = uncrpt(KEYCR,P__AROL) 
  DATROAD = D__ATROAD 
  ARCROAD = A__RCROAD 
  DUBLDSK = D__UBLDSK 
  USERDSK = U__SERDSK 
  PAGELEN = P__AGELEN 
  PAGESIZ = P__AGESIZ 
  ETLF    = E__TLF 
  UKZGL   = U__KZGL 
  UKTXT   = U__KTXT 
  SETNUM  = S__ETNUM 
  FPREOBR = .F. 
  release P__AROL,D__ATROAD,U__SERDSK,S__ETNUM,; 
          P__AGELEN,P__AGESIZ,E__TLF,U__KZGL,U__KTXT,D__UBLDSK,A__RCROAD 
  MEN=1 
  MEN1=1 
  FINSERT=.F. 
  CUR_STYLE=1 
  set key 22 to fins() 
  declare MMS[ 6],MOP[ 6],MCO[ 6],MNT[12],MHP[10] 
      // Массив этикеток строки подсказки 
  MHP[ 1]="Помощь" 
  MHP[ 2]="Добав." 
  MHP[ 3]="Список" 
  MHP[ 4]="Поиск " 
  MHP[ 5]="Фильтр" 
  MHP[ 6]="Сумма " 
  MHP[ 7]="Печать" 
  MHP[ 8]="Удал. " 
  MHP[ 9]="Запись" 
  MHP[10]="Выход " 
      // Массив опций главного меню системы 
  MOP[ 1]=" ~О~перации " 
  MOP[ 2]=" ~С~правочники " 
  MOP[ 3]=" о~Т~четы " 
  MOP[ 4]=" ~А~рхив " 
  MOP[ 5]=" ~Р~азное " 
  MOP[ 6]=" ~В~ыход " 
      // Массив координат главного меню системы 
  MCO[ 1]=2 
  MCO[ 2]=12 
  MCO[ 3]=25 
  MCO[ 4]=33 
  MCO[ 5]=40 
  MCO[ 6]=48 
      // Массив строк помощи 
  MMS[ 1]="Оформление покупки/продажи валюты" 
  MMS[ 2]="     Ввод справочных данных      " 
  MMS[ 3]="         Вывод отчетов           " 
  MMS[ 4]="       Работа с архивом          " 
  MMS[ 5]="      Настройки  системы         " 
  MMS[ 6]="        Выход в MS DOS           " 
      // Массив названий месяцев 
  MNT[ 1]="Января" 
  MNT[ 2]="Февраля" 
  MNT[ 3]="Марта" 
  MNT[ 4]="Апреля" 
  MNT[ 5]="Мая" 
  MNT[ 6]="Июня" 
  MNT[ 7]="Июля" 
  MNT[ 8]="Августа" 
  MNT[ 9]="Сентября" 
  MNT[10]="Октября" 
  MNT[11]="Ноября" 
  MNT[12]="Декабря" 
  setcolor(At_M0_F) 
  @ 00,00,24,79 BOX "   -   --" 
  setcolor(At_M0_N) 
  @ 00,01 SAY "Обменный пункт банка" 
      // Проверка пароля пользователя (3 попытки) 
  for II=1 to 3 
      setcursor(CUR_STYLE) 
      setcolor(AT_E_F) 
      _open_n(07,22,11,57) 
      setcolor(AT_E_N) 
      _saystr(09,24,"Введите Ваш пароль :") 
      KL=0 
      TST="" 
      do while .T. 
          KL=inkey(0) 
          do case 
            case KL=8 
              TST=substr(TST,1,len(TST)-1) 
            case KL=13 
              exit 
            otherwise 
              TST=TST+chr(KL) 
          endcase 
          @ 09,45 SAY repl(" ",len(TST)+1) 
          @ 09,45 SAY repl("[pic]»,len(TST)) 
          if len(TST)=10 
              exit 
          endif 
      enddo 
      if TST=PAROL 
          @ 09,24 SAY «OK                                     « 
          exit 
      else 
          @ 09,24 SAY «Пароль неправильный    « 
          tone(1500,2) 
          tone(1700,2) 
      endif 
  next 
  if TST<>PAROL 
      setcolor("W/N") 
      clear screen 
      return 
  endif 
  restore screen 
      // Настройка принтера 
  if M__EN=2 
      set printer to BUFFER.PRN 
  else 
      M__EN=1 
      set printer to 
  endif 
  setcursor(0) 
  FM=.F. 
  setcolor(At_M0_F) 
  @ 00,01 SAY space(80) 
  do while .T.         // Главное меню системы 
      if FM 
          setcolor(At_M0_F) 
          @ 00,00,24,79 BOX "   -   --" 
          @ 00,01 SAY space(80) 
          FM=.F. 
      endif 
      setcolor("+W/B,+GR/R,,,+BG/B") 
      MEN=selopt(MEN,MOP,MCO,MMS,0,.F.,.T.,At_M0_S,At_M0_U) 
      if lastkey()=27.or.MEN=0 
          if doors() 
              exit 
          else 
              loop 
          endif 
      endif 
      MSCR=savescreen(0,0,24,79) 
      do case 
        case MEN=1 
            operation() 
        case MEN=2 
            dictonary() 
        case MEN=3 
            report() 
        case MEN=4 
            arch() 
        case MEN=5 
            system() 
        case MEN=6 
            if doors() 
                exit 
            endif 
      endcase 
      restscreen(0,0,24,79,MSCR) 
  enddo 
  setcolor() 
  release all 
  return 0 
Функция вызова меню «Операции» 
  Function OPERATION 
  local M1[5],M2[5],M3[5],MENU 
  M1[1]=" ~П~окупка валюты     " 
  M1[2]=" п~Р~одажа валюты     " 
  M1[3]=" ~К~онверсия валюты   " 
  M2[1]=2 
  M2[2]=3 
  M2[3]=4 
  MENU=1 
  _open_n(1,0,7,23,B_SINGLE+" ",AT_M1_F) 
  do while .T. 
      MENU=selopt(MENU,M1,M2,M3,2,.T.,.F.,AT_M1_S,AT_M1_U) 
      if MENU=0.or.lastkey()=27 
          clear type 
          exit 
      endif 
      operCurrency(MENU) 
  enddo 
  return 0 
Функция вызова меню ведения справочников 
  Function DICTONARY 
  local M1[4],M2[4],M3[4],MENU,CL 
  M1[1]=" ~С~писок валют      " 
  M1[2]=" ~К~урсоы валют      " 
  M1[3]=" коды ~Ц~енностей    " 
  M1[4]=" Коды ~Д~окументов   " 
  M2[1]=2 
  M2[2]=3 
  M2[3]=4 
  M2[4]=5 
  MENU=1 
  _open_n(1,10,6,32,B_SINGLE+" ",AT_M1_F) 
  do while .T. 
      MENU=selopt(MENU,M1,M2,M3,12,.T.,.F.,AT_M1_S,AT_M1_U) 
      if MENU=0.or.lastkey()=27 
          clear type 
          exit 
      endif 
      dictonEdit(MENU) 
  enddo 
  clear type 
  return 0 
Функция вызова меню «Отчеты» 
  Function REPORT 
  local M1[4],M2[4],M3[4],MENU,CL 
  M1[1]=" Реестр по по~К~упке валюты             " 
  M1[2]=" Реестр по ~П~родаже валюты             " 
  M1[3]=" Реестр по ~К~онверсии валюты         " 
  M1[4]=" справка об ~О~статках наличной валюты  " 
  M2[1]=2 
  M2[2]=3 
  M2[3]=4 
  M2[4]=5 
  MENU=1 
  _open_n(1,23,7,64,B_SINGLE+" ",AT_M1_F) 
  do while .T. 
      MENU=selopt(MENU,M1,M2,M3,25,.T.,.F.,AT_M1_S,AT_M1_U) 
      if MENU=0.or.lastkey()=27 
          clear type 
          exit 
      endif 
      reportOut(MENU) 
  enddo 
  clear type 
  return 0 
Функция вызова меню «Разное» 
  Function SYSTEM 
  private M1,M2,M3,MENU 
  declare M1[4],M2[4],M3[4] 
  M1[1]=" ~У~становки       " 
  M1[2]=" ~К~опия данных    " 
  M1[3]=" ~И~ндексные файлы " 
  M1[4]=" ~С~чета банка     " 
  M2[1]=2 
  M2[2]=3 
  M2[3]=4 
  M2[4]=5 
  MENU=1 
  SCRS=savescreen(0,0,24,79) 
  _open_n(1,38,6,58,B_SINGLE+" ",AT_M1_F) 
  do while .T. 
      MENU=selopt(MENU,M1,M2,M3,40,.T.,.F.,AT_M1_S,AT_M1_U) 
      if MENU=0.or.lastkey()=27 
          clear type 
          exit 
      endif 
      do case 
          case MENU=1 
              setupm(M1[MENU]) 
          case MENU=2 
              dublicat(M1[MENU]) 
          case MENU=3 
          case MENU=4 
              GetAccount() 
      endcase 
  enddo 
  restscreen(0,0,24,79,SCRS) 
  clear type 
  return 0 
Функция вызова меню «Установки» 
  Function SETUPM 
  parameters OPT 
  private 
SCR,M1[4],M2[4],M3[4],MENU,OPT,A__RCROAD,P__AROL,D__ATROAD,D__UBLDSK,U__SERD 
SK,P__AGELEN,P__AGESIZ,E__TLF,U__KZGL,U__KTXT,S__ETNUM,FMOD 
  ROW=row() 
  M1[1]=" ~П~ароль             " 
  M1[2]=" пути к ~Д~анным      " 
  M1[3]=" ~У~становки принтера " 
  M1[4]=" ~Ц~вета              " 
  M2[1]=ROW+2 
  M2[2]=ROW+3 
  M2[3]=ROW+4 
  M2[4]=ROW+5 
  MENU=1 
  FMOD=0 
  SCR=savescreen(0,0,24,79) 
  do while .T. 
      _open_n(ROW+1,38,ROW+6,61,B_SINGLE+" ",AT_M2_F) 
      MENU=selopt(MENU,M1,M2,M3,40,.T.,.F.,AT_M2_S,AT_M2_U) 
      if MENU=0.or.lastkey()=27 
          clear type 
          exit 
      endif 
      if MENU=4 
          FM=.T. 
      endif 
      save screen to SESCR 
      FMOD=setup(MENU) 
      restore screen from SESCR 
  enddo 
  restscreen(0,0,24,79,SCR) 
  if FMOD=1 
      P__AROL   = crpt(KEYCR,trim(P__AROL)) 
      D__ATROAD = trim(D__ATROAD) 
      A__RCROAD = trim(A__RCROAD) 
      U__KZGL   = trim(U__KZGL) 
      U__KTXT   = trim(U__KTXT) 
      if M__EN=2 
          set Printer to BUFFER.PRN 
      else 
          M__EN=1 
          set Printer to 
      endif 
      if Z__PR=2 
          ZEROPRINT=.F. 
      else 
          Z__PR=1 
          ZEROPRINT=.T. 
      endif 
      save all like ?__* to v 
      PAROL   =uncrpt(KEYCR,P__AROL) 
      DATROAD =D__ATROAD 
      ARCROAD =A__RCROAD 
      DUBLDSK =D__UBLDSK 
      USERDSK =U__SERDSK 
      PAGELEN =P__AGELEN 
      PAGESIZ =P__AGESIZ 
      ETLF    =E__TLF 
      UKZGL   =U__KZGL 
      SETNUM  =S__ETNUM 
      UKTXT   =U__KTXT 
  endif 
  clear type 
  return 0 
Функция вызова меню «Копия данных» 
  Function DUBLICAT 
  parameters OPT 
  private M1,M2,M3,MENU,OPT,DSCR,ROW 
  ROW=row() 
  declare M1[2],M2[2],M3[2] 
  M1[1]=" ~С~охранение данных     " 
  M1[2]=" ~В~осстановление данных " 
  M2[1]=ROW+2 
  M2[2]=ROW+3 
  MENU=1 
  popmenu(ROW,38,ROW+5,64,OPT,2,AT_M2_F) 
  do while .T. 
      MENU=selopt(MENU,M1,M2,M3,40,.T.,.F.,AT_M2_S,AT_M2_U) 
      if MENU=0.or.lastkey()=27 
          clear type 
          exit 
      endif 
      save screen to DSCR 
      do case 
          case MENU=1 
              OPT=M1[MENU] 
              savedata(OPT) 
          case MENU=2 
              OPT=M1[MENU] 
              restdata(OPT) 
      endcase 
      restore screen from DSCR 
  enddo 
  clear type 
  return 0 
Функция - селектор операций 
  Function OPERCURRENCY 
  #Include "Inkey.ch" 
  #Include "Box.ch" 
  parameters N_OPER 
  do case 
    case N_OPER=1 
        ByeCurrency() 
    case N_OPER=2 
        SaleCurrency() 
    case N_OPER=3 
         ConvertCurrency() 
  endcase 
  return 0 
Функция регистрации покупки валюты 
  Function ByeCurrency 
  local SCR 
  use (DATROAD+"Document") index (DATROAD+"Document") alias DOC new 
  SCR=savescreen(1,0,23,61) 
  CLR=setcolor(AT_G_F) 
  _open_n(1,0,20,59,B_SINGLE+" ",AT_G_F) 
  @ 08,0 say "+----------------------------------------------------------+" 
  @ 14,0 say "+----------------------------------------------------------+" 
  setcolor(AT_G_N+","+AT_G_S+",,,"+AT_G_U) 
  set key K_F3 to getcode() 
  _nort("1010000001") 
  FINIT=.T. 
  do while .T. 
      if FINIT 
          SER    =space(2) 
          NUM    =0 
          FIO    =space(35) 
          DOC    =space(10) 
          CDOC   =0 
          DSER   =space(10) 
          DNUM   =0 
          REZ    =space(1) 
          NREZ   =space(1) 
          BCODC  =10 
          BCODCUR=2 
          BSUM   =0 
          SCODC  =0 
          SCODCUR=0 
          SSUM   =0 
          SSUMS="" 
          BSUMS="" 
          @ 12,2 say space(57) 
          @ 13,2 say space(57) 
          @ 18,2 say space(57) 
          @ 19,2 say space(57) 
          setcolor(AT_G_U) 
          @ 11,8 say 0 picture "999999999999" 
      endif 
      setcolor(AT_G_N+","+AT_G_S+",,,"+AT_G_U) 
      @ 02,17 say "СПРАВКА" get SER picture "XX" valid !empty(SER) 
      @ 02,28 say "№" get NUM picture "9999999" valid !empty(NUM) 
      @ 03,15 say str(day(date()),2)+" "+MNT[month(date())]+; 
                         " "+str(year(date()),4) 
      @ 04,02 say "Выдана" get FIO picture "@S30" valid !empty(FIO) 
      @ 05,02 say "Предъявлен" get CDOC picture "9999" 
      @ 05,29 say "серия" get DSER picture "XXXXXXXXXX" 
      @ 05,46 say "№" get DNUM picture "9999999999" 
      @ 06,02 say "Резидент [ ]" 
      @ 06,12 get REZ Picture "L" 
      @ 08,02 say "ПОЛУЧЕНО КЛИЕНТОМ:" 
      @ 09,02 say "Код ценности" get BCODC   picture "9999" 
      @ 10,02 say "Код валюты  " get BCODCUR picture "9999" 
      @ 11,02 say "Сумма" 
      @ 14,02 say "ПРИНЯТО ОТ КЛИЕНТА:" 
      @ 15,02 say "Код ценности" get SCODC   picture "9999" 
      @ 16,02 say "Код валюты  " get SCODCUR picture "9999" 
      @ 17,02 say "Сумма" get SSUM picture "999999999999" ; 
             valid saysale(SSUM,18,2,52,AT_G_U,@SSUMS,SCODCUR) 
      setcursor(CUR_STYLE) 
      read 
      setcursor(0) 
      if lastkey()=K_ESC 
          exit 
      endif 
      if _err(06,40,"Данные  введены  правильно?","","","  ~Д~а  ","  ~Н~ет 
","")=1 
          append blank 
          replace field->SER_       with SER    ,; 
                  field->NUM_       with NUM    ,; 
                  field->FIO_       with FIO    ,; 
                  field->DOC_       with DOC    ,; 
                  field->DSER_      with DSER   ,; 
                  field->DNUM_      with DNUM   ,; 
                  field->REZ_       with !empty(REZ),; 
                  field->BCODC_     with BCODC  ,; 
                  field->BCODCUR_   with BCODCUR,; 
                  field->BSUM_      with BSUM   ,; 
                  field->SCODC_     with SCODC  ,; 
                  field->SCODCUR_   with SCODCUR,; 
                  field->SSUM_      with SSUM,; 
                  field->DATE_      with date(),; 
                  field->OPERATION_ with 1 
          commit 
          if _err(06,40,"Печатать справку?","",""," ~Д~а "," ~Н~ет ","")=1 
  //          printspr() 
          endif 
          FINIT=.T. 
          loop 
      else 
          FINIT=.F. 
      endif 
  enddo 
  _nort() 
  set key K_F3 to 
  restscreen(1,0,23,61,SCR) 
  dbcloseall() 
  return 0 
Функция регистрации продажи валюты 
  Function SaleCurrency 
  local SCR 
  use (DATROAD+"Document") index (DATROAD+"Document") alias DOC new 
  SCR=savescreen(1,0,23,61) 
  CLR=setcolor(AT_G_F) 
  _open_n(1,0,20,59,B_SINGLE+" ",AT_G_F) 
  @ 08,0 say "+----------------------------------------------------------+" 
  @ 14,0 say "+----------------------------------------------------------+" 
  setcolor(AT_G_N+","+AT_G_S+",,,"+AT_G_U) 
  set key K_F3 to getcode() 
  _nort("1010000001") 
  FINIT=.T. 
  do while .T. 
      if FINIT 
          SER    =space(2) 
          NUM    =0 
          FIO    =space(35) 
          DOC    =space(10) 
          DSER   =space(10) 
          DNUM   =0 
          REZ    =space(1) 
          NREZ   =space(1) 
          CDOC   =0 
          BCODC  =0 
          BCODCUR=0 
          BSUM   =0 
          SCODC  =0 
          SCODCUR=0 
          SSUM   =0 
          SSUMS="" 
          BSUMS="" 
          @ 12,2 say space(57) 
          @ 13,2 say space(57) 
          @ 18,2 say space(57) 
          @ 19,2 say space(57) 
          setcolor(AT_G_U) 
          @ 11,8 say 0 picture "999999999999" 
      endif 
      setcolor(AT_G_N+","+AT_G_S+",,,"+AT_G_U) 
      @ 02,17 say "СПРАВКА" get SER picture "XX" valid !empty(SER) 
      @ 02,28 say "№" get NUM picture "9999999" valid !empty(NUM) 
        @    03,15    say    str(day(date()),2)+"    "+MNT[month(date())]+" 
"+str(year(date()),4) 
      @ 04,02 say "Выдана" get FIO picture "@S30" valid !empty(FIO) 
      @ 05,02 say "Предъявлен" get CDOC picture "9999" 
      @ 05,29 say "серия" get DSER picture "XXXXXXXXXX" 
      @ 05,46 say "№" get DNUM picture "9999999999" 
      @ 06,02 say "Резидент [ ]" 
      @ 06,12 get REZ Picture "L" 
      @ 08,02 say "ПРИНЯТО ОТ КЛИЕНТА:" 
      @ 09,02 say "Код ценности" get SCODC   picture "9999" 
      @ 10,02 say "Код валюты  " get SCODCUR picture "9999" 
      @ 11,02 say "Сумма" 
      @ 14,02 say "ПОЛУЧЕНО КЛИЕНТОМ:" 
      @ 15,02 say "Код ценности" get BCODC   picture "9999" 
      @ 16,02 say "Код валюты  " get BCODCUR picture "9999" 
       @  17,02  say  "Сумма"  get  BSUM   picture   "999999999999"   valid 
saybye(BSUM,17,2,52,AT_G_U,@BSUMS,BCODCUR) 
      setcursor(CUR_STYLE) 
      read 
      setcursor(0) 
      if lastkey()=K_ESC 
          exit 
      endif 
      if _err(06,40,"Данные  введены  правильно?","","","  ~Д~а  ","  ~Н~ет 
","")=1 
          append blank 
          replace field->SER_       with SER    ,; 
                  field->NUM_       with NUM    ,; 
                  field->FIO_       with FIO    ,; 
                  field->DOC_       with DOC    ,; 
                  field->DSER_      with DSER   ,; 
                  field->DNUM_      with DNUM   ,; 
                  field->REZ_       with !empty(REZ),; 
                  field->BCODC_     with BCODC  ,; 
                  field->BCODCUR_   with BCODCUR,; 
                  field->BSUM_      with BSUM   ,; 
                  field->SCODC_     with SCODC  ,; 
                  field->SCODCUR_   with SCODCUR,; 
                  field->SSUM_      with SSUM,; 
                  field->DATE_      with date(),; 
                  field->OPERATION_ with 1 
          commit 
          if _err(06,40,"Печатать справку?","",""," ~Д~а "," ~Н~ет ","")=1 
  //          printspr() 
          endif 
          FINIT=.T. 
          loop 
      else 
          FINIT=.F. 
      endif 
  enddo 
  _nort() 
  set key K_F3 to 
  restscreen(1,0,23,56,SCR) 
  dbcloseall() 
  return 0 
Функция регистрации конверсии валюты 
  Function ConvertCurrency 
  local SCR 
  use (DATROAD+"Document") index (DATROAD+"Document") alias DOC new 
  SCR=savescreen(1,0,23,61) 
  CLR=setcolor(AT_G_F) 
  _open_n(1,0,20,59,B_SINGLE+" ",AT_G_F) 
  @ 08,0 say "+----------------------------------------------------------+" 
  @ 14,0 say "+----------------------------------------------------------+" 
  setcolor(AT_G_N+","+AT_G_S+",,,"+AT_G_U) 
  set key K_F3 to getcode() 
  _nort("1010000001") 
  FINIT=.T. 
  do while .T. 
      if FINIT 
          SER    =space(2) 
          NUM    =0 
          FIO    =space(35) 
          DOC    =space(10) 
          DSER   =space(10) 
          DNUM   =0 
          REZ    =space(1) 
          NREZ   =space(1) 
          CDOC   =0 
          BCODC  =0 
          BCODCUR=0 
          BSUM   =0 
          SCODC  =0 
          SCODCUR=0 
          SSUM   =0 
          SSUMS="" 
          BSUMS="" 
          @ 12,2 say space(57) 
          @ 13,2 say space(57) 
          @ 18,2 say space(57) 
          @ 19,2 say space(57) 
          setcolor(AT_G_U) 
          @ 11,8 say 0 picture "999999999999" 
      endif 
      setcolor(AT_G_N+","+AT_G_S+",,,"+AT_G_U) 
      @ 02,17 say "СПРАВКА" get SER picture "XX" valid !empty(SER) 
      @ 02,28 say "№" get NUM picture "9999999" valid !empty(NUM) 
        @    03,15    say    str(day(date()),2)+"    "+MNT[month(date())]+" 
"+str(year(date()),4) 
      @ 04,02 say "Выдана" get FIO picture "@S30" valid !empty(FIO) 
      @ 05,02 say "Предъявлен" get CDOC picture "9999" 
      @ 05,29 say "серия" get DSER picture "XXXXXXXXXX" 
      @ 05,46 say "№" get DNUM picture "9999999999" 
      @ 06,02 say "Резидент [ ]" 
      @ 06,12 get REZ Picture "L" 
      @ 08,02 say "ПРИНЯТО ОТ КЛИЕНТА:" 
      @ 09,02 say "Код ценности" get SCODC   picture "9999" 
      @ 10,02 say "Код валюты  " get SCODCUR picture "9999" 
      @ 11,02 say "Сумма" 
      @ 14,02 say "ПОЛУЧЕНО КЛИЕНТОМ:" 
      @ 15,02 say "Код ценности" get BCODC   picture "9999" 
      @ 16,02 say "Код валюты  " get BCODCUR picture "9999" 
       @  17,02  say  "Сумма"  get  BSUM   picture   "999999999999"   valid 
saybye(BSUM,17,2,52,AT_G_U,@BSUMS,BCODCUR) 
      setcursor(CUR_STYLE) 
      read 
      setcursor(0) 
      if lastkey()=K_ESC 
          exit 
      endif 
      if _err(06,40,"Данные  введены  правильно?","","","  ~Д~а  ","  ~Н~ет 
","")=1 
          append blank 
          replace field->SER_       with SER    ,; 
                  field->NUM_       with NUM    ,; 
                  field->FIO_       with FIO    ,; 
                  field->DOC_       with DOC    ,; 
                  field->DSER_      with DSER   ,; 
                  field->DNUM_      with DNUM   ,; 
                  field->REZ_       with !empty(REZ),; 
                  field->BCODC_     with BCODC  ,; 
                  field->BCODCUR_   with BCODCUR,; 
                  field->BSUM_      with BSUM   ,; 
                  field->SCODC_     with SCODC  ,; 
                  field->SCODCUR_   with SCODCUR,; 
                  field->SSUM_      with SSUM,; 
                  field->DATE_      with date(),; 
                  field->OPERATION_ with 1 
          commit 
          if _err(06,40,"Печатать справку?","",""," ~Д~а "," ~Н~ет ","")=1 
  //          printspr() 
          endif 
          FINIT=.T. 
          loop 
      else 
          FINIT=.F. 
      endif 
  enddo 
  _nort() 
  set key K_F3 to 
  restscreen(1,0,23,56,SCR) 
  dbcloseall() 
  return 0 
Функция - определитель текущего поля для получения кода и наименования 
объекта из справочника 
  Function GETCODE 
  local CL 
  AKTIV=getactive() 
  RS=row() 
  CS=col()+5 
  do case 
    case AKTIV:name="BCODCUR" 
      S=incod(1,@BCODCUR) 
    case AKTIV:name="BCODC" 
      S=incod(3,@BCODC) 
    case AKTIV:name="SCODCUR" 
      S=incod(1,@SCODCUR) 
    case AKTIV:name="SCODC" 
      S=incod(3,@SCODC) 
    case AKTIV:name="CDOC" 
      S=incod(4,@CDOC) 
    otherwise 
      S="" 
  endcase 
  CL=setcolor(AT_G_N) 
  @ RS,CS say substr(S,1,30) 
  if !empty(S) 
      keyboard chr(13) 
  endif 
  setcolor(CL) 
  return .T. 
Функция вывода суммы покупки прописью 
  Function SAYB 
  parameters NUM,Y,X,L,C,S,CC 
  local CL 
  S=numstring(NUM,CC) 
  CL=setcolor(C) 
  @ Y,X say padr(substr(S,1,L),L) 
  @ Y+1,2 say padr(substr(S,L+1,57),57) 
  setcolor(AT_G_U) 
  @ Y-1,8 say NUM picture "999999999999" 
  setcolor(CL) 
  return .T. 
Функция вывода суммы продажи прописью 
  Function SAYS 
  parameters NUM,Y,X,L,C,S,CC 
  local CL 
  S=numstring(NUM,CC) 
  CL=setcolor(C) 
  @ Y,X say padr(substr(S,1,L),L) 
  @ Y+1,2 say padr(substr(S,L+1,57),57) 
  setcolor(AT_G_U) 
  @ Y-1,8 say NUM picture "999999999999" 
  setcolor(CL) 
  return .T. 
Функция вычисления суммы операции покупки 
  Function SAYBYE 
  parameters NUM,Y,X,L,C,S,CC 
  local CL,OBL,RESULT 
  RESULT=.F. 
  OBl=select() 
  use (DATROAD+"currency") index (DATROAD+"currency") new 
  seek CC 
  if found() 
      BSUM=KURS*NUM 
      use 
      S=numstring(NUM,CC) 
      CL=setcolor(C) 
      @ Y,X say padr(substr(S,1,L),L) 
      @ Y+1,2 say padr(substr(S,L+1,57),57) 
      says(SSUM,12,2,57,AT_G_U,@SSUMS,SCODCUR) 
      RESULT=.T. 
  else 
      use 
  endif 
  setcolor(CL) 
  select(OBL) 
  return RESULT 
Функция вычисления суммы операции продажи 
  Function SAYSALE 
  parameters NUM,Y,X,L,C,S,CC 
  local CL,OBL,RESULT 
  RESULT=.F. 
  OBl=select() 
  use (DATROAD+"currency") index (DATROAD+"currency") new 
  seek CC 
  if found() 
      BSUM=KURS*NUM 
      use 
      S=numstring(NUM,CC) 
      CL=setcolor(C) 
      @ Y,X say padr(substr(S,1,L),L) 
      @ Y+1,2 say padr(substr(S,L+1,57),57) 
      sayb(BSUM,12,2,57,AT_G_U,@BSUMS,BCODCUR) 
      RESULT=.T. 
  else 
      use 
  endif 
  setcolor(CL) 
  select(OBL) 
  return RESULT 
ФУНКЦИЯ ВЫВОДА списка документов дня 
  Function Docrep 
  local SCR 
  use (DATROAD+"Currency") index (DATROAD+"Currency") alias CUR new 
  use (DATROAD+"Document") index (DATROAD+"Document") alias DOC new 
  set relation to BCODCUR_ into CUR 
  SCR=savescreen(1,0,23,79) 
  _open_n(1,0,22,77,B_SINGLE+" ",AT_S_F) 
  _nort("1000001001") 
  declare MF[5],MZ[5] 
  MF[1]= 
  MF[2]= FIO_    
  MF[3]= iif(REZ_,"Р","Н") 
  MF[4]= 
  MF[5]= getShort_Name(SCODCUR_)+" "+str(SSUM_) 
  MZ[1]="Справка" 
  MZ[2]="Фамилия Имя Отчество" 
  MZ[3]="Р/Н" 
  MZ[4]="Выдано" 
  MZ[5]="Принято" 
  TERM=" Проведенные документы дня " 
  setcolor(AT_M1_S) 
  @ 01,(70-len(TERM))/2 SAY TERM 
  setcolor(AT_S_N+","+AT_S_S+",,,"+AT_S_U) 
  clear type 
  oBrow := TBrowseDB(2,1,21,76) 
  oBrow:headSep := "=T=" 
  oBrow:colSep  := " ¦ " 
  for i := 1 TO len(MF) 
      oBrow:addColumn(TBColumnNew(MZ[i], MF[i])) 
  next 
  while (!oBrow:stabilize()) ; end 
  lKeyWaiting := .F. 
  lBrowse     := .T. 
  do while (lBrowse) 
      if (!lKeyWaiting) 
          do while (!oBrow:stabilize()) 
              // Прервать стабилизацию, если нажата клавиша 
              if ((nKey := Inkey()) != 0) 
                  lKeyWaiting := .T. 
                  exit 
              endif 
          enddo 
      endif 
      // Если нет нажатия, то ждать его 
      if (!lKeyWaiting) 
          nKey := Inkey(0) 
      endif 
      do case 
          case (nKey == K_DOWN) 
              oBrow:down() 
          case (nKey == K_UP) 
              oBrow:up() 
          case (nKey == K_PGDN) 
              oBrow:pageDown() 
          case (nKey == K_PGUP) 
              oBrow:pageUp() 
          case (nKey == K_CTRL_PGUP) 
              oBrow:goTop() 
          case (nKey == K_CTRL_PGDN) 
              oBrow:goBottom() 
          case (nKey == K_RIGHT) 
              oBrow:right() 
          case (nKey == K_LEFT) 
              oBrow:left() 
          case (nKey == K_HOME) 
              oBrow:home() 
          case (nKey == K_END) 
              oBrow:end() 
          case (nKey == K_CTRL_LEFT) 
              oBrow:panLeft() 
          case (nKey == K_CTRL_RIGHT) 
              oBrow:panRight() 
          case (nKey == K_CTRL_HOME) 
              oBrow:panHome() 
          case (nKey == K_CTRL_END) 
              oBrow:panEnd() 
          case (nKey == K_F7) 
              // printspr() 
          case (nKey == K_ESC).or.(nKey == K_F10) 
              lBrowse := .F. 
      endcase 
      lKeyWaiting := .F. 
  enddo 
  restscreen(1,0,23,79,SCR) 
  dbcloseall() 
  _nort() 
  return 0 
ФУНКЦИЯ ЗАКРЫТИЯ ОПЕРАЦИОННОГО ДНЯ 
  Function CloseDay() 
  if  _err(07,05,"Вы  действительно  желаете  закрыть","операционный   день 
?",""," Да "," Нет ","")<>1 
      return 0 
  endif 
  ArBase=strtran(str(day(MDATE),2)+str(month(MDATE),2)+substr(str(year(MDATE 
),4),3,2)," ","0") 
  use (DATROAD+"Operatio") 
  copy to (ARCROAD+"Op"+ArBase) 
  delete all 
  pack 
  use (DATROAD+"Document") 
  copy to (ARCROAD+"Do"+ArBase) 
  delete all 
  pack 
  use (DATROAD+"Currency") 
  copy to (ARCROAD+"Cu"+ArBase) 
  use (DATROAD+"Kurses") 
  copy to (ARCROAD+"Ku"+ArBase) 
  use (DATROAD+"Codes") 
  copy to (ARCROAD+"Co"+ArBase) 
  ODATE=MDATE 
  SCR=savescreen(07,05,12,47) 
  _open_n(07,05,10,45,B_SINGLE+" ",AT_G_F) 
  CL=setcolor(AT_G_U) 
  @ 08,22 say ODATE 
  do while(.T.) 
      setcolor(AT_G_N+","+AT_G_S+",,,"+AT_G_U) 
      @ 08,07 say "Текущая дата :" 
      @ 09,07 say "  Новая дата :" get MDATE 
      setcursor(CUR_STYLE) 
      read 
      setcursor(0) 
      if _err(10,15,"Дата введена правильно?","",""," Да "," Нет ","")=1 
          save all like MDATE to d 
          exit 
      endif 
  enddo 
  dbcloseall() 
  restscreen(07,05,12,47,SCR) 
  setcolor(CL) 
  return 0 
Литература 
  1. CA-Clipper 5.02 «Users Guide» -  Руководство  по  программированию  на 
     языке Clipper 
  2.  А.А.Попов  «Программирование  в  среде  FoxPro.   Построение   систем 
     обработки данных. («Радио и Связь» М. 1993г.) 
  3. «RS-Club» №№1-7 1996г.  (Miktor Ky. Union Publisher Inc. 1996г.) 
  4.  П.Нортон,  П.Иао  «Программирование   на   С++   в   среде   Windows» 
     («Диалектика» Киев 1993г.) 
  5. Инструкция ЦБ РФ «О порядке организации  работы  обменных  пунктов  на 
     территории Российской федерации, совершения и учета валютно - обменных 
     операций уполномоченными банками» №27 от 27.02.1995г. 
----------------------- 
                               Активная опция 
                              Неактивная опция 
                              «Горячая» клавиша 
Страницы: 1, 2, 3 
	
	
					
							 |