for flooders
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум
   Лисоводы   всех   стран,  объединяйтесь !!!  

Список Форумов  :: Visual Foxpro, Foxpro for DOS
  

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

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

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

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



Исправлено: akvvohinc, 23.01.21 19:18
Ratings: 0 negative/0 positive

Re: Как возвратить параметр из программы VFP?
Igor Korolyov

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


------------------
WBR, Igor
Ratings: 0 negative/0 positive

Re: Как возвратить параметр из программы VFP?
Simple777

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

Re: Как возвратить параметр из программы VFP?
Simple777

Сообщений: 30063
Дата: 23.01.21 19:21:14
Пока я писал вопрос, был дан ответ.

А что именно вы передавали через dbf?
Ratings: 0 negative/0 positive

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

Сообщений: 3190
Откуда: Москва
Дата: 23.01.21 21:26:04
Simple777
А что именно вы передавали через dbf?
Все, что должно было попасть в отчет.

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

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

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

Re: Как возвратить параметр из программы VFP?
Simple777

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

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

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

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

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

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

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

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



Исправлено: akvvohinc, 24.01.21 00:14
Ratings: 0 negative/0 positive

Re: Как возвратить параметр из программы VFP?
Simple777

Сообщений: 30063
Дата: 24.01.21 05:56:39
akvvohinc
Сложного ничего нет, но рисовать "красивые документы" может быть довольно трудоемко.

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

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

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



Исправлено: Simple777, 24.01.21 06:02
Ratings: 0 negative/0 positive

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

Сообщений: 3190
Откуда: Москва
Дата: 24.01.21 13:50:31
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 - и управление не вернется в твою прогу, пока не нажмешь кнопку)



Исправлено: akvvohinc, 24.01.21 13:57
Ratings: 0 negative/0 positive

Re: Как возвратить параметр из программы VFP?
Simple777

Сообщений: 30063
Дата: 24.01.21 14:53:42
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.

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

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



Исправлено: Simple777, 24.01.21 14:54
Ratings: 0 negative/0 positive

Re: Как возвратить параметр из программы VFP?
Taran

Сообщений: 11533
Откуда: Красноярск
Дата: 24.01.21 15:40:18
Наврядли так делают что бы в дбф номер колонки, строки и оформление.

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

Re: Как возвратить параметр из программы VFP?
Simple777

Сообщений: 30063
Дата: 24.01.21 16:37:07
Taran
Я делаю шаблон со всем оформлением.

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



Исправлено: Simple777, 24.01.21 16:43
Ratings: 0 negative/0 positive

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

Сообщений: 3190
Откуда: Москва
Дата: 24.01.21 16:42:43
Simple777
Report Form вряд ли позволит сформировать лист Excel.

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

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

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



Исправлено: akvvohinc, 24.01.21 16:42
Ratings: 0 negative/0 positive

Re: Как возвратить параметр из программы VFP?
Simple777

Сообщений: 30063
Дата: 24.01.21 16:47:33
akvvohinc
- заполнение шаблона (очень похоже на то, что описал выше Олег)

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

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

Сообщений: 3190
Откуда: Москва
Дата: 24.01.21 17:03:35
Simple777
Вроде такое возможно?

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

Re: Как возвратить параметр из программы VFP?
Taran

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

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

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

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



Исправлено: Taran, 24.01.21 17:17
Ratings: 0 negative/0 positive

Re: Как возвратить параметр из программы VFP?
Simple777

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

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

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



Исправлено: Simple777, 24.01.21 17:20
Ratings: 0 negative/0 positive

Re: Как возвратить параметр из программы VFP?
Taran

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

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

Сообщений: 3190
Откуда: Москва
Дата: 24.01.21 19:15:25
Simple777
Но мне казалось, что на одном листе не удастся разместить разноформатные данные

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



Исправлено: akvvohinc, 24.01.21 19:16
Ratings: 0 negative/0 positive

Re: Как возвратить параметр из программы VFP?
Simple777

Сообщений: 30063
Дата: 24.01.21 20:08:33
akvvohinc
Simple777
Но мне казалось, что на одном листе не удастся разместить разноформатные данные

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

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



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

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


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