:: Visual Foxpro, Foxpro for DOS
Re: Как возвратить параметр из программы VFP?
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
Simple777
А можно глянуть какой-нибудь реальный примерчик?
И какие минимально и достаточно прикладывать файлы к exe-модулю?

В FPD-проге обычный RUN c именем VFP-exe, именем CONFIG'а и параметрами:
RUN &vfp_exe -c&vfp_path.config.fpw &parm
А в папке с VFP-программой:
- программа
- config
- ресурсный файл (имя мы делали не foxuser, а vfoxuser, видимо, чтобы не было конфликтов версий)
- библиотеки VFP (или их клали в SYSTEM32)

Да, главное забыл - данные для отчетов передавали через DBF.



Исправлено 2 раз(а). Последнее : akvvohinc, 23.01.21 19:18
Ratings: 0 negative/0 positive
Re: Как возвратить параметр из программы VFP?
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
ssa
Цитата:
Или библиотеки надо обязательно перед использованием зарегистрировать в Windows?
Нет.
Ну формально кое что регистрировать надо - просто обычно это не очень нужное... Поддержка контекстного хелпа (для приложений без интерфейса ну ваще не нужна, да и для полноценных приложений с "формочками" зачастую можно без этого спокойно обойтись). MSXML 4-й версии для XMLAdapter - тут уже интереснее - формально это абсолютно не фоксовый компонент, но вот как раз фоксовый компонент XMLAdapter не сможет без него работать - но и нужен он далеко не всегда.
Раз уж говорилось про "провайдеры" - то oledb провайдеры и odbc драйвера для работы с большими СУБД как правило требуют установки в систему, а порой ещё и определённой настройки. Ну всякие активикс и иные "интересные" компоненты - те же библиотеки стыковок со сканерами штрихкодов, кассами и т.п.
Ну да это, опять таки, к фоксу уже прямого отношения не имеет...


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Как возвратить параметр из программы VFP?
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
И в VFP прлностью формировали выходную форму или обрабатывали уже готовые результаты, полученные в FPD?
Просто любопытно, что именно вы "поручили" делать VFP?
Я предполагаю, что в таблицу можно поместить все итоговые данные по выходной форме, а потом VFP "красиво" отформатирует и направит на печать выходную форму.
Ratings: 0 negative/0 positive
Re: Как возвратить параметр из программы VFP?
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Пока я писал вопрос, был дан ответ.

А что именно вы передавали через dbf?
Ratings: 0 negative/0 positive
Re: Как возвратить параметр из программы VFP?
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
Simple777
А что именно вы передавали через dbf?
Все, что должно было попасть в отчет.

Помнится мы обходились двумя таблицами, но их структуры могли меняться в зависимости от вида отчета:
1) 1-я таблица из одной записи - поля заголовка и подвала
2) 2-я таблица соответствует области Detail (может, иногда таких таблиц было несколько - уже не помню)

Не думаю, что кому-то важно, как именно передавали данные мы.
Каков документ, такие и таблицы должны быть сформированы и переданы.

Хотя никто не мешает, если это возможно и удобно, читать таблицы FPD-приложения прямо из VFP-программы, что-то с ними делать и бросать в отчет. Мы ничего, кроме вывода уже готового, в VFP не делали, данные целиком готовились в FPD - вся бизнес-логика находилась там, а VFP использовался как адаптер между FPD и принтером.
Ratings: 0 negative/0 positive
Re: Как возвратить параметр из программы VFP?
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
akvvohinc
Мы ничего, кроме вывода уже готового, в VFP не делали, данные целиком готовились в FPD - вся бизнес-логика находилась там, а VFP использовался как адаптер между FPD и принтером.

Вот этот момент меня и интересовал. Я тоже так думаю - итоговые данные для выходной формы формировать в FPD, а непосредственно формирование "красивого" отчёта и печать - из VFP. Осталось только научиться делать такую обработку в VFP, поскольку никогда этим не занимался раньше.
Ratings: 0 negative/0 positive
Re: Как возвратить параметр из программы VFP?
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
Осталось только научиться делать такую обработку в VFP, поскольку никогда этим не занимался раньше.
Сложного ничего нет, но рисовать "красивые документы" может быть довольно трудоемко.

Кроме того, перед выводом мы еще дополнительно обрабатывали файл отчета (открывая его как таблицу), подбирая размер шрифта в указанном диапазоне для некоторых полей таким образом, чтобы текст помещался в отведенное для него место (это описывалось с помощью некоторой нотации в Comment этого поля).

Также можно было указать, что текст можно сокращать с помощью специальной функции (например, "специальная функция" --> "спец.функция"), если он не помещается в поле целиком, и еще какие-то манипуляции с текстом полей отчета, которые я уже подзабыл.

Вот для целей определения ширины текста заданным шрифтом использовали свойство Label.width некоторой "невидимой" формы, заполняя этим текстом свойство Label.Caption и устанавливая для Label тот же самый шрифт - этот способ точнее, чем с помощью функций FONTMETRIC() и TXTWIDTH().

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



Исправлено 1 раз(а). Последнее : akvvohinc, 24.01.21 00:14
Ratings: 0 negative/0 positive
Re: Как возвратить параметр из программы VFP?
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
akvvohinc
Сложного ничего нет, но рисовать "красивые документы" может быть довольно трудоемко.

"Красивый" готовый отчет в формате того же Excel имеется. С размерами и типами шрифтов тоже есть ясность. Останется, как думаю, построчное формирование данных из dbf-таблицы на лист Excel. При таком заполнении надо будет каким-то образом реализовывать такие вещи, как объединение столбцов, задание их ширины и высоты и т.д. Видимо, э о всё можно сдела ь средствами VFP? И речь идёт не об очень больших по объёму отчётах - обычно листов до 50 формата А4, не более того. Надо будет поэкспериментировать, когда текущие вопросы закончатся - эпидемия предоставляет свободное время.

А как именно у вас происходил процесс печати "нарисованный формы"? Какой способ вы использовали? И как организовывали возврат в FPD? То есть как работали с событием "печать отчёта закончена" и "теперь вернуться в FPD"?
Такая инфа интересна, потому как к тому или иному окончательном решению приходят, попробовав разные варианты. А у вас уже есть наработанный опыт.

Вот думаю, может отдельный топик открыть с темой "Взамодействие FPD и VFP"?..



Исправлено 1 раз(а). Последнее : Simple777, 24.01.21 06:02
Ratings: 0 negative/0 positive
Re: Как возвратить параметр из программы VFP?
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
Simple777
Видимо, это всё можно сделать средствами VFP?
oxls = CreateObject('Excel.Application')
А далее VFP управляет Excel'ем через свойства и методы этого эксель-объекта (OLE).
Так что знать нужно скорее средства Excel, чем VFP - с точки зрения VFP, без разницы, каким "подсоединенным" объектом управлять.

Simple777
А как именно у вас происходил процесс печати "нарисованный формы"? Какой способ вы использовали? И как организовывали возврат в FPD? То есть как работали с событием "печать отчёта закончена" и "теперь вернуться в FPD"?
Печать отчета стандартна - REPORT FORM (с предпросмотром или без).

Как такового "возврата в FPD" при вызове через RUN нет - твоя прога не будет "чего-то ждать", а продолжит выполнение.

Если требуется "синхронность", ты сам должен ее организовать, например создавая/проверяя некие флаги - наличие открытой таблицы или определенной записи в таблице, или значения поля в записи, или значения байта в поле, просто наличие некоторого файла на диске или его содержимое, используя реестр Windows, Mutex - в общем, здесь тебя может ограничить лишь размер фантазии.

Можно также не вызывать прогу напрямую, а делать это через BAT/CMD-файл. Тогда управление не вернется в прогу, пока этот bat не выполнится.
Но в нем все равно что-то придется проверять, чтобы знать, когда выйти (поставь PAUSE - и управление не вернется в твою прогу, пока не нажмешь кнопку)



Исправлено 2 раз(а). Последнее : akvvohinc, 24.01.21 13:57
Ratings: 0 negative/0 positive
Re: Как возвратить параметр из программы VFP?
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
akvvohinc
А далее VFP управляет Excel'ем через свойства и методы этого эксель-объекта (OLE).
Так что знать нужно скорее средства Excel

Report Form вряд ли позволит сформировать лист Excel.

Вообще формы я привык "с самого начала" делать вручную. Пробовал report в FPD - не понравилось.

Я представляю себе формирование листа Excel из dbf-таблицы примерно так.

В записи dbf-таблицы должны быть следующие данные:

- номер столбца 1 (A, B, C, D...)
- тип столбца (наверное, можно использовать "универсальное значение")
- высота и ширина столбца 1
- содержимое столбца 1
- шрифт столбца 1
- размер шрифта столбца 1
...
- номер столбца N
- содержимое столбца N
...

Так образом можно сформировать весь лист Excel, записывая построчно каждый столбец. После этого перейти на следующую запись dbf-таблицы. Может быть, лучше будет добавить поле "номер строки" в dbf-таблицу с тем, чтобы формировать в Excel столбцы до тех пор, пока будет одинаковый "номер строки" в таблице dbf. После изменения "номера строки" перейти на формирование следующей строки в Excele.

Это просто "общие соображения".

А если нужен переменный колонтитул, то, наверное, придётся делать отчёт на разных листах книги Excel? Вряд ли Excel позволяет иметь переменные колонтитулы в пределах одного листа книги.

Вообще-то, можно и в макросе Excel делать формирование отчёта из dbf-таблицы, загружая вместе с Excel заранее подготовленный шаблон документа (со встроенным макросом). Тогда и VFP не нужен будет - всё можно будет сделать при запуске Excel из среды FPD.

Собственно, так я уже делал, но там была простейшая выходная форма с одним итогом в конце формы.

В общем, надо экспериментировать.



Исправлено 1 раз(а). Последнее : Simple777, 24.01.21 14:54
Ratings: 0 negative/0 positive
Re: Как возвратить параметр из программы VFP?
Taran

Сообщений: 13625
Откуда: Красноярск
Дата регистрации: 16.01.2008
Наврядли так делают что бы в дбф номер колонки, строки и оформление.

Я делаю шаблон со всем оформлением.
В ячейках выражения типа двойных скобках. Значит это вычисляемое.
Так же есть управляющие команды также обрамлены спец символами. Типа типа {{scan:_alias}}
Т.е. данная строка будет ращмножена и заполнена с указанного алиаса.
Ratings: 0 negative/1 positive
Re: Как возвратить параметр из программы VFP?
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Taran
Я делаю шаблон со всем оформлением.

А если, допустим, я заранее создам шаблон Excel (в смысле просто файл, содержащий шаблон в формате Excel), в котором будет описан шрифт, размер, ширина, высота, тип ячеек, то можно ведь просто в этот шаблон закинуть уже готовые значения из dbf-таблицы (или даже из формата sdf, если dbf новые версии Excel не поддерживают) посредством макроса (который также будет заранее записан в шаблоне документа). Вроде такое возможно?



Исправлено 4 раз(а). Последнее : Simple777, 24.01.21 16:43
Ratings: 0 negative/0 positive
Re: Как возвратить параметр из программы VFP?
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
Simple777
Report Form вряд ли позволит сформировать лист Excel.

Я описывал, что делали через VFP мы - "красивые отчеты" (FRX).

Simple777
Это просто "общие соображения".
Мы использовали 2 варианта работы с Excel:
- заполнение шаблона (очень похоже на то, что описал выше Олег)
- создание файла "с нуля" (никакого "автомата" мы не делали, но тоже использовался некий "конструктор" (примитивный язык), облегчающий заполнение ячеек.

Наверно, хватило бы и первого способа, но он появился вторым.



Исправлено 1 раз(а). Последнее : akvvohinc, 24.01.21 16:42
Ratings: 0 negative/0 positive
Re: Как возвратить параметр из программы VFP?
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
akvvohinc
- заполнение шаблона (очень похоже на то, что описал выше Олег)

Ну дак вроде шаблон можно и непосредственно в Excele заполнить при помощи макроса и переданного экселю файла с готовыми данными?
Ratings: 0 negative/0 positive
Re: Как возвратить параметр из программы VFP?
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
Simple777
Вроде такое возможно?

Если тебе проще программировать в VBA чем в VPF, то наверно можно и так.
Я DBF из Excel'я не читал, макросы, кроме самых примитивных, не писал, поэтому скорость/удобство такого способа оценить не могу.
Ratings: 0 negative/0 positive
Re: Как возвратить параметр из программы VFP?
Taran

Сообщений: 13625
Откуда: Красноярск
Дата регистрации: 16.01.2008
Simple777
akvvohinc
- заполнение шаблона (очень похоже на то, что описал выше Олег)

Ну дак вроде шаблон можно и непосредственно в Excele заполнить при помощи макроса и переданного экселю файла с готовыми данными?

Насчёт макросов я сразу отказался.
Ибо делал типа "коробочный софт". И вопросы безопасности крайне щекотливы.
Ну и мне проще из фокса раскидать данные по шаблону.
Были некоторые отчёты где в таьличной части фигурировали данные из 5-7 курсоров с абсолютно разной структурой. По 2-3 строки в каждом курсоре. Но вывод последовательно на одном листе.

++
Ну и ещё. Делал один модуль и он прозрачно обрабатывал что офис от MS, что Libre или ещё какой.
Соотв писать два макроса лениво.
А так один шаблон под Excel, а его и Либра читает. Макросы может тоже, не пробовал или забыл.



Исправлено 1 раз(а). Последнее : Taran, 24.01.21 17:17
Ratings: 0 negative/0 positive
Re: Как возвратить параметр из программы VFP?
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Taran
Были некоторые отчёты где в таьличной части фигурировали данные из 5-7 курсоров с абсолютно разной структурой. По 2-3 строки в каждом курсоре. Но вывод последовательно на одном листе.

Вот нечто похожее и у меня. Но мне казалось, что на одном листе не удастся разместить разноформатные данные, и придётся разделять на отдельные листы книги. Получается, что и шапки отчета при смене текущих листов у тебя менялись при необходимости?

Насчёт макросов. Заказчики разрешают их исполнять. У тому же макровирусы вымерли лет 20 тому назад. ;)



Исправлено 1 раз(а). Последнее : Simple777, 24.01.21 17:20
Ratings: 0 negative/0 positive
Re: Как возвратить параметр из программы VFP?
Taran

Сообщений: 13625
Откуда: Красноярск
Дата регистрации: 16.01.2008
Да нет, все на одном листе. Рвать нельзя ибо это один документ. И в фоксовом отчёте делал, даже когда не было такой штатной возможности.
Примитивно говоря:
Фио, 2-5 штук.
Отель - парочка.
Самолёт.
Экскурсии.
Страховка.
Пр..
Ratings: 0 negative/0 positive
Re: Как возвратить параметр из программы VFP?
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
Simple777
Но мне казалось, что на одном листе не удастся разместить разноформатные данные

Видел такие - делают колонки в миллиметр шириной, а дальше объединением нужного их количества достигают требуемой ширины полей - и разные таблицы друг другу "не мешают".



Исправлено 1 раз(а). Последнее : akvvohinc, 24.01.21 19:16
Ratings: 0 negative/0 positive
Re: Как возвратить параметр из программы VFP?
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
akvvohinc
Simple777
Но мне казалось, что на одном листе не удастся разместить разноформатные данные

Видел такие - делают колонки в миллиметр шириной, а дальше объединением нужного их количества достигают требуемой ширины полей - и разные таблицы друг другу "не мешают".

Да, такую технологию видел в бланках налоговых деклараций. В принципе, можно и такой вариант проверить. [sm128]
Ratings: 0 negative/0 positive


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

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

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