Re: Сохранение данных в файл (sed,ged)


[ Пpишедшие ответы ] /www.hdru.com/wwwboard/faq.htm">Help ]

Posted by Секретев Владимир on October 26, 1998 at 11:14:14:

In Reply to: Сохранение данных в файл (sed,ged) posted by Рустем Мухаметшин on October 22, 1998 at 02:37:39:

Полностью согласен. Одного файла типа edxrd.dat мало. Однако, как только разработчик "пойдет на поводу" и даст возможность использовать произвольное количество таких файлов, появится желание хранить "связанные" данные, придать набору дисковых файлов "структуру" - образовывать связи между таблицами, потребуются индексные файлы и так далее. Не дай Бог все может закончится очень печально - требованием ввести SQL и похоронами основной концепции "Финансов".

Разработчик, мне кажется, хорошо это понимает и, по этому, не скоро на это пойдет. Во всяком случае, в силу вышесказанного, это должен быть качественный скачек, хорошо подготовленный теоретически, новый шаг в развитии "Финансов" ожидать который в ближайшем будущем не приходится.

Как быть сейчас? Есть пара советов.

Совет первый.
~~~~~~~~~~~~~
------> Увеличение "плотности" extrd.dat
------> Повышение быстродействия.

Для хранения реквизитов контрагентов и паспортных данных работников используйте всю длину записи (255 символов) extrd.dat. Опыт показывает, что для хранения всех необходимых реквизитов одного контрагента этого вполне достаточно.
Заведите индекс например такой: '60-0001RKZ', "склейте" все реквизиты поставщика 60-0001 в одну строку S и положите их разом на диск одним sed.

S = <расчетный счет>+<корр счет>.......
x = [sed '60-0001RKZ', S]

Для размещения данных в этой строке обязательно используйте формат фиксированной длинны. То есть расчетный счет начинается с позиции 2 и заканчивается позицией 21 - всего 20 символов; корр счет начинается с позиции 22 и заканчивается позицией 41 - тоже 20 символов и так далее.
Напишите три подпрограммы и разместите их в first.rpt:

:F_ADRS определяет соответствие между именем поля и адресом в базе
! AD = '_RS_' расчетный счет
PX = 2
PY = 21
return
! AD = '_KS_'
PX = 22
PY = 41
return
!
Ошибка определения адресаа в базе.
return
*
*
F_RE читает из строки с позиции, определенной в F_ADRS
ST = [cp P, PX, PY-PX-1]
return

F_WR - пишет в строку по определенным в F_ADRS координатам.
примерный текст не привожу, так как он довольно длинен 20-25 строк. Если кого-то серьезно заитнтересует, то пишите мне на Email.

Плотность хранения достигается за счет более рационального использования пространства extrd.dat.
Быстродействие - за счет того, что теперь требуется ОДИН цикл чтения с диска для извлечения ВСЕХ реквизитов. А вызов подпрограмм и функция [cp] работают гораздо быстрее чем дисковые операции.


Совет второй.
~~~~~~~~~~~~~
------> Отделение "мусора" в extrd.dat от информации, которую надо таскать из года в год.

Напишите специальную отчетную форму, которая будет извлекать нужную, не временную информацию из extrd.dat, и представлять ее в виде готовых директив для сервера.
При возникновении новых структур данных, хранящихся в extrd.dat добавляйте в эту форму новые модули кода. Эту форму можно будет использовать для периодической "чистки" extrd.dat в течении одного года и для переноса только необходимых данных в год новый.

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!! Не принебрегайте резервным копированием !!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!



Пpишедшие ответы: