С Новым годом! Форум программистов, компьютерный форум, киберфорум
Бета-тестирование
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
188 / 41 / 12
Регистрация: 22.02.2016
Сообщений: 149
1

Редактор: создание и настройка печатных форм

01.03.2016, 21:32. Показов 2235. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Многие разработчики баз данных нередко сталкиваются с вопросом вывода результатов работы своего программного обеспечения в виде выходных печатных форм. Для этих целей разработчики Delphi и C++ Builder нередко используется FastReport.

Не уверен как сейчас, но еще несколько лет назад возможности FastReport были ограничены и не позволили сформировать необходимые формы отчетов (Речь идет о кадровой программе с реализацией возможностей создания всевозможных форм документов, справок, приказов, контрактов, статистических отчетов). А именно, описать обработку данных с помощью формул, изменить падежную форму, осуществить редактирование и форматирование результата как в Word, выполнить экспорт данных в Word и Excel и прочее. Именно тогда и задумался Редактор с объединением возможностей Word и Excel. С одной стороны удобное форматирование данных, а с другой возможность описания обработки с помощью формул.

На рисунках представлено рабочее окно программы в режиме редактирования отчетов.
Редактор: создание и настройка печатных форм
Редактор: создание и настройка печатных форм

В верхней части – главное меню и панель инструментов, слева – инспектор объектов, внизу – список переменных и редактор скриптов. В остальной части рабочее поле чем-то напоминающее интерфейс MS Word, где на странице документа, располагаются графические объекты: текст, прямоугольник, изображение и панель. Подобно FastReport, панель (голубой и зеленые объекты) используется для описания структуры записи. Аналогично Excel, в текстовые объекты заносятся формулы, а с помощью прямоугольников описывается структура таблицы.

Для упрощения описания логических выражений в Редактор встроен обработчик скриптов. Разработчик может сам описать необходимый функционал с помощью функций и затем использовать их в формулах отчета. Имеется возможность подключения функций из внешних файлов (#include ".\include\*.d"). Синтаксис скриптов напоминает язык C++ с некоторым упрощением и дополнением. Поддерживаются простые типы данных (bool, int, double, date и др.) и базовые операции над ними, циклы (for, while), условия (if, switch-case), описание классов (наследование). Описание назначения функций может сопровождаться встраиванием в комментарии ключевых слов для отображения в списке функций подробных сведений.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/** \brief   Представление даты в текстовом формате
 *
 *           Форматированное представление даты. 
 *           Формат даты определяется параметром <b>mCase</b>   
 *            
 *  \param   Date - значение даты
 *  \param   mCase - параметр форматирования
 *   \value  0       - 01 января 2003 года
 *   \value  1       - «01» января 2003 года
 *   \value  2       - 01 января 2003 г.
 *  \param   zShow - признак дополнения дня месяца нулем 
 */
string ДАТА_ПРОП(date Date, int mCase=0, bool zShow=true)
{
  string sday=Date.Day;
  if(zShow && sday.Length()==1)
    sday="0"+sday;
    
  switch(mCase)
  {
    case 1:  return "«"+sday+"»*"+МАЛ(МЕСЯЦ_ПРОП(Date.Month,"Р"))+" "+Date.Year+"*года";
    case 2:  return sday+"*"+МАЛ(МЕСЯЦ_ПРОП(Date.Month,"Р"))+" "+Date.Year+"*г.";
    default: return sday+"*"+МАЛ(МЕСЯЦ_ПРОП(Date.Month,"Р"))+" "+Date.Year+"*года";
  }
}
Редактор: создание и настройка печатных форм


Результат обработки выше представленных шаблонов можно видеть на следующих рисунках.
Редактор: создание и настройка печатных форм
Редактор: создание и настройка печатных форм


Пользователь может просто ознакомиться с документом, экспортировать данные в Word или Excel, распечатать на принтер или в pdf-файл.

Для тех кто не определился с выбором из имеющихся средств создания отчетов или не совсем доволен тем, что использует, предлагаю рассмотреть использование Редактора в составе Вашего программного обеспечения. Для этого достаточно единственного файла Editor.dll и встраивания специального вызова. Установка вспомогательного обеспечения, как для разработчика, так и для пользователя не требуется.

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

В основном Редактор использовался для обработки таблиц баз данных Paradox и MsSql, следовательно, проблем работы с ними возникнуть не должно. Однако, так как имеются сложности прямого использования AnsiString-объектов в release-версии при обмене данными между приложением и dll – в примере используется специальный объект-посредник DLocalSet. Объект является "оберткой" над stdcall функцией обратного вызова. Следовательно, желающие смогут использовать Редактор для обработки произвольных данных, описав структуру их хранения в Borland-формате в любых языках программирования под Windows. В примере представлена обработка данных объектов наследованных от класса TDataSet. Подобная реализация должна нормально работать в различных версиях C++ Builder. Для Delphi код потребуется немного изменить.

Кроме этого имеется возможность автономного использования редактора путем вызова из командной строки. Для запуска редактора и формирования отчета используется шаблон (*.dlt). Для примера можно выполнить следующую команду
Editor.exe HelloWorld.dlt
Редактор: создание и настройка печатных форм


В прикрепленном архиве
Editor.rar
содержится пример подключения библиотеки Editor.dll на C++ Builder. Подключение в других языках программирования должно быть похожим, но если возникнут проблемы - будем их решать.

Шаблоны документов хранятся в файлах Reports\*.dlt
Функции автоматизации обработки данных хранятся в файлах Include\*.d
example.d - API для использования в примерах;
editor.d - функции для работы с переменными редактора;
inter.d - набор базовых функций.

Вроде бы все. Готов выслушать критику и вопросы всех заинтересовавшихся.
3
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.03.2016, 21:32
Ответы с готовыми решениями:

Создание печатных форм
Проблема с программированием и выведением печатной формы!!! Нужна информация по програмированию...

VBA в Excel. Создание печатных форм
Доброго времени суток!!! Возник такой вопрос: Есть таблица в Excel где Фамилия это ячейки A2-A700...

Создание новых печатных форм или редактирование старых 8.2
Доброго времени суток, уважаемые дамы и господа! Пишу вам, так как в данном вопросе плох чуть...

Отказ печатных форм
Если глПолучитьПолномочие&lt;&lt;?&gt;&gt;(&quot;РазрешитьРедактированиеТаблиц&quot;) = 0 Тогда {C:\Путь к...

18
1046 / 967 / 153
Регистрация: 10.08.2015
Сообщений: 5,220
04.03.2016, 00:22 2
Выглядит солидно, единственное что бросилось в глаза - отсутствие имени у объектов по умолчанию... и имена объектов - не уникальны, т.е. не понятно вообще зачем они Имея уникальные имена, можно сделать простую навигацию по многостраничному документу кстати можно было бы добавить кнопки последняя страница и первая страница, ну а так, кроме глюков и неработающих функций с непривычки особо корявостей не заметно
0
188 / 41 / 12
Регистрация: 22.02.2016
Сообщений: 149
04.03.2016, 00:38  [ТС] 3
vlisp, В представленных примерах имена объектов и не нужны. В реальных отчетах они использовались для того чтобы вписывать значение не в сам текстовый объект шаблона в виде формулы, а заполнять его в процессе обработки данных путем описания значения с помощью скрипта. Например имеется некоторая статистическая форма, в которой каждой ячейке (текстовом объекте) присвоено имя по которому значение объекта заполняется обработчиком скрипта. Чуть позже нарисую пример и выложу. А пока для ознакомления это выглядит примерно так:
Редактор: создание и настройка печатных форм
Редактор: создание и настройка печатных форм


ну а так, кроме глюков и неработающих функций с непривычки особо корявостей не заметно
Спасибо, что ознакомились. А какие именно глюки обнаружили?
0
1046 / 967 / 153
Регистрация: 10.08.2015
Сообщений: 5,220
04.03.2016, 01:47 4
Цитата Сообщение от dstar Посмотреть сообщение
В реальных отчетах они использовались для того чтобы вписывать значение не в сам текстовый объект шаблона в виде формулы, а заполнять его в процессе обработки данных путем описания значения с помощью скрипта.
Я про это и говорю, имя объекта должно быть уникальным, причем сразу оно должно быть установлено, чтобы не было путаницы. Имена можно изменять, но нельзя присваивать уже существующее имя... Это же нормальная практика
Цитата Сообщение от dstar Посмотреть сообщение
А какие именно глюки обнаружили?
в основном ругается на отсутствие BDE... Кстати BDE сейчас мало у кого стоит, так что нужно в дистрибутив его включать
Вот еще: при открытии нового файла, старый не сохраняется и нет окошка сохранения... то есть велик риск потери данных

Добавлено через 8 минут
вот кстати еще...
имя текущего файла не отображается в заголовке
Можно было бы добавить переход на первую страницу и на последнюю
1
188 / 41 / 12
Регистрация: 22.02.2016
Сообщений: 149
04.03.2016, 01:59  [ТС] 5
vlisp,
Я про это и говорю, имя объекта должно быть уникальным, причем сразу оно должно быть установлено, чтобы не было путаницы. Имена можно изменять, но нельзя присваивать уже существующее имя... Это же нормальная практика
возможно, но из практики создания наших отчетов такая возможность с именованием объектов использовалась только в 3-5% случаев и только для статистических форм. Остальное все решается другими средствами
в основном ругается на отсутствие BDE... Кстати BDE сейчас мало у кого стоит, так что нужно в дистрибутив его включать
Вот еще: при открытии нового файла, старый не сохраняется и нет окошка сохранения... то есть велик риск потери данных
В целом пример писал сразу для разработчиков С++Builder, там он априори есть. Когда тема там стала никому не интересной предложили выкинуть сюда. Я учту это и попробую переделать примеры на что-то попроще. Например на те же файлы txt разделенные табуляцией.
Про открытие файла - вполне возможно. Исправлю. Просто в существующей программе имена файлов создаются не Редактором, а управляющей программой. Эту функцию сделал здесь, но не доделал. Исправлю

Добавлено через 6 минут
имя текущего файла не отображается в заголовке
опять же недостатки имеющегося интерфейса. Сделаю

Можно было бы добавить переход на первую страницу и на последнюю
обычно для этих целей можно использовать управляющие скроллеры в правой части рабочей области. Нужны ли две лишние кнопки? Как вариант можно задействовать имеющиеся кнопки перехода к предыдущей и следующей странице, но с удержанием ctrl
0
1046 / 967 / 153
Регистрация: 10.08.2015
Сообщений: 5,220
04.03.2016, 02:14 6
Цитата Сообщение от dstar Посмотреть сообщение
В целом пример писал сразу для разработчиков С++Builder
если, хотите чтоб вашей программой пользовались и тем более платили за нее, нужно учиться удовлетворять пользователя... все его капризы нужно обдумывать и по большей части внедрять, есть общепринятая стилистика приложений для масс и ее нужно придерживаться, так как массы учитываются туповатыми, то все должно быть предельно просто и однозначно... не должно быть никаких если, потому-что, в основном

просто ради интереса... насколько сложно сделать программу многодокументной

насчет интереса, если вам это интересно, если сами пользуетесь, то продолжайте развивать программу... конечно сейчас куча оффисов с лучшим функционалом, но может кому-то будет проще ваша программа
0
188 / 41 / 12
Регистрация: 22.02.2016
Сообщений: 149
04.03.2016, 02:24  [ТС] 7
vlisp, в целом я и хочу получить поддержки от разработчиков различных языков программирования. Просто нужно было с чего-то начать и так как Редактор был написан на C++Builder, следовательно, и объяснить что к чему там было проще.
просто ради интереса... насколько сложно сделать программу многодокументной
Что значит многодокументной? Если имеется ввиду размещение данных на нескольких страницах, то не совсем сложно. Наверное все просто когда это реализовано и знаешь как оно работает
насчет интереса, если вам это интересно, если сами пользуетесь, то продолжайте развивать программу... конечно сейчас куча оффисов с лучшим функционалом, но может кому-то будет проще ваша программа
Редактор буду развивать даже для расширения функционала в составе своего ПО. Просто возможностей у него стало столько, что захотелось предложить и другим разработчикам, а заодно выслушать замечания.
0
1046 / 967 / 153
Регистрация: 10.08.2015
Сообщений: 5,220
04.03.2016, 10:45 8
Цитата Сообщение от dstar Посмотреть сообщение
Что значит многодокументной?
многодокументной - это когда много файлов открыто в программе одновременно
что меня еще смутило, так то, что в режиме просмотра программа выглядит намного эффектней
0
188 / 41 / 12
Регистрация: 22.02.2016
Сообщений: 149
04.03.2016, 17:28  [ТС] 9
многодокументной - это когда много файлов открыто в программе одновременно
ну в целом много файлов не открыто одновременно. Они прочитаны и потом закрываются.
что меня еще смутило, так то, что в режиме просмотра программа выглядит намного эффектней
Еще примерно месяца два назад интерфейс пользователя (просмотр) был аналогичен режиму редактирования отчета. Но пользователю все лучшее
0
188 / 41 / 12
Регистрация: 22.02.2016
Сообщений: 149
05.03.2016, 01:24  [ТС] 10
Для демки переделал обработку данных путем загрузки из xml файла (Example.xml). Теперь BDE ставить не нужно.

В демке добавил стат-отчет в котором отображаются сведения о принятых и уволенных сотрудниках за отчетный год с группировкой данных по возрасту на дату приема/увольнения.
Шаблон и результат выглядят примерно так
Редактор: создание и настройка печатных форм
Редактор: создание и настройка печатных форм
Вложения
Тип файла: rar Editor.rar (1.63 Мб, 9 просмотров)
0
1046 / 967 / 153
Регистрация: 10.08.2015
Сообщений: 5,220
05.03.2016, 02:03 11
как раз то, о чем я писал, без имени файла в заголовке трудно найти нужный файл...
и еще, если на машине не установлен офис, то нужно как-то поделикатней это объяснять... а то такие окошки пугают пользователя
1
188 / 41 / 12
Регистрация: 22.02.2016
Сообщений: 149
06.03.2016, 03:35  [ТС] 12
vlisp,
как раз то, о чем я писал, без имени файла в заголовке трудно найти нужный файл...
А зачем его искать? Пользователь нажимает на просмотр отчета в программе. Ему все равно как он называется и где он лежит. В любом случае путь в заголовок добавил, хотя и считаю что это лишнее.
Кстати, для разработчика всегда есть возможность узнать имя файла путем выбора меню "Файл->Имя документа" или узнать полный путь к файлу открыв его свойства "Файл->Свойства"
если на машине не установлен офис, то нужно как-то поделикатней это объяснять... а то такие окошки пугают пользователя
Согласен, вроде исправил. Офис не стал сносить чтобы проверить
0
188 / 41 / 12
Регистрация: 22.02.2016
Сообщений: 149
06.03.2016, 03:43  [ТС] 13
Обновил архив
К предыдущему примеру "Стат-отчет", добавил пример "Стат-отчет + анализ". В данном отчете показано как пользователь может кликнув по интересующей его цифре два раза увидеть вспомогательную информацию. Например, какие люди вошли в подсчет конкретного показателя.
Редактор: создание и настройка печатных форм

На реальной базе в 1000 человек такая возможность всегда спасала. На поиск ошибки и отладку алгоритма уходило значительно меньше времени
В прикрепленном архиве добавил исходники (.\src\MySql\) с примером чтения данных MySql базы с помощью библиотеки libmysql.dll Теперь разработчики Visual C могут попробовать подключить к редактору свои базы.
Вложения
Тип файла: rar Editor.rar (1.64 Мб, 5 просмотров)
0
1046 / 967 / 153
Регистрация: 10.08.2015
Сообщений: 5,220
06.03.2016, 13:43 14
Цитата Сообщение от dstar Посмотреть сообщение
А зачем его искать?
Затем, что я хотел получить то, что у вас на картинке и мне пришлось открывать все файлы в папке, и я все равно не увидел такую картинку, у меня таблица не заполняется в просмотре.

Кстати новому документу нужно присваивать имя и оно должно быть уникальным: Отчет1, Отчет2 ...

Обычно в заголовке окна пишут полный путь к открытому файлу, а не относительный, либо только название файла, и это должно быть настраиваемо, более того, если в заголовке полный путь слишком длинный, его надо еще и правильно сократить, чтоб он поместился и был понятен

Цитата Сообщение от dstar Посмотреть сообщение
Согласен, вроде исправил.
Напишите "Не удалось выполнить запуск <...>", где <...> - Программа, которую не удалось запустить, а то у вас в одном место одно, в другом месте другое и с ошибкой...
Грамматические ошибки, кстати очень сильно убивают интерес...

Сделайте поля размеров страниц в окне свойства страницы активными только при установке формата страницы Другой

Вот еще... В Файле PersonalStat при редактировании объектов в таблице прямоугольная область редактирования смещается, становится длинной и не отображает предыдущее содержание, если это не строка
0
188 / 41 / 12
Регистрация: 22.02.2016
Сообщений: 149
06.03.2016, 20:10  [ТС] 15
vlisp,
и я все равно не увидел такую картинку, у меня таблица не заполняется в просмотре
В программе example.exe, видны данные в таблице? в режиме редактирования шаблон виден?
Обычно в заголовке окна пишут полный путь к открытому файлу, а не относительный, либо только название файла
С полным это конечно лишнее, не замечал такого. Указать только имя файла - возможно это будет верно. Наверное с относительным соригинальничал
если в заголовке полный путь слишком длинный
Полный путь можно посмотреть в свойствах документа
Напишите "Не удалось выполнить запуск <...>", где <...> - Программа, которую не удалось запустить, а то у вас в одном место одно, в другом месте другое и с ошибкой...
Грамматические ошибки, кстати очень сильно убивают интерес...
Когда пишешь программу не особо обращаешь внимание на ошибки. А визуального сообщения не видел. Создам себе виртуалку для тестирования таких вещей.
Сделайте поля размеров страниц в окне свойства страницы активными только при установке формата страницы Другой
Зачем? почему я не могу изменить размеры полей для других форматов страниц?
В Файле PersonalStat при редактировании объектов в таблице прямоугольная область редактирования смещается, становится длинной и не отображает предыдущее содержание, если это не строка
В режиме редактирования/просмотра? Не понимаю в чем проблема. Расширяться должны размеры только текстовых объектов в режиме редактирования шаблона. Это сделано для того чтобы длинные формулы было удобнее просматривать и редактировать. При этом границы прямоугольников (рамок) меняться не должны
0
1046 / 967 / 153
Регистрация: 10.08.2015
Сообщений: 5,220
06.03.2016, 21:33 16
Цитата Сообщение от dstar Посмотреть сообщение
ы данные в таблице? в режиме редактирования шаблон виден?
не запускается, просит библиотеку MIDAS
Цитата Сообщение от dstar Посмотреть сообщение
С полным это конечно лишнее, не замечал такого.
Посмотрите Notepad++
Цитата Сообщение от dstar Посмотреть сообщение
Когда пишешь программу не особо обращаешь внимание на ошибки.
Нужно обращать, это мелочи, но но их замечают первыми
Цитата Сообщение от dstar Посмотреть сообщение
Расширяться должны размеры только текстовых объектов в режиме редактирования шаблона. Это сделано для того чтобы длинные формулы было удобнее просматривать и редактировать. При этом границы прямоугольников (рамок) меняться не должны
Длина прямоугольника текстового объекта в режиме редактирования должна быть адаптивной... уменьшаться и увеличиваться в зависимости от содержания. К тому же поле не должно убегать от нужной ячейки таблицы
Миниатюры
Редактор: создание и настройка печатных форм  
1
188 / 41 / 12
Регистрация: 22.02.2016
Сообщений: 149
06.03.2016, 23:06  [ТС] 17
vlisp,
не запускается, просит библиотеку MIDAS
А вот это серьезно. Протестирую на голой виртуалке. Хотелось бы чтобы сразу все запустилось
Длина прямоугольника текстового объекта в режиме редактирования должна быть адаптивной... уменьшаться и увеличиваться в зависимости от содержания. К тому же поле не должно убегать от нужной ячейки таблицы
здесь немного другая идея. Разработчик выставляет положение объекта и его ширину, а дальше содержимое текстового блока вытягивается по высоте. Представьте что это ячейка таблицы. Она не вытягивается по содержимому текста, а растягивается только по высоте.
0
188 / 41 / 12
Регистрация: 22.02.2016
Сообщений: 149
06.03.2016, 23:25  [ТС] 18
Создал себе виртуалку без установки какого-либо другого ПО. Прежде чем выложить архив, буду теперь тестировать на ней. Действительно без midas.dll Example.exe не запускался. Прикрепляю его ниже. Позже включу в состав архива демки
Вложения
Тип файла: rar midas.rar (117.5 Кб, 4 просмотров)
0
188 / 41 / 12
Регистрация: 22.02.2016
Сообщений: 149
07.03.2016, 03:08  [ТС] 19
Все приведенные ранее примеры отчетов были статическими. А именно, разработчик должен настроить желаемую печатную форму и предоставить средства вызова пользователю, например с помощью главного меню или управляющих элементов. Однако, не всегда предложенная пользователю форма его устраивает. То колонку нужно добавить, то изменить группировку или сортировку данных. На все случаи отчеты не создать.
Для упрощения их создания в Редактор встроен "Конструктор отчета". Вызвав его пользователь может самостоятельно настроить необходимый набор колонок, указать нужную сортировку/группировку данных, выполнить форматирование страницы. Кроме этого, пользователь может самостоятельно создать список часто используемых вариантов отчета и загружать их по мере необходимости
Вот несколько вариантов задания параметров отчета
Редактор: создание и настройка печатных форм
Редактор: создание и настройка печатных форм
Редактор: создание и настройка печатных форм
Редактор: создание и настройка печатных форм

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

Результат формирования отчетов можно посмотреть ниже
Редактор: создание и настройка печатных форм
Редактор: создание и настройка печатных форм
Редактор: создание и настройка печатных форм
Редактор: создание и настройка печатных форм


Файл конструктора отчетов находится по пути ".\Reports\Example.dtc"

Пример вызова "Конструктора отчета" описан в исходниках ".\src\*.*"
Вложения
Тип файла: rar Editor.rar (1.73 Мб, 14 просмотров)
0
07.03.2016, 03:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.03.2016, 03:08
Помогаю со студенческими работами здесь

Перенос печатных форм с КА в УТ 11
Люди в общем вопрос такой, у нас на предприятии стоит 8.2 и КА. И в нашей КА есть несколько макетов...

Параметры печатных форм
можно ли передать параметр их внешней обработки во внешнюю печатную форму. Если да, то как? если...

Макеты печатных форм
Добрый день!Не могли бы Вы посоветовать как мне лучше поступить? В программе Управление Торговлей...

Редактор: создание и настройка отчетов
Приветствую. Многие из Вас уже сталкивались с необходимостью вывода результата работы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru