25.08.2010, 14:56 | #1 |
Участник
|
Здравствуйте!
Есть задача: передать запись таблицы из одной компании в другую. Это действие желательно выполнить в момент сохранения записи. Поскольку запись передать нельзя, передаётся значение ключевого поля таблицы. И тут возникает проблема: если действие по синхронизации выполнять в триггере OnModify, то запись ещё не сохранена и в таблице хранятся старые значения полей. Можно, конечно, вызвать CHANGECOMPANY, но тогда надо делать CHANGECOMPANY для любой таблицы, для которой необходимо выполнять проверки полей (например, наличие глобального измерения в фирме-приёмнике). Поэтому передаётся значение ключевого поля в фирму-приёмник и там уже вызываются стандратные проверки. Можно ли каким-то образом принудительно сохранить передаваемую запись? (MODIFY на триггере ONModifyRecord формы и OnModify таблицы не дало ничего). Или есть какой-то способ имитировать работу триггера OnAfterModify? |
|
25.08.2010, 23:39 | #2 |
Участник
|
Репликация?
|
|
26.08.2010, 09:16 | #3 |
Участник
|
Как же быть со вставками и удалением записей? Боюсь в такой постановке задача нерешаемая.
Возможно лучший вариант пересмотреть концепцию и валидэйтить записи в фирме-приемнике на триггере OnModify: ReceiverRecord.changecompany(ReceiverCompany); ReceiverRecord.transferfields(SenderRecord, true); ReceiverRecord.CheckRecord; if not ReceiverRecord.insert then ReceiverRecord.modify; |
|
26.08.2010, 10:38 | #4 |
Участник
|
Кстати, может таблицу общефирменной сделать? )))
|
|
26.08.2010, 12:40 | #5 |
Участник
|
Цитата:
Сообщение от rmv
Как же быть со вставками и удалением записей? Боюсь в такой постановке задача нерешаемая.
Возможно лучший вариант пересмотреть концепцию и валидэйтить записи в фирме-приемнике на триггере OnModify: ReceiverRecord.changecompany(ReceiverCompany); ReceiverRecord.transferfields(SenderRecord, true); ReceiverRecord.CheckRecord; if not ReceiverRecord.insert then ReceiverRecord.modify; Как инициировать процесс синхронизации в фирме-приёмнике если изменяется запись в фирме-источнике? Триггер OnModify сработает в фирме-источнике на той записи, которая была изменена. С удалением как раз всё просто. Перед удалением вызывать процедуру синхронизации и в фирме-приёмнике удалять запись по значению ключевого поля. А вставка аналогична изменению. Будет сделано изменение, аналогично можно будет и на вставку сделать. Не получится. В каждой из фирм могут быть как общие записи так и свои собственные независимые от другой фирмы записи. Пока что всё свелось к более простому варианту с использованием NAS. При изменении устанавливать флажок(в таблице, которая хранит значения первичного ключа таблицы и тип синхронизации=Вставка,Изменение,Удаление), что запись была изменена. И по таймеру запускать процедуру синхронизации. Досконально этот способ проверю чуть позже. |
|
26.08.2010, 13:50 | #6 |
Участник
|
Если синхронизировать нужно немедленно после изменения записи - процедуру инициализации синхронизацию нужно переложить с фирмы-приемника на источник. Физически запись в приемнике обновится раньше, чем в источнике.
Если временной лаг допустим - вариантов множество: От ведения лога до анализа таймстампов в версии SQL. |
|
26.08.2010, 20:27 | #7 |
Administrator
|
а можно совсем немножко про бизнес процессы...
что за таблицы? к чему такая онлайн спешка? Рома правду говорит, некоторые справочники и общефирменными можно сделать, а некоторые документы по МФ функционалу лучше запускать |
|
26.08.2010, 21:01 | #8 |
Участник
|
Кстати, помимо МФ функционала есть очень интересный функционал RIM. Я сейчас не на работе, диапазона объектов не помню, но что-то в районе 8000 с чем-то. Выгружает таблицу в xml, а потом в другой базе без проблем загружает. Остается только фильтры поставить и, если надо, счётчики.
|
|
27.08.2010, 08:46 | #9 |
Участник
|
Форму 8627 посмотрите. А функционал Migration называется.
|
|
27.08.2010, 12:44 | #10 |
Участник
|
Цитата:
В общем задача стоит синхронизировать данные двух компаний (таблиц много: поставщики, основные средства, номенклатура, документы и т.д.). Общефирменными - это значит данные будут видны и той, и другой компании. А это как раз не нужно. Повторюсь: данные могут быть разные для двух компаний. Почему он-лайн спешка - руководству захотелось, чтоб всё было красиво. До сих пор всё работало по периодическому заданию. И не одному. Спаибо большое за подсказку Оказалось, что эту функциональность я в первый разу вижу. Но, пожалуй, эта функциональность не совсем подходит. Дело в том, что номерные серии, по которым генерируются значения первичного ключа таблицы - разные. То есть в одной компании в этом поле хранится одно значение(например, 001), в другой - другое(например, 005). Во второй компании в дополнительном поле необходимо сохранять значение первичного ключа из фирмы-источника(001). |
|
27.08.2010, 16:17 | #11 |
Administrator
|
имхо, как-то помечаем строки источника, которые добавлены или изменены, которые надо перебрасывать (ведь не все же перебрасывать!)
пишем или в источнике, или в приемнике (что лучше) задание, которое ченчкампанит, находит эти строки, импортирует к себе с валидейтами (поэтому лучше на приемнике писать). а дальше настраиваем через НАС, через Нав шедулер, не важно, расписание. каждые 5 минут оно работает и все хорошо. это не онлайн, зато работает. вот |
|
27.08.2010, 17:17 | #12 |
Участник
|
Цитата:
Сообщение от Sancho
имхо, как-то помечаем строки источника, которые добавлены или изменены, которые надо перебрасывать (ведь не все же перебрасывать!)
пишем или в источнике, или в приемнике (что лучше) задание, которое ченчкампанит, находит эти строки, импортирует к себе с валидейтами (поэтому лучше на приемнике писать). а дальше настраиваем через НАС, через Нав шедулер, не важно, расписание. каждые 5 минут оно работает и все хорошо. это не онлайн, зато работает. вот |
|
27.08.2010, 18:39 | #13 |
Участник
|
Sancho, примерно так сейчас и реализовала синхронизацию одного из справочников.
Согласна с вами, romeo. Но кажется ваш аргумент руководство как раз и использовало как довод в пользу он-лайн. Например, при синхронизации документов прекращать учёт документа в фирме-источнике. Выдавать пользователю все ошибки сразу. Если например, не был отсинхронизирован справочник, а документ синхронизируется, то пользователю будет выдана ошибка синхронизации. Может затем, чтобы не было "забытых" заданий по исправлению ошибок синхронизации? |
|
30.08.2010, 09:47 | #14 |
Участник
|
Кстати, фирма-источник одна, или записи должны гоняться в обе стороны?
И какая необходимость (не сочтите за нескромность ) учитывать документы несколько раз в разных фирмах? Коли аргумент romeo руководство использовало как дополнительный довод в пользу онлайн синхронизации - может стоит сместить акцент и вести речь о механизме параллельного учета документов в разных фирмах, онлайн синхронизация документов и справочников здесь только один из вариантов. |
|
31.08.2010, 03:49 | #15 |
Участник
|
|
|
31.08.2010, 18:17 | #16 |
Участник
|
Нужны validat'ы полей в фирме-приёмнике.
Отработают ли они нормально в фирме-приёмнике? Для дополнительных проверок понадобится делать CHANGECOMPANY для каждой из проверяемых таблиц. (Например, проверка - наличие глобального измерения в фирме-приёмнике). |
|
31.08.2010, 18:22 | #17 |
Участник
|
Цитата:
Сообщение от rmv
Кстати, фирма-источник одна, или записи должны гоняться в обе стороны?
И какая необходимость (не сочтите за нескромность ) учитывать документы несколько раз в разных фирмах? Коли аргумент romeo руководство использовало как дополнительный довод в пользу онлайн синхронизации - может стоит сместить акцент и вести речь о механизме параллельного учета документов в разных фирмах, онлайн синхронизация документов и справочников здесь только один из вариантов. Синхронизация односторонняя. Вроде в одной фирме документ содержит 5 строк, во второй - 3. И с другими аналитиками, например. С другим количеством. Это, конечно, слабая отговорка, но я могу не знать всех требований, поскольку не я контролирую этот процесс. |
|
31.08.2010, 21:39 | #18 |
Участник
|
Цитата:
А Вам Кирен удачи в разгадывании ребусов, думаю Вы ошиблись форумом, похоже Вам сюда |
|
01.09.2010, 09:13 | #19 |
MCTS
|
Цитата:
Но вот онлайн для этих целей не нужен. Раз в месяц синхронизировать периодическим заданием и нормально. Максимум раз в неделю. Довод "при учете пользователю должна вываливаться ошибка синхронизации, если справочник не был передан в фирму приемник" - вообще считаю доводом против онлайна. Уже вижу продажника или кладовщика, у которых клиент/машина стоит, а они учесть документ не могут. При таком раскладе "устранитель ошибок синхронизации" должен быть на работе тоже всегда, т.е. онлайн. |
|
01.09.2010, 11:33 | #20 |
Участник
|
Цитата:
Сообщение от rmv
А Вам Кирен удачи в разгадывании ребусов, думаю Вы ошиблись форумом, похоже Вам сюда
Юмор оценила. |
|