|
![]() |
#1 |
Участник
|
Цитата:
Сообщение от сНЕЖНЫЙ_бес
![]() Как попроще решить такую задачу.
Пусть есть таблица Т1 с полями a1, a2, ... , an заполненная данными. Нужно сождать таблицу Т2 напимер с полями a1, a2 и a3 так, чтобы туда сразу внеслись сооветствующие данные из T1. При этом, если эти данные менялись бы в T1, то они автоматически менялись бы и в T2. Можно ли это реализовать без codunit ? А если надо писать codeunit то как его получше написать? Перенос данных таблицы, если в ней уже есть данные, можно поручить либо отчету типа "Processing Only", либо написать Codeunit, который выполнит перенос данных. А для синхронизации (односторонней, насколько я понял из описания задачи) необходимо модифицировать триггеры OnInsert, OnModify и OnDelete исходной таблицы T1 и выполнять соответствующие измения в таблице Т2. А по поводу "получше написать": 1. Цикл по перебору записей таблицы Т1 с вставкой записей в Т2 2. Подумать каким образом решить конфликт, если в таблице Т1 поля а1, а2, и а3 не являются альтернативным ключом таблицы, то есть можно найти две записи Т1, где значения полей а1, а2 и а3 совпадают. Это также относится и к синхронизации. Могу ошибаться, но с версии 3.70 в Codeunit1 есть Триггер-функции, которые позволяют отслеживать именения данных в таблицах. Если в разных: строить репликацию. Вариантов много. ЗЫ: хорошая на тестовая задачка для начала предметного разговора на обеседовании ![]() |
|
![]() |
#2 |
Участник
|
Цитата:
![]() Не знаю как в 3.70, а вот в 4-ке точно есть триггер-функции OnGlobalInsert, OnGlobalModify, OnGlobalDelete, OnGlobalRename в Codeunit1, которым передается RecordRef, при помощи которого,в свою очередь, можно определить какая запись в какой таблице добавилась/изменилась/удалилась/переименовалась. На этих триггерах по умолчанию построены системные журналы изменений. В принципе, если лицензия позволяет, можно поиграться с этими триггерами. Только надо понимать, что они вызваются достаточно часто и если туда встроить нетривиальную логику, которая будет недостаточно быстро работать, то затормозит это всю систему. ЗЫ: а про один из триггеров я-таки забыл - OnRename. В нем тоже необходимо вставить процедуру синхронизации значений, если одно из полей, которое необходимо сохранять в Т2, находится в главном ключе таблицы Т1. |
|
![]() |
#3 |
Участник
|
Цитата:
Если эти поля в первичных ключах (тоесть создаваемые записи уникальные), то вообще прописать тригеры как было указано ранее (только с проверкой на не существование уникальности) и проблем не будет. При этом: 1. В свойствах полей Т2 (a1, a2 и a3) прописать ссылки на соответсвующие поля Т1 2. Написать единоразово отчет по перебору записей таблицы Т1 с вставкой записей в Т2 3. будут работать вышеописанные тригеры |
|