Наша технология позволяет программировать отчеты из базы данных 1С на стандартном SQL с привычными рускоязычными наименованиями используемых объектов. Для этого необходимо установить модифицированную версию СУБД PostgreSQL, которую можно взять здесь (собрано для PostgreSQL 8.3.8), на сайте 1С (PostgreSQL 8.3.1) или собрать самостоятельно из дистрибутива и предоставляемых 1С патчей. После этого, в соответствии с документацией на 1С, конфигурации и базы данных 1С хранятся на сервере в PostgreSQL. Наша Java-программа обрабатывает предложенную ей конфигурацию 1С и создает в той же базе данных дополнительные объекты, которые служат расшифровками для закодированных объектов 1С. В результате можно читать и писать данные стандартными средствами SQL из любого языка программирования или интегрированной оболочки. В частности, мы применили данную технологию для автоматического импорта биржевых котировок и курсов валют в конфигурацию "1С-Рарус:Паевые инвестиционные фонды, редакция 2". Помимо получения возможности пакетной (неинтерактивной) обработки данных на сервере наша технология позволила ускорить импорт данных в сотни (!) раз по сравнению со стандартным для 1С интерактивным способом.
./create_metadata.sh Database: gl URL: jdbc:postgresql:gl Username: postgres Password: /usr/bin/java -jar md.jar org.postgresql.Driver jdbc:postgresql:gl postgres password CREATE FUNCTION ALTER FUNCTION drop1cviews ------------- (1 record) DROP TABLE DROP TABLE DROP TABLE Driver loaded: org.postgresql.Driver@82701e Connected to jdbc:postgresql:gl as user postgres Create db objects table... 6305 objects to read estimated done Processing accounts... done Processing account registers... done Processing accumulation registers... done Processing documents... done Processing document journals... done Processing enumerations... done Processing calculation kinds... done Processing chrc... done Processing information registers... done Processing nodes... done Processing references... done Processing sequences... done Create db schema table and scripts... 865 tables were found in configuration... done Create comments... done Build views... done Congratulations! |
В помощь работе с GUID (PostgreSQL v < 8.3): guid.tar |
CREATE OR REPLACE FUNCTION avn.load_micex_quotes( in quote varchar ) RETURNS void AS $BODY$ DECLARE inforeg TEXT; statement TEXT; BEGIN
-- Здесь мы определяем имя таблицы 1С, связанной с view 'иКотировки' -- Внутренние имена объектов конфигурации 1С могут изменяться при каждом изменении этой конфигурации
SELECT table_name INTO STRICT inforeg FROM information_schema.view_table_usage WHERE view_schema = 'avn' AND view_name = 'иКотировки'; statement := 'insert into '||inforeg|| ' SELECT a.date::timestamp as period, b.id as "ЦеннаяБумага", c.id as "Биржа", COALESCE(a.waprice, ''0'')::numeric as Average, 0 as average_ch, COALESCE(a.low,''0'')::numeric as min_price, COALESCE(a.high,''0'')::numeric as max_price, COALESCE(a.open,''0'')::numeric as open_bid, COALESCE(a.open,''0'')::numeric as open_ask, 0 as bid, 0 as ask, COALESCE(a.vol,''0'')::numeric as volume, 0 as trades_num, 0 as usd_volume, COALESCE(a.close,''0'')::numeric as last_price, 0 as Nkd, COALESCE(a.waprice, ''0'')::numeric as "ПризнаваемаяКотировка", COALESCE(a.waprice, ''0'')::numeric as "РыночнаяЦена", COALESCE(a.waprice, ''0'')::numeric as "Оценка", COALESCE(a.waprice, ''0'')::numeric as "РыночнаяЦена2", d.id as "ВалютаКотировки" FROM avn.micex_quotes a, avn."сЦенныеБумаги" b, avn."сБиржи" c, avn."сВалюты" d WHERE mvarchar_in(textout(a.ticker)) = b."ДопКод1" AND c.code = ''MICEX'' AND d.code = ''810'' AND a.waprice IS NOT NULL AND a.waprice <> 0 AND a.vol IS NOT NULL AND a.ticker = '''||$1||''' AND a.date > (SELECT COALESCE( MAX( e.period ), ''2003-12-31'' )::date FROM avn."иКотировки" e, avn."сБиржи" f, avn."сЦенныеБумаги" g WHERE f.code = ''MICEX'' AND e."Биржа" = f.id AND g.id=e."ЦеннаяБумага" AND g."ДопКод1" = '''||$1||''')'; EXECUTE statement; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE; ALTER FUNCTION avn.load_micex_quotes( varchar ) OWNER TO postgres;