|
|
|
|
#1 |
|
Участник
|
Попробуйте через QueryRun или через DictTable(tableId).makeRecord Получить значение поля по TableId, FieldId, RecId
|
|
|
|
|
#2 |
|
Мрачный тип
|
S.Kuskov, спасибо, но мне не проблема через Dict-классы играться с данными произвольных таблиц и пользоваться произвольными вызовами произвольных методов таблиц/объектов
![]() Проблем для данного случая две - первая состоит в кодах таблиц/полей, которые мы в таких действиях используем и которые могут отличаться в разработческом и рабочем приложениях. Используемые ранее конструкции в виде X++: tablenum(MyTempTable)X++: fieldnum(MyTempTable, MyField)Хардкодить коды таблиц/полей- не вариант. Единственный способ замены tablenum()/fieldnum() вижу только в поиске в AOT по имени соответствующих узлов и сбор оттуда ID-шников. Вторая проблема - ухудшение читабельность кода и затруднение отладки при работе с данными через Dict-классы и Common. Не спорю, работа с данными через Dict-классы и Common - вещь местами хорошая, сам зачастую пользую ее с удовольствием, т.к. позволяет в некоторых случаях радикально оптимизировать объемы кода в случаях, когда это используется при создании каких-либо широко используемых фреймворков. Положительный эффект от таких разработок с лихвой покрывает эту проблему ![]() Но в данном случае - не совсем в коня овес. Времянка, как правило, лепится под определенную задачу, и усложнять код в ней через Common и коды полей особого смысла не вижу - разве что объем накапливаемых во времянке данных дает реальную просадку быстродействия и только перевод на TempDB дает кратное ускорение
__________________
Мы летаем, кружимся, нагоняем ужасы ... Последний раз редактировалось TasmanianDevil; 18.01.2019 в 07:14. |
|
|
|
|
#3 |
|
Участник
|
Цитата:
Цитата:
fieldnum(MyTempTable, MyField) - не самая удобная конструкция ![]() Ром, опубликуй, наконец. Ты сделал реально круто! Заодно и отрефакторишь
|
|
|
|
|
#4 |
|
Мрачный тип
|
А что еще у нас есть для решения задачи поиска ID таблицы и ее полей по известным имени и типу искомого объекта ? Таблица UtilIdElements? Можно и ее ...
Только вот в обоих случаях для поиска ID придется передавать строчные константы наименования объектов и ошибки в них придется ловить только в run-time. Не кошерно как-то это все по сравнению с халяльными tablenum() /fieldnum(), которых мы лишаемся из-за использования в названии таблицы символа #, и в которых компилятор сразу нас мордой тычет в ошибки, если что не так. Предложенная Logger'ом идея работы через Map в AOT как-то ближе
__________________
Мы летаем, кружимся, нагоняем ужасы ... |
|
|
|
|
#5 |
|
Участник
|
Цитата:
Цитата:
fieldstr если же речь идет о таблицах с первым символом # то можно использовать таблицу SqlDictionary или Dictionary.TableCnt2Id() treeNode - вполне себе способ. но это НЕ единственный способ. ![]() а для работы с DictTable, вообще говоря, достаточно ID таблицы. |
|
|
|
|
#6 |
|
Мрачный тип
|
Она и идет про такие таблицы с самого начала и от tablestr()/fieldstr() с ними пользы не больше чем от стеклянной бутылки при забивании гвоздей.
Вариант, согласен. Минусы все те же - искать ID таблицы/полей придется по имени, передаваемому строковой константой со всеми сопутствующими радостями ловли ошибки в run-tume. Может все-таки tableName2Id() ? Спасибо, кэп
__________________
Мы летаем, кружимся, нагоняем ужасы ... Последний раз редактировалось TasmanianDevil; 21.01.2019 в 05:50. |
|
|
| Теги |
| dispose, inventsumdelta, ledgerbalancestransdelta, tempdb |
|
|
|