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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.11.2012, 13:03   #61  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,436 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Narayana Посмотреть сообщение
м-м-м... э-э-э...
А я попробовал сделать вот такой примерчик, дак, вроде бы, в нем удалось запихнуть вычисления внутрь запроса.
Внутрь запроса?
Внутр цикла вы хотели сказать?
Цитата:
Сообщение от Narayana Посмотреть сообщение
Только почему-то результаты не сохраняются в поле баланса. Наверное какое-нибудь волшебное слово типа update() надо в правильное место поставить?
Update конечно же можно сделать, но при этом обновится значение в БД, а не только в запросе. Если таблица вспомогательная, а не рабочая то всё вроде бы хорошо.
Старый 13.11.2012, 13:07   #62  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,731 / 406 (17) +++++++
Регистрация: 23.03.2006
Цитата:
Сообщение от Narayana Посмотреть сообщение
м-м-м... э-э-э...
А я попробовал сделать вот такой примерчик, дак, вроде бы, в нем удалось запихнуть вычисления внутрь запроса. Только почему-то результаты не сохраняются в поле баланса. Наверное какое-нибудь волшебное слово типа update() надо в правильное место поставить?
вам не удалось поставить вычисление внутрь запроса. вам удалось исполнить запрос, и попытаться вычислить значение в цикле по перебору результата исполненного запроса по каждой выбранной строке. а чтобы сохранить изменения, нужно было выбрать строки "для записи" в запросе и в цикле выполнить update строки и не забыть про транзакцию

упс опередили

Последний раз редактировалось ice; 13.11.2012 в 13:16.
Старый 13.11.2012, 13:10   #63  
Narayana is offline
Narayana
Участник
 
241 / 100 (4) +++++
Регистрация: 05.01.2009
Адрес: Москва
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Внутрь запроса?
Внутр цикла вы хотели сказать?
Да, конечно, внутри цикла.
Кажется, начинаю понимать, что именно вы считали невозможным, - залезть внутрь процедуры именно выполнения самого запроса.
Сорри, детские болезни неустоявшейся лексики ).

Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Update конечно же можно сделать, но при этом обновится значение в БД, а не только в запросе. Если таблица вспомогательная, а не рабочая то всё вроде бы хорошо.
Я уже смирился с тем, чтобы использовать для вычислений не временную, а постоянную таблицу в БД. Можно, наверное, очищать ее перед вычислениями. Особенно, если вычисления делать только по одному сотруднику, который зашел в личный кабинет, на производительность БД никак не должно повлиять.

Только вот, попытка затолкать a.update(); внутрь цикла вызывает ошибку, а если поставить эту штуку после цикла, то говорит, что сначала нужно выбрать запись для обновления... Как быть?!
Старый 13.11.2012, 13:17   #64  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,436 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Narayana Посмотреть сообщение
Только вот, попытка затолкать a.update(); внутрь цикла вызывает ошибку, а если поставить эту штуку после цикла, то говорит, что сначала нужно выбрать запись для обновления... Как быть?!
Нужно выставить флаг
X++:
QueryBuildDatasource.update(true)
и ещё поместить обновление внутрь транзакции
X++:
ttsbegin;
// цикл
ttscommit;
Старый 13.11.2012, 13:20   #65  
Narayana is offline
Narayana
Участник
 
241 / 100 (4) +++++
Регистрация: 05.01.2009
Адрес: Москва
Цитата:
Сообщение от ice Посмотреть сообщение
вам не удалось поставить вычисление внутрь запроса. вам удалось исполнить запрос, и попытаться вычислить значение в цикле по перебору результата исполненного запроса по каждой выбранной строке. а чтобы сохранить изменения, нужно было выбрать строки "для записи" в запросе и в цикле выполнить update строки

упс опередили
Насколько я понимаю, qr.next() в моем случае, это как раз и есть выбор строки, но вызов внутри цикла a.update(); приводит к ошибке
"Невозможно отредактировать запись в EmplCommissionWageEndBalance (EmplCommissionWageEndBalance).
Обновление должно выполняться внутри проводки."

Внутри какой проводки? Ниче не понимаю...
Старый 13.11.2012, 13:21   #66  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,436 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Narayana Посмотреть сообщение
Внутри какой проводки? Ниче не понимаю...
Это так переводчики на русский перевели слово transaction
Старый 13.11.2012, 15:14   #67  
Narayana is offline
Narayana
Участник
 
241 / 100 (4) +++++
Регистрация: 05.01.2009
Адрес: Москва
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Это так переводчики на русский перевели слово transaction
Хорошо...
Допустим, вот этот код делает примерно то, что мне нужно, и сохраняет данные в таблице.

static void Job2(Args _args)
{
Query q;
QueryRun qr;
QueryBuildDatasource qbds1, qbds2;
QueryBuildRange qbr;
EmplCommissionWageEndBalance a;
;
q = new Query();
qbds1 = q.addDataSource(tablenum(EmplCommissionWageEndBalance));
qbds1.update(true);
qr = new QueryRun(q);
ttsbegin;
while(qr.next())
{
a = qr.get(tableNum(EmplCommissionWageEndBalance));
a.EndBalanceMST = a.SumOfAmountMST_In - a.SumOfAmountMST_Out;
a.update();
print "сотр = ", a.EmplId, " сюда = ", a.SumOfAmountMST_In, " отсюда ", a.SumOfAmountMST_Out, " баланс ", a.EndBalanceMST;
pause;
}
ttscommit;
}


А как все это засунуть в АОТ???
Старый 13.11.2012, 15:17   #68  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,731 / 406 (17) +++++++
Регистрация: 23.03.2006
Цитата:
Сообщение от Narayana Посмотреть сообщение

А как все это засунуть в АОТ???
какую часть AOT вы имеете ввиду, тк ваш job уже находится в AOT?
Старый 13.11.2012, 15:24   #69  
Narayana is offline
Narayana
Участник
 
241 / 100 (4) +++++
Регистрация: 05.01.2009
Адрес: Москва
Цитата:
Сообщение от ice Посмотреть сообщение
какую часть AOT вы имеете ввиду, тк ваш job уже находится в AOT?
м-м-м... )

Я имел в виду, если я создам запрос средствами АОТ, а не кода, какой метод нужно перекрыть, чтобы в нем сделать все, что делается в примере в цикле?
Старый 13.11.2012, 15:25   #70  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,436 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Narayana Посмотреть сообщение
А как все это засунуть в АОТ???

Цитата:
Сообщение от Narayana Посмотреть сообщение
Кажется, начинаю понимать, что именно вы считали невозможным
Старый 13.11.2012, 15:28   #71  
Narayana is offline
Narayana
Участник
 
241 / 100 (4) +++++
Регистрация: 05.01.2009
Адрес: Москва
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение



Так все плохо...?
Старый 13.11.2012, 15:35   #72  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,731 / 406 (17) +++++++
Регистрация: 23.03.2006
Цитата:
Сообщение от Narayana Посмотреть сообщение
м-м-м... )

Я имел в виду, если я создам запрос средствами АОТ, а не кода, какой метод нужно перекрыть, чтобы в нем сделать все, что делается в примере в цикле?
никакой
Старый 13.11.2012, 15:36   #73  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
696 / 130 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
Narayana,

То, что вы сделали джобом с запросом, можно сделать без запроса.. и без джоба, кстати )

- перекрываете метод update() на вашей таблице
- пишете в нем (до super()-а) : BalanceMST = AmountMST_In - AmountMST_Out;

Радуетесь жизни.. теперь у вас BalanceMST всегда будет правильный..

Что вы все-таки получить хотите? Если не секрет, конечно..
__________________
Best Regards,
Roman
Старый 13.11.2012, 15:37   #74  
Narayana is offline
Narayana
Участник
 
241 / 100 (4) +++++
Регистрация: 05.01.2009
Адрес: Москва
Цитата:
Сообщение от ice Посмотреть сообщение
никакой
То есть, в сохраненном запросе в АОТ все это сделать невозможно?
Старый 13.11.2012, 15:43   #75  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,494 / 1065 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
За это сообщение автора поблагодарили: Ivanhoe (1).
Старый 13.11.2012, 15:46   #76  
Narayana is offline
Narayana
Участник
 
241 / 100 (4) +++++
Регистрация: 05.01.2009
Адрес: Москва
Цитата:
Сообщение от RVS Посмотреть сообщение
Narayana,

То, что вы сделали джобом с запросом, можно сделать без запроса.. и без джоба, кстати )

- перекрываете метод update() на вашей таблице
- пишете в нем (до super()-а) : BalanceMST = AmountMST_In - AmountMST_Out;

Радуетесь жизни.. теперь у вас BalanceMST всегда будет правильный...
Я так пробовал.
Почему-то никакой реакции.
Сейчас попробую еще раз.

Цитата:
Сообщение от RVS Посмотреть сообщение
Что вы все-таки получить хотите? Если не секрет, конечно..
Вы имеете в виду, в чисто прикладном плане?

В моей системе зарплата сотрудникам за услуги, оказанные клиентам, начисляется как процент от стоимости работ для клиента.

То же самое для представителей компании. Они получают бонус в виде процента от стоимости заказа от направленного к нам на обслуживание клиента. И при этом представители имеют личный кабинет на портале, где могут посмотреть свои начисления, выплаты и баланс взаиморасчетов.

Это, конечно, можно было бы сделать с помощью вычисления баланса прямо в поле в портале, но мне захотелось досконально разобраться, наконец-то, с тонкостями работы с данными. Вот я и использовал этот случай как тренировочный.
Старый 13.11.2012, 15:46   #77  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
696 / 130 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
Цитата:
Сообщение от Narayana Посмотреть сообщение
То есть, в сохраненном запросе в АОТ все это сделать невозможно?
Черт... НЕЕЕЕТ

Скажите, что вы получить хотите. Путь точно есть, не может он не есть.. И этот путь точно не имеет отношения.. к изнасилованию стандартного запроса..
__________________
Best Regards,
Roman
Старый 13.11.2012, 15:51   #78  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
696 / 130 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
Цитата:
Сообщение от Narayana Посмотреть сообщение
В моей системе зарплата сотрудникам за услуги, оказанные клиентам, начисляется как процент от стоимости работ для клиента.

То же самое для представителей компании. Они получают бонус в виде процента от стоимости заказа от направленного к нам на обслуживание клиента. И при этом представители имеют личный кабинет на портале, где могут посмотреть свои начисления, выплаты и баланс взаиморасчетов.
И вся проблема - этот баланс посчитать? Считайте на таблице, как я уже писал. Не может оно не работать
__________________
Best Regards,
Roman
За это сообщение автора поблагодарили: Narayana (1).
Старый 13.11.2012, 15:56   #79  
Narayana is offline
Narayana
Участник
 
241 / 100 (4) +++++
Регистрация: 05.01.2009
Адрес: Москва
Цитата:
Сообщение от RVS Посмотреть сообщение
И вся проблема - этот баланс посчитать? Считайте на таблице, как я уже писал. Не может оно не работать
Ха, работает!
Только я раньше именно в update() пробовал, а нужно еще и в insert() добавить...
Потому как, если только в апдейт, то, чтобы сработало, нужно еще и после создания записи, данные отредактировать.

Не, ничо так.
"...бешеной собаке семь километров не крюк..."

Большое вам человеческое спасибо! ))

Последний раз редактировалось Narayana; 13.11.2012 в 16:09.
Теги
query, архитектура, как правильно

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Обновление поля с определённым типом во всех таблицах. Corel DAX: Программирование 1 20.12.2008 13:37
Достаточно ли изменить дату в таблицах inventTrans, inventTransPosting, VendPackingSlipJour? DmitryS DAX: Программирование 3 18.09.2008 14:37
Проверки заполненных значений в связанных таблицах. miklenew DAX: База знаний и проекты 11 25.12.2007 14:40
Как не использовать relations на таблицах demetra DAX: Программирование 13 14.07.2006 11:00
Осторожнее с CTRL+S на таблицах mit DAX: Администрирование 7 25.07.2005 19:09

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

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

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