Jul. 8th, 2007

metaclass: (Default)
она будку красит.

Есть у одного нашего клиента старая учетная система, написанная на кларионе. И я оную систему обслуживаю и с ней интегрирую всячески свою. Написал класс для работы с кларионовскими таблицами, упрощенный, и читаю оттуда данные. Но вот задалбывает постоянно писать похожий код для импорта, хочется его сократить и упростить.

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

Придется пока что писать все таки в лоб, а когда будет свободное время, или разгрести движки или придумать что-нибудь еще.

Альтернативные варианты извращеннее, например сделать selectable stored procedure в Firebird, которая возвращает все записи из нужной таблицы, используя внешнюю dll, и делать из нее селект. Причем если сервера стоят рядом и подключены толстым каналом, то это будет сильно быстрее, чем читать файлы базы с клиента и там разгребать.
Вот только доступа у меня с сервера с firebird к файл-серверу системы нет, уже два года пишем заявки ИТ-службе клиентов - ноль реакции. Причина отсутствия реакции неясна.
metaclass: (Default)
а получается то автомат, то пулемет, то, идрить его налево, термоядерная боеголовка.

Есть задание - переписать в старой системе ведомость. Использовать встроенный в нее редактор меня давно задрало, глючен, неудобен в обслуживании и язык кривой и не объектный. Но ведомость была на нем написана, года три как уже и даже работала, с определенными ограничениями. Но не всех устраивала, сложно обслуживалась, etc. В общем, задрала вусмерть.

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

И начал я ее делать. Изначально собирался наполовину в лоб, наполовину обобщить - т.е. все обертку (подключение к базам старой системы, выбор рабочих параметров, GUI) сделать обобщенным, а к ней подгружать
закодированный в виде наследника от простого базового класса в лоб написанный алгоритм расчета этой ведомости. Базовый класс совсем тупой, виртуальные методы типа SetDBPaths, SetLoadParams, Load.
В лоб делал, потому что система не имеет sql запросов и базы обрабатываются тупым перебором. И то это получается быстрей, чем внутри нее самой делать. И парсера-движка SQL я готового так и не нашел.

Короче, не знаю я, что на меня нашло, похоже переработался совсем, но в процессе написания получилось следующее:

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

Внутри загружаемого класса реализован безумный язык запросов к базам старой системы на базе XML. Умом понимаю, что бред, но ничего поделать не могу - так получилось :) Из набора таблиц старой системы генерит датасет с объектами, в том числе вложенными(произвольного уровня), типа "шапка документа-строки документа", поддерживает группировку и аггрегатные функции типа min,max,total,list. Причем выходной датасет может быть не один, а несколько, т.е. фактически выполняется несколько запросов за один проход по таблице.

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

Вывод: надо идти в отпуск, иначе я скоро на просьбу сложить 2+2 буду выводить с нуля теорию чисел.

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 8th, 2025 03:08 pm
Powered by Dreamwidth Studios