|
22.03.2010, 17:11 | #1 |
Участник
|
Универсальный изменятель значений полей
Иногда требуется изменить значение многих полей "в одно касание". Здесь я набросал проект, который позволяет это делать. Буду рад, если он окажется полезным в вашей работе.
Администраторам Данный класс формирует список всех значений всех полей всех таблиц в три временные таблицы, с которыми можно работать динамически: исключать некоторые группы, фильтровать списки таблиц, полей и значений по первым буквам их имён, делать выборку значений, а главное - задавать новые значения полей. Кроме того, присутствуют некоторые сервисные возможности, такие, например, как открытие таблицы в дереве АОТ, просмотр её значений стандартным броузером или просмотр текста текущего SQL-запроса. Программистам Программистам будет интересно заглянуть внутрь единственного класса этого проекта, в котором динамически создаются все объекты, включая методы объектов формы диалога, которые динамически же перегружаются. Комментарии в коде - к вашим услугам. Замечания:
Развитие В дальнейших планах есть мысль прикрутить возможность экспорта в Excel значений выбранных полей. Буду очень рад, если вы предложите свои идеи по усовершенствованию; замечания по недочётам тоже очень приветствуются! Благодарности Большое спасибо Евгению за помощь в тестировании!
__________________
Felix nihil admirari Последний раз редактировалось wojzeh; 27.10.2019 в 19:35. |
|
|
За это сообщение автора поблагодарили: alex55 (1), DSPIC (14), nix0root (1). |
22.03.2010, 17:50 | #2 |
Участник
|
А собственно где сам проектик
__________________
В подводной охоте главное вдох ... |
|
22.03.2010, 17:52 | #3 |
Участник
|
спасибо за интерес! я думал, до этого дело не дойдёт - поправил.
(забыл линк вставить! ;-)
__________________
Felix nihil admirari |
|
22.03.2010, 18:00 | #4 |
Участник
|
Пожалуйста ))
Посмотрю и по тестирую как время будет.
__________________
В подводной охоте главное вдох ... |
|
24.03.2010, 10:27 | #5 |
Участник
|
ппц бред.
Прежде чем что-то подобное делать в ахарте, хорошо бы сначала ознакомиться с идеологией системы. |
|
24.03.2010, 11:00 | #6 |
Участник
|
|
|
24.03.2010, 16:23 | #7 |
Участник
|
Цитата:
в каком месте данный проект противоречит идеологии системы? в чём собственно, на ваш взгляд, заключается эта самая идеология? какие есть претензии к коду? какие есть претензии к функциональности? какие есть замечания по части интерфейса и удобства работы с формой?
__________________
Felix nihil admirari |
|
25.03.2010, 01:46 | #8 |
Administrator
|
Цитата:
Сообщение от wojzeh
коллега, спасибо за отзыв, но нельзя ли конкретизировать вашу критику?
в каком месте данный проект противоречит идеологии системы? в чём собственно, на ваш взгляд, заключается эта самая идеология? какие есть претензии к коду? какие есть претензии к функциональности? какие есть замечания по части интерфейса и удобства работы с формой? Код не смотрел, ориентируюсь исключительно на скриншот, т.е. пытаюсь из себя представить некоего консультанта - пользователя данного инструмента. 1. Способ выбора таблиц. В Аксапте контролька List используется на порядок реже контрольки Grid. И в ряде мест, где используется List я очень скучаю по Grid-у с его штатными возможностями фильтрации, сортировки, перестановки и скрытия столбцов. На скриншоте реализована только фильтрация таблиц, причем с начала названия. Т.е. фильтрация у меня уже предопределена без возможности изменения. А вот мне внедренцы сделали табличку - которая в меню выведена в клиенты, поставщики и запасы. Какой у нее префикс (Cust/Vend/Invent)? Я не знаю. Но я могу ее найти как *MyTable*. Далее. Название таблицы в коде и название ее в пункте меню - вещи разные. Даже в английском языке. Мне как консультанту неизвестно название таблицы в АОТе. Но я легко могу посмотреть Label таблицы. Достаточно нажать кнопку Расширенный фильтр (Ctrl+F3). Как может консультант найти нужную ему таблицу по ее Label ? 2. Фильтрация таблиц по группам. Мне как-то не привелось столкнуться с аккуратным расставлением этого свойства при внедрении. В стандарте - его стараются придерживаться - но тем не менее - при поиске таблицы - я обычно меньше всего думаю (может просто привык) о том к какой группе ее могли бы отнести. Фактически - вместо того, чтобы дать инструмент фильтрации в гриде сделан навязанный жесткий фильтр, который не покрывает мои потребности фильтрации. 3. Способ выбора полей. К всему перечисленному выше добавляется еще тот факт, что если таблицы имеют префикс, относящий их к определенному модулю и какая-нибудь табличка - типа строки складского журнала наверняка имеет префикс Invent (т.е. данный инструмент позволяет сократить перечень таблиц, если я введу Invent) - то в случае полей такого правила нет и фильтр по началу названия поля абсолютно бесполезен. Более того, поля более необходимо фильтровать по названию (Label), т.к. в интерфейсе label таблицы как правило не виден - т.к. его перекрывает label от пункта меню или дизайна формы. А вот label поля виден во всей красе по умолчанию везде, где его не переопределили на форме, что бывает достаточно редко. 4. Фильтрация полей по системным. Тут фильтрация обоснована, т.к. она позволяет скрыть служебные поля. Хотя опять-таки - если уж предлагается фильтрация по названию поля из АОТ - то пользователь уж точно знает какие поля системные и смысла их фильтровать я не вижу 5. Изменение значений. Изменять можно только строковые поля как я понял? А как же лукап? Я что - не могу выбрать значения из лукапа? (который строится в зависимости от EDT+Relation на таблице) А числовые поля/денежные/дата-время (с календариком) и енумы (выбор из списка) ? Я хочу, чтобы механизм смены значения был максимально приближен к стандартному (енумы выбирать из списка, дату вводить из календарика, строковые данные вводить из лукапа и т.д.) А при изменении отрабатывает update или doupdate? Например при правке InventTrans нужна отработка именно update, т.к. он синхронизирует еще и InventSum. А при правке CustTable к примеру совершенно необязательно чтобы отрабатывал код по синхронизации с smmBusRelTable, т.е. нужна отработка doupdate. А поля modified* меняются при смене значения? А то к примеру мне нужно поменять одно поле в справочнике - и сразу я становлюсь автором изменений (может это и наоборот правильно). А события/журнал БД при изменении работает? А то (возможно) я могу захотеть, чтобы на время изменений события не генерились. Я ж все ж консультант, а не рядовой пользователь. 6. Общее замечание по использованию. Обычно требуется инструмент изменения данных в конкретной глючной записи. Т.е. система нештатно отработала и мы вручную подкорректировали неверно записанное значение. Я осознанно опускаю понятие аудиторского следа, т.к. использование данного инструмента явно не предполагает использование аудиторского следа в рамках одной базы (к примеру инструментом можно пользоваться на тестовой БД) Что видел я в плане смены значений: Форма в стиле "Паспорт записи списком" - представляет собой грид из 3-полей - название поля (label), название поля (AOT), значение. При этом значение можно менять и работают все лукапы/енумы/календарики. Форма простая, но позволяет сортировать/фильтровать по полям (label+name) штатным способом в гриде. Не позволяет правда менять данные массово.
__________________
Возможно сделать все. Вопрос времени |
|
|
За это сообщение автора поблагодарили: lev (4), Gustav (5), wojzeh (1), Corkscrew (1). |
25.03.2010, 18:33 | #9 |
Участник
|
__________________
Felix nihil admirari |
|
26.03.2010, 18:58 | #10 |
Banned
|
Прошу прощения, но зачем все это нужно, когда в AX 2009 есть для этого стандартный инструмент?
|
|
26.03.2010, 19:02 | #11 |
Участник
|
Цитата:
я делал это под 4-й версией и не только для администраторов, но и чтобы попробовать динамическую перегрузку методов.
__________________
Felix nihil admirari |
|
26.03.2010, 19:09 | #12 |
Banned
|
1. Сходить в конф. ключи и в разделе "Администрирование" включить инструмент.
2. В любой записи нажать правую кнопку мыши, выделить последний пункт. 3. В появившейся форме свойств записи нажать на кнопку инструмента и запустить стандартный "универсальный изменятель": Последний раз редактировалось EVGL; 26.03.2010 в 19:15. |
|
|
За это сообщение автора поблагодарили: wojzeh (1). |
20.04.2010, 00:46 | #13 |
Участник
|
Цитата:
Сообщение от EVGL
1. Сходить в конф. ключи и в разделе "Администрирование" включить инструмент.
2. В любой записи нажать правую кнопку мыши, выделить последний пункт. 3. В появившейся форме свойств записи нажать на кнопку инструмента и запустить стандартный "универсальный изменятель": Вложение 5663
__________________
Felix nihil admirari |
|
20.04.2010, 05:54 | #14 |
Участник
|
Потому что он появился только в AX2009
__________________
Sergey Nefedov |
|
26.08.2010, 14:38 | #15 |
Участник
|
Цитата:
Сообщение от EVGL
1. Сходить в конф. ключи и в разделе "Администрирование" включить инструмент.
2. В любой записи нажать правую кнопку мыши, выделить последний пункт. 3. В появившейся форме свойств записи нажать на кнопку инструмента и запустить стандартный "универсальный изменятель": Вложение 5663 А что все-таки она делает? там query какой-то открывается.. |
|
26.08.2010, 14:41 | #16 |
Участник
|
Задаешь фильтр для отбора нужных записей в форме - потом система показывает все эти записи, подтверждаешь выбор, указываешь новое значение - и все готово
__________________
Ivanhoe as is.. |
|
|
За это сообщение автора поблагодарили: imir (1). |
26.09.2013, 17:47 | #17 |
Участник
|
Цитата:
Сообщение от wojzeh
Иногда требуется изменить значение многих полей "в одно касание". Здесь я набросал проект, который позволяет это делать. Буду рад, если он окажется полезным в вашей работе.
__________________
Felix nihil admirari |
|