Текущее время: Ср, июл 23 2025, 03:50

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Как обмениваться данными с MS SQL Server ?
СообщениеДобавлено: Чт, ноя 02 2006, 09:39 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Чт, апр 07 2005, 05:27
Сообщения: 621
Откуда: Москва
Пол: Мужской
Ситуация:
есть R/3 c БД Oracle
и есть куча остающихся АРМов, построенных по 2-tier технологии (БД MS SQL Server 7 + клиент на VC++)

Стоит задача синхронизации данных. Т.е. еженочная выгрузка/загрузка данных. Ессно с наименьшими трудозатратами и гибкое.

Вопрос - как оптимальнее это сделать?

Подскажите плиз... ну хотя умные слова для поиска в google :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, ноя 02 2006, 10:00 
Менеджер
Менеджер

Зарегистрирован:
Вт, дек 07 2004, 10:39
Сообщения: 610
варинтов много
от интрефейса из абапа в сторнние бд
до скрипта на оракле который будет сам делать синхронизацию с мс-сервером

_________________
полный SAPец


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, ноя 02 2006, 12:45 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Чт, апр 07 2005, 05:27
Сообщения: 621
Откуда: Москва
Пол: Мужской
Вариантов ессно много, поэтому и задаю этот вопрос тем, кто может посоветовать адекватной решение :)

SAP в презентациях продвигает шинную технологию XI. Это из той оперы или нет? Хочу что-то вроде SAP Query для выборки из SAP и отправке в MS SQL Server. Возможно с переформатированием. В каком направлении лучше копать?

Хочется, чтобы большая часть настройки была в SAP (проще поддерживать), не была hardcoded и не слишком замысловатая.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, ноя 02 2006, 14:38 
Директор
Директор

Зарегистрирован:
Чт, май 12 2005, 11:10
Сообщения: 1038
Пол: Мужской
lumer написал:
Вариантов ессно много, поэтому и задаю этот вопрос тем, кто может посоветовать адекватной решение :)

SAP в презентациях продвигает шинную технологию XI. Это из той оперы или нет? Хочу что-то вроде SAP Query для выборки из SAP и отправке в MS SQL Server. Возможно с переформатированием. В каком направлении лучше копать?

Хочется, чтобы большая часть настройки была в SAP (проще поддерживать), не была hardcoded и не слишком замысловатая.


Если просто на уровне таблиц (хотя можно view наделать с нужными структурами) - то ИМХО самое простое решение это репликация.
Про Оракл ничего не знаю - MS SQL точно может делать, и по расписанию.

Если контекст на более высоком уровне - уровень документа - то тогда средствами системы, в которую заливают данные.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как обмениваться данными с MS SQL Server ?
СообщениеДобавлено: Чт, ноя 02 2006, 20:10 
Президент
Президент

Зарегистрирован:
Пт, апр 28 2006, 22:39
Сообщения: 2514
Откуда: North Taxolina, USA
Пол: Женский
lumer написал:
Вопрос - как оптимальнее это сделать?


Встречный вопрос - а о каких конкретно данных идет речь? Копия всего SAP :) , master data, transaction data?

Мы каждый час посылаем определенный набор данных в стороннюю систему (используется для репортов, чтоб в SAP не копались) файлами. Для некоторых данных используются IDocs, для остальных просто SELECT в ABAP программе. XI нам сказали, что дорого слишком и forget about it.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как обмениваться данными с MS SQL Server ?
СообщениеДобавлено: Пт, ноя 03 2006, 05:06 
Начинающий
Начинающий

Зарегистрирован:
Вт, июл 25 2006, 19:33
Сообщения: 21
lumer написал:
Ситуация:
есть R/3 c БД Oracle
и есть куча остающихся АРМов, построенных по 2-tier технологии (БД MS SQL Server 7 + клиент на VC++)

Стоит задача синхронизации данных. Т.е. еженочная выгрузка/загрузка данных. Ессно с наименьшими трудозатратами и гибкое.

Вопрос - как оптимальнее это сделать?
Если перенос надо делать на "понятийном" уровне, т.е. договор/материал/роль, то на чем стоит САП - не принципиально, это не ниже абапа делать надо. Без некоторого кодирования - никак, ессно. Основная проблема в таких случаях - подружить системы на уровне их бизнес-логик. За детальным обсуждение возможных путей - в личку, дабы не флудить. :) Предлагать, не зная конкретики - неблагодарное дело, но варианты есть.

_________________
So I exist in this fragile equilibrium which glues the substance of the universe to me...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как обмениваться данными с MS SQL Server ?
СообщениеДобавлено: Пт, ноя 03 2006, 05:09 
Начинающий
Начинающий

Зарегистрирован:
Вт, июл 25 2006, 19:33
Сообщения: 21
Jelena написала:
файлами
Ужас! :shock: А какого плана "сторонняя система"? В смысле, а чего файлами-то?

_________________
So I exist in this fragile equilibrium which glues the substance of the universe to me...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как обмениваться данными с MS SQL Server ?
СообщениеДобавлено: Пт, ноя 03 2006, 14:21 
Директор
Директор

Зарегистрирован:
Чт, май 12 2005, 11:10
Сообщения: 1038
Пол: Мужской
DLSman написал(а):
Jelena написала:
файлами
Ужас! :shock: А какого плана "сторонняя система"? В смысле, а чего файлами-то?


XML-файлами например - XML щас модный. :-)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как обмениваться данными с MS SQL Server ?
СообщениеДобавлено: Пт, ноя 03 2006, 14:25 
Начинающий
Начинающий

Зарегистрирован:
Вт, июл 25 2006, 19:33
Сообщения: 21
Egal написал:
DLSman написал(а):
Jelena написала:
файлами
Ужас! :shock: А какого плана "сторонняя система"? В смысле, а чего файлами-то?


XML-файлами например - XML щас модный. :-)
Я не про структуру, я про вид обмена. Обмен файлами между системами (в общем случае) - ацтой и позавчерашний день.

_________________
So I exist in this fragile equilibrium which glues the substance of the universe to me...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, ноя 03 2006, 15:22 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Чт, апр 07 2005, 05:27
Сообщения: 621
Откуда: Москва
Пол: Мужской
2 DLSman: это не флуд, это по делу, так что пишем тут )
2 Jelena: да простая выгрузка. Завели, к примеру, 1000 деталей за день в своем АРМ-е, грузим их ночью в R/3, чтобы бухгалтерия радовалась и производство планировалось. НСИ по новым видам материалов выгружать итд итп. Т.е. не весь SAP, а чисто изменения за период. Ночью, ежедневно. Однако таких АРМов полтора десятка. А некоторые хотят RealTime доступ к данным. Т.е. тетенька заколотила новый вид поступившего кирпича в R/3-шные НСИ, а через 5 минут другая тетенька в АРМ-е должна этот кирпич потравить кислотой и записать результаты. Итд итп.

Вести с полей. Все у нас вроде как пришло к решению по ноте 323151: подконнектиться через
Code:
EXEC SQL.
    CONNECT TO :con_name.
ENDEXEC.

IF sy-subrc = 0.
    WRITE: / "Successfully connected".
ENDIF.

А далее SELECT-ом и APPEND-ом залить туда инфу
Транзакция DBCO иже с ним.

Правда возникла проблема - SAP запущен под HP-UX и упорно не желает коннектиться к внешней БД MS SQL...

Кто с этим сталкивался и как это лечится?

PS Альтернативные решения все еще актуальны.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, ноя 03 2006, 15:23 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 10:03
Сообщения: 127
Попробуй спросить на sapbasis.ru или в разделе по базису. Я где то слышал что есть такая штучка, что в абапе со sql таблицами можно свободно работать как с таблицами абап-словаря без отличий. Существует какой то интерфейс который за всем этим следит за тебя.

_________________
В пору рабочую
пашут и ночью!


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб, ноя 04 2006, 10:05 
Начинающий
Начинающий

Зарегистрирован:
Вт, июл 25 2006, 19:33
Сообщения: 21
lumer написал:
PS Альтернативные решения все еще актуальны.
Мы сделали свою софтину. Кто-то к ней ломится, говорит куда, передает и получает данные. "Кто-то" - может быть САП, может MSSQL. "Куда" - они-же. Он-лайн, само собой.

_________________
So I exist in this fragile equilibrium which glues the substance of the universe to me...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как обмениваться данными с MS SQL Server ?
СообщениеДобавлено: Пн, ноя 06 2006, 21:21 
Президент
Президент

Зарегистрирован:
Пт, апр 28 2006, 22:39
Сообщения: 2514
Откуда: North Taxolina, USA
Пол: Женский
DLSman написал(а):
Обмен файлами между системами (в общем случае) - ацтой и позавчерашний день.


Я с вами совершенно согласна, но, к сожалению, "он лучше выдумать не мог". В основном это потому, что у нас просто никто ничего другого не знает. :oops: Как-то раз я посматривала на другие методы, но что-то так и не поняла, каким боком можно их приладить к нашим интерфейсам. :? Все сторонние системы у нас не-SAP: одна работает на MS SQL Server с какими-то там MS tools, одна на MS Access, другие для нас просто "black box".


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, ноя 07 2006, 11:05 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, авг 02 2006, 15:26
Сообщения: 97
Если кому интересно TSQL функция для работы с RFC функциями сапа.

Тоесть кодом TSQL мы можем браьт или писать в сап через RFC.

Код работает на MSSQL2005


Code:


ALTER PROCEDURE [dbo].[R3PersonalList]

@StartDate varchar(20) = '',
@EndDate varchar(20) = '',
@_PERNR varchar(20) = ''


AS

-- Метка в саплагоне должна быть ******** !!!   ip ********
SET NOCOUNT ON


--Declare  vDate int
--select sDate = Convert(varchar(200),GetDate(),112)

  DECLARE @object int
  DECLARE @hr int
  DECLARE @src varchar(255), @desc varchar(255)
  EXEC @hr = sp_OACreate 'SAP.Functions', @object OUT

  IF @hr <> 0
  BEGIN
    EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT
    SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
        GOTO SPEXIT
  END
  else
  begin
    declare @hprop int
    EXEC @hr = sp_OAGetProperty @object,'Connection', @hprop OUT
    EXEC @hr = sp_OASetProperty @hprop, 'Destination', '*****'
    EXEC @hr = sp_OASetProperty @hprop, 'Client', '010'
    EXEC @hr = sp_OASetProperty @hprop, 'Language', '8'
    EXEC @hr = sp_OASetProperty @hprop, 'User', '*****'
    EXEC @hr = sp_OASetProperty @hprop, 'Password', '*****'
 
    declare @ret int -- для проверки рез. Logon
    EXEC @hr = sp_OAMethod @hprop, 'Logon', @ret OUT , 1, True
    IF @hr <> 0
    BEGIN
      EXEC sp_OAGetErrorInfo @hprop
      GOTO SPEXIT
    END
   
    if @ret <> 1
     BEGIN
      Raiserror('Logon failed', 16, 1)
      EXEC @hr = sp_OADestroy @object
      IF @hr <> 0
      BEGIN
      EXEC sp_OAGetErrorInfo @object
      GOTO SPEXIT
     END
     END
 
    declare @Funct int
    EXEC @hr = sp_OAMethod @object, 'Add', @Funct OUT, 'Z_HR_LIST_WERKS'
 
 
    declare @Collection int
    EXEC @hr = sp_OAGetProperty @Funct, 'Exports',  @Collection OUT

    declare @Item int
    declare @RowCount int
    declare @Name varchar(100)
    declare @i int
    set @i = 1

    EXEC @hr = sp_OAGetProperty @Collection, 'Count', @RowCount OUT


  --declare @s varchar(20)
--  EXEC @hr = sp_OAGetProperty @Item, 'name', @S OUT
--  Select 's' = @s
   

    EXEC @hr = sp_OAGetProperty @Collection, 'Item', @Item OUT, 1
    EXEC @hr = sp_OASetProperty @Item, 'Value', @StartDate
    EXEC @hr = sp_OAGetProperty @Collection, 'Item', @Item OUT, 2
    EXEC @hr = sp_OASetProperty @Item, 'Value', @EndDate
    EXEC @hr = sp_OAGetProperty @Collection, 'Item', @Item OUT, 3
    EXEC @hr = sp_OASetProperty @Item, 'Value', @_PERNR
    EXEC @hr = sp_OAGetProperty @Collection, 'Item', @Item OUT, 4
    EXEC @hr = sp_OASetProperty @Item, 'Value', 'BL04'



    declare @Exports int
    EXEC @hr = sp_OAMethod @Funct, 'Call'

    declare @Tables int
    EXEC @hr = sp_OAGetProperty @Funct, 'Tables', @Tables OUT

    declare @Items int
    EXEC @hr = sp_OAGetProperty @Tables, 'Item', @Items OUT, 1

    EXEC @hr = sp_OAGetProperty @Items, 'RowCount', @RowCount OUT


--


    declare @PERNR int
    declare @ENAME varchar(100)
    declare @ORGEH int
    declare @ZSTEXT_O varchar(100)
    declare @PLANS int
    declare @ZSTEXT_S varchar(100)
    declare @ENDDA datetime
    declare @TRFST varchar(2)
    declare @STELL int
    declare @STELL_NAME varchar(50)

    create table  #tValues
     (
      ID int IDENTITY(1, 1) NOT NULL,
      PERNR int,
      ENAME varchar(100),
      ORGEH int,
      ZSTEXT_O varchar(100),
      PLANS int,
      ZSTEXT_S varchar(100),
      ENDDA datetime,
      TRFST varchar(10),
      STELL int,
      STELL_NAME varchar(100)
      )


    set @i = 1
    while (@i <= @RowCount)
    begin
      EXEC @hr = sp_OAGetProperty @Items, 'Cell', @PERNR OUT, @i, 'PERNR'
      EXEC @hr = sp_OAGetProperty @Items, 'Cell', @ENAME OUT, @i, 'ENAME'
      EXEC @hr = sp_OAGetProperty @Items, 'Cell', @ORGEH OUT, @i, 'ORGEH'
      EXEC @hr = sp_OAGetProperty @Items, 'Cell', @ZSTEXT_O OUT, @i, 'ZSTEXT_O'
      EXEC @hr = sp_OAGetProperty @Items, 'Cell', @PLANS OUT, @i, 'PLANS'
      EXEC @hr = sp_OAGetProperty @Items, 'Cell', @ZSTEXT_S OUT, @i, 'ZSTEXT_S'
      EXEC @hr = sp_OAGetProperty @Items, 'Cell', @ENDDA OUT, @i, 'ENDDA'

      EXEC @hr = sp_OAGetProperty @Items, 'Cell', @TRFST OUT, @i, 'TRFST'
      EXEC @hr = sp_OAGetProperty @Items, 'Cell', @STELL OUT, @i, 'STELL'
      EXEC @hr = sp_OAGetProperty @Items, 'Cell', @STELL_NAME OUT, @i, 'STELL_NAME'


if @PERNR <>0 
BEGIN

      insert into #tValues(PERNR, ENAME, ORGEH,ZSTEXT_O,PLANS,ZSTEXT_S,ENDDA,TRFST,STELL,STELL_NAME)
        --Values(@PERNR, @ENAME, @ORGEH,@ZSTEXT_O,@PLANS,@ZSTEXT_S,@ENDDA,@TRFST,@STELL,@STELL_NAME)
          Values(@PERNR, @ENAME, @ORGEH,@ZSTEXT_O,@STELL,@STELL_NAME,@ENDDA,@TRFST,@STELL,@STELL_NAME)
END
      set @i = @i + 1

    end;



--delete  @tValues where --@tValues.ENDDA < (Select Max(t2.ENDDA) from @tValues  t2 where t2.PERNR = t.PERNR)
--delete  from #tValues  where ENDDA < (Select Max(t2.ENDDA) from #tValues t2   where t2.PERNR =PERNR)

IF @_PERNR <>''
BEGIN
--Update #tValues Set ENDDA = NULL  where YEAR(ENDDA) = 9999
SELECT   *  FROM     #tValues  Order by ENDDA desc --desc --where ENDDA = NULL Order by desc
EXEC @hr = sp_OADestroy @object
  IF @hr <> 0
  BEGIN
    EXEC sp_OAGetErrorInfo @object
    GOTO SPEXIT
  END
GOTO SPEXIT
END

--==================================================================================================
--[Синхронизация с таблицей Personal]

--   Select * from @tValues where PERNR = 8818
-- Select count(*) from @tValues


Select @I = 0
Declare @iCount int
Select @iCount = 0
Declare @inPersonal int
select @inPersonal = 0

Select @iCount = (Select count(*) from #tValues)

WHILE @I<=@iCount
BEGIN

    Select @PERNR     =(Select isNull(PERNR,0) from #tValues where ID = @i )
    Select @ENAME     =(Select ENAME from #tValues where ID = @i )
    Select @ORGEH     =(Select ORGEH from #tValues where ID = @i )
    Select @ZSTEXT_O  =(Select ZSTEXT_O  from #tValues where ID = @i )
    Select @PLANS     =(Select PLANS from #tValues where ID = @i )
    Select @ZSTEXT_S  =(Select ZSTEXT_S from #tValues where ID = @i )
    Select @ENDDA     =(Select ENDDA from #tValues where ID = @i )

    Select @TRFST          =(Select TRFST from #tValues where ID = @i )
    Select @STELL          =(Select STELL from #tValues where ID = @i )
    Select @STELL_NAME     =(Select STELL_NAME from #tValues where ID = @i )


if Year(@ENDDA) = 9999 select @ENDDA = null

IF (Select Count(isNull(PERNR,0)) from Personal where PERNR = @PERNR) = 0
   BEGIN
      insert into Personal(PERNR, ENAME, ORGEH,ZSTEXT_O,PLANS,ZSTEXT_S,ENDDA,TRFST,STELL,STELL_NAME)
        Values(@PERNR, @ENAME, @ORGEH,@ZSTEXT_O,@PLANS,@ZSTEXT_S,@ENDDA,@TRFST,@STELL,@STELL_NAME)
   END
   ELSE
   BEGIN
        UPDATE Personal
        SET
           ENAME    =     @ENAME,
           ORGEH    =     @ORGEH,
           ZSTEXT_O =     @ZSTEXT_O,
           PLANS    =     @PLANS,
           ZSTEXT_S =     @ZSTEXT_S,
           ENDDA    =     @ENDDA,
      TRFST    =     @TRFST,
           STELL    =     @STELL,
           STELL_NAME =   @STELL_NAME
        WHERE PERNR = @PERNR
   END

Select @I = @I+1
END

--==================================================================================================



  EXEC @hr = sp_OADestroy @object
  IF @hr <> 0
  BEGIN
    EXEC sp_OAGetErrorInfo @object
   GOTO SPEXIT
  END
end

SPEXIT:
exec sp_OADestroy @hprop
exec sp_OADestroy @Funct
exec sp_OADestroy @Collection
exec sp_OADestroy @Items
exec sp_OADestroy @Funct
exec sp_OADestroy @Tables
exec sp_OADestroy @RowCount
exec sp_OADestroy @Item

exec sp_OADestroy @Src
exec sp_OADestroy @desc
exec sp_OADestroy @I
exec sp_OADestroy @Item
exec sp_OADestroy @object
exec sp_OADestroy @ret

delete from personal where PERNR is null or PERNR = 0

SET NOCOUNT OFF





Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, ноя 07 2006, 11:12 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, авг 02 2006, 15:26
Сообщения: 97
важно

Code:
SPEXIT:
exec sp_OADestroy @hprop
exec sp_OADestroy @Funct
exec sp_OADestroy @Collection
exec sp_OADestroy @Items
exec sp_OADestroy @Funct
exec sp_OADestroy @Tables
exec sp_OADestroy @RowCount
exec sp_OADestroy @Item

exec sp_OADestroy @Src
exec sp_OADestroy @desc
exec sp_OADestroy @I
exec sp_OADestroy @Item
exec sp_OADestroy @object
exec sp_OADestroy @ret


вот этот код в SQL2000 можно не писать.
SQL сам удалит все связи.

SQL2005 нет. неудалит. поэтому вызывать обязаьтельно.

если этот код невыполнится. SQL чере N раз перестанет вызывать функции. его (MSSQL) придется перегрузить. Иначе никак.


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB