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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.04.2012, 11:00   #1  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
Фильтр по полю стирает данные в этом поле
Здравствуйте, прошу совета.

При фильтрации данных в таблице Складские проводки (InventTrans) по полям "Статус прихода" и "Статус расхода" очищаются данные в этих полях, если в фильтре был указан "спецсимвол" (; ' , и др.)

Это происходит не в результате локальных модификаций, проверил на "чистой Аксапте", там то же самое.
Что же это может быть? Может кто сталкивался с подобной проблемой. Спасибо.

Версия DAX 2009
Старый 28.04.2012, 11:04   #2  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,731 / 406 (17) +++++++
Регистрация: 23.03.2006
Вы уверены, что именно стирает, а не фильтрует? какого эффекта хотели добиться ставя символ ";"? значения в фильтре разделяются символом ","
Старый 28.04.2012, 11:16   #3  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
Цитата:
Сообщение от ice Посмотреть сообщение
Вы уверены, что именно стирает, а не фильтрует? какого эффекта хотели добиться ставя символ ";"? значения в фильтре разделяются символом ","
Уверен. Если очищаются данные поля, то изменяется количество остатков на складе, данные проводки не учитываются в пересчете и закрытии склада.
Да и свмо по себе поле, после сброса фильтра остаётся пустым.

Фильтр должен корректно фильтровать вне зависимости от введённых данных в строку фильтра.
Старый 28.04.2012, 11:24   #4  
Alexanderis.ua is offline
Alexanderis.ua
Участник
 
53 / 40 (2) +++
Регистрация: 25.12.2008
Адрес: Киев, Украина
У нас в свое время обнаружился глюк с просмотром паспорта записи на форме InventTrans.
подробностей не помню, но что-то вроде "если стать на одном из полей statusIssue или statusReceipt и вызвать паспорт записи, то поле обнулялось".
Мне кажется у вашей проблемы ноги оттуда же растут.

Не помню уже, как нашли решение. Кажется, где-то на форуме было что-то подобное.
Какие-то проблемы с обработкой энумов на форме.
Помогло проставление метки для значений statusIssue::None и statusReceipt::None - т.е. нужно непустое значение (например "N\A").
__________________
If it ain't broke, take it apart and find out why (с)
Старый 28.04.2012, 11:31   #5  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
Цитата:
Сообщение от Alexanderis.ua Посмотреть сообщение
Помогло проставление метки для значений statusIssue::None и statusReceipt::None - т.е. нужно непустое значение (например "N\A").
Имеете ввиду добавление EnumItem'а "None" в перечисления statusReceipt и statusIssue?
Старый 28.04.2012, 11:40   #6  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
Цитата:
Сообщение от Cardagant Посмотреть сообщение
Имеете ввиду добавление EnumItem'а "None" в перечисления statusReceipt и statusIssue?
Понял, спасибо, попробуем)
Старый 28.04.2012, 12:08   #7  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
А если нужно сохранить пустое значение, то есть не вносить метку в lable этих EnumItem'ов, что скажете?
Старый 28.04.2012, 12:27   #8  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Я может чего не понимаю, но аксапта никогда не давала фильтровать поля типа enum по маске. Можно использовать только полное наименование элемента перечисления. Дело в том, что тип enum(перечисление) в аксапте реализуется через integer. Т.е. реально в таблице БД хранятся не названия элементов перечисления а их номера. Перед фильтрацией по такому полю, система делает простую подстановку. В введёном условии все наименования элементов заменяются соответствующими номерами. Использование масок в этом алгоритме подстановки просто не предусмотрено. Почему - это отдельный вопрос (лично я не вижу особых сложностей в их реализации).

Исходя из всего выщеизложенного, вопрос. Может быть вы что-то не то делаете? Какую задачу вы решаете?
Старый 28.04.2012, 12:35   #9  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Я может чего не понимаю, но аксапта никогда не давала фильтровать поля типа enum по маске. Можно использовать только полное наименование элемента перечисления. Дело в том, что тип enum(перечисление) в аксапте реализуется через integer. Т.е. реально в таблице БД хранятся не названия элементов перечисления а их номера. Перед фильтрацией по такому полю, система делает простую подстановку. В введёном условии все наименования элементов заменяются соответствующими номерами. Использование масок в этом алгоритме подстановки просто не предусмотрено. Почему - это отдельный вопрос (лично я не вижу особых сложностей в их реализации).

Исходя из всего выщеизложенного, вопрос. Может быть вы что-то не то делаете? Какую задачу вы решаете?
Вы правы насчёт фильтрации Энумов по полному наименованию и использовании в них целочисленного типа.

Задача такая:
При фильтрации данных в таблице Складские проводки (InventTrans) по полям "Статус прихода" и "Статус расхода" очищаются данные в данных полях, если в фильтре был указан "спецсимвол" (; ' , и др.)

Если очищаются данные поля, то изменяется количество остатков на складе, данные проводки не учитываются в пересчете и закрытии склада.

Нужно разобраться почему стирается значение при использовании в фильтре для данных полей спецсимволов.
Старый 28.04.2012, 13:00   #10  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Я не смог воспроизвести проблему. В каких строках у вас очищаются поля? Я задаю в значении фильтра ;(точку с запятой) - сестема скрывает все строки, т.к. действительно ни одна строка такому условию не соответствует. Убираю фильтр - все строки возвращаются и значения у них остаются неизменными.
Старый 28.04.2012, 14:08   #11  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Я не смог воспроизвести проблему. В каких строках у вас очищаются поля? Я задаю в значении фильтра ;(точку с запятой) - сестема скрывает все строки, т.к. действительно ни одна строка такому условию не соответствует. Убираю фильтр - все строки возвращаются и значения у них остаются неизменными.
Открываю форму проводок, делаю фильтр по одному из данных полей, что интересно, при первом запуске фильтра (сразу после открытия формы), он лезет через write() датасорса в апдейт Инвенттранса, хотя write() даже не перекрыт, и апдейтит этим методом текущую строку, очищая данные поля, при последующих запусках фильтра он туда не лезет и фильтр отрабатывает корректно.

Последний раз редактировалось Cardagant; 28.04.2012 в 14:12.
Старый 28.04.2012, 14:44   #12  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
У нас пользователи очень часто при фильтрации данных не вызывали окно настройки фильтра, а так прямо напрямую в поле таблице и писали фильтр. Разумеется, раз произошла прямая правка данных, значение изменяется. Поскольку у Вас вводится не существующее значение (со спец.символами), то значение "затирается" пустым значением.

У меня вопрос: почему у Вас в форме проводок вообще можно редактировать напрямую эти самые проводки? Почему Вы не заблокируете DataSource у этой формы? В смысле, выставить запрет редактирования InventTrans.AllowEdit = No
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 28.04.2012, 14:49   #13  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
У нас пользователи очень часто при фильтрации данных не вызывали окно настройки фильтра, а так прямо напрямую в поле таблице и писали фильтр. Разумеется, раз произошла прямая правка данных, значение изменяется. Поскольку у Вас вводится не существующее значение (со спец.символами), то значение "затирается" пустым значением.

У меня вопрос: почему у Вас в форме проводок вообще можно редактировать напрямую эти самые проводки? Почему Вы не заблокируете DataSource у этой формы? В смысле, выставить запрет редактирования InventTrans.AllowEdit = No
Уже интереснее, на всех датасорсах формы стоит AllowEdit = No, также, при вводе любого значения в строку фильтра, даже, к примеру, одного из EnumItem'ов, фильтр отрабатывает, затирая в текущей строке в данном поле значение...
Старый 28.04.2012, 15:14   #14  
Alexanderis.ua is offline
Alexanderis.ua
Участник
 
53 / 40 (2) +++
Регистрация: 25.12.2008
Адрес: Киев, Украина
А как вы делаете фильтрацию? Через фильтр по сетке или "фильтр по полю" из контекстного меню?

Я думаю что из контекстного - тогда точно ошибка такая же.
Воспроизводится элементарно - открываем форму InventTrans, не передвигая курсор и не клацая ЛКМ нажимаем ПКМ на любой записи в поле StatusIssue или StatusReceipt, вызывая контекстное меню (на непустом значении).
Делаем фильтр по полю - получаем багу. Вызываем паспорт записи - получаем багу.

Лечится так, как я уже писал - присвоением непустой метки значению None
__________________
If it ain't broke, take it apart and find out why (с)

Последний раз редактировалось Alexanderis.ua; 28.04.2012 в 15:48.
За это сообщение автора поблагодарили: S.Kuskov (3).
Старый 28.04.2012, 16:16   #15  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
Цитата:
Сообщение от Alexanderis.ua Посмотреть сообщение
А как вы делаете фильтрацию? Через фильтр по сетке или "фильтр по полю" из контекстного меню?

Я думаю что из контекстного - тогда точно ошибка такая же.
Воспроизводится элементарно - открываем форму InventTrans, не передвигая курсор и не клацая ЛКМ нажимаем ПКМ на любой записи в поле StatusIssue или StatusReceipt, вызывая контекстное меню (на непустом значении).
Делаем фильтр по полю - получаем багу. Вызываем паспорт записи - получаем багу.

Лечится так, как я уже писал - присвоением непустой метки значению None
Да, именно этот баг) Я вылечил перекрытием метода write() на датасорсе InventTrans формы InventTrans и закомментировав super().

Спасибо за советы всем.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
сопоставление оплат клиента, переносов сальдо-поле накладная в общем журнале? Aquarius DAX: Функционал 3 28.01.2009 12:51
Поле SalesId из SalesLine Eldar9x DAX: Программирование 20 10.06.2008 16:42
Поле "Оплатить до" в строке общего журнала longson DAX: Функционал 7 29.03.2008 14:38
Не удаляется фильтр по складской аналитике sergy DAX: Программирование 18 14.02.2005 13:25
Иногда не работает фильтр chel DAX: Функционал 0 09.10.2004 19:08
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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