create procedure dbo.%PROC% @rate_place_id_s varchar(30) /* Код площадки */, @moment varchar(30) /* Дата */, @quote_list varchar(255) /* Наименование котировального листа*/, @issue varchar(255) /* код ЦБ */, @type varchar(255) /* Тип ЦБ*/, @par varchar(255) /* Номинал */, @par_currency varchar(255) /* Валюта номинала */, @average varchar(255) /* Средневзвешенная цена */, @price_currency varchar(255) /* Валюта всех цен */, @market_price varchar(255) /* Рыночная цена (1) */, @market_price2 varchar(255) /* Рыночная цена (2) */, @acknowledged_price varchar(255) = null /* Признаваемая котировка по ФКЦБ*/, @nkd varchar(255) = null /* НКД */, @money_volume varchar(255) /* Объем в валюте */, @volume_currency varchar(255) /* Валюта для объемов торгов */, @m_price_currency varchar(255) /* Валюта рыночных цен и признаваемой котировки */, @volume varchar(255) /* Объем в шт */, @trades_num varchar(255) /* Количество сделок */, @short_name varchar(255) /* Краткое наименование ЦБ*/, @max_price varchar(255) /* Максимальная цена */, @min_price varchar(255) /* Минимальная цена */, @ask varchar(255) = null /* Цена предложения (котировка на продажу) на момент окончания торговой сессии */, @bid varchar(255) = null /* Цена спроса (котировка на покупку) на момент окончания торговой сессии */, --------------------------------------------------------------------------------нет в файле @average_bid10 varchar(255)=null /* Лучшие 10 предложений */, @average_bid varchar(255)=null /* Лучшие покупки */, @average_bid_pd varchar(255)=null /* Лучшие покупки маркет-мейкеров*/, -------------------------------------------------------------------------------- @last_price varchar(255)= null /* Цена последней сделки*/, @board_code varchar(255)= null /* Код режима торгов */, @board_name varchar(255)= null /* Наименование режима торгов */, @open_period varchar(255)= null /* Цена предторгового периода */, @open varchar(255)= null /* Цена первой сделки */, @close_period varchar(255)= null /* Цена послеторгового периода */, @low_offer varchar(255)= null /* Наименьшая цена предложения (минимальная котировка на продажу) */, @high_bid varchar(255)= null /* Наибольшая цена спроса (максимальная котировка на покупку) */, @yield_close varchar(255)= null /* Доходность по цене последней сделки, % годовых */, @yield_wap varchar(255)= null /* Доходность по средневзвешенной цене, % годовых */, @issue_size varchar(255)= null /* Объем обращения, в ценных бумагах */, @open_price varchar(255)= null /* Цена открытия */, @close_price varchar(255)= null /* Цена закрытия */, @open_value varchar(255)= null /* Объем первой сделки */, @close_value varchar(255)= null /* Объем последней сделки */, @chek1 integer=1 /* Нужно ли закачивать (значение флажка напротив каждой записи) */ -- @redemption_date varchar(30) = null /* Дата погашения */, -- @market_price2 money = null /* Рыночная цена (2) */, -- @prev_close_price money = null /* Цена закрытия предыдущего торгового дня рублей */, -- @trend_close money = null /* Изменение цены закрытия к цене закрытия предыдущего торгового дня */, -- @trend_wap money = null /* Изменение средневзвешенной цены к средневзвешенной цене предыдущего торгового дня */, -- @prev_last_price money = null /* Цена последней сделки предыдущего торгового дня */, -- @trend_cls_price money = null /* Изменение цены закрытия к цене закрытия предыдущего торгового дня, % */, -- @trend_wap_price money = null /* Изменение средневзвешенной цены к средневзвешенной цене предыдущего торгового дня, % */, as declare @action_id numeric, @id numeric, @user_id numeric, @state_id numeric, @type_id numeric, @item_name varchar(100), @new_state_id numeric begin if @chek1=0 return ----------------------------------------декларим числовые DECLARE @par1 decimal(18,8), @par_currency1 decimal(18,8), @average1 decimal(18,8), @market_price1 decimal(18,8), @market_price21 decimal(18,8), @acknowledged_price1 decimal(18,8), @nkd1 decimal(18,8), @money_volume1 money, @volume1 money, @trades_num1 money, @max_price1 decimal(18,8), @min_price1 decimal(18,8), @ask1 decimal(18,8), @bid1 decimal(18,8), @last_price1 decimal(18,8), @open_period1 decimal(18,8), @open1 decimal(18,8), @close_period1 decimal(18,8), @low_offer1 decimal(18,8), @high_bid1 decimal(18,8), @yield_close1 money, @yield_wap1 money, @issue_size1 money, @open_price1 decimal(18,8), @close_price1 decimal(18,8), @open_value1 money, @close_value1 money, @average_bid101 decimal(18,8), @average_bid1 decimal(18,8), @average_bid_pd1 decimal(18,8) ------------------------------------------------------------ If (UPPER(Rtrim(ltrim( @par )))) ='-' SELECT @par = null If (UPPER(Rtrim(ltrim( @average )))) ='-' SELECT @average = null If (UPPER(Rtrim(ltrim( @market_price)))) ='-' SELECT @market_price= null If (UPPER(Rtrim(ltrim( @market_price2)))) ='-' SELECT @market_price2= null If (UPPER(Rtrim(ltrim( @acknowledged_price)))) ='-' SELECT @acknowledged_price= null If (UPPER(Rtrim(ltrim( @nkd)))) ='-' SELECT @nkd= null If (UPPER(Rtrim(ltrim( @money_volume)))) ='-' SELECT @money_volume= null If (UPPER(Rtrim(ltrim( @volume)))) ='-' SELECT @volume= null If (UPPER(Rtrim(ltrim( @trades_num)))) ='-' SELECT @trades_num= null If (UPPER(Rtrim(ltrim( @max_price)))) ='-' SELECT @max_price= null If (UPPER(Rtrim(ltrim( @min_price)))) ='-' SELECT @min_price= null If (UPPER(Rtrim(ltrim( @ask)))) ='-' SELECT @ask= null If (UPPER(Rtrim(ltrim( @bid)))) ='-' SELECT @bid= null If (UPPER(Rtrim(ltrim( @last_price)))) ='-' SELECT @last_price= null If (UPPER(Rtrim(ltrim( @open_period)))) ='-' SELECT @open_period= null If (UPPER(Rtrim(ltrim( @open)))) ='-' SELECT @open= null If (UPPER(Rtrim(ltrim( @close_period)))) ='-' SELECT @close_period= null If (UPPER(Rtrim(ltrim( @low_offer)))) ='-' SELECT @low_offer= null If (UPPER(Rtrim(ltrim( @high_bid)))) ='-' SELECT @high_bid= null If (UPPER(Rtrim(ltrim( @yield_close)))) ='-' SELECT @yield_close= null If (UPPER(Rtrim(ltrim( @yield_wap)))) ='-' SELECT @yield_wap= null If (UPPER(Rtrim(ltrim( @issue_size)))) ='-' SELECT @issue_size= null If (UPPER(Rtrim(ltrim( @open_price)))) ='-' SELECT @open_price= null If (UPPER(Rtrim(ltrim( @close_price)))) ='-' SELECT @close_price= null If (UPPER(Rtrim(ltrim( @open_value)))) ='-' SELECT @open_value= null If (UPPER(Rtrim(ltrim( @close_value)))) ='-' SELECT @close_value= null If (UPPER(Rtrim(ltrim( @average_bid10)))) ='-' SELECT @average_bid10= null If (UPPER(Rtrim(ltrim( @average_bid)))) ='-' SELECT @average_bid= null If (UPPER(Rtrim(ltrim( @average_bid_pd)))) ='-' SELECT @average_bid_pd= null ------------------------------------------------------------ SELECT @par1 = Convert(decimal(18,8),(replace(Rtrim(ltrim( @par )),',','.'))), --@par_currency1 = Convert(decimal(18,8),(replace(Rtrim(ltrim( @par_currency)),',','.'))), @average1 = Convert(decimal(18,8),(replace(Rtrim(ltrim( @average)),',','.'))), @market_price1 = Convert(decimal(18,8),(replace(Rtrim(ltrim( @market_price)),',','.'))), @market_price21 = Convert(decimal(18,8),(replace(Rtrim(ltrim( @market_price2)),',','.'))), @acknowledged_price1 = Convert(decimal(18,8),(replace(Rtrim(ltrim( @acknowledged_price)),',','.'))), @nkd1 = Convert(decimal(18,8),(replace(Rtrim(ltrim( @nkd)),',','.'))), @money_volume1 = Convert(money,(replace(Rtrim(ltrim( @money_volume)),',','.'))), @volume1 = Convert(money,(replace(Rtrim(ltrim( @volume)),',','.'))), @trades_num1 = Convert(money,(replace(Rtrim(ltrim( @trades_num)),',','.'))), @max_price1 = Convert(decimal(18,8),(replace(Rtrim(ltrim( @max_price)),',','.'))), @min_price1 = Convert(decimal(18,8),(replace(Rtrim(ltrim( @min_price)),',','.'))), @ask1 = Convert(decimal(18,8),(replace(Rtrim(ltrim( @ask)),',','.'))), @bid1 = Convert(decimal(18,8),(replace(Rtrim(ltrim( @bid)),',','.'))), @last_price1 = Convert(decimal(18,8),(replace(Rtrim(ltrim( @last_price)),',','.'))), @open_period1 = Convert(decimal(18,8),(replace(Rtrim(ltrim( @open_period)),',','.'))), @open1 = Convert(decimal(18,8),(replace(Rtrim(ltrim( @open)),',','.'))), @close_period1 = Convert(decimal(18,8),(replace(Rtrim(ltrim( @close_period)),',','.'))), @low_offer1 = Convert(decimal(18,8),(replace(Rtrim(ltrim( @low_offer)),',','.'))), @high_bid1 = Convert(decimal(18,8),(replace(Rtrim(ltrim( @high_bid)),',','.'))), @yield_close1 = Convert(money,(replace(Rtrim(ltrim( @yield_close)),',','.'))), @yield_wap1 = Convert(money,(replace(Rtrim(ltrim( @yield_wap)),',','.'))), @issue_size1 = Convert(decimal(18,2),(replace(Rtrim(ltrim( @issue_size)),',','.'))), @open_price1 = Convert(decimal(18,8),(replace(Rtrim(ltrim( @open_price)),',','.'))), @close_price1 = Convert(decimal(18,8),(replace(Rtrim(ltrim( @close_price)),',','.'))), @open_value1 = Convert(money,(replace(Rtrim(ltrim( @open_value)),',','.'))), @close_value1 = Convert(money,(replace(Rtrim(ltrim( @close_value)),',','.'))), @average_bid101 = Convert(decimal(18,8),(replace(Rtrim(ltrim( @average_bid10 )),',','.'))), @average_bid1 = Convert(decimal(18,8),(replace(Rtrim(ltrim(@average_bid)),',','.'))), @average_bid_pd1 = Convert(decimal(18,8),(replace(Rtrim(ltrim( @average_bid_pd)),',','.'))) ------------------------------------------------------------ select @action_id = %ACTION_ID% .CHECK_USER .CHECK_INSERT declare @rate_date datetime declare @stock_code varchar(30) declare @rate_place_id numeric declare @classvalue_id numeric declare @stock_id numeric declare @plase_cur_id numeric declare @par_cur_id numeric declare @price_cur_id numeric declare @rate_sum money declare @rate_value decimal(18, 8) declare @temp_date datetime declare @volume_cur_id numeric declare @list_id numeric declare @m_price_cur_id numeric -- Для импорта СПВБ (из файла DBF) -- Если тип ЦБ не задан, а валюта имеет код 'PCT' (проценты от номинала), то считать эту ЦБ облигацией if (isnull(@type,'')='' and (@price_currency = 'PCT')) select @type = 'ОБ' -- Для импорта РТС (из файла Excel) или ММВБ (DBF) (латинская 'B' или 'об' строчными буквами) if upper(rtrim(ltrim(@type))) = 'B' or upper(rtrim(ltrim(@type))) = 'ОБ' select @type = 'ОБ' select @rate_date = convert(datetime, substring(@moment, 1, 8), 3) if @rate_date is null .EXIT_MESSAGE('Не задана дата котировки') select @stock_code = rtrim(ltrim(UPPER(@issue))) if @stock_code is null .EXIT_MESSAGE('Не задан код ЦБ') -- Площадка select @rate_place_id = convert(numeric, rtrim(@rate_place_id_s)) if (@rate_place_id is null) .EXIT_MESSAGE('Не указана площадка для закачки курса') --временная затычка --if Rtrim(Ltrim(@volume_currency))='SUR' SELECT @volume_currency='RUR' -- Объем торгов select @volume_cur_id = .CUR(@volume_currency) if @volume_cur_id is null .EXIT_MESSAGE_PARM('Не найдена валюта объема торгов с кодом', @volume_currency) -- Листинг select @list_id = 0 select @quote_list = isnull(upper(@quote_list), 'NOT_DEFINED') /* if @quote_list in ('A1', 'А1', 'EQBR','EQOB') select @list_id = 1 else if @quote_list in ('A2', 'А2', 'EQBS','EQOS') select @list_id = 2 else if @quote_list in ('B', 'Б', 'EQNL','EQNO') select @list_id = 3 else if @quote_list in ('PSAU') select @list_id = 4 else if @quote_list in ('EQNB', 'EQNE', 'ВНЕСПИСОЧНЫЕ') select @list_id = 0 */ if (@quote_list like '%A1%' or @quote_list like '%А1%') select @list_id = 1 else if (@quote_list like '%A2%' or @quote_list like '%А2%') select @list_id = 2 else if (@quote_list like '%B%' or @quote_list like '%Б%') select @list_id = 3 else if @quote_list in ('PSAU') select @list_id = 4 else if (@quote_list like '%ВНЕСПИСОЧНЫЕ%') select @list_id = 0 select @classvalue_id = (select classvalue_rate_id from td_rate_places where id = @rate_place_id) if (@classvalue_id is null) .EXIT_MESSAGE('У площадки не указано значение классификатора кодов ЦБ') declare @stock_class_type_id numeric /* create table #stockrate( stock_id numeric ) insert into #stockrate(stock_id) select td_stock_emis.id from t_item2class, td_stock_emis where t_item2class.value_id = @classvalue_id and t_item2class.code is not null and upper(t_item2class.code) = upper(@stock_code) and t_item2class.item_id = td_stock_emis.id and .ITEMS_EXISTS_BY_TYPE(t_item2class.id, 'item2classvalues') and .ITEMS_EXISTS_BY_TYPE(td_stock_emis.id, 'td_stock_emis') */ declare cstock cursor for select td_stock_emis.id from t_item2class, td_stock_emis where t_item2class.value_id = @classvalue_id and t_item2class.code is not null and upper(t_item2class.code) = upper(@stock_code) and t_item2class.item_id = td_stock_emis.id and .ITEMS_EXISTS_BY_TYPE(t_item2class.id, 'item2classvalues') and .ITEMS_EXISTS_BY_TYPE(td_stock_emis.id, 'td_stock_emis') for read only /* select stock_id from #stockrate for read only */ open cstock begin tran fetch cstock into @stock_id /* Базовые типы ЦБ (подробнее см. простой справочник 3060) @stock_class_type_id: 1 - акция 2 - облигация 3 - Вексель 4 - Пай 5 - Депозитарная расписка 6 - Фьючерс 7 - Опцион ... */ while (.CURSOR_STATE = 0) -- LOOP begin select @stock_class_type_id = (select t_stock_types.stock_type_id from t_stock_types,td_stock_emis where td_stock_emis.id=@stock_id and t_stock_types.id=td_stock_emis.stock_type_id) -- Если облигация if @stock_class_type_id = 2 begin -- Если для облигации не указан НКД, то считать его равным нулю if @nkd1 is null select @nkd1 = 0 -- Котировка в процентах select @price_cur_id = .CUR((Ltrim(Rtrim(@par_currency)))) if @price_cur_id is null select @price_cur_id = (select td_stock_emis.stock_curr_id from td_stock_emis where td_stock_emis.id = @stock_id) if @price_cur_id is null .EXIT_MESSAGE('Для ЦБ не указана валюта номинала') select @plase_cur_id = @par_cur_id if @par1 is null select @par1 = (select td_stock_emis.stock_nominal from td_stock_emis where td_stock_emis.id = @stock_id) if @par1 is null .EXIT_MESSAGE('Для ЦБ не указан номинал') -- Обработка данных -----------------------------------округление select @average1 = round((@par1 * @average1 / 100.0), 8) select @market_price1 = round((@par1 * @market_price1 / 100.0), 8) select @average_bid101 = round((@par * @average_bid101 / 100.0), 8) select @average_bid1 = round((@par * @average_bid1 / 100.0), 8) select @average_bid_pd1 = round((@par * @average_bid_pd1 / 100.0), 8) select @max_price1 = round((@par1 * @max_price1 / 100.0), 8) select @min_price1 = round((@par1 * @min_price1 / 100.0), 8) select @ask1 = round((@par1 * @ask1 / 100.0), 8) select @bid1 = round((@par1 * @bid1 / 100.0), 8) select @last_price1 = round((@par1 * @last_price1 / 100.0), 8) select @acknowledged_price1 = round((@par1 * @acknowledged_price1 / 100.0), 8) -------------------------------новый select @open_period1=round((@par1 * @open_period1 / 100.0), 8) select @open1=round((@par1 * @open1 / 100.0), 8) select @close_period1=round((@par1 * @close_period1 / 100.0), 8) select @low_offer1=round((@par1 * @low_offer1 / 100.0), 8) select @high_bid1=round((@par1 * @high_bid1 / 100.0), 8) select @yield_close1=round((@par1 * @yield_close1 / 100.0), 8) select @yield_wap1=round((@par1 * @yield_wap1 / 100.0), 8) select @issue_size1=round((@par1 * @issue_size1 / 100.0), 8) select @open_price1=round((@par1 * @open_price1 / 100.0), 8) select @close_price1=round((@par1 * @close_price1 / 100.0), 8) select @market_price21 =round((@par1 * @market_price21 / 100.0), 8) ----------------------------------- end else begin -- Котировка в валюте select @price_cur_id = .CUR((Ltrim(Rtrim(UPPER(@price_currency))))) if @price_cur_id is null .EXIT_MESSAGE_PARM('Не найдена валюта значений с кодом', @price_currency) end -- Валюта рыночных цен и признаваемой котировки select @m_price_cur_id = .CUR((Ltrim(Rtrim(UPPER(@m_price_currency))))) if @m_price_cur_id is null select @m_price_cur_id = @price_cur_id select @id = null select @id = tb_stock_rates.id from tb_stock_rates where tb_stock_rates.rate_place_id = @rate_place_id and tb_stock_rates.stock_id = @stock_id and tb_stock_rates.rate_date = @rate_date and .ITEMS_EXISTS(tb_stock_rates.id) if @id is null begin -- New Record --.EXIT_MESSAGE('OK') .TYPE_INIT('TB_STOCK_RATES') .TYPE_ASSIGN(rate_place_id, @rate_place_id) .TYPE_ASSIGN(stock_id, @stock_id) .TYPE_ASSIGN(rate_date, @rate_date) .TYPE_ASSIGN(rate_cur_id, @price_cur_id) .TYPE_ASSIGN(list_id, @list_id) .TYPE_ASSIGN(stock_rate, @market_price1) .TYPE_ASSIGN(average, @average1) .TYPE_ASSIGN(average_bid10, @average_bid101) .TYPE_ASSIGN(average_bid, @average_bid1) .TYPE_ASSIGN(average_bid_pd, @average_bid_pd1) .TYPE_ASSIGN(max_price, @max_price1) .TYPE_ASSIGN(min_price, @min_price1) .TYPE_ASSIGN(trades_num, @trades_num1) .TYPE_ASSIGN(volume, @volume1) .TYPE_ASSIGN(volume_cur_id, @volume_cur_id) .TYPE_ASSIGN(money_volume, @money_volume1) .TYPE_ASSIGN(coupon_rate, @nkd1) -- Добавлено .TYPE_ASSIGN(ask, @ask1) .TYPE_ASSIGN(bid, @bid1) .TYPE_ASSIGN(last_price, @last_price1) .TYPE_ASSIGN(acknowledged_price, @acknowledged_price1) -- Для ПИФ .TYPE_ASSIGN(rate_type, 1) -----------------------------------------новый кусок .TYPE_ASSIGN(open_period,@open_period1) .TYPE_ASSIGN(open1,@open1) .TYPE_ASSIGN(close_period,@close_period1) .TYPE_ASSIGN(low_offer,@low_offer1) .TYPE_ASSIGN(high_bid,@high_bid1) .TYPE_ASSIGN(yield_close,@yield_close1) .TYPE_ASSIGN(yield_wap,@yield_wap1) .TYPE_ASSIGN(issue_size,@issue_size1) .TYPE_ASSIGN(open_price,@open_price1) .TYPE_ASSIGN(close_price,@close_price1) .TYPE_ASSIGN(open_value,@open_value1) .TYPE_ASSIGN(close_value,@close_value1) .TYPE_ASSIGN(market_price2,@market_price21) .TYPE_ASSIGN(board_code,@board_code) .TYPE_ASSIGN(board_name,@board_name) .TYPE_ASSIGN(m_price_cur_id, @m_price_cur_id) ----------------------------------------- .TYPE_INSERT('TB_STOCK_RATES', 'CRT') end else begin -- Update Record update tb_stock_rates set list_id = @list_id, stock_rate = @market_price1, average = @average1, rate_cur_id = @price_cur_id, average_bid10 = null,--@average_bid10, average_bid = null,--@average_bid, average_bid_pd = null,--@average_bid_pd, volume = @volume1, volume_cur_id = @volume_cur_id, money_volume = @money_volume1, trades_num = @trades_num1, max_price = @max_price1, min_price = @min_price1, coupon_rate = @nkd1, ask = @ask1, bid = @bid1, last_price = @last_price1, acknowledged_price = @acknowledged_price1, open_period=@open_period1 , open1=@open1 , close_period=@close_period1 , low_offer=@low_offer1 , high_bid=@high_bid1 , yield_close=@yield_close1 , yield_wap=@yield_wap1 , issue_size=@issue_size1 , open_price=@open_price1 , close_price=@close_price1 , open_value=@open_value1 , close_value=@close_value1, market_price2 =@market_price21, board_code=@board_code, board_name=@board_name, m_price_cur_id=@m_price_cur_id where id = @id end fetch cstock into @stock_id end -- End LOOP commit tran close cstock .DEALLOCATE cstock --drop table #stockrate end