08.10.2021, 17:20 | #1 |
Сенбернар
|
Хочу странного. В Аксе
Всего-то навсего:
select count(zzz) from ( select count(recid) as 'zzz' from bankAccountTable where bankAccountTable.PaymOrderNumSeqId_W = 'ПП123' group by dataAreaId ) XXX Цель - узнать кол-во компаний в Аксе, в которых дублируется наименование номерной серии, на основании которой нумеруются Платежные поручения. Передается конкретное имя номерной серии, в данном случае - "ПП123". Вопрос: а как бы так в Аксапте? DAX2009, да.
__________________
Best Regards, Roman |
|
08.10.2021, 18:44 | #2 |
Участник
|
А обязательно одним запросом? Операция на вид разовая, т.е. скорость вроде сильно не нужна.
Перебрать компании да посчитать |
|
08.10.2021, 19:59 | #3 |
Сенбернар
|
Очень желательно. Операция не разовая, идет копирование (поштучно) банковских счетов из компании в компанию, операция выполняется для каждого копируемого счета...
Кстати, там с SQL-запросе (неявно) присутствует еще и crosscompany )
__________________
Best Regards, Roman Последний раз редактировалось RVS; 08.10.2021 в 20:02. |
|
08.10.2021, 20:37 | #4 |
Участник
|
Сначала сделать вьюшку для
X++: select PaymOrderNumSeqId_W, dataAreaId, count(recid) as 'zzz' from bankAccountTable group by dataAreaId, PaymOrderNumSeqId_W X++: select count(zzz) where PaymOrderNumSeqId_W = 'ПП123' |
|
|
За это сообщение автора поблагодарили: RVS (3). |
08.10.2021, 20:58 | #5 |
Сенбернар
|
Спасибо за наводку )
Сделал, проверил. Вьюшка, насколько я понимаю, работает в пределах текущей компании Аксы (поправьте, коли заблуждаюсь). А нужен именно crosscompany запрос. Смысл этой всей кото-Васии примерно такой: если код номерной серии задействован в нескольких Банковских счетах в одной компании Аксы - это не криминал. Если такой же код задействован Банковских счетах в двух или более компаниях Аксы - вот это неприятно.
__________________
Best Regards, Roman Последний раз редактировалось RVS; 08.10.2021 в 21:13. |
|
08.10.2021, 21:48 | #6 |
Участник
|
|
|
08.10.2021, 21:54 | #7 |
Участник
|
Ха. Не тут то было. Вот так оно работает
https://docs.microsoft.com/ru-ru/dyn...ries-for-views |
|
08.10.2021, 22:30 | #8 |
Сенбернар
|
Все действительно так, как описано (свойство AllowCrossCompany - не работает), и все понятно. Кроме вот этого:
"To return cross-company results from a view, you need to use the crossCompany keyword on the select statement that reads from the view" Вот не пойму - куда этот select statement воткнуть-то? (((
__________________
Best Regards, Roman |
|
08.10.2021, 22:46 | #9 |
Участник
|
Видимо речь про тот select, который from View
Скорее всего включение AllowCrossCompany добавляет в выборку информацию из всех компаний, а вот какие из этих компаний будут отданы при конкретном запросе к этой выборке решится при попытке эту выборку получить. Тут же и права конкретного пользователя на доступ к компаниям будут учтены |
|
10.10.2021, 02:20 | #10 |
Banned
|
Поскольку по работе сейчас много делаю на прямом SQL то и первая мысль
зачем мучиться с AOT когда можно прямой T-SQL запустить. Скопипастил из интернета код ниже. X++: public static server void main(Args _args) { Connection connection; Statement statement; str query; Resultset resultSet; ; // create connection object connection = new Connection(); // create statement statement = connection.createStatement(); // Set the SQL statement query = 'select name from CustTable'; // assert SQL statement execute permission new SqlStatementExecutePermission(query).assert(); // when the query returns result, // loop all results for processing //BP Deviation documented resultSet = statement.executeQuery(query); while(resultSet.next()) { // do something with the result info(resultSet.getString(1)); } // limit the scope of the assert call CodeAccessPermission::revertAssert(); } |
|
|
За это сообщение автора поблагодарили: Logger (1). |
10.10.2021, 08:19 | #11 |
Сенбернар
|
Угу. В который Акса услужливо добавит условие where dataAreaId = 'ZZZ'.
Где ZZZ - компания, из которой запускаем запрос. Обойти это я не умею. Еще раз - хочется запрос по всем компаниям, crosscompany
__________________
Best Regards, Roman |
|
10.10.2021, 10:12 | #12 |
Участник
|
Куда добавит? В текст SQL запроса, который вы написали вручную? Нет, не добавит.
Используя прямой запрос к БД, вы берёте на себя всю ответственность за результат. Поэтому в общем случае не рекомендуется использовать этот механизм. |
|
|
За это сообщение автора поблагодарили: RVS (3). |
10.10.2021, 12:17 | #13 |
Сенбернар
|
Цитата:
Все работает, спасибо.
__________________
Best Regards, Roman |
|
11.10.2021, 16:59 | #14 |
Участник
|
ещё вариант
while select count(recid) from bankAccountTable where bankAccountTable.PaymOrderNumSeqId_W = 'ПП123' group by dataAreaId { tmptable.count = bankAccountTable.recId; tmptable.insert(); } select count(recid) from tmptable; |
|
|
|