пятница, 28 октября 2011 г.

PyNCReport: сборка и установка под Windows

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

Подходящесть репгена определяется кучей критериев, по большей части проектоспецифичных. Такие критерии есть и у меня:
  1. Главный критерий - поддержка PyQt, в крайнем случае Qt, написание биндера - задача решаемая. В идеале репген должен быть написан на Qt и в поставке иметь биндер для PyQt.
  2. Наличие симпатичного и простого в использовании визуального дизайнера шаблонов отчетов.
  3. Возможность печати предпросмотра, печати и экспорта в какие-нибудь распространенные форматы.
  4. Поддержка кросс-таблиц.
  5. Очень желательно использование парадигмы бэндов, бо так привычнее.
Мук выбора не было - первый же критерий безжалостно сузил круг подозреваемых, до двух продуктов, способных, по отзывам, работать в боевых условиях. Это NCReport и OpenRPT.
OpenRPT мне совсем не понравился, больно страшненький дизайнер у него, биндера к PyQt нет и отсутствует документация, что значит перекапывание кучи кода для написания биндера. Короче, отвернуло.

А вот NCReport понравился. Профессионально выглядящий дизайнер, биндер прилагается, достаточное количество документации - все хорошо. По п.4, правда, не удовлетворил, но разработчики скоро обещают. Еще одна незадача - платный. Но сегодня не об этом. Сегодня я расскажу, как приготовить NCReport для употребления в PyQt. Для приготовления использовалась кухонная утварь следующих версий:
  1. NCReport 2.6.2
  2. PyNCReport 2.6.0
  3. MSVC 2008
  4. Python 2.7
  5. Qt 4.7.3, сборка MSVS2008
  6. PyQt 4.8.4
Завести PyNCReport на этих версиях продуктов мне удалось, однако неизвестно, что будет в дальнейшем. Самая большая опасность - прекращение поддержки биндера, и следовательно, невозможность его собрать с более свежими NCReport и Qt.

Повторюсь: разработка ведется под Windows, пробовать собирать биндер под Linux просто нет времени.

Установка репгена

Для начала нужно установить сам NCReport:
  1. Скачать дистрибутив для Windows, сборка MSVS2008
  2. Запустить инсталлятор, устанавливать с параметрами по-умолчанию
Уже можно читать документацию и пробовать создавать первые шаблоны отчетов. А вот написать отчет на питоне пока не получится. Для этого нужно собрать и установить биндер.

Сборка и установка биндера

  1. Установить всю вышеперечисленная утварь (естественно, кроме PyNCReport).
  2. Скачать архив PyNCReport и распаковать его куда-нибудь ( )
  3. Открыть консоль MSVS2008 ((Пуск/Все программы/Microsoft Visual Studio 2008/Visual Studio Tools/Visual Studio 2008 Command Promt)
  4. Выполнить в консоли следующие команды (консоль после этого не закрывать):
    cd PyNCReportDir
    python configure.py
  5. Заменить все вхождения "C:\Qt\4.7.*" в файле \Makefile на путь к директории, куда установили Qt, по-умолчанию "C:\Qt\4.7.3"
  6. В консоли MSVS2008 выполнить команду
    nmake
  7. Для установки собранного биндера в консоли MSVS2008 выполнить команду
    nmake install

Проверка работоспособности биндера

В консоли питона выполнить
>>> import PyNCReport
Питон может наругаться на невозможность загрузить dll, скорее всего он не может найти зависимости для PyNCReport.pyd - python27.dll и/или ncreport2.dll. Нужно прописать пути к этим dll в переменную окружения PATH. Можно также самостоятельно посмотреть зависимости для PyNCReport.pyd и как они грузятся, утилитой Dependency Walker



10 комментариев:

  1. Спасибо за заметку. Весьма полезная информация.
    Но вот незадача, на всех страницах отчёта на нижнем колонтитуле красуется "Generated by NCReport 2.0.7 EVALUATION VERSION © 2006-2012 NociSoft/Helta Kft. http://www.nocisoft.com".

    ОтветитьУдалить
    Ответы
    1. Да, есть такое. Я вскользь упоминал, что NCReport платный. Такой нижний колонтитул генерит пробная версия, это ее единственное отличие от полной. Моего тогдашнего заказчика это не беспокоило, я и не заострялся.

      Удалить
  2. Созданное при помощи этой библиотеки приложение через какое-то время не прекратит работать? т.е. это не пробная версия с ограниченным сроком эксплуатации?
    Если не сложно (буду бесконечно благодарен :-)) если-бы Вы привели небольшой пример использования NCReport из PyQt

    ОтветитьУдалить
    Ответы
    1. Ну что вам хорошего сказать... Как-то изменилось все у них на сайте с того времени, как я туда последний раз заходил. Раньше встречал четкое упоминание об отличии пробной версии от полной - наличие нижнего колонтитула. Сейчас приведены мутноводные terms of use, где ничего нет об ограничениях пробной версии. Думаю, имеет смысл спросить у них самих.
      Могу предположить, что пробный период они вводить таки не стали, но нужно убедиться. Я им напишу, самому интересно стало.

      Что касается примера, нужно поднять что-нибудь из старых проектов, все собрать, убедиться в работоспособности, упростить для примерности. К сожалению, до Нового Года я вряд ли найду для этого время. Тем более, раз тема поднялась, хочется собрать последнюю версию, посмотреть новые плюшки, в т.ч. кросс-таблицы. Также неплохо было бы подробнее остановиться на лицензировании.

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

      К вам будет просьба пнуть меня не стесняясь во второй половине января, если обуяет меня великая новогодняя лень :) Но постараюсь не довести :) Спасибо за интерес.

      P.S. Но денег же они хотят...

      Удалить
  3. Спасибо большое.
    Будет лучше если Вы им напишите, т.к. не силён в англ.
    Буду ждать статьи, но во второй половине января начну беспокоить :-)
    Для моих любительских целей стоимость софтины неподъёмная :-(, но уж больно понравилась.

    С наступающим!

    ОтветитьУдалить
  4. Обнаружил ещё такую штуку - eXaro
    Описание:
    eXaro - это свободный генератор отчетов подобно Jasper или Crystal.
    eXaro очень просто втраивается в любое приложение написанное с помощью кроссплатформенного тулкита Qt.
    Имеет встроенный графический дизайнер отчетов, предпросмотр сгенерированных отчетов, поиск по содержимому отчета.
    Позволяет экспортировать отчеты в несколько различных форматов.

    http://www.crossplatform.ru/node/565
    http://code.google.com/p/exaro/
    http://www.prog.org.ru/topic_22437_0.html

    Но не знаю возможно ли её будет использовать из PyQt...
    Сам обёртку не смогу написать :-(

    ОтветитьУдалить
    Ответы
    1. На момент написания статьи eXaro даже не заводился, по крайней мере я не смог. Поэтому и не был включен в список репгенов, теоретически способных работать в продакшне. Возможно сейчас что-то и изменилось, нужно посмотреть.

      А написание PyQt-биндера для более-менее сложной Qt-библиотеки, таки да, задача нетривиальная. Для примера взгляните на исходники тех же PyQt или PyNCReport.

      Удалить
    2. Сходил, посмотрел... Пациент скорее мертв, чем жив, последнее шевеление в августе 2009, забудьте.

      Удалить
  5. Здравствуйте! Хотелось бы вернуться к начатому разговору о NCReport :-)
    Вы не знаете, созданное при помощи этой библиотеки приложение через какое-то время не прекратит работать?
    т.е. это не пробная версия с ограниченным сроком эксплуатации?
    буду благодарен если-бы Вы привели небольшой пример использования NCReport из PyQt4.
    И имеется ли возможность средствами NCReport нарисовать геометрическую фигуру в произвольном месте...
    скажем, закрашенный прямоугольник на нижнем колонтитуле :-)

    ОтветитьУдалить
  6. Про ограничения пробной версии написал, про примеры позже, сейчас совсем некогда. Про закрашенный прямоугольник в нижнем колонтитуле напишите мне на почту kaa.mobil&gmail.com

    ОтветитьУдалить