Показать сообщение отдельно
Старый 13.10.2016, 20:25   #11  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,275 / 3476 (122) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от NetBus Посмотреть сообщение
Есть задача выбрать из таблицы записи очень сложным запросом с ветвистой логикой, а по выбранным записям делать всевозможные преобразования. Хочется инкапсулировать процедуру поиска строк и потом использовать во всевозможных преобразованиях.
Цитата:
Сообщение от mazzy Посмотреть сообщение
Оп! Категорически не согласен!
вопрос опять о "произвольных запросах" и о сферических конях в вакууме типа "выбрать из таблицы". (из одной, карл!)
для Аксапты, для прикладной программы уровня предприятия "произвольные запросы" - предельно редкое явление.
встречающееся на уровне программирования ядра и функционала администрирования.

для Аксапты характерно очень прикладное программирование.
для прикладного программирования "работать напрямую с таблицей" - антипаттерн.
в прикладной программе типа аксапты обычно работают с набором взаимосвязанных таблиц!!!!

работать с набором взаимосвязанных таблиц напрямую? нонсенс!
Цитата:
Сообщение от mazzy Посмотреть сообщение
особенно, если в наборе есть таблицы, для которых включен Valid Time State
https://msdn.microsoft.com/en-us/library/gg861781.aspx
Ну давайте тогда уж разберем кто чего понял.

Итак, задача 1
Цитата:
Сообщение от NetBus Посмотреть сообщение
Есть задача выбрать из таблицы записи очень сложным запросом
Из этой задачи следует, что нужно выбрать из одной (да-да, из одной!) таблицы.
В этом случае класс RecordReferenceList_RU очень хорошо помогает. Про прикладное программирование - хорошее замечание. Но... вопрос не ставился как "работать ли напрямую с таблицей или использовать промежуточный класс?". Автор как раз хотел использовать класс, а я ему советовал так не делать. Тут я был неправ, но хочу сказать, что без модификаций класса RecordReferenceList_RU его использовать будет не очень удобно - тогда действительно придется связываться с номерными сериями. Резюме: класс нужен, но не совсем такой, какой есть в штатной поставке.

По поводу набора таблиц. Начиная с АХ 2012 и выше - надо будет помнить, что "простейший" справочник типа клиентов / номенклатуры и т.д. состоит не из одной таблицы, а из набора таблиц, связанных друг с другом и в данном случае ссылкой на одну запись в одной таблице можно не обойтись. Однако, автор указывает, что версия как раз АХ 2009, в которой еще многие справочники состоят из одной таблицы и поэтому решение предлагается именно для этой версии. Для версии АХ 2012 оно (решение) было бы другим. Соответственно таблиц, для которых включен Valid Time State в АХ 2009 нет и об этом в АХ 2009 не надо заморачиваться.

Теперь задача 2
Цитата:
Сообщение от NetBus Посмотреть сообщение
а по выбранным записям делать всевозможные преобразования. Хочется инкапсулировать процедуру поиска строк и потом использовать во всевозможных преобразованиях.
А вот тут уже RecordReferenceList_RU помощь в инкапсуляции не даст. Потому что фраза "всевозможные преобразования" предполагает разные преобразования разных записей. А это значит, что их надо как-то уже снова выбирать и анализировать. И тогда надо действительно писать методы find*, выносить сами select-ы на таблицы и / или в "приближенные к ним" классы.

Т.о. если Вам надо:
- выбрать произвольным образом записи из ОДНОЙ таблицы для ИСКЛЮЧИТЕЛЬНО целей дальнейшей фильтрации и / или отображения по ним - то можно использовать RecordReferenceList_RU
- выбрать произвольным образом записи из одной или нескольких таблиц и в последующем их как-то обрабатывать "всевозможными преобразованиями", то нужно писать find-ы и делать логику в семействе классов (т.е. создавать ряд классов, занимающихся обработкой и поиском; выносить общий код в классы-родители и т.д.)
__________________
Возможно сделать все. Вопрос времени