все что связано с моей работой
Главная » Програмирование » Lazarus и MS SQL 2005

Lazarus и MS SQL 2005

Лень сильна! Она просто безумно сильна. И в очередной нашей битве она победила!

Одной из моих обязанностей является размещение материалов на сайте, кассового плана в частности. Операция не сложная надо сказать, он однообразная. Вот в этом месте лень  и нанесла решающий удар — ненавижу рутину.

Плюс библиотека для работы с WordPress-ом практически готова, осталось сделать рефакторинг и "вычистить" код. А эта ситуация как раз станет хорошим тестом работы библиотеки. К тому же, на сайте добавлены специальные функции для оформления материала, так что, шаблон для всех записей кассового плана один и тот же.

Итак, решено. Нужно сделать программку добавления кассового плана на сайт так сказать "в один клик".

ТЗ.

Алгоритм безумно простой:

  1. Выбрать файл кассового плана
  2. Выбрать (исправить текущую) дату публикации.
  3. Опубликовать
    1. Загрузить файл на сайт
    2. Заполнить шаблон заметки и разместить
    3. Если необходимо, связать загруженный файл и заметку

Интерфейс можно реализовать в виде визарда, а можно – одно окно со строкой выбора файла и датой публикации. В общем  все очень просто.

Контрольный выстрел

Сказано – сделано, тем более все более чем просто. Но, уже на завершающем этапе, лень сделала "headshot". Дело в том, что на самом деле проблема не в том чтоб разместить файл и заметку, а в том, что большую часть времени трачу на форматирование того файла что мне дают.

Фактически это заявка в Excel-е для загрузки в АИСБП, и программе пофиг на форматирование, главное чтоб точка вместо запятой и все по определенным ячейкам, а на то что, данный в непечатном диапазоне и каким шрифтом ей побоку. Но собственно так и должно быть.

Вот и приходиться сначала доводить до ума, прежде чем размещать.

Вариант!

Но если остановиться на минуту и подумать… – МинФин то, берет большинство документов (отчетов) из АИСБП. А нет ли там какого-нибудь отчета похожего на "нашу" версию. Порывшись немного в отчетах блока "Кассовый план" – нашел "План кассового исполнения областного бюджета (по классификации)". Который практически один в один как тот файл что мне дают. Показал бюджетникам, они оказались не против такого изменения – решено, теперь Кассовый план выгружаем из АИСБП.

Можно Делать экспорт из АИСБП в Excel, удалять лишние колонки и добавить заголовки. Тем более опыт работы с Excel-ем из Лазаря уже был – в программе для печати отчетов из Доп.расшифровки.

Дальше больше…

А для чего собственно форматировать Excel? В Лазаре есть LazReport, так может брать данные из файла и печатать через LazReport. А так как это порт  порт FreeReport-а, то есть и наследство в виде экспорта в html и pdf.

А еще зачем, запускать АИСБП, открывать отчет, потом его экспортировать, затем прогонять программой… Ведь можно напрямую взять данные с сервера! Не большой анализ таблиц Apps_Reports и Apps_Reports_Procedures показал что интересующий нас отчет строит процедура CPL_R_More_Rep.

Первые грабли.

Начну с малых или вернее дальних. Экспорт из репорта отвратительный, а в pdf в добавок не умеет встраивать шрифты и ничего не знает о локалях Печальная рожица. Но это можно сказать заключительный этап, так что до него еще далеко. Тем более посмотрев реализацию класса отвечающего за экспорт – реализовать то что нужно мне не сложно.

Тем более такой вариант мне подходит даже больше, чем использование стандартных экспортеров. Можно реализовать экспорт в html хоть с использованием таблиц, хоть дивами или используя сеточную верстку. Или свой какой-то формат, который будет понимать и форматировать сервер.

Конечно лучше б было использовать pdf, но за те несколько часов что было, я не нашел более менее понятной спецификации версии 1.5, именно в ней появляется UTF8 и поддержка локалей. на сайте Adobe есть только последняя версия, если вдруг будет время и осилю эту спецификацию – то будет вменяемый экспорт в pdf. Но опять же это не первоочередная задача, достаточно будет своего фильтра в html, и тоже позже.

К тому вылезли другие и более важные грабли. Лазарь может работать с серверами БД от MS есть только через ODBC. Нам собственно без разницы, все равно алиас настроен на всех машинах где есть АИСБП. Пробуем подключиться через Budget2K — все отлично. Первый запрос, select * from Apps_Constants – замечательно! Ну то, что русский текст козаблами — это ерунда, AnsiToUTF8 никто не отменял.

Пробуем наш отчет: exec CPL_R_More_Rep @Month=’10’ – "фиг вам", вместо exec надо использовать execute, мелочь, но не приятно. Исправил запрос – выполнился на ура, но вернул только одну строку отчета. И чтобы я не делал возвращает только одну строку из отчета и все, данные из таблиц нормально, а из процедуры – только первую строку. Прочел весь баг-трекер на эту тему, проверил все рецепты от туда, у меня все оказалось исправлено, но к слову сказать они все там очень давнишние были.

Ладно есть другие компоненты, тем более проверенные еще во время Delphi – ZEOS. Но с ним еще хуже оказалось, во-первых с MS SQL 2005 он работает только через FreeTDS. Это свободный драйвер для ODBS/unixODBC для работы с SQL сервером. В комплекте с ZEOS идут уже собранные библиотеки для разных IDE, систем (x86 и x64). Но при выполнении запроса ZEOS возвращает какую-то непонятную ошибку о том что нельзя воткнуть NULL в #Result. И это при том что и через компонент ODBC и из консоли запрос выполняется без всяких ошибок. Пробовал искать различные готовые сборки FreeTDS, сам пересобирать – результат одни и тот же. В общем от ZEOS остался очень неприятный осадок, по крайней мере в работе с MS SQL.

Выход

На форуме FP встретил сообщение что в Лазаре с FP 2.6.1 есть свой компонент TMSSQLConnection. Но вся беда в том, что fpc 2.6.1 есть только в девелоперских сборках, а я стараюсь использовать только стабильные. Но проверить все-таки стоит. Скачал сборку Lazarus-1.1-39122-fpc-2.6.1-20121018-win32.exe. Установил. Действительно есть компонент, пробую – все работает! Решил проверить компонент для работы через ODBC – и все тоже работает.

Перелопатил все release note-ы ничего нет о правках в TODBCConnection. Еще не сравнивал diff-ом может удастся вернуться на стабильную сборку. Еще как вариант можно попробовать пересобрать Лазаря с новым паскалем.

Но времени особо нет, поэтому пока останусь на этой сборке, как закончу программку тогда буду экспериментировать и пересоберу на стабильной сборке.


P.S. Заметка о том, что Лазарь с fpc 2.6.1 умеет работать нормально работать с MS SQL 2005 почти на 1000 слов…. вот это меня понесло…

Комментариев нет

No comments yet.

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.