powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Импорт данных из 1С в Oracle
6 сообщений из 6, страница 1 из 1
Импорт данных из 1С в Oracle
    #40134321
verter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возникла необходимость в передаче данных из 1С в базу Oracle.

В 1С через ODBC было настроено соединение. С помощью ADODB можно выполнять PL-SQL выражения или просто DML-команды INSERT в оракловскую базу.

Проблема в том, что нужно передать много - миллионы записей.

Чтобы передать, нужно выполнить PL-SQL выражение, но перед этим его нужно сформировать.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
BEGIN
  EXECUTE IMMEDIATE 'ALTER SESSION ENABLE PARALLEL DML';

  INSERT /*+ APPEND PARALLEL(16) */
  INTO (поле1, поле2, …)
  SELECT значение1, значение2, … FROM DUAL UNION
  SELECT значение1, значение2, … FROM DUAL UNION
  …

  COMMIT;

  EXECUTE IMMEDIATE 'ALTER SESSION DISABLE PARALLEL DML';
END;


В 1С средствами его языка надо формировать этот текст запроса. Взяв каким то образом из базы 1С значения нужно формировать миллион "SELECT значение1, значение2, … FROM DUAL". Но что то мне подсказывает, что это плохо.

Как бы это лучше сделать?
Ведь тут не сделать SELECT к какой то таблице оракла, потому что данные берутся из 1С.
...
Рейтинг: 0 / 0
Импорт данных из 1С в Oracle
    #40134324
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
verter

Как бы это лучше сделать?


Много способов.

- select from 1c_tables со стороны оракла;
- insert into oracle_tables со стороны 1С (точнее, MSSQL);
- файловая передача, в т.ч. миллионы insert - замерьте скорость.

Поскольку связи между 1С-объектами и таблицами БД может установить только движок 1С, единственный правильный способ - воспользоваться им и сделать сервис обмена данными.

Пример:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
"object": {
		"inf_doc_selling": [
			{
				"ID_HEAD": "e1c1817e-896f-11ec-8748-ac1f6b3e3ec3",
				"ID_TYPEDOC": "Реализация товаров и услуг",
				"ID_CLIENT": "2322259f-9508-11e1-9f00-00155d001304",
				"ID_CLIENT2": "00000000-0000-0000-0000-000000000000",
				"ID_DEP": "d1644c8e-f9ec-11eb-8c45-a8a159650ac5",
				"NUM_HEAD": "0М00-000767",
				"DATE_HEAD": "08.02.2022 23:59:59",
				"CLOSED": 0,
				"PARENT_ID_HEAD": "a5117225-88a6-11ec-8748-ac1f6b3e3ec3",
				"INVOICE_NUM": "",
				"INVOICE_DATA": "",
				"ORG_INN": "5257081321",
				"GOODS": [
					{
						"ID_WARE": "7a766223-476d-11ec-a6bd-3cd92beecda8",
						"LINENO": 1,
						"QUANTITY": 1,
						"PRICE1": 3285,
						"PRICEDISCOUNT": 3285,
						"NDS": 0
					},
					{
						"ID_WARE": "6e75b81c-0308-11eb-bcb5-3cd92beecda8",
						"LINENO": 2,
						"QUANTITY": 2,
						"PRICE1": 4085,
						"PRICEDISCOUNT": 4085,
						"NDS": 0
					},
					{
						"ID_WARE": "49bca688-d927-11e9-9fd3-3cd92beecda8",
						"LINENO": 3,
						"QUANTITY": 3,
						"PRICE1": 4355,
						"PRICEDISCOUNT": 4355,
						"NDS": 0
					},
					{
						"ID_WARE": "5361b08b-3876-11ec-bb01-3cd92beecda8",
						"LINENO": 4,
						"QUANTITY": 1,
						"PRICE1": 4955,
						"PRICEDISCOUNT": 4955,
						"NDS": 0
					},
					{
						"ID_WARE": "d85ac23c-1a79-11ea-a7dc-3cd92beecda8",
						"LINENO": 5,
						"QUANTITY": 1,
						"PRICE1": 4715,
						"PRICEDISCOUNT": 4715,
						"NDS": 0
					}
				]
			},
			{
				"ID_HEAD": "9af6d5c9-8971-11ec-8748-ac1f6b3e3ec3",
				"ID_TYPEDOC": "Реализация товаров и услуг",
				"ID_CLIENT": "2322259f-9508-11e1-9f00-00155d001304",
				"ID_CLIENT2": "00000000-0000-0000-0000-000000000000",
				"ID_DEP": "8255cef2-f9ec-11eb-8c45-a8a159650ac5",
				"NUM_HEAD": "0Н00-007364",
				"DATE_HEAD": "08.02.2022 23:59:59",
				"CLOSED": 0,
				"PARENT_ID_HEAD": "cbc3f761-88a6-11ec-8748-ac1f6b3e3ec3",
				"INVOICE_NUM": "0Н00-0007859",
				"INVOICE_DATA": "08.02.2022 23:59:59",
				"ORG_INN": "5253000410",
				"GOODS": [
					{
						"ID_WARE": "70c85a08-06ed-11e2-a350-00155d001304",
						"LINENO": 1,
						"QUANTITY": 1,
						"PRICE1": 4685,
						"PRICEDISCOUNT": 4685,
						"NDS": 20
					},
					{
						"ID_WARE": "911e86e8-9afe-11e8-9d7f-3cd92beecda8",
						"LINENO": 2,
						"QUANTITY": 2,
						"PRICE1": 4555,
						"PRICEDISCOUNT": 3871.75,
						"NDS": 20
					},
					{
						"ID_WARE": "84d3db18-555c-11eb-a122-3cd92beecda8",
						"LINENO": 3,
						"QUANTITY": 1,
						"PRICE1": 1535,
						"PRICEDISCOUNT": 1304.75,
						"NDS": 20
					},
					{
						"ID_WARE": "5902219d-555e-11eb-a122-3cd92beecda8",
						"LINENO": 4,
						"QUANTITY": 1,
						"PRICE1": 1475,
						"PRICEDISCOUNT": 1253.75,
						"NDS": 20
					},
					{
						"ID_WARE": "22741527-ca55-11ea-bb55-3cd92beecda8",
						"LINENO": 5,
						"QUANTITY": 1,
						"PRICE1": 2425,
						"PRICEDISCOUNT": 2061.25,
						"NDS": 20
					},
					{
						"ID_WARE": "fe6a367c-9861-11eb-bd70-3cd92beecda8",
						"LINENO": 6,
						"QUANTITY": 1,
						"PRICE1": 1725,
						"PRICEDISCOUNT": 1466.25,
						"NDS": 20
					},
					{
						"ID_WARE": "6a3e53f2-6227-11eb-88be-3cd92beecda8",
						"LINENO": 7,
						"QUANTITY": 1,
						"PRICE1": 965,
						"PRICEDISCOUNT": 820.25,
						"NDS": 20
					},
					{
						"ID_WARE": "26f8ce0b-6228-11eb-88be-3cd92beecda8",
						"LINENO": 8,
						"QUANTITY": 1,
						"PRICE1": 1485,
						"PRICEDISCOUNT": 1262.25,
						"NDS": 20
					},
					{
						"ID_WARE": "d4c02164-6229-11eb-88be-3cd92beecda8",
						"LINENO": 9,
						"QUANTITY": 1,
						"PRICE1": 1675,
						"PRICEDISCOUNT": 1423.75,
						"NDS": 20
					},
					{
						"ID_WARE": "4803bc05-fc89-11e5-918a-3cd92beecda8",
						"LINENO": 10,
						"QUANTITY": 1,
						"PRICE1": 4125,
						"PRICEDISCOUNT": 4125,
						"NDS": 20
					},
					{
						"ID_WARE": "0c4948d3-761a-11e8-834c-3cd92beecda8",
						"LINENO": 11,
						"QUANTITY": 1,
						"PRICE1": 1735,
						"PRICEDISCOUNT": 1735,
						"NDS": 20
					},
					{
						"ID_WARE": "b96f561d-c7a3-11e8-8034-3cd92beecda8",
						"LINENO": 12,
						"QUANTITY": 1,
						"PRICE1": 3195,
						"PRICEDISCOUNT": 3195,
						"NDS": 20
					},
					{
						"ID_WARE": "5b1f9da3-1599-11e9-b4fa-3cd92beecda8",
						"LINENO": 13,
						"QUANTITY": 2,
						"PRICE1": 3795,
						"PRICEDISCOUNT": 3795,
						"NDS": 20
					},
					{
						"ID_WARE": "10f7452c-4a77-11e6-be43-3cd92beecda8",
						"LINENO": 14,
						"QUANTITY": 1,
						"PRICE1": 1315,
						"PRICEDISCOUNT": 1117.75,
						"NDS": 20
					},
					{
						"ID_WARE": "7c44233a-f3a4-11e8-aa78-3cd92beecda8",
						"LINENO": 15,
						"QUANTITY": 1,
						"PRICE1": 11255,
						"PRICEDISCOUNT": 11255,
						"NDS": 20
					},
					{
						"ID_WARE": "0df01df1-64df-11e9-a2e9-3cd92beecda8",
						"LINENO": 16,
						"QUANTITY": 2,
						"PRICE1": 4895,
						"PRICEDISCOUNT": 4160.75,
						"NDS": 20
					}
				]
			},




Ведь тут не сделать SELECT к какой то таблице оракла, потому что данные берутся из 1С.

Любые селекты Oracle-MSSQL, MSSQL-Oracle можно сделать, вопрос в желании.
...
Рейтинг: 0 / 0
Импорт данных из 1С в Oracle
    #40134327
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
verter,

Выполните выгрузку таблиц 1С в текстовые файлы
и затем загружайте из этих файлов данные в базу Oracle,
используя стандартную утилиту SQL*Loader.

Другой вариант - настроить Oracle® Database Gateway for ODBC
...
Рейтинг: 0 / 0
Импорт данных из 1С в Oracle
    #40134408
verter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может быть вообще обойтись без обработок в 1С и без использования ADODB в них.
Допустим 1С специалист хорошо знает структуру MSSQL базы, тогда подключив через ODBC Оракл к MSSQL можно было бы с сервера MSSQL скриптом lделать запрос к MSSQL базе, а резалт-сет вставлять в оракловскую базу.

В Оракле есть гетерогенный сервис благодаря которому можно в одном и том же запросе обращаться как к таблицам оракла так и к таблицам MSSQL, с которым связь настроена через ODBC.
Но вот не знаю есть ли подобный сервис у MSSQL чтобы сделать наоборот - из MSSQL обращаться одновременно и к MSSQL таблицам и оракловым?
...
Рейтинг: 0 / 0
Импорт данных из 1С в Oracle
    #40134439
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Импорт данных из 1С в Oracle
    #40134489
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Допустим 1С специалист хорошо знает структуру MSSQL базы, тогда подключив через ODBC Оракл к MSSQL можно было бы с сервера MSSQL скриптом lделать запрос к MSSQL базе, а резалт-сет вставлять в оракловскую базу.

Так действовать можно, но код будет трудночитаемый.
Пример:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
  merge into department_1c d
  using (
          select dep."_IDRRef" ID_DEPARTMENT, dep."_Code" CODE, dep."_Description" NAME_DEP
            from "dbo"."_Reference218"@DB1C dep
        ) new_d on (d.id_department = new_d.id_department)
        
  when matched then update 
                set d.name_dep = new_d.name_dep,
                    d.code = new_d.code
                
  when not matched then insert (d.id_department, d.name_dep, d.code)
                        values (new_d.id_department, new_d.name_dep, new_d.code)
     where (new_d.name_dep != 'Склады');
     

  merge into client_1c c
  using (
         select client."_IDRRef" ID_CLIENT, client."_Code" CODE, client."_Description" NAME_CLIENT
           from dbo."_Reference123"@DB1C client
          where client."_ParentIDRRef" in
                ( '9F0000155D00130411E195027661F3FC',
                  '9F0000155D00130411E195027661F3FB' 
                )
        ) new_c on (c.id_client = new_c.id_client)
  when matched then update 
                set c.code = new_c.code,
                    c.name_client = new_c.name_client
                
  when not matched then insert (c.id_client, c.code, c.name_client)
                        values (new_c.id_client, new_c.code, new_c.name_client);
  -- Реализация
  merge into head_1c h
  using (
          select head."_IDRRef" ID_HEAD, head."_Fld14825RRef" ID_DEPARTMENT, head."_Fld14814RRef" ID_CLIENT, head."_Fld14810RRef" ID_CLIENT2,
                 head."_Number" NUM_HEAD, head."_Date_Time" - 730485 DATE1,
                 head."_Marked" marked,
                 1 doctype
            from "dbo"."_Document540"@DB1C head
           where trunc(head."_Date_Time" - 730485) >= trunc(sysdate - 7)
             and head."_Fld14814RRef" in (select id_client from client_1c)
             and head."_Marked" !='01' -- кроме удаленных
             and head."_Posted" = '01' -- только проведенные
         ) new_h on (h.id_head = new_h.id_head)
  when matched then update 
                set id_department = new_h.id_department,
                    id_client = new_h.id_client,
                    id_client2 = new_h.id_client2,
                    num_head = new_h.num_head,
                    date1 = new_h.date1,
                    marked = new_h.marked
     
  when not matched then insert (id_head, id_department, id_client, num_head, date1, marked, id_client2, doctype)
                        values(new_h.id_head, new_h.id_department, new_h.id_client, new_h.num_head, new_h.date1, new_h.marked, new_h.id_client2, new_h.doctype);


Кроме того, при переезде, при апгрейде и еще каких-то действиях эти динамически генерируемые поля могут поменяться, и придется это тоже отрабатывать.
Я попробовал данный подход и отказался от него в пользу передачи данных web-сервисом, типами XML и JSON.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Импорт данных из 1С в Oracle
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]