04.10.2009, 01:44 | #1 |
Участник
|
Привет всем знатокам.
Есть такой вопрос: нужно написать codeunit , который бы реагировал на события в таблице. Т.е. например, есть таблица Поставщик. При создании нового поставщика, удалении, изменении, переименовании необходимо чтобы выполнялась процедура. Задача процедуры следующая: отслеживать все вышеописанные действия с таблицей Поставщик и заносить в новую таблицу записи об этих изменениях. В новой таблице есть поле типа Option: Insert, Update, Rename, Delete. Так вот подскажите пожалуйста, КАК ОТСЛЕДИТЬ какой из триггеров таблицы Поставщик выл вызван, чтобы вписать правильный процесс (Insert, Update, Rename, Delete) в поле новой таблицы ?? |
|
04.10.2009, 09:55 | #2 |
MCTS
|
Есть такой кодеюнит и таблица в стандарте:
Таблица 405 Кодеюнит 423 Они правда сложнее того, что вам нужно, но принцип посмотреть можно. Вызов кодеюнита 423 происходит в программном модуле 1 в триггерах: Код: OnGlobalInsert(RecRef : RecordRef) ChangLogMgt.LogInsertion(RecRef); OnGlobalModify(RecRef : RecordRef;xRecRef : RecordRef) ChangLogMgt.LogModification(RecRef,xRecRef); OnGlobalDelete(RecRef : RecordRef) ChangLogMgt.LogDeletion(RecRef); OnGlobalRename(RecRef : RecordRef;xRecRef : RecordRef) ChangLogMgt.LogRename(RecRef,xRecRef); |
|
13.11.2009, 23:35 | #3 |
Участник
|
Всем спасибо! Вот каким было решение.
Создаем 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); Очевидно, что среди переменных таблицы Поставщик создается переменная типа Option, которой присваиваются возможные значения: 'Insert,Delete,Update,Rename'. В нужном триггере таблицы Поставщик передается нужное значение этой переменной в функцию нашего кодюнита. Код: 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."; |
|
14.11.2009, 13:31 | #4 |
Administrator
|
кошмар...
1. зачем? 2. почему так криво? например, в первой ф-ции вместо кейса пишем одну строчку: expvend.Process:=process; ... 3. чем не угодила таблица 405? 4. почему добавляем триггеры в таблицу Поставщик, а не используем события из 1-го юнита? |
|
14.11.2009, 21:29 | #5 |
Участник
|
Цитата:
я догадывалась, что это через одно место). Просто меня никто ничему не учил и это решение первое пришедшее в голову. Если не трудно хотелось бы поподробней узнать что такое таблица 405 и как использовать события из 1 юнита. про expvend.Process:=process; вообще не знала. И еще вопрос. Где можно посмотреть код и назначение всех реализованных функций Навижина?? Потому что о существовании таблицы 405 я может и догадывалась, но чтобы ее использовать - никогда. P.S. доступа к дизайнеру уже не имею. |
|
15.11.2009, 02:19 | #6 |
Administrator
|
упс...
Вы дама? прошу простить мне излишнюю прямолинейность. про expvend.Process:=process... вот пример: IF a = TRUE THEN b := FALSE ELSE b := TRUE; будет работать? конечно. точно так же как одна строка: b := NOT a; просто попробуйте заменить ваш кейс мной предложенной одной строкой, наверняка результат будет тот же. 405-я таблица - лог изменений. показывает какая запись была изменена, с какого значения на какое, кем и когда. доступно в версии 3.60 и выше настраивается или в грануле Финансы (3.60, 3.70), или в администрировании (4 и выше): протокол изменений в 1-м юните есть глобальные триггеры на вставку, изменение, удаление данных (именно на них живет заполнение 405-й таблицы), но при отсутствии лицензии на разработку это к сожалению только информация для общего развития. списка всех реализованных в Navision функций, боюсь, нет даже у самого MS... мы все здесь для того, чтобы делиться новыми и новыми открытиями |
|
15.11.2009, 23:31 | #7 |
Участник
|
Sancho, спасибо большое за разьяснение !
На счет предложения "списка всех реализованных в Navision функций, боюсь, нет даже у самого MS...".. Когда компания покупает продукт навика, поставщик вроде как должен предоставить документацию не только для пользователей, но я для дальнейших разработчиков. А как же этим самым разработчикам обойтись без подробных описаний готового кода? Ведь на его основе они и должны строить свою дальнейшую деятельность. Еще вопрос туда же. Может быть на курсах такую информацию предоставляют, хотя бы частично? Невозможно же обучаться программированию в Навижен, опираясь на форумы и "новые и новые открытия" пользователей? более того, может кто знает, на курсах практика какая-либо проводится? |
|
16.11.2009, 00:48 | #8 |
Участник
|
Цитата:
Цитата:
Когда компания покупает продукт навика, поставщик вроде как должен предоставить документацию не только для пользователей, но я для дальнейших разработчиков.
Цитата:
А как же этим самым разработчикам обойтись без подробных описаний готового кода? Ведь на его основе они и должны строить свою дальнейшую деятельность.
Вы же не разработчик в МС, а всего-лишь доработчик базового функционала для своей компании в соответствии с Вашими нуждами(если покупаете такую возможность)! Когда Вы покупаете машину или домашний кинотеатр, Вам выдают только как подсоединить шнуры или кабели и все! Не указано какой чип стоит внутри и многослойная/однослойная плата с резисторами различного номинала и частотной раскладкой. Цитата:
Еще вопрос туда же. Может быть на курсах такую информацию предоставляют, хотя бы частично?
Цитата:
Невозможно же обучаться программированию в Навижен, опираясь на форумы и "новые и новые открытия" пользователей?
более того, может кто знает, на курсах практика какая-либо проводится? |
|
17.11.2009, 19:01 | #9 |
Участник
|
Цитата:
А вот садитесь и ... рассматриваете код, пробуете, тестируете (иногда методом проб и ошибок). Ведь когда Вы занимаете место другого программиста, Вам же не рассказывают что он сделал ранее?
Цитата:
Я учусь программить в Navision уже больше 5 лет (хотя сам являюсь консультантом, но в институте учился на "программиста").
Цитата:
Основы программирования в Navision - просты и понятны для тех, кто когда-то программил под Си или Pascal (синтаксис гибридный, но является интерпретатором)
Код: Hello c/al !!! А насчет курсов и экзаменов - все есть на торрентах) Уже нашла и книжку по программированию в навижн и все доки для подготовки к сдаче тестов. |
|
18.11.2009, 01:31 | #10 |
Участник
|
Цитата:
Сообщение от ktylxy
Цитата:
А вот садитесь и ... рассматриваете код, пробуете, тестируете (иногда методом проб и ошибок). Ведь когда Вы занимаете место другого программиста, Вам же не рассказывают что он сделал ранее?
Цитата:
Цитата:
Я учусь программить в Navision уже больше 5 лет (хотя сам являюсь консультантом, но в институте учился на "программиста").
У меня по 5.0 не хватает только так называемого Development II из-за того, что платить не хочу за себя и пока это мне не нужно лично. Цитата:
Цитата:
Основы программирования в Navision - просты и понятны для тех, кто когда-то программил под Си или Pascal (синтаксис гибридный, но является интерпретатором)
Код: Hello c/al !!! А насчет курсов и экзаменов - все есть на торрентах) Уже нашла и книжку по программированию в навижн и все доки для подготовки к сдаче тестов. |
|