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

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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