|
19.02.2013, 17:31 | #1 |
Участник
|
Странности с вхождением в условие
Есть такой код
X++: if ((smmQuotationPhaseGroup.PhaseId == SalesQuotationLine.Status) && (smmQuotationPhaseGroup.IsAskCode == NoYes::Yes)) { SalesQuotationLine_ds.object(fieldnum(SalesQuotationLine,StatusReasonCode)).visible(true); } else { SalesQuotationLine_ds.object(fieldnum(SalesQuotationLine,StatusReasonCode)).visible(false); } X++: NAME:SalesQuotationLine.Status VALUE:09 TYPE:str20 NAME:smm. VALUE:Yes TYPE:NoYes NAME:smm.PhaseId VALUE:09 TYPE:str20 Последний раз редактировалось user_ax; 19.02.2013 в 17:41. |
|
19.02.2013, 17:40 | #2 |
Участник
|
Пробовал сделать отдельное условие так
X++: if (str2int(smmQuotationPhaseGroup.PhaseId) == str2int(SalesQuotationLine.Status)) У обоих полей тип string.. Не знаю, куда копать. |
|
19.02.2013, 18:03 | #3 |
Участник
|
У Вас в коде используется таблица smmQuotationPhaseGroup, а в отладчике информация о полях таблицы smm.
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
19.02.2013, 18:04 | #4 |
Участник
|
|
|
19.02.2013, 18:14 | #5 |
Участник
|
Цитата:
Укажите в коде имя datasource, а не имя таблицы. А чтобы было понятно, в чем проблема, добавьте в Вашем коде вывод в infolog непосредственно перед сравнением X++: info(strfmt("smmQuotationPhaseGroup recId=%1 PhaseId=%2", smmQuotationPhaseGroup.RecId, smmQuotationPhaseGroup.PhaseId)); info(strfmt("smm recId=%1 PhaseId=%2", smm.RecId, smm.PhaseId)); if (...)
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... Последний раз редактировалось Владимир Максимов; 19.02.2013 в 18:16. |
|
|
За это сообщение автора поблагодарили: user_ax (1). |
19.02.2013, 18:19 | #6 |
Участник
|
Цитата:
Сообщение от Владимир Максимов
Так ведь "ссылается", а не "называется". Вы путаете имя объекта АОТ и имя переменной, в которой содержится ссылка на экземпляр этого объекта. Как правило, они совпадают. Но в данном случае они отличаются. По сути, Вы все время используете для сравнения пустые значения.
Укажите в коде имя datasource, а не имя таблицы. А чтобы было понятно, в чем проблема, добавьте в Вашем коде вывод в infolog непосредственно перед сравнением X++: info(strfmt("smmQuotationPhaseGroup recId=%1 PhaseId=%2", smmQuotationPhaseGroup.RecId, smmQuotationPhaseGroup.PhaseId)); info(strfmt("smm recId=%1 PhaseId=%2", smm.RecId, smm.PhaseId)); if (...) Получилось. Спасибо вам большое. Все эти ошибки - самый лучший урок. |
|
19.02.2013, 18:39 | #7 |
Участник
|
Ещё вопрос: после того, как поле отобразилось, нужно чтобы оно сразу же появилось на форме, то есть при потере фокуса либо при переходе на другое поле.
Я так понимаю, нужно дописывать что-то в updatedesign формы? |
|
19.02.2013, 18:44 | #8 |
Ищущий знания...
|
Цитата:
P.S. возможно речь про X++: smmQuotationPhaseGroup_ds.refresh();
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
19.02.2013, 18:47 | #9 |
Участник
|
Цитата:
Нужно чтобы после выполнения visible(true) поле стало видимым на форме. Сейчас оно не становится таким. И refresh() не помог. |
|
19.02.2013, 18:54 | #10 |
Ищущий знания...
|
Цитата:
Если да, то тогда ставите ему свойство AutoDeclaration в Yes, а потом в коде в нужный момент к нему обращаетесь и проставляете нужное свойство. X++: MyControl.visible(true); X++: InventTable_ds.object(fieldnum(InventTable, ItemId)).visible(true);
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
19.02.2013, 18:59 | #11 |
Участник
|
Это контрол на форме, но скрываю\показываю я поле таблицы.
X++: SalesQuotationLine_ds.object(fieldnum(SalesQuotationLine,StatusReasonCode)).visible(true); Мне нужно при выполнении моего условия(изменение значения в выпадающем списке) сделать скрытие\отображения конкретного поля. |
|
19.02.2013, 19:08 | #12 |
Ищущий знания...
|
Цитата:
так в итоге получилось все?
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
19.02.2013, 19:12 | #13 |
Участник
|
|
|
19.02.2013, 19:14 | #14 |
Ищущий знания...
|
Значит вы не там пишите этот код... Где вы прописываете visible(true)? (в каком объекте и в каком методе формы)
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
19.02.2013, 19:23 | #15 |
Участник
|
Cохранение данных и вызов метода active() автоматически не происходит при переходе фокуса на соседнее поле той же строки. Для того чтобы инициировать такое поведение нужно в методе modified редактируемого поля явно вызвать метод write() датасорса.
|
|
19.02.2013, 19:15 | #16 |
Участник
|
Код я прописываю в методе active датасоурса salesquotationtable.
Нужные мне поля из таблицы salesquotatuiontable. |
|
20.02.2013, 09:14 | #17 |
Участник
|
Метод active() срабатывает при переходе с одной записи на другую, а также при открытии формы (что собственно является переходом на первую, либо последнюю запись). Как уже сказали выше, при передаче фокуса перекрывайте метод modified на контроле или на поле датасорса.
__________________
// no comments |
|
20.02.2013, 10:26 | #18 |
Участник
|
То есть мне нужно показ\скрытие полей вставить в метод modified поля датасоурса для отображения его? Попробую, спасибо большое!
|
|
20.02.2013, 10:56 | #19 |
Ищущий знания...
|
Цитата:
1. создайте метод visibleFields, в корне формы (там где метод classDeclaration). в этом методе пропишите необходимый алгоритм отображения и столбцов датасорсов и любых других контролов формы. в будующем везде вы будете использовать этот метод, когда будет необходимо изменить видимость (а не писать одно и тоже тыщу раз). В дальнейшем вызов этого метода выглядит как: X++: element.visibleFields(); X++: ... MyTable_ds.visibleColums(); AnyControl.visible(...); AnyControl2.visible(...); ... X++: element.visibleFields(); X++: SalesQuotationLine_ds.object(fieldnum(SalesQuotationLine,ItemId)).visible(AnyParameters);
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
20.02.2013, 11:03 | #20 |
Участник
|
lev, спасибо больше за столь подробное объяснение, сейчас буду делать.
Пока что вставил свои условия в метод modified того контрола, в котором выбирается данное услвоие - отрабатывает лишь одно из двух... |
|