Имя: Пароль:
1C
1С v8
Com объект 1с в T-SQL
0 managed_heap
 
20.12.11
11:22
Добрый день, уважаемое сообщество.
Я работаю на производственном предприятии, имеющем 6 независимых АИС. В начале декабря мне была поставлена задача разработать схему интеграции части этих систем. Я решил произвести интеграцию путем централизованной базы данных. Система табельного учета, а так же планирования производства написаны мной и работают под управлением СУБД Adaptive Server Anywere, с ними проблемы не возникло. Для управления финансами используется 1с 8.2 "Управление производственным предприятием", и здесь появилась трудность.

Необходимо организовать онлайн обмен между ЦБД(MsSql Server 2008 R2) и средой 1с. Насколько я понял наиболее подходящим является метод COM объектов. Но я никак не могу написать создание COMConnector 1с в тригере ЦБД на T-SQL. Есть ли у кого-нибудь опыт выполнения подобной задачи? Не могли бы привести пример кода?
1 Морозов Александр
 
20.12.11
11:32
как подключался то?
2 sapphire
 
20.12.11
11:35
(0) База 1С серверная или файловая?
3 managed_heap
 
20.12.11
11:42
(1) Прописал в системной переменной Path?но боюсь это не то, совет по подключнию был бы не лишним(возможно ссылку на рус/англ ресурс).
(2) Серверная.
Архитектура вкратце: 1С, MsSql для 1С и MsSql Server 2008 R2 для ЦБД стоя на 3х разных виртуальных машинах, поднятых на Hypervisor под управлением Windows server 2008
4 sapphire
 
20.12.11
11:47
(3) И? проблема написать view-шки и посмотреть как 1С хранит данные?
5 ДенисЧ
 
20.12.11
11:48
В триггере каждый раз создавать ком-объект? Пипец...
6 sapphire
 
20.12.11
11:49
(0) В Вашем случае, обмен посредством COM-соединения нецелесообразен.
Вариантов масса.
7 sapphire
 
20.12.11
11:50
(5) Я в шоке.
8 sapphire
 
20.12.11
11:51
(0) Выбор инструмента за Вами, либо Вы разбираетесь в SQL...
Или изобретаете очередное квадратное колесо для сферического коня.
9 Axel2009
 
20.12.11
11:53
СУБД как бы не то место, где нужно юзать КОМобъекты.
10 managed_heap
 
20.12.11
11:56
(4)view-шами осуществляется обмен данными из 1С в ЦБД.
(6)Я только недавно взялся за изучение Ms Sql, до этого работал с Sybase. Я не настаиваю на том, что мое решение единственно верное. Не могли бы вы предложить иные варианты реализации обмена. Com я выбрал, опасаясь за сохранность метаданных 1С.
11 sapphire
 
20.12.11
12:02
(10) Наверное, стОит узнать как 1С устроена, чем умеет обмениваться и, как именно в Вашем конкретном случае лучше всего организовать обмен.
ИМХО, не проще ли переписать с Sybase на MS SQL дабы не плодить разнородных СУБД?
Далее, SQL умеет обмениваться между СУБД...
Механизмов так же много и в самом SQL и не трогая SQL, а настраивая 1С, но в последнем случае Вам придется освоить 1С.
12 rs_trade
 
20.12.11
12:27
(10) через АДО делайте.
13 Vakhrin
 
20.12.11
12:27
Опишите вкратце какие данные и в каких направлениях вам необходимо "гонять"...
14 sapphire
 
20.12.11
12:27
(13) Дядя Андрей, с прошедшим ДР тебя ! :)
15 МихаилМ
 
20.12.11
12:28
названия таблиц и полей бд в 1с могут поменяться,

com к названиям равнодушен, но медленный, если каждый раз в триггере создавать.

если создать подключение в глоб переменной то >1 триггера паралельно писать не смогут.

Предлогаю комбинированный вариант он-лайн

триггеры пишут напрямую
а при реструктуризации проверка изменения  имен полей, таблиц


на бд 1с ddl тригеер проверки реструктуризации который запустит джоб.

далее джоб по ком сверит структуру и подправить тексты скриптов.

НО

онлайн всегда требует внимания
.тоже обновление в сингл моде и триггеры не сработают  -> как синхронизироваться ?       значит  офф лайн механизм нужен по-любому.

либо подразделение (а их 6) переедет вместе с субд.
опять неувязочка.

так что стройте оф лайн решение с сколь угодно частой синхронезацией.
16 sapphire
 
20.12.11
12:36
(15) Ну можно помещать XDTO значения измененных в 1С объектов во внешнюю очередь сообщений и средствами Sybase (или через адаптер) читать сообщения. В обратную сторону - можно вызывать веб-сервис 1С или организовать универсальный план обмена.
Говорю же, вариантов - масса.
17 Vakhrin
 
20.12.11
13:00
(14) спасибо )
18 DmitrO
 
20.12.11
13:46
Ну вообще говоря работа через COMConnector вполне возможна.
Вот рабочий примерчик:

declare @Connector int, @V8 int;
declare hr int;
declare @src nvarchar(255), @desc nvarchar(255)

execute hr = sp_OACreate N'V82.ComConnector', @Connector out
if hr<>0
begin
   execute sp_OAGetErrorInfo @Connector, @src out, @desc out
   select HRESULT=convert(varbinary(4),hr), Source=@src, Description=@desc
   return
end


execute hr = sp_OAMethod @Connector, N'Connect', @V8 out, N'Srvr="MyV8Server";Ref="MyDatabase";'
if hr<>0
begin
   execute sp_OAGetErrorInfo @Connector, @src out, @desc out
   select HRESULT=convert(varbinary(4),hr), Source=@src, Description=@desc
   return
end

select 'I am ready to work.'

execute hr = sp_OADestroy @V8
execute hr = sp_OADestroy @Connector

Кроме того COMConnector поддерживает пулинг, так что и с практической стороны применения вполне возможна тоже.
19 rs_trade
 
20.12.11
13:57
(18) Как представить какой это гемор, вот так с 1С работать из скуля. Все желание сразу отпадет. Если нужна работа именно по ком с 1С то лучше уж CLR сборку сделать.
20 managed_heap
 
20.12.11
13:58
Благодарю всех отписавшихся. Основная проблема состоит в том, что предприятие государственное и невыполненный в сроки план= лишение премии, а под праздники этого не хочется.

(13) Первая очередь это нормативно-справочная и условно-постоянная инфромация: Справочники номенклатуры, контрагентов, подразделений и т.д. В последствие предполагается реализовать он-лайн обмен данными между ЦБД(MsSQL 2008R2 Enterprise) и 1С УПП 8.2(СУБД MsSQL 2008R2 Standart).
(16) Sybase в сторону реплики между ним и ЦБД уже сделал. Моих текущих знаний 1с и MsSQL 2008R2 не хватает для создания импорта данных из ЦБД в 1С. А сроки жмут, как и человеческие ресурсы.
(18) Спасибо, попробую.
21 DmitrO
 
20.12.11
14:02
(19)Да согласен, писать не удобно.