Независимый форум, посвященный системе БОСС-Кадровик и всему, что с ней связано
|
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
zhenya17
Зарегистрирован: 04.02.2009 Сообщения: 190 Откуда: Кемерово
|
Добавлено: Пн Май 23, 2011 12:19 Заголовок сообщения: Репликация выбранных полей таблицы |
|
|
Предприятие имеет филиальную структуру. Есть центральная база (ЦБ) для ведения централизованных справочников и базы каждого отдельного филиала. При появлении нового филиала в ЦБ добавляется новое предприятие (в таблицу Setup). Что касается кодов предприятия (название ФСС, рег.номер в ПФР и т.п.), то они редактируются уже непосредственно в каждой из филиальных баз. В связи с этим в репликациях у таблицы Setup стоит "Только выбранные поля" и должны бы реплицироваться лишь несколько полей... но по факту в базе обновляются все поля, т.к. в скрипте REP_TRANS.sql формируется запрос, содержащий Код: | UPDATE SETUP SET
[date_in] = N.[date_in],[is_group] = N.[is_group],[KFS] = N.[KFS],[KOPF] = N.[KOPF],[Land] = N.[Land],[mdate] = N.[mdate],[Name] = N.[Name],[planname_code] = N.[planname_code],[Po] = N.[Po],[Setup_Parent] = NULL,[Short_name] = N.[Short_name],[uname] = N.[uname],[firm_level_id] = N.[firm_level_id],[check_op] = N.[check_op],[id_hr_form_org] = N.[id_hr_form_org],[id_hr_form_sbs] = N.[id_hr_form_sbs],[prefix_TN] = N.[prefix_TN],[check_pfr] = N.[check_pfr],[id_struct_parent] = N.[id_struct_parent],[check_ndfl] = N.[check_ndfl],[pfr_name] = N.[pfr_name],[fss_name] = N.[fss_name],[fss_lev] = N.[fss_lev],[check_esn] = N.[check_esn],[SV_CLOSED] = N.[SV_CLOSED]
FROM SETUP as O, SETUP_for_Export as N WHERE O.[id_firm]=N.[id_firm]
|
По некоторым причинам, обмены из ЦБ в филиалы ходят регулярно, в том числе, таблица Setup. Этот порядок не хотелось бы менять. В итоге приходящая таблица Setup затирает коды предприятия, т.к. в центральной базе они не забиты.
У таблицы Setup пробовала ставить тип и "Справочник", и "Данные", но эффекта не наблюдается.
Собственно, вопрос в том, пользуется ли кто-нибудь репликациями, в частности, реплицированием определённых полей? Работает ли этот механизм? В какой процедурке посмотреть, как формируется rep_trans.sql? И вообще выбранные поля должны формироваться уже на этапе экспорта или они должны уже на этапе импорта должны обновляться только выбранные поля? Другими словами, при экспорте Setup_for_Export должна содержать только выбранные поля или все?
P.S. Среди разделов форума упущен модуль "Репликация". Может, сделать отдельную ветку по обменам? |
|
Вернуться к началу |
|
|
RVV Большой шоколадный орден
Зарегистрирован: 14.01.2010 Сообщения: 449
|
Добавлено: Пн Май 23, 2011 13:41 Заголовок сообщения: |
|
|
А в документации описания нет? (см Раздел 2.3.3) |
|
Вернуться к началу |
|
|
zhenya17
Зарегистрирован: 04.02.2009 Сообщения: 190 Откуда: Кемерово
|
Добавлено: Пн Май 23, 2011 14:04 Заголовок сообщения: |
|
|
Описания чего? В документации по модулю "Репликация" написано, что это должно работать. Но почему-то не работает |
|
Вернуться к началу |
|
|
zhenya17
Зарегистрирован: 04.02.2009 Сообщения: 190 Откуда: Кемерово
|
Добавлено: Вт Май 24, 2011 09:41 Заголовок сообщения: |
|
|
Причина найдена, исправлена.
Но код, на мой взгляд, кривоватый в экспорте...
Последний раз редактировалось: zhenya17 (Вт Май 24, 2011 11:59), всего редактировалось 1 раз |
|
Вернуться к началу |
|
|
RVV Большой шоколадный орден
Зарегистрирован: 14.01.2010 Сообщения: 449
|
Добавлено: Вт Май 24, 2011 10:05 Заголовок сообщения: |
|
|
Что исправлено и что "кривовато"? Нам тоже интересно ... вдруг пригодится |
|
Вернуться к началу |
|
|
zhenya17
Зарегистрирован: 04.02.2009 Сообщения: 190 Откуда: Кемерово
|
Добавлено: Вт Май 24, 2011 11:57 Заголовок сообщения: |
|
|
Блин, хотела нахаляву проскочить и не отписываться подробно
В общем, произошло вот что. В таблицу setup я вручную добавляла поля, при этом в репликациях есть таблица rep_tab_fld, куда в любом случае необходимо добавить вновь созданные поля.
При экспорте БОСС выбирает не те поля, которые содержатся в списке "Только выбранные", а он берёт все поля по структуре таблицы и исключает из них те поля, которые не выбраны. Вот это место и считаю кривоватым. Если бы запрос формировал список полей по перечню выбранных, а не методом исключения, то такого неочевидного косяка бы не было. Привожу вырезку из хранимой процедуры rep_sp_prepare_exp_data, в которой формируется список реплицируемых полей.
Код: | INSERT INTO [dbo].[rep_tmptb_fld] (ID_TAB, NAME_FIELD, FLAG_MODIFY, PARENT_NAME_TAB)
SELECT tt.id_tab, sc.[name], IsNULL(tf.flag_modify, 0), IsNULL(RTRIM(tf.parent_name_tab), '')
FROM sysobjects as so
INNER JOIN rep_tmptb_tab as tt ON so.[name] = tt.NAME_TAB -- все
INNER JOIN syscolumns sc ON so.id = sc.id
LEFT OUTER JOIN rep_tab_fld tf ON sc.[name] = tf.name_field AND tf.id_tab=tt.id_tab
WHERE OBJECTPROPERTY(so.id, N'IsUserTable') = 1
AND sc.[NAME] NOT IN ('REP_BRANCH_NUM', 'REP_BRANCH_ID')
AND IsNULL(tf.id,0) not in (select scf.id_fld from rep_cross_fld scf, rep_tmptb_tab stt, rep_tab_fld stf -- кроме выбранных
where scf.id_list=@_id_rep_pack
and scf.id_fld=stf.id
and stf.id_tab = stt.id_TAB
and stt.TYPE_FLD_EXCH = 2)
and IsNULL(tf.id,0) not in (select stf.id from rep_tab_fld stf, rep_tmptb_tab stt -- только выбранные
where stf.id_tab = stt.id_TAB
and stt.TYPE_FLD_EXCH = 1
and stf.id not in (SELECT cf.id_fld from rep_cross_fld cf, rep_tab_fld sf
where cf.id_list=@_id_rep_pack and cf.id_fld=sf.[id] and sf.id_tab=stt.[id_tab]))
|
Что радует: в модуле "Репликация" есть список таблиц для репликации, а в его меню есть кнопка "Проверить таблицы". При проверке можно выставить галки для автоматического исправления ошибок, в частности, автоматическое добавление созданных полей. После проведения этой процедуры обмены стали ходить нормально. |
|
Вернуться к началу |
|
|
Eng Site Admin
Зарегистрирован: 13.05.2008 Сообщения: 160
|
Добавлено: Чт Май 26, 2011 12:28 Заголовок сообщения: Re: Репликация выбранных полей таблицы |
|
|
zhenya17 писал(а): |
P.S. Среди разделов форума упущен модуль "Репликация". Может, сделать отдельную ветку по обменам? |
Пожалуйста. |
|
Вернуться к началу |
|
|
zhenya17
Зарегистрирован: 04.02.2009 Сообщения: 190 Откуда: Кемерово
|
Добавлено: Вт Июн 07, 2011 12:43 Заголовок сообщения: |
|
|
zhenya17 писал(а): | Что радует: в модуле "Репликация" есть список таблиц для репликации, а в его меню есть кнопка "Проверить таблицы". При проверке можно выставить галки для автоматического исправления ошибок, в частности, автоматическое добавление созданных полей. После проведения этой процедуры обмены стали ходить нормально. | Докладываю: всплыл подводный камень!
В общем, после этой процедуры автоматической проверки и исправления ошибок, у меня в описании некоторых репликационных таблиц поля FK изменились на PK. В итоге, например, в таблице входимости видов оплат typ_pay_pay стало 3 поля первичного ключа: Code_Pay_tbl, Code_Pay и id_typ_pay_pay, хотя реально первые 2 поля - это внешние ключи.
Естественно, что после таких подарков у меня обмены стали спотыкаться на таких таблицах. Ушла ковырять дальше...
P.S. У меня версия БОСС-Кадровика очень старая, без тех.поддержки уже около 4 лет. Так что за это время, возможно, косячки в репликациях были исправлены и вам таких чудес не встретится. |
|
Вернуться к началу |
|
|
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|