Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: Интеграция 1с и DWH  [new]
Гость333
Member

Откуда:
Сообщений: 3683
ambarka_max
Я всегда считал, что регистр это всегда одна таблица. О каких нескольких таблицах вы говорите?

В 1С 7.7 регистр на уровне БД состоит из таблицы движений и таблицы итогов.
25 фев 13, 14:56    [13977111]     Ответить | Цитировать Сообщить модератору
 Re: Интеграция 1с и DWH  [new]
ambarka_max
Member

Откуда: Россия
Сообщений: 517
Yagrus2
_djХомяГ, какова надежность такого метода? Как часто происходит перестроение таблиц и от чего это может зависеть?

Для 1С 8.X для нетиповых объектов и нетиповых свойств объектов имена SQL структур могут неожиданно поменяться при развертывании базы с нуля или загрузки бэкапа базы средствами 1С. Возможно при накатывании обновлений, сильно изменяющих структуру, тоже возможны какие-то подвижки.
25 фев 13, 15:11    [13977264]     Ответить | Цитировать Сообщить модератору
 Re: Интеграция 1с и DWH  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 902
У нас версия 1с 8.2
ambarka_max вы все таки согласны, что структура регистров и таблиц не один к одному?
25 фев 13, 15:16    [13977317]     Ответить | Цитировать Сообщить модератору
 Re: Интеграция 1с и DWH  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35080
Блог
ambarka_max,

Поменяются, ну и что? Запускается заранее написанная обработка, которая формирует view с понятными именами из новых структур на основе метаданных 1с.
25 фев 13, 15:16    [13977320]     Ответить | Цитировать Сообщить модератору
 Re: Интеграция 1с и DWH  [new]
ambarka_max
Member

Откуда: Россия
Сообщений: 517
Yagrus2
ambarka_max вы все таки согласны, что структура регистров и таблиц не один к одному?

Я все равно склоняюсь к мысли, что структура регистра это всегда одна основная таблица, все остальные (если есть) - вторичны (навроде переодических срезов для переодических регистров, срезов первых/последних и т.п.) и рассчитываются на основе данных из основной таблицы обычной сверткой и функциями агрегации. То есть, например, при наличии движений мы всегда можем пересчитать остатки по периодам.

Однако, не думаю что это принципиальный вопрос, хоть 10 таблиц=1 регистр, все это можно транспонировать во view с нормальным именованием.
25 фев 13, 15:29    [13977445]     Ответить | Цитировать Сообщить модератору
 Re: Интеграция 1с и DWH  [new]
svcoder
Member

Откуда: СПб
Сообщений: 423
Забудьте про доступ к таблицам 1С напрямую. Заполняйте т.н. fact table в произвольной БД с помощью регистрации изменений исходных регистров в 1С и регламентированного задания, которое наполняет fact table. Обычно при формировании fact table необходимо делать некоторые преобразования, например:
1. не писать туда данные незакрытого периода
2. не исправлять записи, а только делать корректировки текущей датой
3. вместо бухгалтерских контрагентов заполнять управленческих
4. агрегировать информацию из нескольких ИБ

Все эти преобразования нужно делать при формировании fact table, а не в SQL-скриптах чтения данных
25 фев 13, 15:43    [13977583]     Ответить | Цитировать Сообщить модератору
 Re: Интеграция 1с и DWH  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 902
ambarka_max,
Если это действительно "основная таблица" не дробится, то никакой проблемы нет.
Но наш главный 1С-к говорил, что регистр разбивается на несколько таблиц и "основной" как таковой может и не быть.
И связи между таблицами могут весьма запутаны.
25 фев 13, 15:43    [13977588]     Ответить | Цитировать Сообщить модератору
 Re: Интеграция 1с и DWH  [new]
AHDP
Member

Откуда:
Сообщений: 1226
+ ambarka_max,

вот описание структуры построения таблиц 1С
25 фев 13, 15:50    [13977644]     Ответить | Цитировать Сообщить модератору
 Re: Интеграция 1с и DWH  [new]
AHDP
Member

Откуда:
Сообщений: 1226
Если у вас есть 1Сники, то однозначно только два варианта:
1) они создают план обмена;
2) создают подписки на события и сами собирают для вас данные.
25 фев 13, 15:59    [13977727]     Ответить | Цитировать Сообщить модератору
 Re: Интеграция 1с и DWH  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 902
AHDP
Если у вас есть 1Сники, то однозначно только два варианта:
1) они создают план обмена;
2) создают подписки на события и сами собирают для вас данные.


Поясните пожалуйста
25 фев 13, 16:13    [13977822]     Ответить | Цитировать Сообщить модератору
 Re: Интеграция 1с и DWH  [new]
AHDP
Member

Откуда:
Сообщений: 1226
Эти способы позволяют получить на выходе взаимосвязанный набор данных, достаточный для синхронизациивашей БД и 1С. Не нужно каждый раз полностью переливать всю базу.

План обмена -типовой механизм 1С для обмена данными меджу программами. Создаётся "конфигурированием" и в результате вы получаете XML файл с изменениями.

Подписка на события позволяет без изменения конфигурации получить ссылку на изменённный объект БД. Остаётся только реализовать их буфферизацию и передачу из базы в базу. Нужно программировать.
25 фев 13, 16:40    [13978030]     Ответить | Цитировать Сообщить модератору
 Re: Интеграция 1с и DWH  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35080
Блог
AHDP,

В теории все хорошо, но:
1) так вы размазываете ответственность на 2 системы и разных людей, в результате никто ни за что не отвечает
2) 1сники не заинтересованы в реализации и поддержке этого интерфейса
25 фев 13, 16:43    [13978055]     Ответить | Цитировать Сообщить модератору
 Re: Интеграция 1с и DWH  [new]
AHDP
Member

Откуда:
Сообщений: 1226
Как это никто не отвечает!? Программисты 1С полюбому отвечают за внесённые изменения включая изменения в плане обмена.
Критик, вы говорите за себя или за программистов топикстартера?
25 фев 13, 16:51    [13978140]     Ответить | Цитировать Сообщить модератору
 Re: Интеграция 1с и DWH  [new]
Homosum
Member

Откуда: Москва
Сообщений: 371
Yagrus2
ambarka_max,
Если это действительно "основная таблица" не дробится, то никакой проблемы нет.
Но наш главный 1С-к говорил, что регистр разбивается на несколько таблиц и "основной" как таковой может и не быть.
И связи между таблицами могут весьма запутаны.



1C-ник говорить может много чего
Пусть посидит поиграется с предложенной выше процедуркой ПолучитьСтруктуруХраненияБазыДанных() - много нового узнает:)

А если серьезно, то для DWH не нужны таблицы итогов - нужна таблица движений.

Вариантов загрузки данных множество и каждый из них имеет свои плюсы и минусы.
XML и план обмена - это четкое и понятное представление, которое генерирует сама 1С. Главный минус очень уж ресурсозатратная операция.
Плоские файлы хороши быстротой и выгрузки, а тем более и загрузки, но при изменении объектов конфигурации, которые сливаются в DWH необходимо править их генерацию, что черевато ошибками.
Для себя выбрал получение данных напрямую из базы данных 1С. Скрипты для View генерятся автоматически на основании структуры DWH, использую ту самую заветную процедурку.
Главный плюс такого подхода - сразу можно (без первоначальной выгрузки-загрузки) работать с DWH, да и при больших объемах ежедневных транзакций нет опасения, что ресурсов не хватит и не надо ждать когда же это все выгрузится и загрузится.
25 фев 13, 17:28    [13978442]     Ответить | Цитировать Сообщить модератору
 Re: Интеграция 1с и DWH  [new]
VladimirKr
Member

Откуда: СПб
Сообщений: 1062
Homosum
1C-ник говорить может много чего
Пусть посидит поиграется с предложенной выше процедуркой ПолучитьСтруктуруХраненияБазыДанных() - много нового узнает:)

А если серьезно, то для DWH не нужны таблицы итогов - нужна таблица движений.

Вариантов загрузки данных множество и каждый из них имеет свои плюсы и минусы.
XML и план обмена - это четкое и понятное представление, которое генерирует сама 1С. Главный минус очень уж ресурсозатратная операция.
Плоские файлы хороши быстротой и выгрузки, а тем более и загрузки, но при изменении объектов конфигурации, которые сливаются в DWH необходимо править их генерацию, что черевато ошибками.
Для себя выбрал получение данных напрямую из базы данных 1С. Скрипты для View генерятся автоматически на основании структуры DWH, использую ту самую заветную процедурку.
Главный плюс такого подхода - сразу можно (без первоначальной выгрузки-загрузки) работать с DWH, да и при больших объемах ежедневных транзакций нет опасения, что ресурсов не хватит и не надо ждать когда же это все выгрузится и загрузится.


+1024
25 фев 13, 17:36    [13978513]     Ответить | Цитировать Сообщить модератору
 Re: Интеграция 1с и DWH  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 902
AHDP
Эти способы позволяют получить на выходе взаимосвязанный набор данных, достаточный для синхронизациивашей БД и 1С. Не нужно каждый раз полностью переливать всю базу.

План обмена -типовой механизм 1С для обмена данными меджу программами. Создаётся "конфигурированием" и в результате вы получаете XML файл с изменениями.

Подписка на события позволяет без изменения конфигурации получить ссылку на изменённный объект БД. Остаётся только реализовать их буфферизацию и передачу из базы в базу. Нужно программировать.


Правильно ли я понял вас...
План обмена - Стандартными средствами 1С создается регламентированное задание на копирование определенных данных из регистров в XML файл

Во втором варианте мы получаем ссылку на измененное значение в поле регистра или на то что изменилась его структура
25 фев 13, 17:44    [13978546]     Ответить | Цитировать Сообщить модератору
 Re: Интеграция 1с и DWH  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 902
Во втором варианте мы получаем ссылку на измененное значение в поле регистра или на то что изменилась его структура???
25 фев 13, 17:50    [13978579]     Ответить | Цитировать Сообщить модератору
 Re: Интеграция 1с и DWH  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 902
Homosum
Плоские файлы хороши быстротой и выгрузки, а тем более и загрузки, но при изменении объектов конфигурации, которые сливаются в DWH необходимо править их генерацию, что черевато ошибками.
Для себя выбрал получение данных напрямую из базы данных 1С. Скрипты для View генерятся автоматически на основании структуры DWH, использую ту самую заветную процедурку.
Главный плюс такого подхода - сразу можно (без первоначальной выгрузки-загрузки) работать с DWH, да и при больших объемах ежедневных транзакций нет опасения, что ресурсов не хватит и не надо ждать когда же это все выгрузится и загрузится.


В каком приложении вы запускаете "заветную процедуру", которая изменяет скрипты ваших View DWH.

Если ваши View автоматически изменяются, то почему возникают ошибки?
25 фев 13, 18:06    [13978659]     Ответить | Цитировать Сообщить модератору
 Re: Интеграция 1с и DWH  [new]
Максимов Михаил
Member

Откуда:
Сообщений: 50
Итак, предложено 4 варианта:

предлогаю идею пятого варианта для варианта хранения данных в субд.
парсинг dbnames + config -> таблица сосоставлений имен таблиц+имен таблиц полей -> генерация view c "понятными" именами

сответственно при реструктуризации имена полей не изменятся.
25 фев 13, 18:06    [13978661]     Ответить | Цитировать Сообщить модератору
 Re: Интеграция 1с и DWH  [new]
Homosum
Member

Откуда: Москва
Сообщений: 371
Yagrus2

В каком приложении вы запускаете "заветную процедуру", которая изменяет скрипты ваших View DWH.

Если ваши View автоматически изменяются, то почему возникают ошибки?


Ошибки могут возникнуть в ситуациях, которые описали выше - при обновлении конфигурации, или же новом развертывании. У меня, например, корректировка скриптов понадобилась при переходе с версии 8.1 на 8.2.

Запускается не процедура, а обработка (в моем случае - в отдельной ИБ в которой перечислены объекты методанных, которые необходимо выгрузить) первый раз при развертывании для формирование View или в перечисленных выше случаях.
25 фев 13, 18:11    [13978684]     Ответить | Цитировать Сообщить модератору
 Re: Интеграция 1с и DWH  [new]
Homosum
Member

Откуда: Москва
Сообщений: 371
Максимов Михаил
Итак, предложено 4 варианта:

предлогаю идею пятого варианта для варианта хранения данных в субд.
парсинг dbnames + config -> таблица сосоставлений имен таблиц+имен таблиц полей -> генерация view c "понятными" именами

сответственно при реструктуризации имена полей не изменятся.


Из этой процедуры ПолучитьСтруктуруХраненияБазыДанных() - можно получить парсинг всех объектов и их полей, а дальше как Вы и написали.
25 фев 13, 18:13    [13978692]     Ответить | Цитировать Сообщить модератору
 Re: Интеграция 1с и DWH  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 902
Homosum
Запускается не процедура, а обработка (в моем случае - в отдельной ИБ в которой перечислены объекты методанных, которые необходимо выгрузить) первый раз при развертывании для формирование View или в перечисленных выше случаях.


View это объект DWH. Для того чтобы его создать или изменить нужно использовать определенный синтаксис.
Как у вас автоматически происходит ALTER View ?
Что вы подразумеваете под ИБ?
25 фев 13, 18:41    [13978827]     Ответить | Цитировать Сообщить модератору
 Re: Интеграция 1с и DWH  [new]
Homosum
Member

Откуда: Москва
Сообщений: 371
Yagrus2
Homosum
Запускается не процедура, а обработка (в моем случае - в отдельной ИБ в которой перечислены объекты методанных, которые необходимо выгрузить) первый раз при развертывании для формирование View или в перечисленных выше случаях.


View это объект DWH. Для того чтобы его создать или изменить нужно использовать определенный синтаксис.
Как у вас автоматически происходит ALTER View ?
Что вы подразумеваете под ИБ?


Ну прям допрос какой-то Интересный стиль общения:)
Под ИБ подразумеваю Информационную базу в которой зашиты процедуры генерации скриптов и т.д..
Код в обработке создает SQL скрипт, который через COMОбъект("ADODB.Connection") выполняется в DWH.
Правда я создаю не ALTER View, а CREATE. Если нужно заменить View, то я его удаляю старый вариант и создаю новый.
25 фев 13, 19:04    [13978967]     Ответить | Цитировать Сообщить модератору
 Re: Интеграция 1с и DWH  [new]
alexdr
Member

Откуда:
Сообщений: 251
Вася Горный
лучше юзать как я написал

По долгу службы довольно часто приходится "интегрироваться" с 1С и не только. Поддерживаю мнение коллег, которые предпочитают цепляться к 1С-таблицам напрямую. Ничего более гнусного и кривого, чем т.н. "выгрузки" из 1С придумать трудно. На самом деле, можно и "выгружать", но проблем с качеством данных при таких "выгрузках" столько, что до момента, когда удается получить от 1С-ников более или менее адекватное качество данных проходит огромное количество времени и на это требуются значительные трудозатраты. По нашему опыту намного быстрее, проще и эффективнее напрямую подключаться к таблицам БД 1С. Что касается т.н. "обновлений", то если обновляться "по умному", то проблем со стабильностью решения обычно не возникает. Хотя при изменении физической структуры хранения данных по-любому придется вносить изменения и в ETL и в DWH. И это - нормально.

SELECT
	 r._Period AS OriginalDate
	,YEAR(DATEADD(year, -2000, r._Period)) * 10000  + MONTH(DATEADD(year, -2000, r._Period)) * 100  + DAY(DATEADD(year, -2000, r._Period)) AS TimeKey
	,CONVERT(uniqueidentifier, r._AccountDtRRef) AS DtID
	,ca._Code AS Dt
	,ISNULL(CONVERT(uniqueidentifier, r._Fld728RRef), CONVERT(uniqueidentifier, 0x0)) AS BranchID
	,CONVERT(uniqueidentifier, r._Fld730DtRRef) AS DepartmentID
	,ISNULL(CONVERT(uniqueidentifier, sv1._Value_RRRef), CONVERT(uniqueidentifier, 0x0)) AS CostItemID
	,CONVERT(uniqueidentifier, sv2._Value_RRRef) AS FacilityID
	,r._Fld731 AS Amount
	,1 AS ScenarioID
FROM my_base.dbo._AccRg727	r INNER JOIN									--РегистрБухгалтерии.Хозрасчетный
	my_base.dbo._Acc18	ca ON r._AccountDtRRef = ca._IDRRef	INNER JOIN		--ПланСчетов.Хозрасчетный
	my_base.dbo._Acc18_ExtDim719 st1 ON (st1._Acc18_IDRRef = ca._IDRRef AND	--ПланСчетов.Хозрасчетный.ВидыСубконто
										  st1._DimKindRRef = 0xB1CCCF7913896204431152BB6A6ADA17) LEFT JOIN	--СтатьиЗатрат
	my_base.dbo._AccRgED763 sv1 ON r._RecorderRRef = sv1._RecorderRRef AND	--РегистрБухгалтерии.Хозрасчетный--ЗначенияСубконто
								    r._LineNo = sv1._LineNo AND
								    sv1._Correspond = 0 AND
								    sv1._KindRRef = st1._DimKindRRef INNER JOIN
	my_base.dbo._Acc18_ExtDim719 st2 ON (st2._Acc18_IDRRef = ca._IDRRef AND	--ПланСчетов.Хозрасчетный.ВидыСубконто
										  st2._DimKindRRef = 0x942F20F1B746FC5E499CDFDE4345CB25) LEFT JOIN		--ОбъектыСтроительства
	my_base.dbo._AccRgED763 sv2 ON r._RecorderRRef = sv2._RecorderRRef AND
									r._LineNo = sv2._LineNo AND
									sv2._Correspond = 0 AND
									sv2._KindRRef = st2._DimKindRRef
WHERE r._Active = 1

Выше приведен код таблицчного представления, иллюстрирующий обращение к бухрегистру (или как он там в терминах 1С называется) - версия 8.2. Это я к тому, что джоинить приходится несколько таблиц.

Соответственно имена таблиц и полей для каждой 1С БД - индивидуальны. Захардкодены несколько иденификаторов (так было надо для решения конкретной задачи).
25 фев 13, 19:36    [13979167]     Ответить | Цитировать Сообщить модератору
 Re: Интеграция 1с и DWH  [new]
Homosum
Member

Откуда: Москва
Сообщений: 371
alexdr
Вася Горный
лучше юзать как я написал

По долгу службы довольно часто приходится "интегрироваться" с 1С и не только. Поддерживаю мнение коллег, которые предпочитают цепляться к 1С-таблицам напрямую. Ничего более гнусного и кривого, чем т.н. "выгрузки" из 1С придумать трудно. На самом деле, можно и "выгружать", но проблем с качеством данных при таких "выгрузках" столько, что до момента, когда удается получить от 1С-ников более или менее адекватное качество данных проходит огромное количество времени и на это требуются значительные трудозатраты. По нашему опыту намного быстрее, проще и эффективнее напрямую подключаться к таблицам БД 1С. Что касается т.н. "обновлений", то если обновляться "по умному", то проблем со стабильностью решения обычно не возникает. Хотя при изменении физической структуры хранения данных по-любому придется вносить изменения и в ETL и в DWH. И это - нормально.

SELECT
	 r._Period AS OriginalDate
	,YEAR(DATEADD(year, -2000, r._Period)) * 10000  + MONTH(DATEADD(year, -2000, r._Period)) * 100  + DAY(DATEADD(year, -2000, r._Period)) AS TimeKey
	,CONVERT(uniqueidentifier, r._AccountDtRRef) AS DtID
	,ca._Code AS Dt
	,ISNULL(CONVERT(uniqueidentifier, r._Fld728RRef), CONVERT(uniqueidentifier, 0x0)) AS BranchID
	,CONVERT(uniqueidentifier, r._Fld730DtRRef) AS DepartmentID
	,ISNULL(CONVERT(uniqueidentifier, sv1._Value_RRRef), CONVERT(uniqueidentifier, 0x0)) AS CostItemID
	,CONVERT(uniqueidentifier, sv2._Value_RRRef) AS FacilityID
	,r._Fld731 AS Amount
	,1 AS ScenarioID
FROM my_base.dbo._AccRg727	r INNER JOIN									--РегистрБухгалтерии.Хозрасчетный
	my_base.dbo._Acc18	ca ON r._AccountDtRRef = ca._IDRRef	INNER JOIN		--ПланСчетов.Хозрасчетный
	my_base.dbo._Acc18_ExtDim719 st1 ON (st1._Acc18_IDRRef = ca._IDRRef AND	--ПланСчетов.Хозрасчетный.ВидыСубконто
										  st1._DimKindRRef = 0xB1CCCF7913896204431152BB6A6ADA17) LEFT JOIN	--СтатьиЗатрат
	my_base.dbo._AccRgED763 sv1 ON r._RecorderRRef = sv1._RecorderRRef AND	--РегистрБухгалтерии.Хозрасчетный--ЗначенияСубконто
								    r._LineNo = sv1._LineNo AND
								    sv1._Correspond = 0 AND
								    sv1._KindRRef = st1._DimKindRRef INNER JOIN
	my_base.dbo._Acc18_ExtDim719 st2 ON (st2._Acc18_IDRRef = ca._IDRRef AND	--ПланСчетов.Хозрасчетный.ВидыСубконто
										  st2._DimKindRRef = 0x942F20F1B746FC5E499CDFDE4345CB25) LEFT JOIN		--ОбъектыСтроительства
	my_base.dbo._AccRgED763 sv2 ON r._RecorderRRef = sv2._RecorderRRef AND
									r._LineNo = sv2._LineNo AND
									sv2._Correspond = 0 AND
									sv2._KindRRef = st2._DimKindRRef
WHERE r._Active = 1

Выше приведен код таблицчного представления, иллюстрирующий обращение к бухрегистру (или как он там в терминах 1С называется) - версия 8.2. Это я к тому, что джоинить приходится несколько таблиц.

Соответственно имена таблиц и полей для каждой 1С БД - индивидуальны. Захардкодены несколько иденификаторов (так было надо для решения конкретной задачи).


Извините ТС, что не совсем по теме, но меня вопрос к alexdr, а почему вы используете тип uniqueidentifier, а не bigint?
25 фев 13, 20:42    [13979498]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить