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

Список Форумов  :: Обсуждаем проекты
  

Формирование отчета в Excel на основе бланка xml
maple4
Автор

Сообщений: 210
Откуда: Москва
Дата: 29.07.10 12:12:34
ГОТОВОЕ решение!

http://www.maple4.ru/a_downloads_for_maple4_ru/maple4_xmlbuilder.zip - всегда самый новый zip.архив с сайта, ~40 кб


Что делает представленный пример:
а) считывает данные xml-файла (подготовленного заранее в Excel-е) для получения структуры генерации (причем, без использования специальных объектов для работы с xml)
б) формирует на основе структуры листы-отчеты (если их несколько) в книге, причем каждый лист может формироваться на своей таблице данных (это задается в процедуре инициализации - procedure Init)
в) использует для формирования значения процедуры foxpro, поля, переменные и функции
г) Нет ограничения в 65535 строк
д) Возможность формирования зависимых отчетов

Зачем?
Хотелось объединить мощь Excel (по визуальному редактированию и форматированию данных) с foxpro для получения нестандартных (несколько листов в одной книге - что достаточно удобно) и информативных отчетов.

На будущее...
Отработка реакции на ошибки исполнения - сейчас такого нет вообще.

Работа с примером:
1. В архиве находится весь проект и программа start.prg
2. После запуска файла необходимо будет выбрать файл-бланк test_lists.xml
3. Программа сформирует report_test_lists.xml на осное бланка и разместит его в том же каталоге.
4. Файл report_test_lists.xml должен открыться в программе по умолчанию (обычно в Excel)


Процедуры инициализации находятся в комментариях в первой строке/первой ячейке каждого листа. Код должен быть размещен после procedure Init!

ОЧЕНЬ СТРОГО рекомендуется указывать полное имя для поля таблиц (курсоров)!
Например, test_.t1 ВМЕСТО просто t1
или test_.addr ВМЕСТО addr

***********************************************************
Структура бланка-xml.
Первые 3 колонки - служебные.
После того, как будет сделан xml-бланк отчета.
1 колонка - имя строки (можно не указывать, тем более, что пока работа с ним пока не идет)
2 колонка - тип строки отчета (один из 3 вариантов - reportheader,detail,reportfooter)
3 колонка - параметр группировки, для detail можно и нужно не указывать

***********************************************************
Типы строки отчета (их ВСЕГО ТРИ!):
reportheader - заголовок отчета, если НЕ указан параметр группировки, ЛИБО заголовок группы
detail - данные
reportfooter - подвал отчета, если НЕ указан параметр группировки, ЛИБО подвал группы

Так как невозможно проконтролировать правильность ввода группировки пользователем (xml-файл редактируется в Excele или в NotePade), то считается, что
самый первый встреченный параметр - это параметр самого верхнего уровня, второй - следующего и т.д.
Если не указан тип - считается, что это reportheader самого высого уровня.



Исправлено: maple4, 18.08.10 09:53
Ratings: 0 negative/0 positive

Re: Формирование отчета в Excel на основе бланка xml
maple4
Автор

Сообщений: 210
Откуда: Москва
Дата: 29.07.10 18:52:21
Хотелось бы узнать, данная тема кому-нибудь интересна ?

zip-Архив - http://www.maple4.ru/a_downloads_for_maple4_ru/maple4_xmlbuilder.zip

Добавил новый оператор rowssum
rowssum(N) - вставляет в ячейку формулу для получения суммы по колонке, где N-смещение относительно текущей ячейки.
т.е. если этот оператор находится в подвале отчета, то просчитаются все ячейки, относящиеся к данному отчету
если оператор находится в группе (в заголовке группы или в подвале) - просчет по данным, находящимся ТОЛЬКО в данной группе (или подгруппе)

В примере, в test_list.xml во вкладке Сальдо, отчет формируется с группировкой по Городу/Услуге
Соответственно, итоги ТАКЖЕ формируются по этим группам.

Использование - только в типах reportfooter или reportheader (итоговые данные можно разместить и в заголовке группы!).
в примечании к ячейке нужно вписать:
  
  thisformula=rowssum() && сумма по текущей колонке  
    
  thisformula=rowssum(-1) && сумма по колонке на одну слева от текущей  
    
  thisformula=rowssum(1) && сумма по колонке на одну справа от текущей

ПРимер размещения - вкладка Сальдо в test_list.xml

Из архива убрал exe-файл для экономии места.
Запуск - start.prg



Исправлено: maple4, 18.08.10 13:56
Ratings: 0 negative/0 positive

Re: Формирование отчета в Excel на основе бланка xml
maple4
Автор

Сообщений: 210
Откуда: Москва
Дата: 04.08.10 11:10:09
Новая версия
Что появилось в данной версии:
Создание отчетов БЕЗ служебных колонок (хотя, сначала было желание просто их скрыть)
Возможность задания имен бланка и готового отчета - примеры запуска чуть ниже.
Возможность вывода сформированного отчета для просмотра/редактирования сразу после генерации на экран
Возможность передачи параметров в отчет.

Возможности:
Создание бланков с помощью Excel (форматирование, использование формул).
Использование кода FoxPro при формировании значений, формул, примечаний (весь код вносится в примечание к ячейке) - в отличие от многих программ, где значением ячейки может являться только функция, переменная или поле!
Многострочные Detail, ReportHeader и ReportFooter с возможностью задания условия выбора при генерации.
Генерация отчета с несколькими листами, с возможностью задания своей уникальной таблицы/курсора для каждого листа (за это отвечает процедура инициализации листа).
Передача дополнительных параметров для генерации отчетов по запросу.
Задание процедур инициализации прямо в бланке делает возможным отказаться от предварительных процедур в Вашей программе, т.е. бланк отчета САМОДОСТАТОЧЕН.

Самая новая версия с сайта:
http://www.maple4.ru/a_downloads_for_maple4_ru/maple4_xmlbuilder.zip ~ 42 кб.


ПРИМЕР ЗАПУСКА
DO start.prg WITH "test_lists.xml","проба test_lists2.xml",1

где:
"test_lists.xml" - бланк отчета
"проба test_lists2.xml" - готовый отчет
1 - параметр вывода - отчет будет открыт на просмотр/изменение
0-отчет будет только сформирован
1-отчет будет выведен программой просмотра (обычно - Excel) на экран


Можно задавать параметры для отчета (до 10 штук, от xmlparam1 до xmlparam10), которые могут анализироваться в процедурах инициализации.
Например, код инициализации листа "Адреса проживания" файла test_lists.xml определяет, если нужно отобрать проживающих только по определенному городу (при передаче параметра):

procedure Init  
  if vartype(xmlparam1)="C" and not empty(xmlparam1) && Выборка только по параметру  
  select *,LEFT(addr,50) as adr from test where t1=xmlparam1  into cursor test_ order by t1,adr  
  else   
  select *,LEFT(addr,50) as adr from test into cursor test_ order by t1,adr  
  endif  
 ***********************************

Вот код запуска для применения параметра:
DO start.prg WITH "test_lists.xml","проба test_lists2.xml",1,"Нижний Новгород"
test_lists.xml - бланк отчета
проба test_lists2.xml - готовый отчет
1 - параметр вывода - отчет будет открыт на просмотр/изменение
"Нижний Новгород" - задание значения параметра xmlparam1 - при символьном значении код инициализации выполнит запрос
select *,LEFT(addr,50) as adr from test where t1=xmlparam1 into cursor test_ order by t1,adr
.... и выведет все значения по Нижнему Новгороду.
Обратите внимание! Процедура инициализации с выбором параметра прописана только в листе "Адреса проживания", соответственно и выборка по городу будет работать только в этом листе (все в Ваших руках).

МОЖНО сформировать app и запускать его
DO xmlbuilder.app WITH "test_lists.xml","test.xml",1

СОЗДАВ exe-файл, и прикрепив к нему ярлык,
можно в строке Объект прописать что-то типа:
C:\xmlbuilder\xmlbuilder.exe "test_lists.xml" "otcet.xml" "1"
в этом случае при запуске отчет будет сформирован и тут-же показан на экране

Создав exe-файл в дальнейшем можно делать отчеты даже не открывая сам FoxPro - процедуры инициализации (запросы к базам, таблицам) прописаны для каждого листа прямо в бланке отчета.

РЕКОМЕНДУЮ сразу создать app или exe файл из проекта! После чего, наличие прочих файлов (естественно) необязательно.

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

P.S.
Возможно, понравятся следующие проекты:
Maple4 Site Creator - создание и ВЕДЕНИЕ сайта на HTML без использования PHP и ASP (off-line CMS)
http://www.maple4.ru/

Maple4 Style Creator - создание стиля из шаблона для использования в Maple4 Site Creator
http://www.maple4.ru/i_objects_create_style.htm
(более 100 стилей на странице http://www.maple4.ru/i_all_styles.htm созданы именно этой программой. Стили устанавливаются в один клик в любой момент редактирования проекта сайта).

Maple4 Report Builder - создание отчетов в виде файлов HTML со всей используемой графикой.
http://www.maple4.ru/rb/

Все три программы идут в одном пакете, загрузка со страницы
http://www.maple4.ru/i_downloads.htm
там же - дополнительные примочки (обратите внимание на стили в виде zip-архивов - от 20 до 30 штук в одном архиве)
Все представленные программы написаны на FoxPro и распространяются без ограничений (оплаты, регистрации и т.д.)
FoxPro forever! Ну, или хотя бы до 2015...

хотя....
P.P.S.
не будет замечаний, пожеланий, проклятий(?) - уйду в WOW
Ratings: 0 negative/0 positive

Re: Формирование отчета в Excel на основе бланка xml
Влад Колосов

Сообщений: 22664
Откуда: Ростов-на-Дону
Дата: 04.08.10 12:45:58
Вот титан! Такой умище да зря пропадает!
Мое личное мнение - это решение будет зависеть от приобретения того или иного стороннего софта, следовательно, оно специализировано под какую-то конфигурацию, обслуживание, администрирование и прочее. Т.е. круг потребителей незначителен по сравнению с возможностями. А это отсутствие баланса целей и средств.
Чем эта штука лучше, например, отчета Банщикова или genrep (запамятвовал автора), который, к тому же всасывает данные разных форматов?


------------------
Совершенство - это не тогда, когда нельзя
ничего прибавить, а тогда, когда нечего убавить.




Исправлено: Влад Колосов, 04.08.10 12:52
Ratings: 0 negative/0 positive

Re: Формирование отчета в Excel на основе бланка xml
maple4
Автор

Сообщений: 210
Откуда: Москва
Дата: 10.08.10 11:38:34
Да почему ж пропадает... Пропадает свободное от работы время.

Сразу не ответил - решал проблему со скоростью генерации. Успешно

Сравнение с e_report (согласен, может чего-то не увидел )
Сначала о минусах...
Несколько больший размер получаемого файла (вообще, стандарт xml-более текстовый, что ли ).
НЕВОЗМОЖНОСТЬ внедрения картинок в сгенеренный файл (точнее, невозможность отображения такого файла самим Excel-ем).

Плюсы
Возможность формирования нескольких листов в отчете (причем, по различным базам) "как есть" - на основе бланка с с включенными в него листами.
Возможность ввода как любого программного кода FoxPro (1 синтаксис - сложный расчет значения, примечания или формулы) так и переменной, поля или функции (2 синтаксис - только значение)
До 13 включительно уровней группировки (непонятно, правда зачем СТОЛЬКО может понадобиться, но главное - что такая возможность есть)
Суммы по текущей колонке, либо по колонкам слева или справа от текущей (смещение задается в функции rowssum() ).
Все суммы ПРАВИЛЬНО разбиваются по группам и подгруппам (записи НЕ ДУБЛИРУЮТСЯ!) , главное - что-бы в хедерах и футерах по этим колонкам не было числовых значений, КРОМЕ тех, которые генерируются отчетом.
Возможность получения суммы по колонке не только в футере (как все обычно и привыкли) но и в хедере (группы или отчета).
Многострочные pageheader,pagefooter или detail с условием включения в отчет.
"Правильные" номера строк и сумма строк по группам и подгруппам (ведь detail может быть многострочным).
Самодостаточность - инициализация находится в самом бланке отчета. Поэтому, сделав exe-файл из проекта и создав для него ярлык (с соответствующими параметрами, и количество таких ярлыков, естественно, не ограничивается) можно получать отчеты на экране простым кликом по ярлыку.

Появилась новая версия
Более быстрая (на порядок!) генерация за счет двойного варианта синтаксиса (можно задавать значения по другому) и ПЕРЕРАБОТАННОГО движка обработки итогов и генерации + измененная сумма подсчета по колонке (решение проблемы слишком длинной формулы) + функции расчета количества строк и номера строки.

Две версии синтаксиса внесения кода:
1. При помощи программного многострочного кода FoxPro.
например, может быть такой код:

thisdata=test_.t1 && присваивание ячейке значения поля таблицы

или

thisdata=test_.t1+"; "+test_.addr && присваивание ячейке значения поля
if test_.t1="Бендеры" && Если это город БендЕры - вывести примечание в готовом отчете
thiscomment="Бендерам - Привет!" && Текст примечания к ячейке в готовом отчете
endif

или, в другой ячейке,
thisformula=rowssum() && вычислить сумму по колонке (причем эта сумма будет ПРАВИЛЬНО собираться в группах и подгруппах!)

или
thisdata=date()

Значения ячейке задаются с помощью управляющих переменных.
Управляющие переменные ячейки:
thisdata - собственно, само значение. Может быть ЛЮБЫМ по типу.
thiscomment - примечание к ячейке. Текст будет отображен в отчете при наведении мышкой. Должно быть символьным.
thisformula - назначение ячейке формулы. Должно быть символьным.
Управляющие переменные отчета (пока одна):
viewthisrow - выводить ли текущую строку при генерации. Должно быть логическим.

Плюс - полный контроль над содержимым ячейки - значением, формулой или примечанием.
Вы не ограничиваетесь функциями, полями или переменными, можно ввести практически ЛЮБОЙ "валидный" (правильный) код FoxPro.
Минус - НЕсколько медленная генерация, но обычно это проявляется ТОЛЬКО при большом количестве строк.

2. При помощи задания поля, переменной или функции.
Например,

&test_.t1
или

&test_.t1+"; "+test_.addr
или

&date()
Т.е. ЕСЛИ примечание в ячейке начинается с & - предполагается, что значением ячейки может быть поле, переменная или функция (и далее идет, соответственно текст поля, переменной или функции до конца примечания).

Плюс - ОЧЕНЬ БЫСТРАЯ генерация отчета(!!!!) , особенно это видно ПРИ большом количестве строк.
Минус - можно внести только значение ячейки (но обычно это и надо в 90% случаев!) Т.е. примечания к ячейке или формулу (например сумму по колонке) этим способом не внесешь.
ЕСЛИ ВАС В ЯЧЕЙКЕ ИНТЕРЕСУЕТ ТОЛЬКО ЗНАЧЕНИЕ - ПОЛЬЗУЙТЕСЬ ТОЛЬКО ВТОРЫМ ВАРИАНТОМ!

Функции:
1. rowssum() - вставка формулы суммы по колонке.
применение:
thisformula=rowssum() && сумма по текущей колонке
Функция применяется ТОЛЬКО В ФОРМУЛЕ для ReportHeader или ReportFooter! И только в 1 синтаксисе.

2. rowsrecno() - вставка номера строки (правильной № строки, т.к. отчет может содержать многострочный отчет). Возвращает номер как символьную строку.
применение в 1 синтаксисе:
thisdata=rowsrecno()

или, во 2 синтаксисе - прямо в значение:
&rowsrecno()
Функция применяется ТОЛЬКО в Detail!

rowscount() - вставка суммы количества строк (правильной суммы строк, т.к. отчет может содержать многострочный отчет). Возвращает результат как символьную строку.

применение в 1 синтаксисе:
thisdata=rowscount()+" аб."

или, во 2 синтаксисе - прямо в значение:
&rowscount()
Функция применяется ТОЛЬКО в ReportHeader или ReportFooter!

Как это все применяется - можно посмотреть в файле test_lists.xml (задание значений, формул, форматирование отчета и т.д.)
В файле readme.txt - краткое описание.

ICQ: 226-071-270 (ответы и помощь в режиме online , при возможности)
Самая новая версия с сайта:
www.maple4.ru (около 50кб)
maple4@maple4.ru
Страница проекта в Интернете: www.maple4.ru
Крошкин Игорь
Ratings: 0 negative/0 positive

Re: Формирование отчета в Excel на основе бланка xml
BOBAN

Сообщений: 580
Откуда: Солигорск
Дата: 10.08.10 12:28:06
1. По-моему, не учтено ограничение в 65536 строк на листе в Excel 2003.
2. Программа оставляет много "мусора" после формирования отчета.
Ratings: 0 negative/0 positive

Re: Формирование отчета в Excel на основе бланка xml
maple4
Автор

Сообщений: 210
Откуда: Москва
Дата: 10.08.10 12:48:13
1. По-моему, не учтено ограничение в 65536 строк на листе в Excel 2003.
Да. В более новом Excel с этим проблем нет. буду думать

2. Программа оставляет много "мусора" после формирования отчета.
Значит есть, к чему стремиться .
Под мусором, как я понял, понимается обычный и компилированный код - в новой версии все будет складироваться во временной папке и удаляться по выходу.
Ratings: 0 negative/0 positive

Re: Формирование отчета в Excel на основе бланка xml
BOBAN

Сообщений: 580
Откуда: Солигорск
Дата: 10.08.10 14:49:30
maple4
Да. В более новом Excel с этим проблем нет. буду думать
Там по-моему до 1 миллиона строк. В идеале отчет должен быть продолжен на следующем листе.
Ratings: 0 negative/0 positive

Re: Формирование отчета в Excel на основе бланка xml
maple4
Автор

Сообщений: 210
Откуда: Москва
Дата: 13.08.10 09:38:17
Что же еще нужно сделать для привлечения внимания к данной теме?

Снято ограничение 65535 строк отчета. Теперь, при превышении, он продолжается в том же отчете на новом листе (специально для Excel 2003).
Если, допустим, лист назывался "Сальдо", при большем количестве строк, появится новый лист - Сальдо_001, и далее, Сальдо_002 и т.д.

Можно управлять максимальным количеством (в разумном пределе) строк для конкретного листа.
Делается это при помощи специальной управляющей переменной:
MaxRowsInList=10000 && ограничение на 10000 строк в листе, при большем количесиве - добавится новый лист с продолжением.
Задать значение можно только в процедуре инициализации (Procedure Init, верхня левая ячейка листа)!

НО нужно понимать, что это количество НЕ ЯВЛЯЕТСЯ СТРОГИМ!
И если, вместо 10000 строк на листе 10003 строки - это НЕ ошибка, это особенность алгоритма.
Дело в том что многострочные Detail, ReportHeader и ReportFooter могут в себе содержать формулы, КОТОРЫЕ просто НЕЛЬЗЯ переносить на следующий лист (например, ссылаются на ячейку снизу или сверху).

Пример с разбитием - лист "Сальдо с делением" в test_lists.xml


Разбитие на листы НЕ ВЛИЯЕТ НА ИТОГИ по группам и подгруппам! Все формулы промежуточных итогов правильно обращаются к нужным листам и ячейкам (где бы они не находились).

ИЗМЕНЕНЫ параметры запуска программы:

DO start.prg WITH "test_lists.xml","проба test_lists2.xml",0

где "test_lists.xml" - имя бланка
"проба test_lists2.xml" - имя готового отчета
0 - параметр вывода готового отчета:
0-сформировать и вывести программой по умолчанию (это может быть и не Excel! ОБРАТИТЕ НА ЭТО ВНИМАНИЕ!)
1-не выводить отчет на экран
2-вывести сформированный отчет Excel-ем (должен быть установлен)

При необходимости - можно добавить нужную ВАМ программу открытия.
Для этого, в процедуре report_show.prg добавьте код, например, для notepad.exe

CASE type_show=3  
  ShellExecute(0, "", "notepad.exe", nazv_file__, "", 1)
P.S.
Обращаюсь к модераторам форума!
Можно ли заменить 1 пост, или лучше создать новую тему?
Все таки текст "Сразу напишу, это НЕ СОВСЕМ ГОТОВОЕ решение!" несколько напрягает

Ведь сделано почти все, о чем было написано!!!
+ возможность двигаться дальше (куда? ODF? Реализация Open XML от Microsoft?)

http://www.maple4.ru/a_downloads_for_maple4_ru/maple4_xmlbuilder.zip - исходники в архиве (~40кб), самая новая версия с сайта

P.P.S.
Обращаюсь к форумчанам.
Если есть, что сказать - не стесняйтесь. А может мне просто пинка не хватает, в нужном направлении?
Ratings: 0 negative/0 positive

Re: Формирование отчета в Excel на основе бланка xml
BOBAN

Сообщений: 580
Откуда: Солигорск
Дата: 13.08.10 09:49:59
Добавил в test.dbf 70000 строк , при запуске теста вылет с ошибкой "File not exit" на строке, следующей за FOR :

FOR ii=1 TO wosh.wosh_st
txtwosh=FILETOSTR(systemp+'file_xml_'+PADL(ii-1,3,"0")+'.txt')
Ratings: 0 negative/0 positive

Re: Формирование отчета в Excel на основе бланка xml
maple4
Автор

Сообщений: 210
Откуда: Москва
Дата: 13.08.10 10:16:53
В test_list.xml есть лист "Сальдо с делением", в котором прописано ограничение на количество строк в отчете - не более 11 (в примечании к левой верхней ячейке) - т.е. 70000 строк(как минимум) /11=6363 листа, поэтому программа и ругается (максимум - 999 -по моему, и 999 - много)!

procedure Init  
  select * from test into cursor test_ order by t1,t2,user_id  
  MaxRowsInList=11

Нужно поменять количество на 65000
procedure Init  
  select * from test into cursor test_ order by t1,t2,user_id  
  MaxRowsInList=65000

либо убрать вообще данный лист из бланка.
Ratings: 0 negative/0 positive

Re: Формирование отчета в Excel на основе бланка xml
BOBAN

Сообщений: 580
Откуда: Солигорск
Дата: 13.08.10 10:38:35
Все равно - ошибка есть нехорошо. Можно же сделать цивилизованную проверку с аварийным остановом.
Ratings: 0 negative/0 positive

Re: Формирование отчета в Excel на основе бланка xml
maple4
Автор

Сообщений: 210
Откуда: Москва
Дата: 13.08.10 10:49:52
Пока вообще не заострял внимание на документирование ошибок - это конечно, надо делать (основная задача - считывание бланка, формирование структуры и повышение скорости генерации на больших объемах).


Если честно, не ожидал, что данные будут добавляться в тестовый dbf-файл.
По умолчанию, если не указано количество строк на листе - оно равно 65000, а именно такая ошибка вряд ли возникла при использовании реального бланка.
Ratings: 0 negative/0 positive

Re: Формирование отчета в Excel на основе бланка xml
maple4
Автор

Сообщений: 210
Откуда: Москва
Дата: 18.08.10 09:58:00
Новая версия программы:
Добавилась генерация подчиненных отчетов

В примере:
Формируются дополнительные листы вида "Город Воркута","Город Нижний Новгород" и т.д. со списком абонентов по городу.

При формировании текущего отчета можно сформировать связанные (по каким-то параметрам) отчеты с основным.
Например, в test_lists.xml есть лист "blankГород", который применяется ТОЛЬКО для генерации подчиненного отчета по городу, и делается это при формировании основного отчета "Сальдо".
blank в имени листа (blankГород) означает, что данный лист сам по себе отчет НЕ формирует, в ОТЛИЧИЕ от других листов.

Код в примечании к ячейке G3 листа "Сальдо" (запуск генерации подчиненного отчета):

add_report("blankГород","Город "+alltr(test_.t1),test_.t1)
где,
"blankГород" - имя бланка листа подчиненного отчета
"Город "+alltr(test_.t1) - как будет называться лист в готовом отчете
test_.t1 - параметр, передаваемый подчиненному отчету (может быть до 10 параметров, через запятую, может быть числовым, символьным, логическим, датой или датой/временем)

Обратите внимание, где размещена команда add_report - в reportheader отчета, т.е. при появлении нового города формируется отчет по этому городу.
Естественно, команду можно так же размещать в detail - для получения детелизированного отчета по текущей строке.

Что происходит во время формирования основного отчета?
add_report НЕ формирует зависимый отчет в момент запуска, команда всего лишь заносит в очередь выполнение данного отчета, и все зависимые отчеты начнуть формироваться ТОЛЬКО после генерации основных.
Поэтому весь блок инициализации ДОЛЖЕН быть прописан на листе "blankГород" (в том листе,генерация которого вызывалась)

А именно, в самой верхней левой ячейке листа "blankГород", после Procedure Init следующий код:

procedure Init  
  select * from test where rtrim(t1)==Locxmlparam1 into cursor test_ order by t1,fam

где Locxmlparam1 - первый передаваемый в зависимый отчет параметр (т.е. test_.t1 из представленного примера выше)
Locxmlparam1 ... Locxmlparam10 - переданные параметры из команды add_report
Для каждого из листов эти параметры свои, в отличие от глобальных параметров отчета xmlparam1...xmlparam10, которые одинаковы для всех листов.



Нюансы:
Есть ограничения Excel на длину заголовка листа и символов в заголовке.
Есть ограничения Excel на количество листов в отчете.

Если зависимый отчет превысит количество допустимых строк (65000 по умолчанию), то он продолжится на новом листе автоматически.

****************************************************

По моему, из xml выжал все, что мог
Самое основное : снятие ограничения в 655635 строк (продолжение на новых листах), зависимые отчеты (формирование листов на основе данных другого листа), полная поддержка кода FoxPro и многое, многое другое (описанное ранее).

Хотелось бы разработать примерно такую же программу для формирования отчетов из файлов xlsx (Open XML от Microsoft) или ODF.
До сих пор стою на перепутье - что выбрать.

Поддерживает ли Microsoft Office ODF (точнее, степень поддержки)? И обратно, как поддерживается xlsx остальными производителями? Какие есть подводные камни каждого из форматов и т.д.?

Хотелось бы "правильной" загрузки xml файлов, поддержки рисунков, в общем, всего, что может предложить каждый из офисов.
НО!
Часов в дне всего 24, если заниматься всем - просто не хватит времени .

Большая просьба - давать советы и пожелания ТОЛЬКО после опробования программы (посты вида "изобретения велосипеда", "есть же другие решения", реклама платных библиотек - в топку )
В дистрибутиве - исходники в prg-файлах (~ 40 Кб).

http://www.maple4.ru/a_downloads_for_maple4_ru/maple4_xmlbuilder.zip

Считаю, что до сих пор в FoxPro нет (и уже, наверное, официально не будет - проблема 2015) нормального инструмента работы с отчетами. ReportListener - половинчатое решение, требующее непозволительно много времени на разработку при малой отдаче (это личное мнение).
Так почему бы не сделать такой инструмент самим?

P.S.
Поменял в листе "Сальдо с делением" ограничение количества строк на лист вместо 11 на 10000

MaxRowsInList=10000 && при 80000 строк - всего 8 листов
поэтому, если хотите увидеть прежнее деление по 11 строк - измените строку на
MaxRowsInList=11
Ratings: 0 negative/0 positive



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

On-line: 9 Simple777  (Гостей: 8)

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