Российский рынок экономических информационных систем. "ХАКЕРС ДИЗАЙН": сетевая система &qu...

Информация - Компьютеры, программирование

Другие материалы по предмету Компьютеры, программирование

? формат:

[ru s1,s2,n], где s1 - строка, содержащая имя вызываемой

программы;

s2 - строка с передаваемыми аргументами ;

n - режим восстановления экрана:

0 - очистить, а затем восстановить,

1 - оставить как есть (для тех случаев, когда вызываемая программа ничего на экран не выводит).

Внешняя программа, вызванная функцией [ru ], результаты своей работы должна поместить в первую строку файла RU.TXT.

Рассмотрим следующий пример.

В вариант стандартной поставки "Финансов без проблем" входит файл-формы PLATEZKA.RPT, обеспечивающий формирование первичного документа "Платежное поручение". С помощью псевдопроводки "создать документ" он может быть "пристыкован" к операциям. Однако, каждый раз при формировании документа он заставляет нас вводить банковские реквизиты контрагента. Кроме того, организованный в нем последовательный ввод значений не очень-то удобен. Было бы намного приятнее выбирать необходимые значения из справочника, устанавливающего соответствие кода субсчета, передаваемого в форму, банковским реквизитам контрагента - расчетному счету, МФО и названию банка.

Для решения этой задачи можно использовать следующую простую программу BANK.EXE, написанную на языке СУБД Clipper Summer87. При ее "сборке" должны использоваться библиотеки clipper.lib, extend.lib и ct1.lib:

 

parameters FBP_par

* если нет параметров - не работаем

* список параметров должен быть заключен в двойные кавычки

if pcount() = 0

clear

? Программа может работать только вместе с "Финансами без проблем"

? Параметры не указаны. Нажмите любую клавишу

inkey(0)

quit

endif

 

set scoreboard off

 

* файл BANK.DBF должен иметь следующие поля

* SUB_SCET - символьного типа, длина 9

* KONTRAG - символьного типа, длина 100

* RS - символьного типа, длина 11

* MFO - символьного типа, длина 10

* BANK1 - символьного типа, длина 50

* BANK2 - символьного типа, длина 50

* длина полей может быть и иной, но тогда надо изменить настройки

* вызова программы функцией [ru ]

* для приведенного в книге примера критична длина полей RS и MFO

* при изменении их в файле BANK.DBF должны быть изменены параметры

* функции [cp ]

* BANK.DBF должен быть предварительно проиндексирован по полю SUB_SCET

 

use bank index bank

 

* функция [ru ] должна должна передать программе

* код субсчета, выбранный при регистрации операции и

* название субсчета, разделенные точкой с запятой

 

subscet = token( FBP_par, ;, 1 )

kontrag = token( FBP_par, ;, 2 )

 

* ищем запись, относящуюся к данному контрагенту

seek rtrim(subscet)

 

* если такой записи нет, то добавляем запись с данным кодом и

* наименованием субсчета

if .not. found()

append blank

replace sub_scet with subscet, kontragent with kontrag

do EditRecord

endif

 

* оформляем экран - функция [ru ] должна использоваться

* с параметром восстановления экрана

set color to n/bg

@ 0,0 say center(Банковские реквизиты контрагентов,80,.T.)

@ 24,0 say Enter-выбрать F5-добавить F4-изменить F8-пометить к удалению F2-сортировать

set color to w/b,n/w

@ 1,0 clear to 23,79

@ 1,0 to 1,79 double

set cursor off

 

* выводим на просмотр записи о контрагентах для возможности модификации

declare f_list[3], h_list[3]

f_list[1] = if(deleted(),"*"," ")

f_list[2] = sub_scet

f_list[3] = left(kontragent,61)

h_list[1] =

h_list[2] = Субсчет

h_list[3] = Контрагент

dbedit( 2, 0, 23, 79, f_list, KeyProc, , h_list )

 

* записываем в файл RU.TXT строку,

* содержащую расчетный счет, МФО и название банка

memowrit( RU.TXT, RS+MFO+alltrim(Bank1)+ +alltrim(Bank2) )

 

pack && удаляем помеченные к удалению записи

 

* функция обработки нажатий клавиш в dbedit()

function KeyProc

parameters mode, field_ptr

if mode < 4

return 1

endif

do case

case lastkey() = 13 && выбрать запись

return 0

case lastkey() = -4 && добавить запись

subscet = sub_scet && копируются код субсчета и

kontrag = kontragent && название субсчета текущей записи

append blank

replace sub_scet with subscet, kontragent with kontrag

do EditRecord && редактирование банковских реквизитов

return 2

case lastkey() = -1 && восстановление индексов

reindex && ох, капризные они у Clipperа

return 2

case lastkey() = -3 && редактирование банковских реквизитов

do EditRecord

case lastkey() = -7 && пометить/снять пометку

if deleted() && к удалению записи

recall

else

delete

endif

endcase

return 1

 

 

* редактирование полей "Расчетный счет", "МФО" и "Название банка"

procedure EditRecord

save screen

set color to n/bg

@ 24,0 say center(Insert-вставка/замена Удаление: Del,Bs,Ctrl/T,Ctrl/Y,80,.T.)

set color to w/b,n/w

@ 1,0 clear to 23,79

@ 2,2 say Субсчет: ..... +sub_scet

@ 4,2 say Контрагент ... +left (kontragent,50)

@ 5,17 say right(kontragent,50)

@ 7,0 to 7,79

@ 9,2 say Расчетный счет .... get RS

@ 11,2 say МФО ............... get MFO

@ 13,2 say Банк получателя ... get Bank1

@ 14,2 say get Bank2

set cursor on

read

set cursor off

restore screen

 

Для использования программы необходимо штатными средствами обработки dbf-файлов создать файл BANK.DBF, включающий поля:

 

SUB_SCET - символьного типа, длина 9,

KONTRAG - символьного типа, длина 100,

RS - символьного типа, длина 11,

MFO - символьного типа, длина 10,

BANK1 - символьного типа, длина 50,

BANK2 - символьного типа, длина 50.

 

BANK.DBF должен быть проиндексирован по полю SUB_SCET. Имя индексного файла - BANK.NTX