пятница, 12 июля 2013 г.

MS Outlook имя почтового адресса в качестве имени пользователя

Столкнулся с задачей по изменению огромному количеству пользователей имени пользователя в программе Outlook.

В чем соль:
Каждый пользователь имеет почтовый адресс, но на сервере для отправки используется учетная запись пользователя.
Пример:
Почтовый адресс: super.puperuser@server.com
авторизация: domen\ivanov.ivan
пароль: **********

из за перехода на hMail Server поставили задачу заменить domen\****** на запись почтового адреса.

Будем парсить!

Часто сталкиваюсь с тем, что  приходится разбирать текстовые файлы, как пример:
импорт почтовых адресов, импорт выписки из банка, платежи и .т.д
Файлы имеют разнообразную структуру и разные разделители.
Пример:
1; Иванов; Иван; Иванович; Украина; Луганская обл; Бойково; д22
2; Сидоров; Сидор;Сидорович;Россия;Какаято обл;Какой то город;Адресс

и того мы имеем структуру:
Код
Фамилия
Имя
Отчество
Страна
Область
Город
Адресс

Гибкий генератор отчетов 2

продолжение статьи.

Долгое время был занят по работе, но теперь снова есть время продолжить начатое.
Время проходит и ничто не стоит на месте.

Базу данных непернес с Paradox на платформу СУБД MySQL, для этого пришлось написать конвертер, но об этом в другой раз.

 Вернемся к тому что сам отчет строится из 3х файлов:


1)      <файл>.SQL  
Это файл SQL запроса к базе данных, именно вернувшийся набор данных и будет дальше рассматриваться программой.
2)      <файл>.XLS
Это файл MS Excel составленный по определенному шаблону именно в него будут помещены данные полученные запросом, но именно в такой форме как указано в шаблоне. Фактически Excel это дизайнер выходного бланка отчета.
3)      <файл>.INI
Это файл Param имеет расширение .ini и служит файлом дополнительных параметров, которые могут использоваться на разных этапах генерации отчета.

вторник, 5 февраля 2013 г.

Гибкий генератор отчетов

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

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

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

Куда выводить?
Вывод информации полученной SQL запросом должен быть грамотным  и позволять вносить изменения не переделывая саму программу. Долго колебался между Rave, FastReport Free но решение пришло само собой. Видя что пользователи постоянно работают в Microsoft Excel решил не обучать их премудростям новых сред а использовать саму среду Excel тем более что она доступна как OLE с плюсом VBA.

А как же настраивать?
Готовые отчеты хотелось бы конфигурировать, но использовать дополнительные модули? Зачем? Ничего шифровать и bin-арить не будем используем обычный ini файл, так что кроме блокнота ничего и не понадобится.

Как же все связать и заставить работать?
Как всегда( а было уже много раз) на помощь приходит среда быстрой разработки Delphi.
Исходя из всего выше сказанного принимаем решение использовать в отчете 3 файла:
<имя>.xls   - шаблон формы
<имя>.ini   - параметры для тонкой настройки
<имя>.sql  - запрос который вернет данные
Сел с нуля писать связку Приложение+OLE VBA MS Excel, однако goooogle-в интернете наткнулся на очень интересный компонент a7rexcel который оказался бесплатным, о нем можно почитать тут http://a7in.com/delphi/   (Спасибо Вам ребята за идею) используя его как скелет для связывания с Excel очень быстро реализовал переброс данных.

Программа из которой берется информация хранит данные в Paradox таблицах, по этой причине использую BDE для доступа к данным, ODBC ни в какую не захотел отображать кириллицу  а время поджимало.

Однако хочется что бы генератор отчетов мог задавать диапазоны дат, выбирать данные из списка, по этому принимаю решение дополнить SQL язык своими тегами:


В запросе можно использовать функции которые вызывают диалоговые окна перед выполнением запроса
все переменные запроса строятся по формату
#[FUNCTION][MESSAGE]#
пример
select * from test where date='#[GETDATE][Введите текущую дату]#'

Список функций и параметров
#[GETDATE][message]#  - запрос на ввод даты
#[GETTABLE][Table:Field View:Field Result:Сообщение]# - Показывает содержимое справочника с указанием какое поле показать и какое поле вернуть как результат, возвращает одно значение

что значительно расширило возможности программы.

Так же дополнил Excel шаблоны функциями в самом Excel-е
достаточно в ячейке указать константу и она будет заменена

#FCURRENTDATE#  - вставляет текущую дату
#FCOUNTER# - вставляет номер записи, счетчик, номер по порядку
#FCOUNT# - выводит количество записей

Отчет в строится из 3х блоков Шапка, Набор данных и Пол.

Title - Заголовок
Line - выводимый набор данных, в нем в качестве параметров происходит поиск полей таблицы
Foot - Подвал отчета


статья получается большая, продолжение следует.