Список форумов BOSSForum.RU - Форум. БОСС-Кадровик
Независимый форум, посвященный системе БОСС-Кадровик
и всему, что с ней связано
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Репликация выбранных полей таблицы

 
Начать новую тему   Ответить на тему    Список форумов BOSSForum.RU - Форум. БОСС-Кадровик -> SQL: Репликация
Предыдущая тема :: Следующая тема  
Автор Сообщение
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    Заголовок сообщения: Ответить с цитатой

Описания чего? В документации по модулю "Репликация" написано, что это должно работать. Но почему-то не работает Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
zhenya17



Зарегистрирован: 04.02.2009
Сообщения: 190
Откуда: Кемерово

СообщениеДобавлено: Вт Май 24, 2011 09:41    Заголовок сообщения: Ответить с цитатой

Причина найдена, исправлена.
Но код, на мой взгляд, кривоватый в экспорте...


Последний раз редактировалось: zhenya17 (Вт Май 24, 2011 11:59), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
RVV
Большой шоколадный орден
Большой шоколадный орден


Зарегистрирован: 14.01.2010
Сообщения: 449

СообщениеДобавлено: Вт Май 24, 2011 10:05    Заголовок сообщения: Ответить с цитатой

Что исправлено и что "кривовато"? Нам тоже интересно ... вдруг пригодится Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
zhenya17



Зарегистрирован: 04.02.2009
Сообщения: 190
Откуда: Кемерово

СообщениеДобавлено: Вт Май 24, 2011 11:57    Заголовок сообщения: Ответить с цитатой

Блин, хотела нахаляву проскочить и не отписываться подробно Cool

В общем, произошло вот что. В таблицу 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. Среди разделов форума упущен модуль "Репликация". Может, сделать отдельную ветку по обменам?

Пожалуйста. Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
zhenya17



Зарегистрирован: 04.02.2009
Сообщения: 190
Откуда: Кемерово

СообщениеДобавлено: Вт Июн 07, 2011 12:43    Заголовок сообщения: Ответить с цитатой

zhenya17 писал(а):
Что радует: в модуле "Репликация" есть список таблиц для репликации, а в его меню есть кнопка "Проверить таблицы". При проверке можно выставить галки для автоматического исправления ошибок, в частности, автоматическое добавление созданных полей. После проведения этой процедуры обмены стали ходить нормально.
Докладываю: всплыл подводный камень! Smile
В общем, после этой процедуры автоматической проверки и исправления ошибок, у меня в описании некоторых репликационных таблиц поля FK изменились на PK. В итоге, например, в таблице входимости видов оплат typ_pay_pay стало 3 поля первичного ключа: Code_Pay_tbl, Code_Pay и id_typ_pay_pay, хотя реально первые 2 поля - это внешние ключи.
Естественно, что после таких подарков у меня обмены стали спотыкаться на таких таблицах. Ушла ковырять дальше...

P.S. У меня версия БОСС-Кадровика очень старая, без тех.поддержки уже около 4 лет. Так что за это время, возможно, косячки в репликациях были исправлены и вам таких чудес не встретится.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов BOSSForum.RU - Форум. БОСС-Кадровик -> SQL: Репликация Часовой пояс: GMT + 4
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Pоwerеd by рhpВB © 2001, 2005 рhpВB Grouр
Русская поддержка phрВB
Rambler's Top100 Рейтинг@Mail.ru Список форумов BOSSForum.RU