:: Visual Foxpro, Foxpro for DOS
Как отредактировать файл?
recozi

Сообщений: 6
Дата регистрации: 23.07.2018
Всем добрый день.

На новой работе у одного из пользователей стоит база учета медикаментов, написанная под VFP8. Она не основная, сопутствующая, локальная, но вот ведут они в ней учёт уже n лет и пока про переход на другие системы не помышляют. В целом она работоспособна, критических ошибок не выдаёт, в общем устраивает их всем, кроме одного.

В печатной форме отчета (даже название не помню) у них проставляется ответственный - просто ФИО, даже без должности.
Периодически этот ответственный меняется (на время отпуска или после увольнения) и эти ФИО надо менять. Реализовывалось это следующим образом:
Рядом с папкой базы лежит папка fam , в ней папки 1, 2, 3, 4 (по количеству подготовленных отетственных), в каждой лежат по 4 файла.
m44.frt
m44.frx
m44.fxp
m44.prg

на рабочем столе пользователя батники с фамилиями. Когда надо поменять ФИО, жмут на батник, который копирует эти 4 файла из соответствующей папки в simplas.
Следовательно, они уже лежат заранее подготовленные и отредактированные. А вот чем их подправить, и какой именно, разобраться сходу не смог. Я думал, может макеты табличного документа так хранятся, искал по расширениям, но поиск ничего, кроме связи с FP не выдал. Блокнот тоже почему-то не нашёл ни одного вхождения. Опыта работы с FP у меня нет, последние лет 12 я сидел на 1С. Сходу разобраться, в каком именно файле, хранится эта информация, не получилось. Прошлый обслуживающий специалист не помнит, где там что менялось.

Вопрос на самом деле звучит полностью так:
1) Какой из этих файлов нужно отредактировать, чтобы поменять значение в отчете? (есть мнение, что, возможно, править нужно только один файл, а пачкой их копируют, просто потому что кто-то первый так начал делать, тоже не разобравшись)
2) Чем его можно отредактировать?
3) В идеале бы еще понять по каждому файлу, за что он отвечает. Так как мне готовить инструкции на будущее в том числе по этой операции.

Заранее благодарен за ответ.



Исправлено 2 раз(а). Последнее : recozi, 23.07.18 09:27
Ratings: 0 negative/0 positive
Re: Как отредактировать файл?
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
Первым делом смотрим (и показываем здесь) файл с расширением PRG.


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Как отредактировать файл?
Божья_коровка

Сообщений: 25731
Дата регистрации: 23.08.2001
Ну вам для начала нужно выяснить, как в отчет попадает ФИО ответственного. Эти данные берутся из базы или в лоб прописываются в том же отчете который формируется - m44.frt, m44.frx
Либо может быть прописан тоже в лоб в программном файле - m44.prg. Открываете файлы и смотрите как формируется отчет, ищете блок ответственный за вывод информации по ФИО.


------------------
Жись, она как зёбра, полоса белая, полоса черная, а мне всегда задница достается...
Ratings: 0 negative/0 positive
Re: Как отредактировать файл?
ry

Сообщений: 2113
Дата регистрации: 24.09.2007
Странный подход, конечно, был у разработчика. Обычно ФИО для подписей все-таки размещают где-нибудь в таблице и дают пользователю возможность редактирования этих данных в самой программе. Но чего только не бывает на практике.
Файлы с расширением frx и frt - это и есть сама печатная форма отчета (оба файла связаны и должны копироваться вместе), но отредактировать их без VFP не просто. Файлы prg и fxp - это соответственно файл с текстом программы и скомпилированный программный файл. Файл prg текстовый, его можно редактировать любым текстовым редактором, при запуске программы из IDE VFP этот файл компилируется в fxp.
Вряд ли в программном файле будет формироваться фамилия для подписи в отчете, скорее всего, она "зашита" в самой печатной форме. То есть, файлы prg и fxp тогда не нужны. Кстати, можно банально сравнить файлы с одинаковыми именами из разных папок побайтно, чтобы понять, какие из них и чем отличаются. Также можно архив с файлами выложить сюда, если нет особой секретности.
Ratings: 0 negative/0 positive
Re: Как отредактировать файл?
recozi

Сообщений: 6
Дата регистрации: 23.07.2018
А чем открыть этот самый prg, чтобы его показать тут? Может есть что-то максимально легкое, типа вьюера?
Да, думаю, проще будет их сюда все положить.
Пойду, схожу, в том корпусе даже интернета нет.)



Исправлено 1 раз(а). Последнее : recozi, 23.07.18 09:52
Ratings: 0 negative/0 positive
Re: Как отредактировать файл?
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
recozi
А чем открыть этот самый prg, чтобы его показать тут? Может есть что-то максимально легкое, типа вьюера?
Да, думаю, проще будет их сюда все положить.
Пойду, схожу, в том корпусе даже интернета нет.)
Написано же, что это обычный текстовый файл. Какой еще вьювер вдруг понадобился для текстового файла? Его можно просто выложить сюда прикрепив к сообщению.

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Как отредактировать файл?
recozi

Сообщений: 6
Дата регистрации: 23.07.2018
Во вложении m44.prg и архив со всеми 4-мя файлами.
Где-то там должна быть "зашита" сотрудница с фамилией "Пустоветова".

P.S. Видимо на том компьютере старом ещё и проблемы с кодировкой какие-то, потому что открывалось всё в блокноте в нечитабельном виде. Поэтому для меня и prg как какой-то кусок откомпилированного кода выглядел.
На моём компьютере поиск сразу нашёл её в файле frt, осталось понять, можно ли грубо взять и подменить это значение в текстовом редакторе. Или нужно это будет делать как-то правильно.



Исправлено 2 раз(а). Последнее : recozi, 23.07.18 11:03
Ratings: 0 negative/0 positive
Re: Как отредактировать файл?
Божья_коровка

Сообщений: 25731
Дата регистрации: 23.08.2001
Ну да, у вас ФИО ответственного прописано в лоб прям в файле отчета. Открываете его через ту версию фокса на которой у вас скомпилировано приложение, меняете и заново компилируете проект. Подправить вам файлик отчета? Но предупреждаю у меня VFP8.


------------------
Жись, она как зёбра, полоса белая, полоса черная, а мне всегда задница достается...




Исправлено 1 раз(а). Последнее : Божья_коровка, 23.07.18 11:09
Ratings: 0 negative/1 positive
Re: Как отредактировать файл?
recozi

Сообщений: 6
Дата регистрации: 23.07.2018
Божья_коровка
Ну да, у вас ФИО ответственного прописано в лоб прям в файле отчета. Открываете его через ту версию фокса на которой у вас скомпилировано приложение, меняете и заново компилируете проект. Подправить вам файлик отчета? Но предупреждаю у меня VFP8.

Спасибо за предложение, но лучше я сам попробую это проделать. Ведь у сотрудников не будет возможности зайти на форум и попросить помощи, надо убедиться в том, что всё отработает на местной конфигурации.

Тут тоже VFP8, но если открывать через него, он предлагает открыть только файлы типа prg, frx (и плюс куча других расширений), но frt открыть не даёт в приглядном виде.
Если же его обмануть и использовать маску *.*, он его открывает, но как в обычном текстовом редакторе. Какой способ будет идеологически правильным?
Я так понимаю, эта последовательность лежит где-то в фразе "меняете и заново компилируете проект", но картина в голове пока не нарисовалась.
Ratings: 0 negative/0 positive
Re: Как отредактировать файл?
ry

Сообщений: 2113
Дата регистрации: 24.09.2007
recozi
На моём компьютере поиск сразу нашёл её в файле frt, осталось понять, можно ли грубо взять и подменить это значение в текстовом редакторе. Или нужно это будет делать как-то правильно.
Правильно - это корректировать отчет в той же версии VFP, в которой создана программа. Текстовым редактором здесь не обойтись (разве что длина ФИО совпадет, да и то не уверен, что получится, так как текстовые редакторы любят обрезать/удалять всякие нетекстовые символы, то есть портят файл). Но если под рукой нет VFP, а есть редактор таблиц DBF, умеющий работать с мемо-полями, то можно попробовать справиться с его помощью. Для этого надо переименовать расширение файла frx в dbf, а расширение frt - в fpt. Файлы должны лежать в одной папке, имена не менять. После этого открыть таблицу dbf имеющимся редактором и подправить значение мемо-поля Expr в 16-й строке (строка с идетификатором Uniqueid=_0WD0O33A6). Затем переименовать расширения файлов обратно в frx и frt.
recozi
Тут тоже VFP8, но если открывать через него, он предлагает открыть только файлы типа prg, frx (и плюс куча других расширений), но frt открыть не даёт в приглядном виде. Тут тоже VFP8, но если открывать через него, он предлагает открыть только файлы типа prg, frx (и плюс куча других расширений), но frt открыть не даёт в приглядном виде.
Открывайте frx, frt специально открывать не нужно - он сам "подтянется".



Исправлено 1 раз(а). Последнее : ry, 23.07.18 11:26
Ratings: 0 negative/1 positive
Re: Как отредактировать файл?
recozi

Сообщений: 6
Дата регистрации: 23.07.2018
VFP8 есть, сделал через него. Открыл FRX, через label отредактировал поле с ФИО, сохранил FRX. Посмотрел блокнотом снаружи FRT - всё сохранилось.

Сделал 2 прохода, первый раз скомпилировал + сохранил frx, второй раз просто изменил-сохранил frx. Изменения сохранились в обоих случаях.
Осталось два вопроса -

1) обязательно ли перекомпилировать prg в этом случае? Если никакие ссылочные данные не трогались, фактически поправилась только форма макета.

2) Второй вопрос вытекает из первого. При столь незначительных изменениях конкретно в этом случае (правился только текст) обязательно ли копировать prg и fxp -файлы?
Спрашиваю не из праздного интереса, при создании инструкции для сотрудников (на случай, когда и меня уже тут не будет) хотелось бы минимизировать совершаемые ими действия. Но допускаю, что могу не знать чего-то (а точнее вообще ничего не знаю) из области структурного хранения данных в этой системе.



Исправлено 1 раз(а). Последнее : recozi, 23.07.18 12:38
Ratings: 0 negative/0 positive
Re: Как отредактировать файл?
BOBAN

Сообщений: 625
Откуда: Солигорск
Дата регистрации: 05.07.2004
Создать файл fio.txt, в котором прописать инициалы. А в отчете использовать поле с выражением FileToStr('fio.txt').
Ratings: 0 negative/0 positive
Re: Как отредактировать файл?
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
BOBAN
Создать файл fio.txt, в котором прописать инициалы. А в отчете использовать поле с выражением FileToStr('fio.txt').
Это как самый тупой и примитивный вариант Только позаботится о том чтобы папка с fio.txt была текущей или была прописана в path - а то не найдёт.

А так - создать табличку со списком ФИО, и либо через поле-флажок "текущий", либо просто вручную (через грид на форме или даже тупой browse) встав на нужную запись перед генерацией отчёта получать нужные значения в этом поле (поменяв label на field).

2 recozi
Компиляция создаёт из prg файлов fxp. frx/frt файлы она не затрагивает вообще. Конечно если они не включаются в exe, но и тогда для внесения изменений в exe нужна не компиляция, а сборка (build) проекта. В 8 версии фокса компиляция доступна и в рантайме, но не происходит автоматом - т.е. просто поменять prg файл и запустить программу недостаточно - но если где-то в этой программе присутствует команда compile MyExternalProgram.prg - тогда вполне можно обходясь без среды разработки просто править у клиентов этот prg файл.
Есть команда COMPILE REPORT, но она в frx/frt файлах компилирует программный код (он там может быть в объекте DataEnvironment) - к собственно "макету" это отношения не имеет. Если fxp это тот же самый prg в откомпилированном виде, то frt+frx это по сути одна сущность - это dbf и его файл мемо-полей.

VFP это и язык и среда разработки и файл-серверная СУБД в одном флаконе. Потому там принято хранить данные в таблицах (dbf файлах), ну или работать со внешними "большими" СУБД. Выше я написал как более правильно решить вопрос с хранением и выбором из списка нужного реквизита для "подписи". Даже тупо хранить одно ФИО в txt файле и забирать его в отчёт через FILETOSTR() и то лучше, нежели городить какие-то кучи подменяемых файлов и копирующие их туда-сюда батники.


------------------
WBR, Igor




Исправлено 1 раз(а). Последнее : Igor Korolyov, 23.07.18 15:03
Ratings: 0 negative/0 positive
Re: Как отредактировать файл?
akvvohinc
Автор

Сообщений: 4218
Откуда: Москва
Дата регистрации: 11.11.2008
recozi
осталось понять, можно ли грубо взять и подменить это значение в текстовом редакторе. Или нужно это будет делать как-то правильно.
У вас есть все, что нужно - и исходник программы вызова отчета, и сам отчет.
Нет никаких проблем сделать все по-человечески, поправив и то, и другое, добавив возможность выбора ФИО из таблицы (и ведение самой таблицы) по нажатию какой-нибудь кнопки.

Да даже просто выводить поле с ФИО на экран над строкой
@ 2,17 SAY "0.БЮДЖЕТ 1,2,3,4,5 " GET BUDJ
или под строкой
@ 28,17 SAY "0 Только итоги по ОБЪЕКТАМ УЧЕТА - поставьте 1 " GET s0
давая возможность его исправить при необходимости и сохраняя/восстанавливая его из mem-файла, много лучше текущего "регламента" работы.

recozi
Опыта работы с FP у меня нет, последние лет 12 я сидел на 1С.
12 лет на 1C должно за глаза хватить для того, чтобы, чуть разобравшись в FoxPro, решить это минутное дело.
Ratings: 0 negative/1 positive
Re: Как отредактировать файл?
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
akvvohinc
@ 2,17 SAY "0.БЮДЖЕТ 1,2,3,4,5" GET BUDJ
Ох как же там всё запущено FPD программа запускаемая под VFP - это очень грустно...


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Как отредактировать файл?
recozi

Сообщений: 6
Дата регистрации: 23.07.2018
В общем, немного покопавшись, пришёл к выводу, что там все же был реализован какой-то механизм подписи ответственного.
Поправьте, если ошибаюсь, в макете подготовлено поле mnamemol, в файле prg стоят условия его заполнения и в папке базы лежит таблица соответствий.
[attachment 29756 otvetst_.jpg]
Пока только я не разобрался, как это изначально задумывалось работать, и, видимо, мои предшественники тоже, поэтому "придумали" такой выход из положения.

Всем спасибо, буду разбираться, посмотрю как это работает на примере других таблиц, пищу для ума вы мне дали. Если не разберусь, попробую использовать filetostr().
Ratings: 0 negative/0 positive
Re: Как отредактировать файл?
akvvohinc
Автор

Сообщений: 4218
Откуда: Москва
Дата регистрации: 11.11.2008
recozi
Пока только я не разобрался, как это изначально задумывалось работать

Судя по коду, ФИО должно было однозначно определяться по двум реквизитам, которые вводятся перед печатью:
- инн юридического лица;
- код мат-отв.лица (до 12 первых символов ФИО).

В таблице mato им соответствует 2 поля:
- checksum
- matotv

Если по введенным реквизитам в таблице находится запись, то из нее берется ФИО (поле matotv) и выводится в отчете.

Но не думаю, что так уж важно разобраться, как это когда-то планировалось работать - надо решить, как это должно работать сейчас (текущая логика), и поправить программу соответствующим образом.

PS
Правда, чтобы поиск выполнялся нормально, выражение
Alltrim(substr(mol1,1,12))= Alltrim(substr(matotv,1,12))
лучше "перевернуть":
Alltrim(substr(matotv,1,12)) = Alltrim(substr(mol1,1,12))

Тогда можно указывать менее 12 символов ФИО, которые бы однозначно ее определяли в справочнике.



Исправлено 1 раз(а). Последнее : akvvohinc, 25.07.18 18:32
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 35 PaulWist  (Гостей: 34)

© 2000-2024 Fox Club 
Яндекс.Метрика