|
Отчет в VFP9
|
|||
---|---|---|---|
#18+
Можно ли определить положение от начала страницы текущего элемента? И при определенных условиях сделать перевод на новую страницу? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2009, 12:27 |
|
Отчет в VFP9
|
|||
---|---|---|---|
#18+
HikolayМожно ли определить положение от начала страницы текущего элемента? Для VFP9 - можно. HikolayИ при определенных условиях сделать перевод на новую страницу? Если вы подразумеваете фразу "в зависимости от ранее вычисленного положения", то - нельзя. Если же вы опишите собственно постановку задачи, а не выбранный способ решения, то возможно, найдутся другие способы решения. Например, задача "приклеивания" последней полосы деталировки к общему итогу (чтобы на последнем листе не оставались одни подписи без данных) вполне решаемая в любой версии FoxPro ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2009, 14:13 |
|
Отчет в VFP9
|
|||
---|---|---|---|
#18+
ВладимирМ Для VFP9 - можно. А каким образом? А задача такая: При печати отчета выводится заключение, формирующееся из имеющихся данных, и после заключения печаются должность и фамилия людей принявших в этом участие. Так вот необходимо, чтобы хоть один абзац был с фамилиями. И все фамилии были на одной странице. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2009, 14:29 |
|
Отчет в VFP9
|
|||
---|---|---|---|
#18+
HikolayПри печати отчета выводится заключение, формирующееся из имеющихся данных, и после заключения печаются должность и фамилия людей принявших в этом участие. Так вот необходимо, чтобы хоть один абзац был с фамилиями. И все фамилии были на одной странице. Вы сами себе противоречите. Либо "хоть один абзац с фамилиями", либо "все фамилии на одной странице". Какой именно вариант нужен? Что из себя представляет сам отчет? Это некие строки деталировки после которых идет "итог" в виде подписей? И необходимо, чтобы: 1. Весь итог целиком (все подписи) печатался на одной странице 2. Вместе с итогом (с подписями) должна быть отображена хотя бы одна строка деталировки Как формируется итог? Это переменное число строк или всегда фиксированное? Если переменное, то есть ли максимально возможное количество строк в итоге? Если предельного ограничения нет, то откуда уверенность, что все подписи поместятся на одном листе? Да еще со строкой деталировки? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2009, 14:38 |
|
Отчет в VFP9
|
|||
---|---|---|---|
#18+
Извиняюсь неправильно выразился. Там небольшое количество людей(max 10). И фиксированного большего ничего нет. Там получается идет деталировка по проверенным показателям в продукте. Где указывается необходимое количество и найденное. Затем формируется вывод, мол такой продукт правильный или не правильный. И потом фамилии и подписи. И чтобы подписи были все на одном листе, но хотя-бы абзац с вывода тоже был с ними. Или весь вывод, если все влезет на страницу ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2009, 15:21 |
|
Отчет в VFP9
|
|||
---|---|---|---|
#18+
Что такое "вывод"? Как он формируется? Это одна строчка? Откуда там "абзацы"? Почему "вывод" должен располагаться как-то отдельно от "подписей"? Почему их нельзя расположить в одной полосе отчета? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2009, 19:34 |
|
Отчет в VFP9
|
|||
---|---|---|---|
#18+
Они и находятся в одной полосе отчета. Вывод - это заключение, в котором написано, что продукт такой-то проверен и он нормальный или нет. Количество абзацев в выводе зависит от количества продуктов в отчете. Пример: Вывод -Колбаса соответствует нормам и стандартам -Мясо не соответсвует этому стандарту Проверили Ведущий инженер Васечкин В.В. Инженер Пупкин П.П. Так вот, что-бы пункт проверили и все фамилии был на одном листе без переносов. И если все это не влазит на один лист, то перенеслось на новый лист хотя-бы: -Мясо не соответсвует этому стандарту Проверили Ведущий инженер Васечкин В.В. Инженер Пупкин П.П. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2009, 09:42 |
|
Отчет в VFP9
|
|||
---|---|---|---|
#18+
2 Hikolay не рассматриваете идею генерации отчета в приложение МС офиса (Ворд, ёксель...)? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2009, 09:48 |
|
Отчет в VFP9
|
|||
---|---|---|---|
#18+
прошелмимо, Это я тоже хочу сделать. Но только начал с этим разбираться. Инфы пока нормальной не могу найти ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2009, 09:51 |
|
Отчет в VFP9
|
|||
---|---|---|---|
#18+
Инфы пока нормальной не могу найти один из простых вариантов http://alkud.by.ru/ после генерации в ворд, оператор может руками подвигать строки в соответствии со своими желаниями ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2009, 10:21 |
|
Отчет в VFP9
|
|||
---|---|---|---|
#18+
прошелмимо, Спасибо почти со всем разобрался. Но хочется еще сделать это и в отчете VFP9. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2009, 16:32 |
|
Отчет в VFP9
|
|||
---|---|---|---|
#18+
Все-так я не понял технологию формирования "вывода" и "подписей". По какой причине они могут оказаться на разных листах? Это просто гладкий текст, который загнали в один объект со свойством "Stretch with overflow"? Кстати, а почему "выводы" собраны в общую кучу в конце отчета, а не отображаются непосредственно после показателей соответствующего продукта? Насколько я понимаю, сейчас отчет имеет вид Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Почему не сделать так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2009, 19:09 |
|
Отчет в VFP9
|
|||
---|---|---|---|
#18+
ВладимирМЭто просто гладкий текст, который загнали в один объект со свойством "Stretch with overflow"? Да вывод лежит в одном объекте, а подписи в другом ВладимирМПо какой причине они могут оказаться на разных листах? Если после деталировки вывод уже будет располагаться в конце листа и на листе соответсвенно нет места на подписи. Или они просто разорвуться, т.е. часть подписей на одном листе, а остальное на другом. ВладимирМПочему не сделать так Сделать можно. Так даже проще отчет формировать. Но проблемы это не решит. Если опять все окажется в конце листа и начнет скакать. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2009, 11:15 |
|
Отчет в VFP9
|
|||
---|---|---|---|
#18+
Сам я не пробовал, так что придется экспериментировать самостоятельно. Идея заключается в том, что до момента исполнения отчета невозможно сказать, как и где будут распологаться объекты. Значит, необходимо прогнать отчет "в никуда", сделать необходимые замеры и по результатам замеров изменить данные. Например, добавить Chr(13) в начало строки формирования "вывода". Потом уже выполнять отчет "как положено" Как это сделать? Ну, в версиях младше VFP9 довольно сложно. А вот в версии VFP9 можно сделать нужные замеры при помощи нового класса ReportListener (слушатель отчета). Концепция формирования отчетов при помощи объектов (Object-Assisted Reporting) заключается в том, что отчет по прежнему все формирует сам, но есть определенные места, где отчет дает возможность просмотреть сформированный объект и, если необходимо, изменить некоторые его параметры. Класс ReportListener - это новый базовый класс версии VFP9. Соответственно, можно создать класс-наследник от этого базового класса и выполнить в нем необходимую обработку. В этом случае, запуск отчета примет вид Код: plaintext 1. 2.
Здесь MyReportListener - это как раз твой собственный класс на базе класса ReportListener Первая задача прогона "в никуда" решается изменением свойства ReportListener.ListenerType = 3 (или 2, если необходимо) Еще одно полезное свойство ReportListener.GetPageHeight() - оно показывает размер листа. Сопоставив его с текушей координатой объекта можно сделать вывод о том, сколько места осталось на листе Для анализа содержимого и положения объектов может быть полезно перекрытие двух методов ReportListener.EvaluateContents() - Событие, выполняющееся при формировании объекта Field-отчета ReportListener.Render() - метод, выполняющийся непосредственно перед отрисовкой любого объекта отчета Событие ReportListener.EvaluateContents() получает 2 параметра. Первый - номер записи в файле отчета FRX, который в данный момент обрабатывается. А второй - это объект, в свойствах которого записаны некоторые реквизиты сформированного текста. Вот из свойств второго параметра можно вытащить сформированный текст. Не думаю, что имеет смысл именно в этом событии менять текст поля, поскольку не вполне понятно, повлияет ли это на расположение других объектов. Впрочем, можно попробовать... Метод ReportListener.Render() имеет несколько параметров определяющих координаты объектов. Особое внимание здесь следует обратить на параметр nObjectContinuationType Этот параметр содержит признак того, печатается ли текущий объект целиком на листе, является ли объект продолжением с предыдущего листа или он будет продолжен на следующем. Проблема только в том, что в методе Render() ничего не известно о содержимом объекта. Поэтому придется синхронизировать его работу с событием EvaluateContents() ======= В общем, по результату анализа можно, например, увеличить значение некоего счетчика (глобальной переменной), а строку "вывода" формировать примерно так Код: plaintext
Вот это самое значение gnAddLine и будет наращиваться в классе ReportListener, пока расположение объектов не удовлетворит нужным требованиям. После этого можно уже будет запустить отчет как обычно. ======= Но, повторюсь, сам я подобного разбора не делал. Поэтому экспериментировать придется самостоятельно... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2009, 11:03 |
|
Отчет в VFP9
|
|||
---|---|---|---|
#18+
ВладимирМ, Спасибо, буду пробовать. О результатах потом напишу ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2009, 09:20 |
|
Отчет в VFP9
|
|||
---|---|---|---|
#18+
А такой вопрос еще: Как можно добавить свой код в метод EvaluateContents? В дизайнере оно понятно. А программно как это сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2009, 11:17 |
|
Отчет в VFP9
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2009, 11:25 |
|
Отчет в VFP9
|
|||
---|---|---|---|
#18+
А где его писать надо? А то на Click() кнопки он говорит, что не должен этого содержать ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2009, 11:32 |
|
Отчет в VFP9
|
|||
---|---|---|---|
#18+
Определение класса должно быть создано ДО его использования. Т.е. все команды DEFINE CLASS пишутся в отдельных файлах PRG. Собственно, создаются те же библиотеки классов, только другим способом. Поэтому нет никакой разницы, создадите вы класс в дизайнере классов или же в программном коде. Далее надо указать FoxPro откуда брать определение класса. Для файлов PRG это просто ссылка на процедурный файл SET PROCEDURE TO MyProg.prg Для визуальных библиотек классов (файлов VCX) это команда SET CLASSLIB TO MyClass.vcx Далее команда loListener = CreateObject("MyReportListener") выполнит поиск нужного класса по указанным библиотекам. Однако можно использовать функцию NewObject() отличие которой от CreateObject() в том, что нужную библиотеку классов можно указать напрямую в этой функции, без предварительнх настроек loListener = CreateObject("MyReportListener", "MyClass.vcx") ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2009, 11:58 |
|
Отчет в VFP9
|
|||
---|---|---|---|
#18+
Теперь можно подвести итог. В foxpro 9 есть 2 варианта формирования отчета: 1. При помощи REPORT FORM. (старая форма) 2. При помощи GDI+ библиотеки Класс ReportLister использует по умолчанию второй способ. Т.е. если отчет прогонять в пусутю в ReportLister, то надо сделать одинаковый вариант формирования отчета. 1. ReportListener.DynamicLineHeight = .F. т.е. указываем, что ReportListener будет формировать отчет по старой форме. Но в мануале написано, что этого делать не рекомендуют. У меня так и получилось. Он неправильно посчитал строки и отчет сделанный REPORT FORM отличался от того, что сделал ReportLister 2. SET REPORTBEHAVIOR 90 глобальная настройка указывающая, что все отчеты REPORT FORM выполняются при помощи новой библиотеки. ReportListener.EvaluateContents() - служит для изменения объекта(его содержания, цвета и т.д.) все сдела при помощи одной функции: oReportListener.Render(nFRXRecNo,; nLeft,nTop,nWidth,nHeight,; nObjectContinuationType, ; cContentsToBeRendered, GDIPlusImage) полезными параметрами оказались: 1. nTop - начала объекта на странице в dpi. Чтобы получить сантиметры: (nTop/960)*2.54 2. nObjectContinuationType - показывает разорван-ли элемент на несколько страниц или нет 3. cContentsToBeRendered - содержит значение выводимое объектом. Но в UNICOD-е. Чтобы получить читаемое выражение - STRCONV(cContentsToBeRendered,6,1049) 4. nFRXRecNo - номер объекта в отчете, но он хранится в фале frx или lbx. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2009, 18:00 |
|
Отчет в VFP9
|
|||
---|---|---|---|
#18+
HikolayТеперь можно подвести итог. ... ReportListener.EvaluateContents() - служит для изменения объекта(его содержания, цвета и т.д.) ... Только у тех объектов, у которых есть свойство Expression. Например, у Lable это событие не возникает. С уважением, Алексей. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2009, 09:23 |
|
|
start [/forum/topic.php?fid=41&fpage=122&tid=1586240]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
30ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
115ms |
get tp. blocked users: |
2ms |
others: | 319ms |
total: | 515ms |
0 / 0 |