XML и курс валют

Автор Сообщение
Maxim
Заслуженный форумщик

Зарегистрирован: 09.03.2005
Сообщения: 77
Откуда: Москва

Добавлено: 22.07.2005 15:10 Заголовок сообщения: XML и курс валют
Уважаемые, известно что ЦБ РФ отдает курсы валют по XML.
Озадачивался кто либо написанием импорта этих данных в Скалу?
Если это у кого работает, можно подробнее.

Спасибо
_________________
"Я люблю работу, она очаровывает меня. Я могу сидеть и смотреть на неё часами." © Джером К. Джером.

Jugulator
Главный форумщик

Зарегистрирован: 08.10.2004
Сообщения: 428

Добавлено: 22.07.2005 17:36 Заголовок сообщения: Go http://scala.2000.lv/ru/
Помню, господин, проживающий по адресу http://scala.2000.lv/ru/ , в англоязычном форуме вопрошал, почему же Скала не сделала импорт данных с сайта ЦБ. Вот он, кажется, такое делал.
E-terminator
Почетный форумщик

Зарегистрирован: 03.01.2005
Сообщения: 46
Откуда: град Св. Петра

Добавлено: 25.07.2005 11:56 Заголовок сообщения:
Могу подсказать методику получения курсов валют через XML.
1. Получаем XML с курсами влют с сайта ЦБР(кстати, как это делается? расскажите, pls)
2. Открываем XML в notepad.exe
3. Находим нужные курсы делаем Cntr+C
4. В Scale в валютном справочнике находим нужное поле и делаем Cntl-V Smile
А если серьезно, то возникает вопрос — а надо ли это вообще? У нас используется только USD и EUR. Полагаю, что две цифры в день в состоянии внести в систему руками бухгалтер. За одно и проверит их.
Maxim
Заслуженный форумщик

Зарегистрирован: 09.03.2005
Сообщения: 77
Откуда: Москва

Добавлено: 25.07.2005 17:51 Заголовок сообщения:
Поднял такой вопрос на семинаре в Скале (совершенно бессмысленое мероприятие было) и вот сегодня получил ответ от коллеги (если нужны контакты могу выслать)

Цитата:
Ты спрашивал про загрузку курсов валют с CBR.
Можешь использовать что я успел, надо только доработать выгрузку из
временной таблицы в SYCH (скрипт Untitled1 — еще не успел доработать, надо
узнать правила появления курсов на сайте)
Все скрипты относятся к ScaSystemDB.
USD, EUR -для соотв. валют
Load — выгрузка во временную таблицу
tempTable — создание таблицы
Job — само задание в SQL agent
untitled1 — там есть формула преобразования SYCH011

Для EUR

Цитата:
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS OFF
GO

CREATE PROCEDURE dm_LoadEURfromCBR
AS

declare @xmlString varchar(8000)
declare @val_1 datetime
declare @val_2 datetime
declare @url varchar(255)

select @val_2 = GetDate()
select @val_1 = GetDate()-1

select @url = ‘http://www.cbr.ru/scripts/XML_dynamic.asp?date_req1=’+
Convert(char(10), @val_1, 103)+’&date_req2=’+
Convert(char(10), @val_2, 103)+’&VAL_NM_RQ=R01239’

exec dm_LoadXMLFromFile
@url,
@xmlString output

declare @h int

exec sp_xml_preparedocument @h output, @xmlString

INSERT INTO dm_Valute (NumCode,[date],Value)
select
NumCode=978,
Convert(datetime, [Date], 103) ‘Date’,
— [Date],
— Nominal,
Convert(money, replace(Value, ‘,’, ‘.’)) ‘Value’
from
OpenXML (@h, ‘//Record’, 0)
with
(
[Date] char(10) ‘@Date’,
— Nominal int ‘./Nominal’,
Value varchar(10) ‘./Value’
)

exec sp_xml_removedocument @h
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO


Для USD

Цитата:
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS OFF
GO

CREATE PROCEDURE dm_LoadUSDfromCBR
AS

declare @xmlString varchar(8000)
declare @val_1 datetime
declare @val_2 datetime
declare @url varchar(255)

select @val_2 = GetDate()
select @val_1 = GetDate()-1

select @url = ‘http://www.cbr.ru/scripts/XML_dynamic.asp?date_req1=’+
Convert(char(10), @val_1, 103)+’&date_req2=’+
Convert(char(10), @val_2, 103)+’&VAL_NM_RQ=R01235’

exec dm_LoadXMLFromFile
@url,
@xmlString output

declare @h int

exec sp_xml_preparedocument @h output, @xmlString

INSERT INTO dm_Valute (NumCode,[date],Value)
select
NumCode=840,
Convert(datetime, [Date], 103) ‘Date’,
— [Date],
— Nominal,
Convert(money, replace(Value, ‘,’, ‘.’)) ‘Value’
from
OpenXML (@h, ‘//Record’, 0)
with
(
[Date] char(10) ‘@Date’,
— Nominal int ‘./Nominal’,
Value varchar(10) ‘./Value’
)

exec sp_xml_removedocument @h

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

продолжение в следующем посте….
_________________
"Я люблю работу, она очаровывает меня. Я могу сидеть и смотреть на неё часами." © Джером К. Джером.

Maxim
Заслуженный форумщик

Зарегистрирован: 09.03.2005
Сообщения: 77
Откуда: Москва

Добавлено: 25.07.2005 18:01 Заголовок сообщения:
Продолжение
Load.sql

Цитата:
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

CREATE PROCEDURE dm_LoadXMLFromFile
(
@tcFileName VARCHAR(255),
@tcXMLString VARCHAR(8000) OUTPUT
) AS
BEGIN
— Scratch variables used in the script
DECLARE @retVal INT
DECLARE @oXML INT
DECLARE @errorSource VARCHAR(8000)
DECLARE @errorDescription VARCHAR(8000)
DECLARE @loadRetVal INT

— Initialize the XML document
EXEC @retVal = sp_OACreate ‘MSXML2.DOMDocument’, @oXML OUTPUT
IF (@retVal <> 0)
BEGIN
— Trap errors if any
EXEC sp_OAGetErrorInfo @oXML, @errorSource OUTPUT, @errorDescription OUTPUT
RAISERROR (@errorDescription, 16, 1)

— Release the reference to the COM object
EXEC sp_OADestroy @oXML
RETURN
END

EXEC @retVal = sp_OASetProperty @oXML, ‘async’, 0
IF @retVal <> 0
BEGIN
— Trap errors if any
EXEC sp_OAGetErrorInfo @oXML, @errorSource OUTPUT, @errorDescription OUTPUT
RAISERROR (@errorDescription, 16, 1)

— Release the reference to the COM object
EXEC sp_OADestroy @oXML
RETURN
END

— Load the XML into the document
EXEC @retVal = sp_OAMethod @oXML, ‘load’, @loadRetVal OUTPUT, @tcFileName
IF (@retVal <> 0)
BEGIN
— Trap errors if any
EXEC sp_OAGetErrorInfo @oXML, @errorSource OUTPUT, @errorDescription OUTPUT
RAISERROR (@errorDescription, 16, 1)

— Release the reference to the COM object
EXEC sp_OADestroy @oXML
RETURN
END

— Get the loaded XML
EXEC @retVal = sp_OAMethod @oXML, ‘xml’, @tcXMLString OUTPUT
IF (@retVal <> 0)
BEGIN
— Trap errors if any
EXEC sp_OAGetErrorInfo @oXML, @errorSource OUTPUT, @errorDescription OUTPUT
RAISERROR (@errorDescription, 16, 1)

— Release the reference to the COM object
EXEC sp_OADestroy @oXML
RETURN
END

— Release the reference to the COM object
EXEC sp_OADestroy @oXML

END

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO


Планировщик Job

Цитата:
— Script generated on 25.07.2005 11:17
— By: SWEDWOOD\dmitry.malchikov
— Server: ALPHA

BEGIN TRANSACTION
DECLARE @JobID BINARY(16)
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
IF (SELECT COUNT(*) FROM msdb.dbo.syscategories WHERE name = N'[Uncategorized (Local)]’) < 1
EXECUTE msdb.dbo.sp_add_category @name = N'[Uncategorized (Local)]’

— Delete the job with the same name (if it exists)
SELECT @JobID = job_id
FROM msdb.dbo.sysjobs
WHERE (name = N’LoadCurRateFromCBR’)
IF (@JobID IS NOT NULL)
BEGIN
— Check if the job is a multi-server job
IF (EXISTS (SELECT *
FROM msdb.dbo.sysjobservers
WHERE (job_id = @JobID) AND (server_id <> 0)))
BEGIN
— There is, so abort the script
RAISERROR (N’Unable to import job »LoadCurRateFromCBR» since there is already a multi-server job with this name.’, 16, 1)
GOTO QuitWithRollback
END
ELSE
— Delete the [local] job
EXECUTE msdb.dbo.sp_delete_job @job_name = N’LoadCurRateFromCBR’
SELECT @JobID = NULL
END

BEGIN

— Add the job
EXECUTE @ReturnCode = msdb.dbo.sp_add_job @job_id = @JobID OUTPUT , @job_name = N’LoadCurRateFromCBR’, @owner_login_name = N’SWEDWOOD\dmitry.malchikov’, @description = N’Load Currency Rate from www.cbr.ru Using stored procedures: dm_LoadEURfromCBR, dm_LoadUSDfromCBR, dm_LoadXMLfromFile’, @category_name = N'[Uncategorized (Local)]’, @enabled = 1, @notify_level_email = 0, @notify_level_page = 0, @notify_level_netsend = 0, @notify_level_eventlog = 2, @delete_level= 0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

— Add the job steps
EXECUTE @ReturnCode = msdb.dbo.sp_add_jobstep @job_id = @JobID, @step_id = 1, @step_name = N’Load USD Rate’, @command = N’exec dm_LoadUSDfromCBR’, @database_name = N’ScaSystemDB’, @server = N», @database_user_name = N», @subsystem = N’TSQL’, @cmdexec_success_code = 0, @flags = 0, @retry_attempts = 0, @retry_interval = 1, @output_file_name = N», @on_success_step_id = 0, @on_success_action = 3, @on_fail_step_id = 0, @on_fail_action = 3
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXECUTE @ReturnCode = msdb.dbo.sp_add_jobstep @job_id = @JobID, @step_id = 2, @step_name = N’Load EUR Rate’, @command = N’exec dm_LoadEURfromCBR’, @database_name = N’ScaSystemDB’, @server = N», @database_user_name = N», @subsystem = N’TSQL’, @cmdexec_success_code = 0, @flags = 0, @retry_attempts = 0, @retry_interval = 1, @output_file_name = N», @on_success_step_id = 0, @on_success_action = 1, @on_fail_step_id = 0, @on_fail_action = 2
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXECUTE @ReturnCode = msdb.dbo.sp_update_job @job_id = @JobID, @start_step_id = 1

IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

— Add the Target Servers
EXECUTE @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @JobID, @server_name = N'(local)’
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

END
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:


Временная табличка

Цитата:
CREATE TABLE [dbo].[dm_Valute] (
[NumCode] [int] NULL ,
[Value] [real] NULL ,
[date] [datetime] NULL ,
[id] [int] IDENTITY (1, 1) NOT NULL
) ON [PRIMARY]
GO
[/code]

Ну и последнее ….

Цитата:
—For EURO
DECLARE @MaxDateSY datetime, @MaxDateDM datetime, @Curs real
set @MaxDateSY = (SELECT max(SYCH004)
FROM swedwood.dbo.SYCH0100 WHERE SYCH001=1)

set @MaxDateDM = (SELECT max([date])
FROM ScaSystemDB.dbo.dm_Valute WHERE NumCode=978)
set @Curs = (SELECT Value
FROM ScaSystemDB.dbo.dm_Valute WHERE NumCode=978 AND [date] = @MaxDateDM)

IF @MaxDateDM>@MaxDateSY —Check if SYCH has Rate no rate at this date
BEGIN TRANSACTION upd_euro
INSERT INTO swedwood.dbo.SYCH9900
VALUES (1, -1, -1, @MaxDateDM, ‘9999-12-31 00:00:00.000’, @Curs, @Curs, 2, 1, ‘/’,99305961 — CAST(@MaxDateDM AS bigint),0)
UPDATE swedwood.dbo.SYCH9900
SET SYCH005 = @MaxDateDM WHERE SYCH001=1 and SYCH004 = @MaxDateSY
DELETE FROM ScaSystemDB.dbo.dm_Valute WHERE NumCode=978 and [date]=@MaxDateDM
GO
COMMIT TRANSACTION upd_euro

DECLARE @MaxDateSY datetime, @MaxDateDM datetime, @Curs real
set @MaxDateSY = (SELECT max(SYCH004)
FROM swedwood.dbo.SYCH9900 WHERE SYCH001=1)

set @MaxDateDM = (SELECT max([date])
FROM ScaSystemDB.dbo.dm_Valute WHERE NumCode=978)
set @Curs = (SELECT Value
FROM ScaSystemDB.dbo.dm_Valute WHERE NumCode=978 AND [date] = @MaxDateDM)

SELECT *
—FROM ScaSystemDB.dbo.dm_Valute
—WHERE NumCode=978 and [date]=@MaxDateDM
FROM swedwood.dbo.SYCH9900
WHERE SYCH001=1
ORDER BY SYCH004 DESC

insert into SYCH9900
SELECT * FROM SYCH0100
WHERE SYCH001=1 and SYCH004=’2005-03-24 00:00:00.000′

delete from SYCH9900

SELECT *
from ScaSystemDB.dbo.dm_Valute
where [date]<getdate()-2

Пока не подставлял к себе (что-то баланс разорвался Embarassed)
Подставлю обязательно напишу.
_________________
"Я люблю работу, она очаровывает меня. Я могу сидеть и смотреть на неё часами." © Джером К. Джером.

Maxim
Заслуженный форумщик

Зарегистрирован: 09.03.2005
Сообщения: 77
Откуда: Москва

Добавлено: 25.07.2005 18:23 Заголовок сообщения: To E-terminator

Цитата:
Могу подсказать методику получения курсов валют через XML.
1. Получаем XML с курсами влют с сайта ЦБР(кстати, как это делается? расскажите, pls)
2. Открываем XML в notepad.exe
3. Находим нужные курсы делаем Cntr+C
4. В Scale в валютном справочнике находим нужное поле и делаем Cntl-V Smile
А если серьезно, то возникает вопрос — а надо ли это вообще? У нас используется только USD и EUR. Полагаю, что две цифры в день в состоянии внести в систему руками бухгалтер. За одно и проверит их.


По п. 1. см. http://www.oreilly.com/catalog/xmlhks/
По п. 2. IMXO Excell для этого лучше подходит.
По пп. 3-4. для вашего случя проще с главной странички www.cbr.ru Smile Smile
А если серьезно, то у нас валют 6 (Правда посчитал еще и у.е. у них курсы равны пока USD и EUR)
Знаю фирму которые вводят 9 валютных курсов. Причем надо незабыть ввести каждый вечер или рано с утра!!! Иначе потом правки слишком много. Это во первых.
А во вторых при ручном вводе всегда есть процент ошибки (зависит от внимательности оператора), про проверку это в корне не верно.
Никто не когда не проверяет опубликованный на ЦБ РФ курс с другими данными (по крайне мере я таких фанатов своего дела не встречал).
В третьих один раз настроить и можно забыть и совсем уж мелкая причина от бухгалтера услышал,
«- А вот 1С курс автоматически загружает» (ну это так мелочь, можно сказать на самолюбие надавили).
_________________
"Я люблю работу, она очаровывает меня. Я могу сидеть и смотреть на неё часами." © Джером К. Джером.

E-terminator
Почетный форумщик

Зарегистрирован: 03.01.2005
Сообщения: 46
Откуда: град Св. Петра

Добавлено: 26.07.2005 07:56 Заголовок сообщения:
Максим, спасибо за ссылку на один из девелоперских сайтов. Но все-же — как получать XML именно с сайта ЦБР? А что такое XML и как его разобрать и запихать в SYCHCC00 — это вопрос техники и вкуса. На мой взгляд удобней использовать не T-SQL, а VBSqript с SQL-DMO. Но это вопрос личной привязанности.
aav
Администратор
Администратор

Зарегистрирован: 14.09.2004
Сообщения: 1081
Откуда: Санкт-Петербург

Добавлено: 26.07.2005 08:46 Заголовок сообщения: Re: To E-terminator

Maxim писал(а):
А если серьезно, то у нас валют 6 (Правда посчитал еще и у.е. у них курсы равны пока USD и EUR)
Знаю фирму которые вводят 9 валютных курсов. Причем надо незабыть ввести каждый вечер или рано с утра!!! Иначе потом правки слишком много. Это во первых.
А во вторых при ручном вводе всегда есть процент ошибки (зависит от внимательности оператора), про проверку это в корне не верно.
Никто не когда не проверяет опубликованный на ЦБ РФ курс с другими данными (по крайне мере я таких фанатов своего дела не встречал).

Да никто и не говорит про проверку курсов, опубликованных на сайте ЦБ. Smile Речь идет о проверке того, что курс в Скалу заведен, причем правильно

Maxim писал(а):
В третьих один раз настроить и можно забыть…

А вот с этим я не согласен! Забывать нельзя. Для того, чтобы забыть должна быть предусмотрена процедура, причем, возможно, включающая в себя не только технические шаги, такие, как оповещения о том, что курсы успешно загружены или о том, что при попытке получения курсов произошла ошибка и т.п. а и чисто визуальная проверка со стороны того же бухгалтера иначе Вы потом получите ситуацию, когда бухгалтер скажет «А я ничего не знаю, она сама тут все делает, какие ко мне могут быть претензии?» Должна быть также подробная инструкция, что делать в том случае, если отсутствует возможность автоматической загрузки курсов или что делать при появлении новой валюты, типа УЕ9 = EUR по ЦБ + 2%
Вы не поймите, что я в принципе против подобного рода автоматизации, мне просто хотелось бы обратить внимание на то, что такой важный вопрос, от которого потом слишком многое зависит не ограничивается только какими-либо запросами к базе данных. В некотором смысле, я придерживаюсь в данном случае консервативного подхода, т.е. даже, если бы все другие вопросы у нас были решены и остался бы только этот, я бы трижды подумал о том, стоит ли это делать и не лучше ли оставить «как есть» Так!.. Нет, так..., что бы там ни говорили про какую-то там 1С.

Jugulator
Главный форумщик

Зарегистрирован: 08.10.2004
Сообщения: 428

Добавлено: 26.07.2005 09:31 Заголовок сообщения:
Полностью согласен с мнением AAV. И еще приведу некоторые соображения.
1. Не везде сеть, в которой работает Скала, подключена к Интернет (уж я то знаю), и www.cbr.ru там не пингуется никогда.
2. Поскольку ЦБР и другие сайты с курсами никому не обещали предоставлять информацию в определенном формате, то о смене этого самого формата можно узнать фактически только в случае неправильной загрузки данных. В давние года я тоже автоматизировал загрузку котировок акций, причем от поставщика информационных услуг, с которым был договор, и по отдельному каналу, Интернет же в ту пору еще слабо канал. Различных ценных бумаг были десятки, поэтому вводить их котировки вручную как раз было совсем неудобно. И вот в день Х все поломалось, как потом оказалось, в результате чьей-то ошибки, из-за которой разделитель дробной части стал запятой вместо точки. В тот раз все быстро починили, но тогда был прямой контакт со службой поддержки, а вот данные в свободном доступе придется разгребать самому.
3. Да, и еще раз да — это прежде всего вопрос разделения обязанностей и ответственности. Проверено — бухгалтер будет кивать на «программиста» (или на любую другую потустороннюю силу) в любой неудобной для себя ситуации. Как-то раз я сделал сверку курсов за большой период с данными ЦБ, и обнаружил у нас кое-какие пробелы и искажения. Догадайтесь с 3 (трех) раз, на кого потом наезжал финансовый директор. Если все будет качаться в фоновом режиме, то сначала забудется как вводить вручную, потом зачем эти курсы нужны и где используются, возникнут вопросы, почему какие-то курсы не совсем такие, какие ожидалось увидеть и т.д.
Maxim
Заслуженный форумщик

Зарегистрирован: 09.03.2005
Сообщения: 77
Откуда: Москва

Добавлено: 27.07.2005 18:08 Заголовок сообщения: To Jugulator
по п.1 на оснвании каких данных они в таком случае обновляют курс? Неужели «Российская Газета» или «Вестник ЦБ РФ» Very Happy

по п.2 Не владеете информацей.
Специальный стандарт на распространение данных
Специальный стандарт на распространение данных (ССРД) был установлен в 1996 году, с тем чтобы им
могли руководствоваться страны-члены МВФ, имеющие или стремящиеся получить доступ к
международным рынкам капитала, в вопросах предоставления общественности своих экономических и
финансовых данных. Присоединение к ССРД осуществляется на добровольных началах, однако, если
страна-член присоединяется к стандарту, она берет на себя обязательство соблюдать его, в том числе в
отношении таблицы данных о резервах, утвержденной Исполнительным советом МВФ 23 марта
1999 года.

а также здесь описаны качество, доступность, ответственность http://cbr.ru/datas_standart/print.asp?file=ExRat_b.htm

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

P.S. Просьба не рассматривать, данный пост как моё оправдание или же стремление оставить последнее слово за собой.
P.P.S. Мне больше были интерсна техническая возможность проведения импорта. Мнение aav, безусловно, было интересно и будет учтено при внедрении решения.
_________________
"Я люблю работу, она очаровывает меня. Я могу сидеть и смотреть на неё часами." © Джером К. Джером.

Jugulator
Главный форумщик

Зарегистрирован: 08.10.2004
Сообщения: 428

Добавлено: 28.07.2005 09:43 Заголовок сообщения:
1b. Источников, откуда можно почерпнуть курс валют, несколько, например, рассылка по факсу или электронная почта. Конкретно в нашей ситуации рядом есть сеть, в которой сайт ЦБ доступен, правда, открыть там XML в Excel не получится, а вот в Notepad можно.
2b. «17. Официальный курс доллара США по отношению к рублю» (см. http://www.cbr.ru/datas_standart/dates_calendar.asp ) А как же евро? Мне кажется, при реализации решения лучше закладываться на несколько источников информации, что сделано, например, в программке «Курсы ЦБ» с сайта http://www.polytech.ural.ru/ , где можно выбирать между сайтами ЦБ и РБК.
3b. Корпоративная этика в нашем случае, хотя и является вещью виртуальной, реально помогает ограничить проявления самодурства, которое имело место в вышеприведенном случае. Про этого конкретного финансового директора одна подчиненная (бухгалтер) так и сказала: «Хорошо умеет наезжать». Но речь идет о конкретном человеке, в целом же, этика тут не при чем.
Jugulator
Главный форумщик

Зарегистрирован: 08.10.2004
Сообщения: 428

Добавлено: 28.07.2005 10:10 Заголовок сообщения: Историческая справка, год 2002
——Original Message——
From: Vitaly Skaredoff [mailto:vitaly.skaredoff@DELFI.LV]
Sent: vrijdag 12 april 2002 8:03
To: SCALA-DISCUSS@LISTSERV.SCALA-CLIENTS.COM
Subject: Re: [SCALA-DISCUSS] automatic currency rate upload

Hi,

I’ve done it in my commercial intranet system — it takes official rates by XML (www.bank.lv) and offer to update currencies registered in Scala.

regards,
Vitaly.

——Original Message——
From: Scala Users’ Discussion Forum
[mailto:SCALA-DISCUSS@LISTSERV.SCALA-CLIENTS.COM] On Behalf Of Raes,
Jean-Luc
Sent: Thursday, April 11, 2002 6:02 PM
To: SCALA-DISCUSS@LISTSERV.SCALA-CLIENTS.COM
Subject: [SCALA-DISCUSS] automatic currency rate upload

Hello everyone,

long time no hear,
I have a little question : anyone attempted or knows of a possibility to ? to upload automatically the currency rates in a scala system on a daily basis for example ?

jl
Jean-Luc Raes
eTEK

E-terminator
Почетный форумщик

Зарегистрирован: 03.01.2005
Сообщения: 46
Откуда: град Св. Петра

Добавлено: 28.07.2005 12:04 Заголовок сообщения:
Ежели больше интересует технические аспекты импорта данных из XML в SQL, то могу подсказать простое решение.

1. Скачиваем и устанавливаем SQLXML 3.0 Add-in (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnanchor/html/anch_sqlxml.asp). Это набор компонент, позволяющих решать различные задачи интеграции SQL-XML, в том числе и загрузку данных в SQL-таблицы (SQLXMLBulkLoad).

2. Выполням тестовую закачку из XML (пример взят из MSDN)
2.1 Создаем в тестовой DB таблицу:

Код:
CREATE TABLE Cust( CustomerID  int PRIMARY KEY, CompanyNamevarchar(20), City   varchar(20))

2.2 Создаем XML-файл (SampleSchema.xml) со схемой данных:

Код:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
   <xsd:element name="Customers" sql:relation="Cust" >
      <xsd:complexType>
          <xsd:sequence>
                <xsd:element name="CustomerID"  type="xsd:integer" />
                <xsd:element name="CompanyName" type="xsd:string" />
                <xsd:element name="City"        type="xsd:string" />
           </xsd:sequence>
       </xsd:complexType>
   </xsd:element>
</xsd:schema>

2.2 Создаем сам XML-файл с данными (SampleXMLData.xml):

Код:
<ROOT>
   <Customers>
      <CustomerID>1111</CustomerID>
      <CompanyName>Sean Chai</CompanyName>
      <City>NY</City>
   </Customers>
   <Customers>
      <CustomerID>1112</CustomerID>
      <CompanyName>Tom Johnston</CompanyName>
      <City>LA</City>
   </Customers>
   <Customers>
   <CustomerID>1113</CustomerID>
      <CompanyName>Institute of Art</CompanyName>
   </Customers>
</ROOT>


2.3 Создаем VBSqript для выполнения задачи:
SQL XML Bulk Load — test sample

Код:
Set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkLoad.3.0")
objBL.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=MyTestDB;Data Source=(local)"
objBL.ErrorLogFile = "d:\temp\xml\error.log"
objBL.Execute "SampleSchema.xml", "SampleXMLData.xml"
set objBL=Nothing

2.4 Выполняем скрипт. Ok? Должно быть все Ok Smile

3. Для автоматизации всего этого процесса рекомендую создать DTS-пакет с задачей типа ActiveX Sqript Task.

4. На основе приведенного примера грузим полученные (не знаю, правда, как) данные с курсами валют от ЦБР (или др. источника) в таблицу SYCH<CC>00.

5. Дальше фантазируем на тему автоматизациии, уведомлений, логов и пр.

Jugulator
Главный форумщик

Зарегистрирован: 08.10.2004
Сообщения: 428

Добавлено: 05.09.2005 12:14 Заголовок сообщения: на всякий случай
«…Курсы будем брать с сайта Центрального Банка России. Создадим для этого небольшое приложение на Access, которое курсы эти будет грузить…» http://am.rusimport.ru/MSAccess/topic.aspx?ID=388