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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.03.2010, 17:11   #1  
wojzeh is offline
wojzeh
Участник
Аватар для wojzeh
Соотечественники
 
674 / 512 (19) +++++++
Регистрация: 27.04.2006
Адрес: Montreal
Универсальный изменятель значений полей
Иногда требуется изменить значение многих полей "в одно касание". Здесь я набросал проект, который позволяет это делать. Буду рад, если он окажется полезным в вашей работе.

Администраторам

Данный класс формирует список всех значений всех полей всех таблиц в три временные таблицы, с которыми можно работать динамически: исключать некоторые группы, фильтровать списки таблиц, полей и значений по первым буквам их имён, делать выборку значений, а главное - задавать новые значения полей.

Кроме того, присутствуют некоторые сервисные возможности, такие, например, как открытие таблицы в дереве АОТ, просмотр её значений стандартным броузером или просмотр текста текущего SQL-запроса.

Программистам

Программистам будет интересно заглянуть внутрь единственного класса этого проекта, в котором динамически создаются все объекты, включая методы объектов формы диалога, которые динамически же перегружаются. Комментарии в коде - к вашим услугам.

Замечания:
  • Если класс при запуске ругается на то, что временные таблицы уже существуют в АОТ, это значит, что либо работает другой экземпляр класса, либо в результате аварийной ситуации эти таблицы остались в виде "ошмётков", и их нужно удалить из АОТ вручную: __tmpTablesTable, __tmpFieldsTable, __tmpValuesTable.
  • Если таблица это позволяет (например, если не запрещены дубликаты), то заданное значение заместит ВСЕ (!) значения, выбранные в запросе - будьте осторожны!

Развитие

В дальнейших планах есть мысль прикрутить возможность экспорта в Excel значений выбранных полей.

Буду очень рад, если вы предложите свои идеи по усовершенствованию; замечания по недочётам тоже очень приветствуются!

Благодарности

Большое спасибо Евгению за помощь в тестировании!
__________________
Felix nihil admirari

Последний раз редактировалось wojzeh; 27.10.2019 в 19:35.
За это сообщение автора поблагодарили: alex55 (1), DSPIC (14), nix0root (1).
Старый 22.03.2010, 17:50   #2  
nix0root is offline
nix0root
Участник
 
67 / 16 (1) ++
Регистрация: 17.03.2009
Адрес: МО
А собственно где сам проектик
__________________
В подводной охоте главное вдох ...
Старый 22.03.2010, 17:52   #3  
wojzeh is offline
wojzeh
Участник
Аватар для wojzeh
Соотечественники
 
674 / 512 (19) +++++++
Регистрация: 27.04.2006
Адрес: Montreal
спасибо за интерес! я думал, до этого дело не дойдёт - поправил.

(забыл линк вставить! ;-)
__________________
Felix nihil admirari
Старый 22.03.2010, 18:00   #4  
nix0root is offline
nix0root
Участник
 
67 / 16 (1) ++
Регистрация: 17.03.2009
Адрес: МО
Пожалуйста ))

Посмотрю и по тестирую как время будет.
__________________
В подводной охоте главное вдох ...
Старый 24.03.2010, 10:27   #5  
ta_and is offline
ta_and
Участник
 
226 / 122 (5) +++++
Регистрация: 26.02.2002
Адрес: СПб
ппц бред.
Прежде чем что-то подобное делать в ахарте, хорошо бы сначала ознакомиться с идеологией системы.
Старый 24.03.2010, 11:00   #6  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от ta_and Посмотреть сообщение
ппц бред.
Прежде чем что-то подобное делать в ахарте, хорошо бы сначала ознакомиться с идеологией системы.
Я бы сказал иначе:
Прежде чем использовать что-то подобное в ахарте, хорошо бы сначала ознакомиться с идеологией системы
Старый 24.03.2010, 16:23   #7  
wojzeh is offline
wojzeh
Участник
Аватар для wojzeh
Соотечественники
 
674 / 512 (19) +++++++
Регистрация: 27.04.2006
Адрес: Montreal
Цитата:
Сообщение от ta_and Посмотреть сообщение
ппц бред.
Прежде чем что-то подобное делать в ахарте, хорошо бы сначала ознакомиться с идеологией системы.
коллега, спасибо за отзыв, но нельзя ли конкретизировать вашу критику?

в каком месте данный проект противоречит идеологии системы?

в чём собственно, на ваш взгляд, заключается эта самая идеология?

какие есть претензии к коду?

какие есть претензии к функциональности?

какие есть замечания по части интерфейса и удобства работы с формой?
__________________
Felix nihil admirari
Старый 24.03.2010, 16:26   #8  
wojzeh is offline
wojzeh
Участник
Аватар для wojzeh
Соотечественники
 
674 / 512 (19) +++++++
Регистрация: 27.04.2006
Адрес: Montreal
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Я бы сказал иначе:
Прежде чем использовать что-то подобное в ахарте, хорошо бы сначала ознакомиться с идеологией системы
кстати, если интересна история возникновения, то данная разработка была сделана по заказу консультанта, которому на внедрении у клиента часто требовалось оперативно массово менять какие-то значения.

если вы в данном классе заблокируете кнопку "Change", то вся остальная функциональность останется доступной - по ней имеются какие-то замечания-предложения?

спасибо за участие!
__________________
Felix nihil admirari
Старый 25.03.2010, 01:46   #9  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,319 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от 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   #10  
wojzeh is offline
wojzeh
Участник
Аватар для wojzeh
Соотечественники
 
674 / 512 (19) +++++++
Регистрация: 27.04.2006
Адрес: Montreal
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Разрешите мне высказать...
Ого! Земной поклон! Ушёл думать...
__________________
Felix nihil admirari
Старый 26.03.2010, 18:58   #11  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Прошу прощения, но зачем все это нужно, когда в AX 2009 есть для этого стандартный инструмент?
Старый 26.03.2010, 19:02   #12  
wojzeh is offline
wojzeh
Участник
Аватар для wojzeh
Соотечественники
 
674 / 512 (19) +++++++
Регистрация: 27.04.2006
Адрес: Montreal
Цитата:
Сообщение от EVGL Посмотреть сообщение
Прошу прощения, но зачем все это нужно, когда в AX 2009 есть для этого стандартный инструмент?
а какой там есть инструмент?

я делал это под 4-й версией и не только для администраторов, но и чтобы попробовать динамическую перегрузку методов.
__________________
Felix nihil admirari
Старый 26.03.2010, 19:09   #13  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
1. Сходить в конф. ключи и в разделе "Администрирование" включить инструмент.
2. В любой записи нажать правую кнопку мыши, выделить последний пункт.
3. В появившейся форме свойств записи нажать на кнопку инструмента и запустить стандартный "универсальный изменятель":

Нажмите на изображение для увеличения
Название: Ausfuelltool.PNG
Просмотров: 626
Размер:	71.7 Кб
ID:	5663

Последний раз редактировалось EVGL; 26.03.2010 в 19:15.
За это сообщение автора поблагодарили: wojzeh (1).
Старый 20.04.2010, 00:46   #14  
wojzeh is offline
wojzeh
Участник
Аватар для wojzeh
Соотечественники
 
674 / 512 (19) +++++++
Регистрация: 27.04.2006
Адрес: Montreal
Цитата:
Сообщение от EVGL Посмотреть сообщение
1. Сходить в конф. ключи и в разделе "Администрирование" включить инструмент.
2. В любой записи нажать правую кнопку мыши, выделить последний пункт.
3. В появившейся форме свойств записи нажать на кнопку инструмента и запустить стандартный "универсальный изменятель":

Вложение 5663
что-то я никак не найду такого у себя в 4-й версии...
__________________
Felix nihil admirari
Старый 20.04.2010, 05:54   #15  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
375 / 562 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
Цитата:
Сообщение от wojzeh Посмотреть сообщение
что-то я никак не найду такого у себя в 4-й версии...
Потому что он появился только в AX2009
__________________
Sergey Nefedov
Старый 26.08.2010, 14:38   #16  
imir is offline
imir
Участник
 
159 / 161 (6) ++++++
Регистрация: 28.05.2010
Цитата:
Сообщение от EVGL Посмотреть сообщение
1. Сходить в конф. ключи и в разделе "Администрирование" включить инструмент.
2. В любой записи нажать правую кнопку мыши, выделить последний пункт.
3. В появившейся форме свойств записи нажать на кнопку инструмента и запустить стандартный "универсальный изменятель":

Вложение 5663
Русский перевод "Заполнить утилиту" Наверное переводчику был ясен физический смысл этого процесса

А что все-таки она делает? там query какой-то открывается..
Старый 26.08.2010, 14:41   #17  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Задаешь фильтр для отбора нужных записей в форме - потом система показывает все эти записи, подтверждаешь выбор, указываешь новое значение - и все готово
__________________
Ivanhoe as is..
За это сообщение автора поблагодарили: imir (1).
Старый 26.09.2013, 17:47   #18  
wojzeh is offline
wojzeh
Участник
Аватар для wojzeh
Соотечественники
 
674 / 512 (19) +++++++
Регистрация: 27.04.2006
Адрес: Montreal
Цитата:
Сообщение от wojzeh Посмотреть сообщение
Иногда требуется изменить значение многих полей "в одно касание". Здесь я набросал проект, который позволяет это делать. Буду рад, если он окажется полезным в вашей работе.
файл проекта доступен по ссылке
__________________
Felix nihil admirari
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Сохранение значений полей после ошибки ahtoh DAX: Программирование 8 20.06.2008 13:32
Как получить значения полей (modifiedDate, modifiedTime, modifiedBy и др.) при работе с объектами AOT типа Map? LRA DAX: База знаний и проекты 15 02.04.2007 13:37
пересчет полей на форме kitty DAX: Программирование 1 04.10.2005 12:50
Реализация функциональной зависимости полей в Query levsha DAX: Программирование 2 22.12.2003 09:40
очистка полей. простой вопрос Антон Солдатов DAX: Программирование 4 04.04.2003 10:28

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

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

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