28.09.2009, 00:16 | #1 |
Участник
|
процедура синхронизации или отчет
Привет всем. Заранее прошу прощения, если подобная тем уже была задета. Новичкам изучающим Навижн посоветовали начинать с конкретного задания..Итак есть задание:
Создать таблицу 50028 Export Vendor для передачи записей из таблицы 23 Vendor с определенными полями.. Значения поля 53005 Export Line No. должно быть инкрементным и формироваться по стандартной серии номеров ЭКСП_ПОСТ. Создать отчет 50014 Navision Exchange реализовать процедуру сихронизации из таблицы 23 Vendor (Поставщик) в таблицу 50028 Export Vendor (Экспорт Поставщик). Записи должны ложиться последовательно в трансфер, в зависимости от действий пользователя (создание, изменение, удаление, переименование). Подскажите пожалуйста как в отчете связать две таблицы или как в codeunit создать функцию, которая бы проверяла сходные поля двух таблиц и копировала требуемые в таблицу Export Vendor . |
|
30.09.2009, 18:31 | #2 |
MCTS
|
1. Вопросы про Navision лучше задавать на forum.mazzy.ru - там больше специалистов именно по этой системе.
2. Когда будете задавать вопрос там, уточните, что такое "трансфер" в который должны ложиться записи (и какие записи). 3. Что касается действий пользователя: удаление, переименование и пр. Есть два варианта: первый - модифицировать соотвествующий триггеры таблицы 23 (onModify, onDelete). второй - анализировать лог изменений, правда предварительно его нужно настроить и включить (Администрирование, Общее, Протокол изменений). |
|
|
За это сообщение автора поблагодарили: vtulka (1). |
14.11.2009, 01:05 | #3 |
Участник
|
Итак. Решение ( для кодюнита НЕ для отчета).
1. Создаем нужную нам таблицу 50028 Export Vendor и задаем нужные нам поля. 2. Создаем codeunit и пишем в нем новую функцию: Код: CopyFromVendor(VAR vend : Record Vendor;process : 'Insert,Delete,Update,Rename';VAR rec : Code[10]) expvend.TRANSFERFIELDS(vend); expvend."Last Date Modified":= TODAY; expvend."Last Time Modified":= TIME; expvend."No. Old":=rec; CASE process OF process::Rename: expvend.Process:=expvend.Process::Rename; process::Insert: expvend.Process:=expvend.Process::Insert; process::Delete: expvend.Process:=expvend.Process::Delete; process::Update: expvend.Process:=expvend.Process::Update; END; expvend.INSERT(TRUE);
3. В таблице 23 Vendor в соответствующих тригерах пишем следующий код: Код: OnInsert() reportExp.copyFromVendor(Rec,process::Insert,xRec."No."); OnModify() NavisionExchange.CopyFromVendor(Rec,process::Update,xRec."No."); OnDelete() NavisionExchange.CopyFromVendor(Rec,process::Delete,xRec."No."); OnRename() NavisionExchange.CopyFromVendor(Rec,process::Rename,xRec."No.");
4. В таблице 23 Vendor создается:
В функцию передается значение переменной соответствующее имени триггера (см. код). В переменную Rec передается текущая запись, в xRec - прошлая. Для того чтобы поле Export Line No. было инкрементным и формироваться по стандартной серии номеров ЭКСП_ПОСТ делаем соедующие действия: 1. Создаем в Финансы-Настройка - Серии номеров своб серию ЭКСП_ПОСТ и задаем ей диапазон , к примеру, 1..9999. Дату можно не указывать. 2.В таблице Export Vendor в триггере OnInsert() нужно использовать кодюнит Serial No. . а в нем есть функция setSerial(), кажется так она называется. точно не помню. Так вот в первом входном параметре этой функции нужно написать "ЭКСП_ПОСТ". И ВУ а ля!) |
|