AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.10.2006, 16:45   #1  
Vukmut_imported is offline
Vukmut_imported
Участник
 
9 / 10 (1) +
Регистрация: 11.01.2005
Цитата:
Сообщение от сНЕЖНЫЙ_бес Посмотреть сообщение
Как попроще решить такую задачу.
Пусть есть таблица Т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 есть Триггер-функции, которые позволяют отслеживать именения данных в таблицах.

Если в разных: строить репликацию. Вариантов много.

ЗЫ: хорошая на тестовая задачка для начала предметного разговора на обеседовании
Старый 21.10.2006, 00:57   #2  
Vukmut_imported is offline
Vukmut_imported
Участник
 
9 / 10 (1) +
Регистрация: 11.01.2005
Цитата:
Сообщение от Vukmut Посмотреть сообщение
Могу ошибаться, но с версии 3.70 в Codeunit1 есть Триггер-функции, которые позволяют отслеживать именения данных в таблицах.
Вот пришел домой и посмотрел (работаю сейчас не с Navision )

Не знаю как в 3.70, а вот в 4-ке точно есть триггер-функции OnGlobalInsert, OnGlobalModify, OnGlobalDelete, OnGlobalRename в Codeunit1, которым передается RecordRef, при помощи которого,в свою очередь, можно определить какая запись в какой таблице добавилась/изменилась/удалилась/переименовалась.

На этих триггерах по умолчанию построены системные журналы изменений. В принципе, если лицензия позволяет, можно поиграться с этими триггерами. Только надо понимать, что они вызваются достаточно часто и если туда встроить нетривиальную логику, которая будет недостаточно быстро работать, то затормозит это всю систему.

ЗЫ: а про один из триггеров я-таки забыл - OnRename. В нем тоже необходимо вставить процедуру синхронизации значений, если одно из полей, которое необходимо сохранять в Т2, находится в главном ключе таблицы Т1.
Старый 06.11.2007, 10:41   #3  
RedFox is offline
RedFox
Участник
 
1,441 / 10 (0) +
Регистрация: 28.12.2004
Адрес: Киев
Цитата:
Сообщение от Vukmut Посмотреть сообщение
Если таблицы в одной базе, то:

А для синхронизации (односторонней, насколько я понял из описания задачи) необходимо модифицировать триггеры OnInsert, OnModify и OnDelete исходной таблицы T1 и выполнять соответствующие измения в таблице Т2.
Если уточнить первичные ключи в обоих таблицах?
Если эти поля в первичных ключах (тоесть создаваемые записи уникальные), то вообще прописать тригеры как было указано ранее (только с проверкой на не существование уникальности) и проблем не будет.
При этом:
1. В свойствах полей Т2 (a1, a2 и a3) прописать ссылки на соответсвующие поля Т1
2. Написать единоразово отчет по перебору записей таблицы Т1 с вставкой записей в Т2
3. будут работать вышеописанные тригеры
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 14:03.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.