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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.05.2012, 15:55   #1  
smailik is offline
smailik
Участник
Аватар для smailik
 
250 / 70 (3) ++++
Регистрация: 10.04.2012
Адрес: Москва
Активность Field
Всем добрый день. Есть форма, у формы есть DataSource, он выводится в Grid. Мне надо если в одном поле нужное мне значение, то другое поля нельзя редактировать. Я перекрыл метод active у моего DataSource
X++:
public int active()
{
    int             ret;
    FormDataObject  fld;
    ;
    ret = super();
    fld = rContractTable_ds.object(fieldNum(RContractTable,PrimaryContract));

    if (rContractTable.ContractType == Agreement::PrimaryContract)
    {
        fld.allowEdit(false);
    }
    return ret;
}
Но это результата не дало. Кто подскажет где я ошибся?
Старый 11.05.2012, 16:07   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Как минимум нужна ветка else, возвращающая возможность редактирования, если пользователь вернулся на доступную к редактированию строку.
X++:
    if (rContractTable.ContractType == Agreement::PrimaryContract)
    {
        fld.allowEdit(false);
    }
    // -->>
    else
    {
        fld.allowEdit(true);
    }
    // <<--
Тогда такой if можно вообще заменить одной строкой:
X++:
// -->>
//    if (rContractTable.ContractType == Agreement::PrimaryContract)
//    {
//        fld.allowEdit(false);
//    }
//    else
//    {
//        fld.allowEdit(true);
//    }
    fld.allowEdit(rContractTable.ContractType != Agreement::PrimaryContract);
// <<--
Старый 11.05.2012, 16:10   #3  
smailik is offline
smailik
Участник
Аватар для smailik
 
250 / 70 (3) ++++
Регистрация: 10.04.2012
Адрес: Москва
за else спасибо. Но почему то не работает. Поле доступно для редактирования.
Старый 11.05.2012, 16:15   #4  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Код в ветке if выполняется? Проверьте дебагером, либо просто выведите отладочое сообщение через info или print.
Старый 11.05.2012, 16:16   #5  
pedrozzz is offline
pedrozzz
Молодой, подающий надежды
Аватар для pedrozzz
MCBMSS
Лучший по профессии 2015
 
164 / 218 (8) ++++++
Регистрация: 18.02.2010
Адрес: Краснодар
А вы после изменения кода форму перезапускали? В крайнем случае попробуйте перезапустить клиент Ax.
Старый 11.05.2012, 16:30   #6  
smailik is offline
smailik
Участник
Аватар для smailik
 
250 / 70 (3) ++++
Регистрация: 10.04.2012
Адрес: Москва
Спасибо. нашел в чем ошибка была. На Grid'е в свойствах поля слетел DataSource и DataField. Поставил и все заработало. Всем спасибо за ответы.
Старый 05.03.2013, 12:53   #7  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Не стал создавать новую тему, запостю здесь.

Стоит почти такая же задача, как и у топикастера: необходимо при изменении одного из полей, в данном случае Статус оплаты ( Расчёты с поставщиками\клиентами -> Журнал платежей - Строки) закрывать для редактирования определённые поля.
Сделал метод, в котором выполняется проверка на статус оплаты, если он равен нужному - поля закрываются для редактирования.
Этот метод вызываю в ините формы, active датасоурса и modified поля Статус оплаты датасоурса.
При изменении всё замечаетельно отрабатывает, поля закрываются, НО, стоит перейти на другую строку или сохранить текущую строку - значения снова доступны для редактирования, хотя не должны. Искал корни в методе leaveRecord датасоурса, но там нет ничего связанного с этим, так же искал в методе write, тоже ничего не нашёл.
Метод проверки:
X++:
//Если стоит статус Утверждено - закрывать для редактирования поля
void AllowEditCollums()
{
   LedgerJournalTrans LJT;
    ;
   //выбираю те строки, где статус журнала стоит Утверждено
    select firstonly * from LJT where LJT.PaymentStatus == CustVendPaymStatus::Confirmed;

    if (LJT.PaymentStatus == CustVendPaymStatus::Confirmed)
    {
       LedgerJournalTrans_ds.object(fieldnum(LedgerJournalTrans,TransDate)).allowEdit(false);
     //  LedgerJournalTrans_ds.object(fieldnum(LedgerJournalTrans,TransDate)).visible(false);
       LedgerJournalTrans_ds.object(fieldnum(LedgerJournalTrans, Txt)).allowEdit(false);
       LedgerJournalTrans_ds.object(fieldnum(LedgerJournalTrans,TransDate)).allowEdit(false);
       allowEdit(false);


   // Global::allowEditFieldsOnFormDS_W(LedgerJournalTrans_ds, false);

    }
    else
    {
     LedgerJournalTrans_ds.object(fieldnum(LedgerJournalTrans,TransDate)).allowEdit(true);
    }
}
Метод на форме для инициализации метода проверки с датасоурса:

X++:
void AllowEditFields()
{
    element.lock();

    LedgerJournalTrans_ds.AllowEditCollums();

    element.unLock();
}
Вызываю метод AllowEditFields в active датасоурса, init формы и modified поля датасоурса после супера

X++:
 element.AllowEditFields()

Подскажите, пожалуйста, в какую сторону копать?
Старый 05.03.2013, 14:25   #8  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от user_ax Посмотреть сообщение
X++:
//выбираю те строки, где статус журнала стоит Утверждено
select firstonly * from LJT where LJT.PaymentStatus == CustVendPaymStatus::Confirmed;
Зачем? Разве на доступность поля должно влиять значение не в текущей строке?

Вместо выборки в переменную LJT нового курсора (причём непонятно по каким критериям) нужно использовать курсор LedgerJournalTrans, связанный с источником данных формы
X++:
//if (LJT.PaymentStatus == CustVendPaymStatus::Confirmed)
if (LedgerJournalTrans.PaymentStatus == CustVendPaymStatus::Confirmed)

Последний раз редактировалось S.Kuskov; 05.03.2013 в 14:30.
Старый 05.03.2013, 14:48   #9  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Да, это я ступил что-то, вы правы.

Но, как оказалось, нужно было опустить вызов моего метода в самый низ метода active, ибо в средине вызывается метод класса LedgerJournalEngine, который ставит все свойства create,edit,delete в true и это конфликтовало с моим условием. Опустил вызов своего метода в самый низ и работает корректно.

Спасибо вам за ответ =)
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
dynamicsaxtraining: Purchase Blog bot DAX Blogs 0 11.03.2012 05:25
emeadaxsupport: Fill Utility incorrectly updates a field that is not in the field list of the main datasource Blog bot DAX Blogs 0 27.01.2012 01:12
axaptapedia: Table Field Group Blog bot DAX Blogs 0 25.06.2011 06:33
Халтура в AX2009: идентификаторы из USR в GLS, GLP и даже SYS-слоях EVGL DAX: Программирование 2 21.02.2011 19:44
DynamicsAxSCM: The InventTrans table. Explore various field usages. Blog bot DAX Blogs 0 09.11.2010 19:10

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 00:00.