|
Загрузить данные из базы oracle в 1С, 220 миллионов записей. | ☑ | ||
---|---|---|---|---|
0
Котокот
30.10.15
✎
11:26
|
Впервые сталкиваюсь с такими объемами информации, нужен совет.
Есть база оракловская, в ней 250 таблиц, самая большая из них содержит 24 миллиона записей, вторая по размеру 20 миллионов и т.д., всего записей во всех таблицах - 220 миллионов. В одной таблице содержится список абонентов (60000 записей), остальное - это связанные с ними данные, а также данные о платежах (по каждому абоненту один платеж в месяц, 12 месяцев, 5 лет = 3600000 документов). Основная суть задачи - перетащить в 1С справочник абонентов и данные о платежах за все 5 лет. Как лучше это сделать? Внешние источники использовать? Может, возможно делать прямые запросы к ораклу и вытаскивать сразу сводную информацию, собранную в оракле запросом к нескольким таблицам с объединением? Беда еще в том, что административного доступа к базе нет и не будет, сделать копию базы невозможно, надо тянуть все из живой базы, находящейся в работе. Есть возможность сделать запрос к каждой таблице типа select * from <table_name>, но можно ли будет потом сохранить куда-то результат этого запроса, если там 24 миллиона строк? Может прокатит вариант создать в 1С зеркальный слепок всех таблиц оракла в виде 250-ти регистров сведений, перекачать все туда из оракла и работать потом с этими регистрами, создать в базе все необходимые справочники и документы и потом грохнуть эти регистры? Но сможет ли 1С переварить такие объемы данных? Помогите советами, в общем. А то не знаю, с какой стороны начать съедать этого динозавра. |
|||
32
Котокот
30.10.15
✎
11:38
|
Думал еще над вариантом создать в оракле (если права позволят) промежуточную сводную таблицу (или несколько таблиц), заполнить их нужными данными запросами через интерфейс оракла и потом уже из этих таблиц тащить только нужные данные в 1С.
|
|||
33
sapphire
30.10.15
✎
11:39
|
(29) OPENROWSET относиться к Microsoft Transact SQL и к OLE "обычно", имеет мало отношения.
|
|||
34
sapphire
30.10.15
✎
11:39
|
(31) Зачем?!
|
|||
35
Stim
30.10.15
✎
11:39
|
загнется эта ваша 1С с обработкой стольких данных.
перетаскивать нужно так, чтобы потом не строить семиэтажные запросы с сотней соединений. |
|||
36
sapphire
30.10.15
✎
11:40
|
(32) Я б на MS SQL делал.
|
|||
37
Котокот
30.10.15
✎
11:40
|
(31) Имахется мне, что текстовый файл с 24 миллионами строк прожевать не получится.
|
|||
38
eklmn
гуру
30.10.15
✎
11:40
|
(33) я наверно плохо читаю "Содержит все необходимые сведения о соединении, которые требуются для доступа к удаленным данным источника данных OLE DB. Это альтернативный метод для доступа к таблицам на связанном сервере и является однократным нерегламентированным методом соединения и удаленного доступа к данным с помощью OLE DB."
|
|||
39
sapphire
30.10.15
✎
11:40
|
(37) полчуться-то получится, только зачем, опять таки.
|
|||
40
Котокот
30.10.15
✎
11:41
|
(35) Ну вот думаю над вариантом (32). В итоге получим 60000 записей в таблице с абонентами и 3.6 миллиона документов.
|
|||
41
Живой Ископаемый
30.10.15
✎
11:41
|
Добавь Внешние Истточники Данных к этой Оракловской базе, и просто показывай в 1С таблицы и вьюшки. в динамическом списке
|
|||
42
eklmn
гуру
30.10.15
✎
11:42
|
(39) ну надо заказячику, что вы пристали, посмотрит как это тормозитв 1С и дальше будет искать решение
|
|||
43
sapphire
30.10.15
✎
11:42
|
(38) OLE DB не совсем тоже самое что и просто OLE.
Можно использовать ODBC так же. |
|||
44
Живой Ископаемый
30.10.15
✎
11:43
|
2(40) Сводная таблица будет на самом деле вьюхой? И у нее будет запрос? Ну так просто выполни этот запрос через АДО, получи эти 60 тысяч записей и загрузи в регистр сведений.
|
|||
45
Stim
30.10.15
✎
11:43
|
(41) если ораклская БД не оптимизирована, то без десятков соединений для простого отчета не обойтись. А это - минуты на вывод отчета
|
|||
46
Котокот
30.10.15
✎
11:43
|
(41) Сейчас доступ к этой базе есть, а через месяц может пропасть. Там разработчик этой оракловской базы немного удак: сейчас он позволяет с ней работать, а завтра передумает, нажмет удаленно какую-то кнопочку и вся база умрет. Так что все необходимые данные по любому единоразово надо перекачать куда-то.
|
|||
47
sapphire
30.10.15
✎
11:44
|
(46) MS SQL DTS
|
|||
48
Garykom
гуру
30.10.15
✎
11:45
|
(0) Для начала может слегка подумать головой и решить а зачем нужны все эти данные в 1С ?
Может просто перенести их сначала в текстовые файлы из оракла, а затем в свою базу оракла или чего еще. А дальше уже юзать как хочется |
|||
49
ДенисЧ
30.10.15
✎
11:46
|
(46) перекачай в свой скуль-сервер.
Тебе же легче будет. Индексы всякие, вюьхи материализованные, олап опять же... |
|||
50
Котокот
30.10.15
✎
11:47
|
(47) Это что-то вроде "я создаю пустую базу SQL, подключаюсь из скуля к ораклу и перетаскиваю все в скуль"?
|
|||
51
Stim
30.10.15
✎
11:47
|
(48) текстовый файл умрет и не откроется после первого миллиона строк
|
|||
52
Котокот
30.10.15
✎
11:47
|
(49) Ну да, в первую очередь хочется именно этого, чтобы уже потом со своей базой работать спокойно.
|
|||
53
ДенисЧ
30.10.15
✎
11:48
|
(52) Ну так перекачивай. Зачем тебе для этого посредник типа 1с?
|
|||
54
Котокот
30.10.15
✎
11:48
|
(48) Ой, как-то мы до тебя не догадались подумать головой. Спасибо, сейчас все выгрузим в текстовые файлы!
|
|||
55
sapphire
30.10.15
✎
11:49
|
(51) Смотря сколько "весит" строка
|
|||
56
Котокот
30.10.15
✎
11:49
|
(53) 1С в итоге должен стать конечным потребителем этих данных, не посредником. Я просто в серверах, скулях и ораклах не мастак, поэтому задаю тупые вопросы.
|
|||
57
Azverin
30.10.15
✎
11:50
|
(50) вариант: из Оракла перетащить сразу в скуль в нужном формате для дальнейшего подключения и работы с 1С - выглядит неплохим)
|
|||
58
Stim
30.10.15
✎
11:51
|
ну как вариант можно развернуть 1С на скуле, подготовить сводные ораклские таблицы с данными и перетащить все во внутренние скульные таблицы регистров сведений и справочников средствами самого скуля
|
|||
59
Мыш
30.10.15
✎
11:51
|
(0) Есть знакомый спец по Ораклу. Могу дать контакт.
|
|||
60
Котокот
30.10.15
✎
11:52
|
(59) Спасибо, давай, lazarenkoyv<sobaka>майл.ру
|
|||
61
Azverin
30.10.15
✎
11:52
|
(0) кстати, перетащить разово или потом онлайн обмен?
|
|||
62
Мыш
30.10.15
✎
11:52
|
А так несколько лямов записей для 1С не проблема. Если конечно, это не записи регистра бухгалтерии )
|
|||
63
Котокот
30.10.15
✎
11:53
|
(61) Перетащить разово
|
|||
64
Azverin
30.10.15
✎
11:53
|
(63) тогда в разы проще)
|
|||
65
eklmn
гуру
30.10.15
✎
11:54
|
(63) ты пока запусти в скуле визарда импорта данных, пока тебя не закрыли ))
|
|||
66
VladZ
30.10.15
✎
11:55
|
(0) Да вы, батенька, извращенец! Зачем всякую фигню пихать в 1с? Обычное порево уже не устраивает? Нужно "жосткое порно"? Цепляйся через внешнее и анализируй что нужно.
|
|||
67
Котокот
30.10.15
✎
11:56
|
+(63) Про старую базу потом забываем, потому что ее разраб забил, не развивает, не поддерживат и вообще козел.
|
|||
68
Котокот
30.10.15
✎
11:58
|
(66) База в любой момент может перестать работать, в любом случае надо сначала перекачать в промежуточную базу. А потом - возможно варианты: или перекачать все эти документы с платежам на 5 лет, или загрузить только остатки на начало 2016 года и по мере необходимости заглянуть в прошлые годы обращаться к промежуточной базе и отображать данные из нее.
|
|||
69
mistеr
30.10.15
✎
11:59
|
(37) Читал по диагонали?
(51) Смотря как открывать. |
|||
70
mistеr
30.10.15
✎
12:00
|
(67) Если биллинг в старой базе- хрен вы про нее забудете.
|
|||
71
Мыш
30.10.15
✎
12:03
|
(60) Сбросил ему сцыль на эту ветку.
|
|||
72
Garykom
гуру
30.10.15
✎
12:03
|
(51) какая то детская отмазка ))
кто заставляет этот текстовый файл блокнотом то открывать? причем лучше в несколько файлов писать по 10к строк к примеру или еще как оптимальнее и потом из них загружать |
|||
73
Woldemar177
30.10.15
✎
12:04
|
(66) + 146
(68) что значит может перестать работать??? Кстати вы в файловый вариант 1с хотите перекачать? И в 1с какую 7.7? В дбф? ;))))) |
|||
74
ДенисЧ
30.10.15
✎
12:04
|
(72) Заназачем эту муйню делать через текстовые файлы, когда штатный импорт мсскл слопает это и не подавится?
Что ж 1сники все через то место, откуда гланды удаляют, пытаются делать?... |
|||
75
hhhh
30.10.15
✎
12:05
|
(68) вас, наверно, шокирует слово "миллион". Просто надо работать, не обращать внимание на эти выкладки. До 1млн. записей - это вообще ни о чем - деский сад. 20-50 млн как бы средний размер. Ну у вас 220, ну и что?
|
|||
76
mistеr
30.10.15
✎
12:07
|
(74) У штатного импорта есть проблемы с некоторыми типами данных. Плюс незачем место в скульной базе занимать ради разовой операции. Но можно и так, на выбор ТС.
|
|||
77
Котокот
30.10.15
✎
12:08
|
(69) Не могу понять, зачем текстовые файлы, если есть скуль?
|
|||
78
Garykom
гуру
30.10.15
✎
12:08
|
(74) может почитаем внимательнее посты ТС?
если бы был постоянный доступ к этой базе оракла и надолго то грузите вы как хотите |
|||
79
Котокот
30.10.15
✎
12:08
|
(71) Спс
|
|||
80
Garykom
гуру
30.10.15
✎
12:08
|
(77) см (78)
|
|||
81
Котокот
30.10.15
✎
12:09
|
(73) В "шестерку" конечно, жестить - так по полной.
|
|||
82
Garykom
гуру
30.10.15
✎
12:10
|
(80) :) смешно получилось
не обязательно в текстовые файлы выгружать, но это простейший и понятный где угодно способ вообщем сначала утащите целиком базу, потом уже думать можно и пробовать как лучше |
|||
83
Масянька
30.10.15
✎
12:11
|
(81) Разве это "жестить"?
Вот распечатать, калькулятор, ручку и тетрадку - вот это "гулять, так гулять" :)))) |
|||
84
Котокот
30.10.15
✎
12:11
|
(76) Ну так мы выгрузим в промежуточную скулевую, чтобы отвязаться от РАБОЧЕЙ, в которой постоянно что-то делается, в этой скулевой создадим сводные таблицы, в которых будет находиться только необходимая нам информация, остальное грохнем. Дальше что надо - перекачаем в 1С (справочники абонентов, их техники и т.д.), остальное сможем получать запросом по необходимости. Нормально же?
|
|||
85
ДенисЧ
30.10.15
✎
12:12
|
(78) Может, ещё повнимательней почитаем? Нужна разовая выгрузка
|
|||
86
Котокот
30.10.15
✎
12:12
|
(83) Точно, у меня ж МК-61 где-то в кладовке лежит )
|
|||
87
hhhh
30.10.15
✎
12:13
|
(73) у них же там записи не как в 1с, где в документе 55 реквизитов. Там в записи наверняка 3-4 поля номер, дата и сумма.
То есть если берем в записи например 30 байт, то размер базы 220 000 000 х 30 = 6,6 гиг. Вполне влезет в файловую. |
|||
88
Garykom
гуру
30.10.15
✎
12:13
|
(84) спорим что сразу через "текстовые файлы" из оракла в 1С будет быстрее чем через промежуточную скулевую ?
т.е. делаем полную выгрузку из оракла, а в 1С сразу грузим что нужно и сколько нужно |
|||
89
Котокот
30.10.15
✎
12:14
|
(87) Именно так. Данные об абонентах, например, там раскиданы по 10 таблицам.
|
|||
90
kuromanlich
30.10.15
✎
12:23
|
правильно понимаю, что операция переноса разовая, но работать в режиме билинга 1С будет и после переноса?
|
|||
91
Тoлько_
Просмотр 30.10.15
✎
12:26
|
(0) Если не хочешь своими запросами повесить рабочую бд, то требуй, чтобы тебе сделали готовые сводные вьюхи с абонентами. Как они будут делать уже не твоя забота. Твоя задача сводится тупо к обращению к вьюхе через адо. Без разницы сколько там записей.
|
|||
92
kuromanlich
30.10.15
✎
12:27
|
(91) у него разработчику плохие, пошлют
|
|||
93
Тoлько_
Просмотр 30.10.15
✎
12:37
|
(92) Как общаться, чтобы не посылали, а выполняли поставленные задачи - это уже вопрос за гранью мисты)
|
|||
94
Кирпич
30.10.15
✎
12:42
|
(0)а чо сразу 220 миллионов? абонентоа 60000 по 200 байт да 3600000 документов по 100 байт на каждый. быстро выгружай в текстовый файл и на флешку. в 1с будет долго, но если работа почасовая, то это даже хорошо.
|
|||
95
MaxS
30.10.15
✎
12:44
|
Взять бэкап базы оракла и развернуть у себя.
|
|||
96
Котокот
30.10.15
✎
12:55
|
(90) Верно
|
|||
97
Котокот
30.10.15
✎
12:57
|
(91) Я там не могу ничего требовать, мне дали оракловскую базу без админского доступа и конфу 1С с пустой базой. Через немного месяцев 1С должна будет делать то, что раньше делал оракл. Сотрудник заказчика пока что не может мне даже сказать, какого размера у них текущая рабочая база и как ее забэкапить. Вот как-то так.
|
|||
98
mistеr
30.10.15
✎
12:58
|
(84) Нормально.
|
|||
99
Gantosha
30.10.15
✎
13:00
|
все эти жеки .. муторные конторки .. вот зачем то решили прикончить оракл .. будут мучать пенсионеров 1с.
|
|||
100
Господин ПЖ
30.10.15
✎
13:01
|
будет как в сбере - электрическая очередь расчетов
|
|||
101
senior
30.10.15
✎
13:01
|
(0) не надо грузить в 1с
|
|||
102
Котокот
30.10.15
✎
13:05
|
(99) Разраб сидит на территории Украины, им работать с крымчанами заподло. Так что вариантов нет.
|
|||
103
Котокот
30.10.15
✎
13:14
|
В общем, картина ясна, стратегия обозначена, спасибо, коллеги!
|
|||
104
Azverin
30.10.15
✎
13:38
|
(103) чё делать то будешь?)
|
|||
105
Gantosha
30.10.15
✎
13:45
|
(102) ну тогда надо сносить к черту этот вражеский оракл. Я просто имел подобный опыт рядом с Москвой .. там был серпентарий ..и на пару порядков меньшие объемы , но настроение и все эти схемы этим то а этим се отвращали.
|
|||
106
Котокот
30.10.15
✎
13:57
|
(104) Импортнем базу в скуль.
Определимся, какие данные из разных таблиц нам нужны, создадим для них сводные таблицы, методами скуля заполним эти таблицы. Все лишнее грохнем,чтобы место не занимало. То, что должно быть в 1С (справочники абонентов, оборудования и т.д.) перекачаем. Перенесем остатки взаиморасчетов на начало 2016 года в 1С. Новые документы по биллингу будем создавать в 1С, старые смотреть через внешние источники, путем подключения к скулю. |
|||
107
rs_trade
30.10.15
✎
14:01
|
С помощью SSIS легко. Писать сразу в таблицы справочника 1С.
|
|||
108
kuromanlich
30.10.15
✎
14:08
|
(106) все вроде ровно
|
|||
109
Адинэснег
30.10.15
✎
14:09
|
дай доступ нам, мы поможем, пока админ не прикрыл базу :)
|
|||
110
Котокот
30.10.15
✎
14:09
|
(108) )))
(109) Та не, пока справляемся вроде ) |
|||
111
shachneff
30.10.15
✎
14:38
|
Возможно чуть не в тему, но делал как-то проверку по базе недействительных паспортов ФМС. Там увесистый такой файлик.
Загрузка в РС - долго, а она ежедневно делается. Ну, думаю, в MS SQL залью, из 1С прицеплюсь. Фиг там, у клиента MS SQL лицензионно урезанный - только для 1С можно использовать. И теперь вопрос. Вот тут в топике большая таблица. У меня тоже, плоская. А если бесплатный PostgreSQL использовать? Будет ли это медленнее РС в 1С на MS SQL? Есть у кого-то опыт? |
|||
112
Serginio1
30.10.15
✎
15:39
|
(43) Зачем OLE если можно писать напрямую?
|
|||
113
Serginio1
30.10.15
✎
15:43
|
(37) Пережует и не подавится. https://technet.microsoft.com/ru-ru/library/ms190312(v=sql.120).aspx
Смотри Bulk операции |
|||
114
Котокот
30.10.15
✎
15:56
|
(113) Ну мы лучше средствами скуля все свернем в более мелкие таблицы и их уже будем грузить, чтобы 24 миллиона не перелопачивать текстовыми файлами.
|
|||
115
trdm
30.10.15
✎
15:58
|
(49) +1
|
|||
116
kuromanlich
30.10.15
✎
15:58
|
(114) а что будете делать с новыми записями, которые будут писатся пока будите перекидывать инфу?
|
|||
117
Котокот
30.10.15
✎
16:02
|
(116) Сначала сделаем тестовую, на которой обкатаем процессы, напишем все обработки для переноса, сделаем замеры времени, необходимые для для миграции данных и т.д. А потом всех выгоним из рабочей базы на пару дней и готовыми скриптами все перенесем.
Тут же еще дело в том, что подавляющее большинство справочников мы перетащим сразу из тестовой, а потом добавим только появившихся за время разработки клиентов и документы за этот период - это позволит сэкономить кучу времени. |
|||
118
Serginio1
30.10.15
✎
16:02
|
(114) OPENROWSET позволяет работать с любыми источниками. Что проще то и выбирай.
24 миллиона это по нынешним мерам мелочь. Другое дело, что индексы могут тормозить при записи |
|||
119
Serginio1
30.10.15
✎
16:03
|
118+ Ну и при обновлении данных смотри в сторону Merge
|
|||
120
Котокот
30.10.15
✎
16:04
|
(119) Хорошо, буду смотреть в сторону Merge. Скорее всего, я для данного процесса просто привлеку специалиста по базам )
|
|||
121
mistеr
30.10.15
✎
21:15
|
(111) Если прямыми руками делать, будет быстрее.
Делал как-то подобное на Оракле. Загрузка файлика во временную таблицу, затем FULL OUTER JOIN с основной, получаем разницу, и ее INSERT/UPDATE в цикле. |
|||
122
К_Дач
30.10.15
✎
22:05
|
Очень трудоемко, но можно все сделать. Я бы попробовал так: 1. Берём 1 большую таблицу оракла. Создаём базу 1с в управляемом режиме блокировками. Делаем регистр сведений - копию этой таблицы, подобрав измерения и ресурсы по типам. 2. Базу размещаем на быстром и надёжном ссд, конечно же серверный вариант. 3. Пишем коннектор к ораклу, который будет выбирать из таблицы оракла по 100 тыс записей. Надо только придумать, как не выбирать повторно уже выбранные ранее. Эти 100 тыс записей в 1с, делим на порции по 10 тыс и пишем параллельно. Асинхронный код, то есть, каждые 10 тыс пишет свое фоновое задание. 4. Весь процесс заворачиваем в регламент задание. 5. Сидим пьём чай, пока таблица копируется. 6. Повторяем тоже самое для следующей таблицы.
|
|||
123
К_Дач
30.10.15
✎
22:07
|
Узкое место - получить 100 тыс записей, передаваться будут довольно долго... Ну, если канал связи между сервером 1с и сервером оракла хороший - то должно быть терпимо.
|
|||
124
К_Дач
30.10.15
✎
22:11
|
Потом в 1с можно нарисовать формы "архивных" документов, где выводить данные из регистров сведений, с отборами. Это чтобы потом уже из регистров не переносить данные в документы.
|
|||
125
К_Дач
30.10.15
✎
22:23
|
Если колонка в таблице оракла - это ссылка на другую таблицу,то предварительно создать в 1с справочник, выбрать все различные ссылки из оракла, записать в справочник 1с. То есть сначала создаём копию ссылочной целостности структуры оракла, потом заполняем таблицы регистров. Как-то так... Должно взлететь, мне кажется
|
|||
126
Sasha_1CK
31.10.15
✎
02:22
|
Я уже потерял суть рассуждений.
Сдается мне надо декомпозировать задание. 1. надо разработать структуру БД в 1С 2. Надо забрать данные из оракл 3. Надо убедиться в работоспособности и приемлемой скорости работы 1С на таких объемах. Самый простой вопрос №2. &НаКлиенте Процедура ЗагрузитьПоступления(Команда) Объект.ТаблицаДокументов.Очистить(); Объект.ТаблицаТоваров.Очистить(); #Область ПодключениекБазеСупермаг ИмяБазыСуперМаг = "sm"; ИмяПользователяСуперМага = "sm"; ПарольПользователяСуперМага = "sm"; Состояние("Подключение к базе.."); СтрокаСоединения = "Provider=MSDAORA;"+ ";Password="+сокрЛП(ПарольПользователяСуперМага)+";" ";User Id="+сокрЛП(ИмяПользователяСуперМага)+ ";"+ "Data Source="+СокрЛп(ИмяБазыСуперМаг)+ ";Persist Security Info=True;"; Подключение = Новый ComObject("ADODB.Connection"); Подключение.ConnectionString=СтрокаСоединения; Попытка Подключение.Open(); Состояние("Подключение к серверу Супермаг..."); Сообщить = ("На связи "+ИмяБазыСуперМаг); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; #КонецОбласти #Область ЗагрузкаДанныхСуперМага Command = Новый COMОбъект("ADODB.Command"); Command.ActiveConnection = Подключение; RecordSet = Новый COMОбъект("ADODB.RecordSet"); НачДата = ПолучитьДатуСКЛ(Объект.ДатаЗагрузки); Кондата = ПолучитьДатуСКЛ(Объект.ДатаЗагрузки); ТекстУсловияПоДате =" | ( //| (to_char(SUPERMAG.smdoclog.eventtime, 'RRRR:MM:DD') >= '"+НачДата+"' and to_char(SUPERMAG.smdoclog.eventtime,'RRRR:MM:DD') <= '"+КонДата+"') //| or | (to_char(SUPERMAG.smdoclog.docdate,'RRRR:MM:DD') >= '"+НачДата+"' and to_char(SUPERMAG.smdoclog.docdate,'RRRR:MM:DD') <= '"+КонДата+"') | ) "; Состояние("Выполняется запрос.."); ТекстЗапроса = "SELECT ALL SUPERMAG.FFMAPREP.SALETYPE as DOCTYPE, SUPERMAG.FFMAPREP.SALEID as DOCID, SUPERMAG.FFMAPREP.INCOMEID as INCOMEID, SUPERMAG.FFMAPREP.INCOMEDATE as INCOMEDATE, |SUPERMAG.SMWAYbillsIn.SUPPLIERINVOICE as SUPPLIERINVOICE, SUPERMAG.SMWAYbillsIn.SUPPLINVOICECREATE as SUPPLINVOICECREATE, SUPERMAG.SMWAYbillsIn.SUPPLIERDOCCREATE as SUPPLIERDOCCREATE, SUPERMAG.SMWAYbillsIn.SUPPLIERDOC as SUPPLIERDOC, |SUPERMAG.FFMAPREP.SALELOCATIONFROM as Склад, SUPERMAG.FFMAPREP.SALELOCATIONTO as СкладВ, SUPERMAG.FFMAPREP.SALEDATE as CREDATE, |SUPERMAG.FFMAPREP.SALECLIENTINDEX as SUPPLIER, SUPERMAG.SACardClass.Tree as Узел, |SUPERMAG.FFMAPREP.SALESUM as Всего, SUPERMAG.FFMAPREP.SALEQ as Колво, SUPERMAG.FFMAPREP.SALENOVAT as Сумма, SUPERMAG.FFMAPREP.SALEVATRATE as СтавкаНДС, SUPERMAG.FFMAPREP.PRIMECOST as ВсегоСебест, |SUPERMAG.FFMAPREP.PRIMECOSTNOVAT as СуммаСебест, SUPERMAG.FFDOCUMENTS.USEROP as ПользОпер, SUPERMAG.FFDOCUMENTS.SUPPLIERINVOICE as INVOICE, |SUPERMAG.FFDOCUMENTS.SUPPLINVOICECREATE as SUPDATA, SUPERMAG.FFDOCUMENTS.SupplierDoc as NAKLAD, |SUPERMAG.SAOperation.NAME as Операция, |SUPERMAG.SMClientInfo.ID as SMClientInfoID, SUPERMAG.SMClientInfo.NAME as Имя, SUPERMAG.SMClientInfo.INN as ИНН, SUPERMAG.SMClientInfo.KPP as КПП, |SUPERMAG.SMClientInfo.PASSPORT as Паспорт |FROM SUPERMAG.FFMAPREP, SUPERMAG.SAOperation,SUPERMAG.SMCARD, SUPERMAG.SACardClass, SUPERMAG.FFDOCUMENTS, |SUPERMAG.SMClientInfo, SUPERMAG.SMWAYbillsIn |where | SUPERMAG.FFMAPREP.SALEID in | ( |SELECT SUPERMAG.SMDOCLOG.ID FROM SUPERMAG.SMDOCLOG,SUPERMAG.SMDOCUMENTS |WHERE (SUPERMAG.SMDOCUMENTS.ID = SUPERMAG.SMDOCLOG.ID) |and" +ТекстУсловияПоДате+" |and (SUPERMAG.SMDOCUMENTS.ID = SUPERMAG.SMDOCLOG.ID) |and (SUPERMAG.SMDOCLOG.NEWSTATE=3) |and (SUPERMAG.SMDOCUMENTS.doctype in ('WI','WO')) |and (SUPERMAG.SMDOCUMENTS.doctype=SUPERMAG.SMDOCLOG.doctype) |and (SUPERMAG.SMDOCUMENTS.OPCODE in (0)) |and ((SUPERMAG.SMDOCUMENTS.LOCATIONFROM in (2) )or (SUPERMAG.SMDOCUMENTS.LOCATIONTO in (2))) | ) //|and (SUPERMAG.SMWAYbillsIn.SUPPLIERDOC = '12755') |and (SUPERMAG.SMWAYbillsIn.ID = SUPERMAG.FFDOCUMENTS.ID) |and (SUPERMAG.SMClientInfo.ID = SUPERMAG.FFMAPREP.SALECLIENTINDEX) |and (SUPERMAG.FFMAPREP.RECTYPE=1) |and (SUPERMAG.FFMAPREP.SALEID=SUPERMAG.FFDOCUMENTS.ID) |and (SUPERMAG.FFMAPREP.SALETYPE=SUPERMAG.FFDOCUMENTS.DOCTYPE) |and (SUPERMAG.FFDOCUMENTS.OpCode=SUPERMAG.SAOperation.ID) |and (SUPERMAG.FFMAPREP.ARTICLE=SUPERMAG.SMCARD.ARTICLE) |and (SUPERMAG.SMCARD.IDCLASS=SUPERMAG.SACardClass.ID) |order by SUPERMAG.FFMAPREP.SALEID"; Command.CommandText = ТекстЗапроса; RecordSet = Command.Execute(); Состояние("Выполняется обработка.."); МассивДляПередачиНаСервер = Новый Массив; Пока RecordSet.EOF() = 0 Цикл СтруктураДляПередачиНаСервер = Новый Структура; СтруктураДляПередачиНаСервер.Вставить("DOCTYPE" , RecordSet.Fields("DOCTYPE").Value); СтруктураДляПередачиНаСервер.Вставить("DOCID" , RecordSet.Fields("DOCID").Value); СтруктураДляПередачиНаСервер.Вставить("INCOMEID" , RecordSet.Fields("INCOMEID").Value); СтруктураДляПередачиНаСервер.Вставить("INCOMEDATE" , RecordSet.Fields("INCOMEDATE").Value); СтруктураДляПередачиНаСервер.Вставить("SUPPLIERINVOICE" , RecordSet.Fields("SUPPLIERINVOICE").Value); СтруктураДляПередачиНаСервер.Вставить("SUPPLINVOICECREATE" , RecordSet.Fields("SUPPLINVOICECREATE").Value); СтруктураДляПередачиНаСервер.Вставить("SUPPLIERDOCCREATE" , RecordSet.Fields("SUPPLIERDOCCREATE").Value); СтруктураДляПередачиНаСервер.Вставить("SUPPLIERDOC" , RecordSet.Fields("SUPPLIERDOC").Value); СтруктураДляПередачиНаСервер.Вставить("Склад" , RecordSet.Fields("Склад").Value); СтруктураДляПередачиНаСервер.Вставить("СкладВ" , RecordSet.Fields("СкладВ").Value); СтруктураДляПередачиНаСервер.Вставить("CREDATE" , RecordSet.Fields("CREDATE").Value); СтруктураДляПередачиНаСервер.Вставить("SUPPLIER" , RecordSet.Fields("SUPPLIER").Value); СтруктураДляПередачиНаСервер.Вставить("Узел" , RecordSet.Fields("Узел").Value); СтруктураДляПередачиНаСервер.Вставить("Всего" , RecordSet.Fields("Всего").Value); СтруктураДляПередачиНаСервер.Вставить("Колво" , RecordSet.Fields("Колво").Value); СтруктураДляПередачиНаСервер.Вставить("Сумма" , RecordSet.Fields("Сумма").Value); СтруктураДляПередачиНаСервер.Вставить("СтавкаНДС" , RecordSet.Fields("СтавкаНДС").Value); СтруктураДляПередачиНаСервер.Вставить("ВсегоСебест" , RecordSet.Fields("ВсегоСебест").Value); СтруктураДляПередачиНаСервер.Вставить("СуммаСебест" , RecordSet.Fields("СуммаСебест").Value); СтруктураДляПередачиНаСервер.Вставить("ПользОпер" , RecordSet.Fields("ПользОпер").Value); СтруктураДляПередачиНаСервер.Вставить("INVOICE" , RecordSet.Fields("INVOICE").Value); СтруктураДляПередачиНаСервер.Вставить("SUPDATA" , RecordSet.Fields("SUPDATA").Value); СтруктураДляПередачиНаСервер.Вставить("NAKLAD" , RecordSet.Fields("NAKLAD").Value); СтруктураДляПередачиНаСервер.Вставить("Операция" , RecordSet.Fields("Операция").Value); СтруктураДляПередачиНаСервер.Вставить("SMClientInfoID" , RecordSet.Fields("SMClientInfoID").Value); СтруктураДляПередачиНаСервер.Вставить("Имя" , RecordSet.Fields("Имя").Value); СтруктураДляПередачиНаСервер.Вставить("ИНН" , RecordSet.Fields("ИНН").Value); СтруктураДляПередачиНаСервер.Вставить("КПП" , RecordSet.Fields("КПП").Value); СтруктураДляПередачиНаСервер.Вставить("Паспорт" , RecordSet.Fields("Паспорт").Value); МассивДляПередачиНаСервер.Добавить(СтруктураДляПередачиНаСервер); RecordSet.MoveNext(); КонецЦикла; #КонецОбласти ЗагрузитьПоступленияНаСервере(МассивДляПередачиНаСервер); КонецПроцедуры Запрос к ораклу - строить можно через SQL plus для ответа на 1 вопрос данных недостаточно - но для начала можно попробовать напрямую интерпретировать структуру из оракла в сопоставимые объекты 1С. ответ на 3 пункт будет нужен по факту выполнения первых двух. Но могу предложить следующий вариант - загрузит 1 год а 1С и посмотреть на производительность - если позволяет грузить дальше, если нет - то грузить по годам. Поскольку реально сводные данные за 5 лет нужно обычно по 1 абоненту - то можно сваять отчет который будет тянуть в разрезе одного абонента данные из 5 баз по СОМ. |
|||
127
mistеr
31.10.15
✎
16:36
|
(123) А по-моему все-таки запись в регистр будет узким местом.
|
|||
128
2S
31.10.15
✎
16:40
|
Инари?
|
|||
129
Рамиль Маугли
31.10.15
✎
17:54
|
http://dist.1c.ru/docImages/1ConOracle.pdf
Если и имеет смыл то базы опять таки на самом oracle вести. |
|||
130
vladimirmir2012
31.10.15
✎
18:03
|
Как то нужно было из Firebird в 1С 7.7 перетащить данные.
Некоторые таблицы содержали до 10 млн. записей. ТаблицаЗначений /точнее 1С/ такого количества не скушает за раз. Поэтому в цикле загрузки таблицы выполнялся запрос с SKIP, позволяющий пропустить указанное количество записей и FIRST /выбрать заданное количество записей/ Ну а дальше тривиально из ТЗ в цикле переносим данные в 1С. ТекстЗапроса = "SELECT FIRST " + cntRecAll + " | | SKIP " + VpSkipRec + " | oplata.ls, | oplata.opltype, ... НачатьТранзакцию(); тзРезультат = СоздатьОбъект( "ТаблицаЗначений" ); тзРезультат = ODBCRecordSet01.ВыполнитьИнструкцию( ТекстЗапроса, тзРезультат ); VpОбКолСтр = тзРезультат.КоличествоСтрок(); |
|||
131
Serginio1
01.11.15
✎
17:08
|
Про прямую запись в регистры сведений v8: _SimpleKey и его установка
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |