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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.04.2013, 17:41   #1  
Stingich is offline
Stingich
Участник
 
22 / 10 (1) +
Регистрация: 24.01.2013
Связь полей.
Добрый день.
Есть форма, в ней есть данные из таблицы А и таблицы Б.
В init методе таблицы А при изменении поля ==> изменяется поле в форме, которое из таблицы Б.
Как сделать, чтобы при изменении поля в таблице Б, оно менялось и в таблице В, которая не связана с данными таблицами и формой?
Может и слишком простой вопрос, но я пока что новичок. Сильно не критикуйте
Старый 24.04.2013, 19:20   #2  
Stingich is offline
Stingich
Участник
 
22 / 10 (1) +
Регистрация: 24.01.2013
например есть закупка. При изменении рег. номера изменяется профиль учета. В строках он тоже меняется. А при переходе к основной форме партии товара, профиль учета не меняется. Нужно, чтобы он менялся тоже.
Старый 24.04.2013, 19:45   #3  
plumbum is offline
plumbum
Участник
Соотечественники
 
182 / 86 (3) ++++
Регистрация: 07.12.2007
Адрес: Vienna, AT
Попробуйте из подчиненной формы выудить источник данных вызывающей формы и обновить его:

примерно такой код можно было бы вставить в метод modified на поле источника данных или же в метод write источника данных, где меняется рег номер -> профиль учета

X++:
FormDataSource    callerDataSource;

if (element.args().record() && element.args().record().isFormDataSource())
{
    callerDataSource = element.args().record().dataSource();
    callerDataSource.reread();
    callerDataSource.refresh();
}
__________________
http://www.axdevposts.blogspot.com
Пришел, уведел.... отойди, дай другому увидеть!
Старый 24.04.2013, 19:49   #4  
Stingich is offline
Stingich
Участник
 
22 / 10 (1) +
Регистрация: 24.01.2013
Просто в методе init Таблицы А меняется рег. номер и профиль учета.
Хотелось бы в том же init методе таблицы А прописать условие.
Старый 25.04.2013, 08:09   #5  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Абстрактно: вам нужно разобраться с двумя моментами
- как программно (например из тестового Job) выполнить изменения нужных вам данных
- в какое место (в какое событие) вставить ваш код, для того чтобы изменения произошли в нужный вам момент и на нужные вам значения

Т.е. куда вставить код и какой код вставить.
Пока по описанию задачи не понятно даже не только что, но и куда
Цитата:
Сообщение от Stingich Посмотреть сообщение
В init методе таблицы А при изменении поля ==> изменяется поле в форме, которое из таблицы Б.
Что такое init метод таблицы?

И ещё. Понятно что пользователь меняет данные в таблицах, работая на форме. При этом вызываюся некоторые методы-события формы , которые в свою очередь вызывают методы таблицы. Так вот. Методы формы обычно приходится менять для того чтобы изменить пользовательский интерфейс. Если изменять нужно данные, то в этом случае лучше программировать на уровне методов таблиц, а не форм.
Старый 25.04.2013, 09:24   #6  
online
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
642 / 347 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Покажите, пожалуйста, код метода init(), чтобы можно было представить всю картину.
Непонятно, почему вы для изменения данных используете именно этот метод. Если вы хотите, чтобы что-либо менялось при смене записей в главной таблице (читаем: источнике данных) на форме, используйте метод active(). Если вы хотите обновлять другие данные при внесении изменений, используйте методы update(), modified()/modifiedField() или на худой конец textChange().
__________________
// no comments
Старый 25.04.2013, 10:25   #7  
Stingich is offline
Stingich
Участник
 
22 / 10 (1) +
Регистрация: 24.01.2013
S.Kuskov, да, нужно изменять данные, вот я и хочу на уровне метода таблицы это сделать.
Просто не совсем понимаю как написать условие выхода на другую таблицу.
Dech,
X++:
if (rContractTable.InventProfileType || rContractTable.InventProfileId)
    {
            this.InventProfileType_RU   = rContractTable.InventProfileType;
            this.InventProfileId_RU     = rContractTable.InventProfileId;
    }
Вот в эту ифку хочу добавить присвоение полю из другой таблицы значение rContractTable.InventProfileType;
Старый 25.04.2013, 10:42   #8  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Не очень понятно что должно происходить. Например, как будет обрабатываться рассогласования данных в случае несохранения данных в одной из форм?
Старый 25.04.2013, 10:54   #9  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Stingich Посмотреть сообщение
Вот в эту ифку хочу добавить присвоение полю из другой таблицы значение rContractTable.InventProfileType;
В каком методе находится этот иф?
Старый 25.04.2013, 11:37   #10  
Stingich is offline
Stingich
Участник
 
22 / 10 (1) +
Регистрация: 24.01.2013
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
В каком методе находится этот иф?
в таблице PurchTable, метод initContractAccount
Старый 25.04.2013, 11:40   #11  
Stingich is offline
Stingich
Участник
 
22 / 10 (1) +
Регистрация: 24.01.2013
Цитата:
Сообщение от belugin Посмотреть сообщение
Не очень понятно что должно происходить. Например, как будет обрабатываться рассогласования данных в случае несохранения данных в одной из форм?
Имеется закупка. При изменении группы договора меняется соответственно рег. номер==> и профиль учета. При этом профиль учета меняется в нижнем гриде другой таблицы на форме. Нужно, чтобы в таблице номера партии изменялось поле "форма собственности по Бу " = профилю учета в закупке.
X++:
InventBatch.OwnershipAccId = InventDim.InventProfileId_RU

Последний раз редактировалось Stingich; 25.04.2013 в 11:51.
Старый 25.04.2013, 12:04   #12  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Stingich Посмотреть сообщение
в таблице PurchTable, метод initContractAccount
Смотрите. Этот метод на самом деле не меняет значение поля в БД. Он присваивает значение полю табличного курсора. Сохранение сделанных изменений в БД будет происходить в методе update() таблицы. Если, скажем, после того как отработает метод initContractAccount и до того как выполнится метод update(), произойдёт непредвиденная ошибка (выключится свет), то данные в БД не изменятся. Поэтому изменять значения в третьей таблице в этом методе не стоит.

Цитата:
Сообщение от Stingich Посмотреть сообщение
При этом профиль учета меняется в нижнем гриде другой таблицы на форме.
Код который вы привели не отвечает за изменение в таблице строк. Он обновляет значение только в курсоре верхней таблицы. Ищите то место откуда происходит вызов метода update() таблицы строк.
Найти откуда вызывается метод можно экспериментальным путём. Поставьте точку останова в этот метод. Когда точка останова сработает, в отладчике проанализируйте стек вызовов.
За это сообщение автора поблагодарили: Stingich (1).
Старый 25.04.2013, 12:43   #13  
Stingich is offline
Stingich
Участник
 
22 / 10 (1) +
Регистрация: 24.01.2013
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Смотрите. Этот метод на самом деле не меняет значение поля в БД. Он присваивает значение полю табличного курсора. Сохранение сделанных изменений в БД будет происходить в методе update() таблицы. Если, скажем, после того как отработает метод initContractAccount и до того как выполнится метод update(), произойдёт непредвиденная ошибка (выключится свет), то данные в БД не изменятся. Поэтому изменять значения в третьей таблице в этом методе не стоит.

Код который вы привели не отвечает за изменение в таблице строк. Он обновляет значение только в курсоре верхней таблицы. Ищите то место откуда происходит вызов метода update() таблицы строк.
Найти откуда вызывается метод можно экспериментальным путём. Поставьте точку останова в этот метод. Когда точка останова сработает, в отладчике проанализируйте стек вызовов.
Просто у меня в initContractAccount прописано, что изменяется профиль учета в зависимости от рег. номера, поэтому и хотелось бы туда добавить нужный код.
Старый 25.04.2013, 14:07   #14  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Stingich Посмотреть сообщение
Просто у меня в initContractAccount прописано, что изменяется профиль учета в зависимости от рег. номера, поэтому и хотелось бы туда добавить нужный код.
На всякий случай ещё раз. Две причины, по которым не стоит этого делать - это название метода: initContractAccount и его местоположение: таблица PurchTable.

- Из названия и местоположения метода initContractAccount на таблице PurchTable следует, что он предназанчен для инициализации полей ContractAccount таблицы PurchTable. Вставлять в него код для изменения пусть таких же полей но другой таблицы - не логично.
- Добавлять код, меняющий данные в БД, в метод, который предназначен для изменения значений лишь в курсоре - не логично.
Старый 25.04.2013, 14:27   #15  
Stingich is offline
Stingich
Участник
 
22 / 10 (1) +
Регистрация: 24.01.2013
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
На всякий случай ещё раз. Две причины, по которым не стоит этого делать - это название метода: initContractAccount и его местоположение: таблица PurchTable.

- Из названия и местоположения метода initContractAccount на таблице PurchTable следует, что он предназанчен для инициализации полей ContractAccount таблицы PurchTable. Вставлять в него код для изменения пусть таких же полей но другой таблицы - не логично.
- Добавлять код, меняющий данные в БД, в метод, который предназначен для изменения значений лишь в курсоре - не логично.
мне нужно, чтобы данные изменились в таблице inventBatch, тогда в методе update() уже самой таблицы inventBatch лучше код написать?
Старый 25.04.2013, 15:00   #16  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Stingich Посмотреть сообщение
мне нужно, чтобы данные изменились в таблице inventBatch, тогда в методе update() уже самой таблицы inventBatch лучше код написать?
А кто вам вызовет этот метод?

Вы должны сами найти запись в inventBatch которую хотите изменить; выбрать её для обновления; задать новое значение поля; и наконец вызвать метод update() таблицы inventBatch для сохранения изменений в БД.
Старый 25.04.2013, 16:51   #17  
Stingich is offline
Stingich
Участник
 
22 / 10 (1) +
Регистрация: 24.01.2013
Спасибо за ответы, буду копать.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Универсальный изменятель значений полей wojzeh DAX: Программирование 17 26.09.2013 17:47
Добавление полей на форму в run-time Ar DAX: Программирование 22 02.03.2012 00:14
Изменение идентификаторов(id) полей Dron AKA andy DAX: База знаний и проекты 30 17.06.2009 10:11
Как перекрыть lookup для поля входящего в группу полей ATimTim DAX: Программирование 2 05.10.2005 11:26
очистка полей. простой вопрос Антон Солдатов DAX: Программирование 4 04.04.2003 10:28

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

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

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