:: Visual Foxpro, Foxpro for DOS
при print report меняется путь для программы
axeum

Сообщений: 119
Дата регистрации: 07.07.2020
Добрый день, нужной темы не нашел поэтому создаю с вопросом, при выполнении report form в любом месте программы, не важно был ли отправлен документ в дальнейшем на печать или просто закрыт(не важно какой репорт был запущен результат будет одним), программа начинает обращаться к c:\users\user\desktop и именно там искать нужные таблицы, мне подсказали что можно переустановить драйвер принтера и может помочь но мне не помогло, может кто сталкивался с подобным?
в программе есть функция setpath() которая как раз и определяет пути для программы где искать файлы, но репортов много и везде его прописывать как то странно + проблема не массовая, а только у 1 клиента
REPORT FORM .\reports1\r_86 TO PRINTER PROMPT preview
Ratings: 0 negative/0 positive
Re: при print report меняется путь для программы
danton1973

Сообщений: 158
Откуда: Пермь
Дата регистрации: 10.08.2020
1. Советую имена форм и отчётов вызывать с расширением: DO FORM FORM.SCX REPORT FORM REPORT.FRX
2. В файле config прописываем пути в каталогам с данными, картинками, и т.д. При запуске считываем и SET PATH (path) ADDITIVE
3. Если не поможет, то вызывать файлы через функцию FindFile:
FUNCTION FindFile
LPARAMETERS tcFileName
*Ищем файл по всем каталогам, указанным в set path и set default
*PATH=D:\Projects\VFP\Common\SPR\;d:\Projects\VFP\Common\PROGS\;d:\Projects\VFP\Common\LIBS\;.\Data\;.\Forms\;.\Class\;.\Progs\;.\Menus\;.\Libs\;.\Text\;.\Help\;.\Reports\;.\GRAPHICS\;"C:\Program Files (x86)\Microsoft Visual FoxPro 9\"
LOCAL i,lnVolDir AS INTEGER
LOCAL lcFilePath AS STRING
LOCAL ARRAY laDir[1]
IF EMPTY(m.tcFileName) OR TYPE("m.tcFileName")#'C' &&не надо всякую фигню передавать!
RETURN ''
ENDIF
IF TYPE("cAppDir")#'C'
m.cAppDir=SYS(5)+CURDIR()
ENDIF
m.tcFileName=ALLTRIM(m.tcFileName)
m.lcFilePath=SET("Path")+';'+SET("Default") &&возьмём все пути для поиска
m.lnVolDir=ALINES(laDir,m.lcFilePath,1+4,';')
m.lcFilePath=''
IF EMPTY(JUSTEXT(m.tcFileName))
m.tcFileName=AddExt(m.tcFileName,"dbf") &&по умолчанию ищем dbf!
ENDIF
IF !FILE(m.tcFileName) && Ну а вдруг?
m.tcFileName=JUSTFNAME(m.tcFileName)
FOR i=1 TO m.lnVolDir
IF LEFT(laDir[i],2)==".\" &&относительный путь
laDir[i]=m.cAppDir+SUBSTR(laDir[i],3)
ENDIF
m.lcFilePath=FULLPATH(ADDBS(laDir[i])+m.tcFileName)
IF FILE(m.lcFilePath)
EXIT
ELSE
m.lcFilePath=''
ENDIF
NEXT
ELSE
m.lcFilePath=FULLPATH(m.tcFileName)
ENDIF
RETURN m.lcFilePath
Ratings: 0 negative/0 positive
Re: при print report меняется путь для программы
axeum

Сообщений: 119
Дата регистрации: 07.07.2020
ну путь не в конфиге прописан, но при запуске он в set path прописывается, получается при открытия репортов в программе сбивается весь SET PATH, тогда возникает вопрос а почему при открытие репорта set path вообще изменяется? я все же думал что в принтерах проблема, оба отключили от системника но проблема осталась, получается проблема в самом открытии репорта?
FUNCTION SetPath()
LOCAL lcSys16, lcProgram
lcSys16 = SYS(16)
lcProgram = SUBSTR(lcSys16, AT(":", lcSys16) - 1)
CD LEFT(lcProgram, RAT("\", lcProgram))
*-- Если стартовали из MAIN.PRG, то переходим в головную директорию
IF (RIGHT(lcProgram, 3) == "FXP") OR (RIGHT(lcProgram, 3) == "PRG")
CD ..
ENDIF
** пути к папкам проекта
SET PATH TO ;DATA;FORMS;CLASS;MENUS;OTHER;PICRURES;PROGRAMS;REPORTS;REPORTS1;XLS;TEXT;INCLUDE;TEMP;UTIL;STRUCT;ARXIV;DATA0;GIS
** пути к библиотекам классов
SET CLASSLIB TO BASE, Cmd, WORK
** пути к процедурным файлам
SET PROCEDURE TO;
Utils, ;
ONERROR, ;
PERESCH, ;
appFunc, ;
FuncWork, ;
ProcWork, ;
CPZero, ;
FTP, ;
PeniNew2, ;
peninew3, ;
peninew4, ;
print_pd, ;
print_pd1, ;
print_qr, ;
print_kvit, ;
recalc, ;
LibOOo, ;
avtopok, ;
SetTuning, ;
global_per, ;
getdativ, ;
kkm_atol, ;
kkm_atol_5, ;
kkm_shtrih, ;
kol_jil, ;
proc_edo
global_per()
ENDFUNC
Ratings: 0 negative/0 positive
Re: при print report меняется путь для программы
Владимир Максимов

Сообщений: 14120
Откуда: Москва
Дата регистрации: 02.09.2000
axeum
тогда возникает вопрос а почему при открытие репорта set path вообще изменяется?

Если проблема с одним отчетом, очевидно, что дело именно в этом конкретном отчете, а не "вообще"

В отчете можно писать программный код. Вот и посмотрите, какой именно код у Вас в отчете есть. Там очень много мест, где это можно сделать

В принципе, можно попробовать открыть файл мемо-полей отчета FRT в блокноте как текстовый файл и поискать вызов функций. Без гарантий, конечно, но что-то можно найти

В самом худшем случае придется делать отчет с нуля. Перенести один объект, вызвать отчет, проверить пути доступа. Если все хорошо, переносишь другой объект, вызвать отчет, проверить пути доступа. И т.п.
Ratings: 0 negative/0 positive
Re: при print report меняется путь для программы
axeum

Сообщений: 119
Дата регистрации: 07.07.2020
если б была проблема в 1 конкретном отчете то тут хотя бы понятно где искать(ну точнее хотя бы направление есть), а получается что любой вызов репорта ломает пути в программе, была идея добавить setpath() сразу после report я так собсно и сделал но это на 1 кнопке и таких кнопок не одна и как временное решение оно конечно подошло, но вылез другой нюанс что таких репортов в программе много и в каждом писать это много времени займет, да и как то не правильно что после каждого репорта надо заново SET PATH по сути прописывать
Ratings: 0 negative/0 positive
Re: при print report меняется путь для программы
sphinx

Сообщений: 31607
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
axeum
если б была проблема в 1 конкретном отчете то тут хотя бы понятно где искать(ну точнее хотя бы направление есть), а получается что любой вызов репорта ломает пути в программе, была идея добавить setpath() сразу после report я так собсно и сделал но это на 1 кнопке и таких кнопок не одна и как временное решение оно конечно подошло, но вылез другой нюанс что таких репортов в программе много и в каждом писать это много времени займет, да и как то не правильно что после каждого репорта надо заново SET PATH по сути прописывать

Нет у меня процедуры, подобной SetPath(), пути в головном модуле один раз прописал - и все работает. Если отчеты похожие, но есть различия - так под разными именами сохранить.


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: при print report меняется путь для программы
Владимир Максимов

Сообщений: 14120
Откуда: Москва
Дата регистрации: 02.09.2000
Не помню, чтобы на этом форуме подобный вопрос поднимался. Скорее всего, в вашем приложении реализован некий FrameWork (классы, методы, функции), который при запуске отчетов меняет или директорию по умолчанию или пути доступа. Т.е. ищите почему это происходит конкретно у Вас. Ищите, что именно (какая команда) "сбивает" пути доступа

Что может меняться?

SET DEFAULT - это директория по умолчанию, относительно которой и выполняется поиск всех путей, указанных в SET PATH

У Вас может быт реализован вызов этой команды напрямую (например, чтобы временные файлы для отчета куда-то класть). Также есть ряд функций, которые могут эту директорию поменять. Обычно это какие-то функции по работе с путями доступа, вроде putFile(). Вызов таких функций надо окружать "скобками" для восстановления исходного состояния

Собственно, и SET PATH также может быть у Вас вызван где-то при вызове отчетов...

Т.е. я считаю, что это не проблема вызова отчета "вообще", а проблема реализации Вашего FrameWork по работе с отчетами. Ищите ошибку у себя. Точнее, это не ошибка, а какая-то особенность.

PS: Если сделаете "чистый" отчет (Report) без использования каких-либо Ваших функций, проблема воспроизводится? Т.е. просто курсор на пару строк и по нему Report
Ratings: 0 negative/0 positive
Re: при print report меняется путь для программы
axeum

Сообщений: 119
Дата регистрации: 07.07.2020
Владимир Максимов
Т.е. я считаю, что это не проблема вызова отчета "вообще", а проблема реализации Вашего FrameWork по работе с отчетами. Ищите ошибку у себя. Точнее, это не ошибка, а какая-то особенность.

PS: Если сделаете "чистый" отчет (Report) без использования каких-либо Ваших функций, проблема воспроизводится? Т.е. просто курсор на пару строк и по нему Report

я был бы согласен что проблема может быть в самих отчетах, но есть нюанс такой клиент с такой ошибкой только 1 , у всех остальных все отчеты работают как часы, да и у меня никогда такой проблемы в проекте не возникало, сколько сейчас не пытался получить такую же проблему не получилось

я сделал мини отчет с 5 полями и курсором для проверки, правда жалко что завтра только смогу проверить его у клиента
Ratings: 0 negative/0 positive
Re: при print report меняется путь для программы
Владимир Максимов

Сообщений: 14120
Откуда: Москва
Дата регистрации: 02.09.2000
Какие отличия могут быть у клиента?

1. Драйвер принтера
2. Антивирус
3. Сетевые пути доступа (путь доступа на не существующий ресурс или затрудненный доступ к ресурсу)
4. Другой Config.fpw со своими настройками SET PATH, SET DEFAULT (если используется свой файл конфигурации, то посмотреть свой файл)
5. Переменная PATH в операционной системе
6. Старая версия приложения

Т.е. можно предположить, что при выполнении отчета произошла какая-то ошибка в результате которой все ранее настроенные пути доступа были сброшены и далее используются пути доступа по умолчанию
Ratings: 0 negative/0 positive
Re: при print report меняется путь для программы
leonid

Сообщений: 3222
Откуда: Рига
Дата регистрации: 03.02.2006
Что-то мне помнится, что лет 25-30 назад я с такой проблемой встречался. Сейчас посмотрел, в классе кнопки для печати в начале запоминается set default, а в конце восстанавливается. Насколько я помню, это было связано с принтерами, которые записывали в файл, типа pdf, и давали выбрать путь, куда записать. При этом открывается окно для выбора файла, и если там поменять директорию, то set default тоже менялся со всеми вытекающими отсюда последствиями.
Ratings: 0 negative/0 positive
Re: при print report меняется путь для программы
WbrErr

Сообщений: 1961
Дата регистрации: 05.12.2006
В properties Report-а флажок "Save printer environment" включен/выключен?
Ratings: 0 negative/0 positive
Re: при print report меняется путь для программы
axeum

Сообщений: 119
Дата регистрации: 07.07.2020
WbrErr
В properties Report-а флажок "Save printer environment" включен/выключен?
выключен

Владимир Максимов
Какие отличия могут быть у клиента?
1. Драйвер принтера
2. Антивирус
3. Сетевые пути доступа (путь доступа на не существующий ресурс или затрудненный доступ к ресурсу)
4. Другой Config.fpw со своими настройками SET PATH, SET DEFAULT (если используется свой файл конфигурации, то посмотреть свой файл)
5. Переменная PATH в операционной системе
6. Старая версия приложения

Т.е. можно предположить, что при выполнении отчета произошла какая-то ошибка в результате которой все ранее настроенные пути доступа были сброшены и далее используются пути доступа по умолчанию

1. там 2 принтера, для каждого поставил драйвер результата 0, пробовал оба принтера отключить и без них попробовать, результат - тот же
2. касперский есть, пробовал его отключить и перезапустить комп(касперский при включении был выключен) результат - тот же, пробовал вообще всю защиту винды вместе с касперским отключить и на всякий перезагрузил комп, результат - тот же
3.программа локальная на C стоит(банальный путь C:\jkx), все принтеры подключены именно к этому компьютеру тоже локально
4.конфиг один для всех без каких либо изменений, сверил его со своим они одинаковые, но на всякий случай если чего то не заметил перекинул ей свой конфиг и как результат - ошибка на месте
5.вот тут не понял что надо проверять
6.у них жесткий полетел, и программа и база с самым последним обновлением

а вот мой мини отчет не получилось у нее запустить, не знаю почему
upd. отчет получилось запустить но результат все тот же, я получил ошибку что таблицы нет на рабочем столе, чтобы найти ошибку скинул им 6 фокс и думал там получу ошибку, но нет и в фоксе и в программе отчет просто запустился
*этот код пишу в поле и нажимаю выполнить
CREATE CURSOR c1(nus c(10),npu c(10),norma c(10), kol c(10),cena c(10),sumnor c(10))
INSERT INTO c1 value('хвс','хвс','6.47','1','5','6.47*1*5')
REPORT FORM 'c:\1\r_test' TO PRINTER PROMPT preview
*на кнопке выполнения этот код
LOCAL p1
p1 = ALLTRIM(Thisform.edit1.Value)
lErr=.F.
TRY
EXECSCRIPT(p1)
CATCH
lErr=.T.
ENDTRY
IF lErr
MESSAGEBOX('Ошибка')
ELSE
MESSAGEBOX('Выполнено!')
ENDIF
*Thisform.edit1.Value = SPACE(100)



Исправлено 3 раз(а). Последнее : axeum, 03.09.24 08:52
Ratings: 0 negative/0 positive
Re: при print report меняется путь для программы
sphinx

Сообщений: 31607
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Цитата:
5.вот тут не понял что надо проверять

1) Запустите CMD.EXE
2) Наберите SET <Enter>
3) Ищите параметр (переменную среды окружения) "PATH"


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: при print report меняется путь для программы
Владимир Максимов

Сообщений: 14120
Откуда: Москва
Дата регистрации: 02.09.2000
Перед запуском отчета (непосредственно перед командой REPORT FORM в твоем приложении) посмотри, что вернут функции

SYS(2019) - какой именно файл конфигурации реально использует приложение
SET("PATH") - какие пути доступа реально настроены в данный момент

Если используется VFP9 и предполагается использование Report Listener, то попробуй отключить его использование настройкой

SET REPORTBEHAVIOR 80

Сообщение об ошибке - это обращение к системной директории, которая предназначена для временных файлов. Можно посмотреть по SYS(2023). Это возможно только в том случае, если система все остальные пути "потеряла". Как уже писали ранее, "потерять" пути может заставить драйвер принтера, если у него есть какие-то специальные настройки для хранения файлов. Или какой-то не учтенный программный код


И еще по поводу ошибки. Ты создал курсор C1, а в сообщении таблица tuning.dbf. Т.е. явно речь идет о какой-то совершенно посторонней программе



Исправлено 1 раз(а). Последнее : Владимир Максимов, 03.09.24 10:50
Ratings: 0 negative/0 positive
Re: при print report меняется путь для программы
axeum

Сообщений: 119
Дата регистрации: 07.07.2020
Владимир Максимов
И еще по поводу ошибки. Ты создал курсор C1, а в сообщении таблица tuning.dbf. Т.е. явно речь идет о какой-то совершенно посторонней программе
там на выходе из формы из тюнинга подтягивается информация для log_vhod потому и тюнинг вылез как ошибка
Ratings: 0 negative/0 positive
Re: при print report меняется путь для программы
akvvohinc
Автор

Сообщений: 4365
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
была идея добавить setpath() сразу после report я так собсно и сделал
Обычно сначала пытаются найти причину проблемы, а лишь при неудаче мастерить костыли.
Выложите здесь файлы хотя бы одного проблемного отчета, может, вам подскажут, в чем может быть причина, а то и найдут её.
Ratings: 0 negative/0 positive
Re: при print report меняется путь для программы
axeum

Сообщений: 119
Дата регистрации: 07.07.2020
cmd path выдал вот такие пути
PATH=C:\windows\system32;C:\windows;C:\windows\System32\Wbem;C:\windows\System32\WindowsPowerShell\v1.0\;C:\windows\System32\OpenSSH\;C:\Users\USER\AppData\Local\Microsoft\WindowsApps;

sys(2019) вообще пустой вышел в обоих случая
set('path') одинаковым оказался до и после отчета(скрины на всякий случай сделал)
sys(2023) тоже одинаковый путь выдал что до отчета что после(там на скрине написано sys(2019) но по факту там sys(2023)
какие то странности происходят, получается что переменная path остается без изменений, а ошибки все ровно появляется и ищет таблицы на рабочем столе
и пример отчета каким проверял тоже прикрепил
upd. клиенту вернули старый пк правда чистый с семеркой, закинул туда программу,базу и обновили, попробовал отчет сформировать и он сформировался и не было больше никаких ошибок, в понедельник попробуем туда 2 принтера подключить и тогда будет ясно проблема в принтерах или в винде

поменял архив



Исправлено 4 раз(а). Последнее : axeum, 06.09.24 11:21
Ratings: 0 negative/0 positive
Re: при print report меняется путь для программы
Владимир Максимов

Сообщений: 14120
Откуда: Москва
Дата регистрации: 02.09.2000
Не у всех WinRar установлен. Лучше Zip или 7Zip архивировать. Поэтому что там во вложении я не вижу


Если в SET PATH указаны относительные пути, то это пути относительно текущей директории по умолчанию. Посмотри что вернет функция

?FullPath("") - в качестве параметра пустая строка (две кавычки подряд). До и после вызова отчета

Реально это будет полный путь доступа к директории по умолчанию, относительно которой FoxPro ищет пути, указанные в SET PATH

Устанавливается директория по умолчанию через настройку

SET DEFAULT

Собственно, именно директория по умолчанию обычно и "слетает" при разных операциях с выбором/сохранением файла или директории


PS: пустой sys(2019) означает, что реально ваше приложение CONFIG.FPW не использует. Если он необходим, то лучше его указывать явно через ключи запуска. В данном случае через ключ "-С". Примерно так

MyProg.exe -C"C:\MyDir\Config.fpw"

Кавычки для пути доступа к файлу конфигурации нужны, если путь доступа или имя файла содержит пробелы. Если пробелов нет, то можно и без кавычек



Исправлено 1 раз(а). Последнее : Владимир Максимов, 06.09.24 10:49
Ratings: 0 negative/0 positive
Re: при print report меняется путь для программы
akvvohinc
Автор

Сообщений: 4365
Откуда: Москва
Дата регистрации: 11.11.2008
axeum
поменял архив
В этом отчете галка на Save printer environtment стоит, хотя выше вы написали, что она убрана.
Ratings: 0 negative/0 positive
Re: при print report меняется путь для программы
axeum

Сообщений: 119
Дата регистрации: 07.07.2020
akvvohinc
axeum
поменял архив
В этом отчете галка на Save printer environtment стоит, хотя выше вы написали, что она убрана.
действительно, возможно когда открывал в 6 фоксе что то поменялось, но клиент решил просто перенести программу на старый комп и не заморачиваться больше, так что к счастью или к сожалению эксперименты прекратились так и не узнав в чем была проблема
Ratings: 0 negative/0 positive


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

On-line: 19 (Гостей: 19)

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