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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.06.2003, 08:27   #1  
edd is offline
edd
Участник
 
81 / 10 (1) +
Регистрация: 20.01.2003
? Как ускорить изменение большого количества записей?
Поставили задачу помечать с возможностью фильтрации таких контрагентов, по которым можно провести операцию сопоставления оплаты задолжености.

Сперва решили сделать дисплейный метод на таблицы:
контрагентов видно, но нельзя их отфильтровать.

Тогда добавили поле (типа NoYes) и в формах VendTable/CustTable сделали метод, который обновлял это поле средсвами Аксапты... ПРОБЛЕМА во времени работы.

Решили обмануть систему и переписали метод так:
void Sopostav()
{
Connection C = new Connection();
Statement stmt = c.createStatement();
str ss = " and DataAreaId = \'" + curExt() + "\'";
str SQL0 = "UPDATE VENDTABLE SET Na_Sopostav = 0 where Na_Sopostav = 1" + ss;
str SQL = "UPDATE VENDTABLE SET Na_Sopostav = 1 WHERE accountnum = ANY (" +
"SELECT accountnum FROM VENDTRANSOPEN WHERE amountmst > 0 AND accountnum = ANY (" +
"SELECT accountnum FROM VENDTRANSOPEN WHERE amountmst < 0" + ss + ")" + ss + ")" + ss;
;
stmt.executeUpdate(SQL0);
stmt.executeUpdate(SQL);
}

Но нехочется обманывать систему, что можете посоветовать.
Старый 02.06.2003, 11:35   #2  
kalex is offline
kalex
Участник
 
132 / 20 (1) +++
Регистрация: 18.05.2002
Адрес: Москва
Может поставить задачу по другому? Сделать отдельную формочку, где выводятся контрагенты, по которым можно провести сопоставление.
Старый 02.06.2003, 11:46   #3  
LTA is offline
LTA
Участник
 
94 / 10 (1) +
Регистрация: 27.01.2003
В Аксапте 3.0 появилось групповое изменение записей UPDATE_RECORDSET, на подобии операции DELETE_FROM в 2.5.

А нельзя например запускать в пакетном режиме, раз в 30 минут .. эту процедуру на сервере? Сколько у вас контрагентов в таблице?
Старый 02.06.2003, 12:16   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Re: Как ускорить изменение большого количества записей?
Цитата:
Изначально опубликовано edd
ПРОБЛЕМА во времени работы.
Если проблема во времени работы, то вопрос поставлен неправильно.
В вопросе должно быть сказано о планах запросов, статистике на сервере, загруженности сети, параметрах сервера и клиента.

Пока же можно сказать, что вы редкостные извращенцы, если для нормальной Аксаптовской задачи вам пришлось использовать COM-объект Connection.

Совет пока один - отследите чем занимается на сервере ваш запрос. Вполне возможно, что где то прячется банальный table scan, поскольку индекса по amountmst, скорее всего, нет.
Старый 03.06.2003, 10:23   #5  
LTA is offline
LTA
Участник
 
94 / 10 (1) +
Регистрация: 27.01.2003
Вопрос к mazzy, если они извращенцы для чего они в Аксапте оставили Connection для извращенцов, может те извращенцы, кто не дописал нормального группового update. Если пойти дальше и нормальной документации, на объекты приложения.
Старый 03.06.2003, 11:04   #6  
edd is offline
edd
Участник
 
81 / 10 (1) +
Регистрация: 20.01.2003
Решил я оставить этот "некорректный" метод, поскольку вижу ряд приемуществ от его использования:
1. Скорость, в разы (возможно десятки раз).
2. Не ставится дата, время и автор модификации, что В ДАННОМ случае есть ПЛЮС.
Старый 03.06.2003, 12:33   #7  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
В Аксапте 3.0 появилось групповое изменение записей UPDATE_RECORDSET, на подобии операции DELETE_FROM в 2.5.
Если посмотреть profiler (то который от SQL Server'а) то можно заметить,что этот update_recordset работает через временную таблицу в связи с чем работа через Connection будет все-таки побыстрее.
Старый 03.06.2003, 13:04   #8  
LTA is offline
LTA
Участник
 
94 / 10 (1) +
Регистрация: 27.01.2003
Андре, извини а ты не мог бы опубликовать SQL запросы которые генерирует операция update_recordset, очень интересно про временные таблицы
Старый 03.06.2003, 13:25   #9  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Про update_recordset честно говоря уже не помню, но вот про insert_recordset:

Делаем job:

PHP код:
static void Job2(Args _args

Invent invent
Invent invent2

INSERT_RECORDSET invent(ItemIdItemName
SELECT ItemIdItemName FROM invent2 
WHERE invent2
.ItemId == 'Мяч'

Запускаем job и смотрим profiler. При этом мы видим, что на MS SQL приходят такие трик команды:

1. SELECT ... INTO <временная таблица>
2. INSERT INTO INVENT SELECT FROM <временная таблица>
3. DROP <временная таблица>

Думаю, что с Oracle ситуация аналогичная.
Старый 03.06.2003, 14:09   #10  
LTA is offline
LTA
Участник
 
94 / 10 (1) +
Регистрация: 27.01.2003
Спасиб, будем знать
Интересно для чего они так сделали?
Старый 03.06.2003, 14:15   #11  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Про update_recordset честно говоря уже не помню
Вообще-то там генерится "честный" UPDATE
Старый 03.06.2003, 15:37   #12  
edd is offline
edd
Участник
 
81 / 10 (1) +
Регистрация: 20.01.2003
А что делать, если верия 2.5?
Старый 03.06.2003, 15:59   #13  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,907 / 5717 (196) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Может я несколько не врубаюсь в тему, но зачем вообще было добавлять новые поля в custTable/VendTable? Не проще ли было заджойнить эти таблицы с custTrans/vendTrans с помощю exists join, по условию AmountMST<>SettleAmountMST...
Правда - на оркале exists join не очень торопливо обрабатывается, но там это лечится недефолтными настройками сервера...
Старый 03.06.2003, 16:04   #14  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Изначально опубликовано edd
Решил я оставить этот "некорректный" метод, поскольку вижу ряд приемуществ от его использования:
1. Скорость, в разы (возможно десятки раз).
2. Не ставится дата, время и автор модификации, что В ДАННОМ случае есть ПЛЮС.
Понятно. Спасибо
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
ListView глюк при выводе большого количества столбиков Hydrargyrum DAX: Программирование 3 30.09.2008 06:34
вывод количества записей в таблице на web форме и указание текущей страницы таблицы bambuk1960 DAX: Программирование 1 06.07.2006 13:27
Учет большого количества малоценных ОС в Аксапте Alex_K DAX: Функционал 10 26.06.2003 18:32
Глюки с созданием большого количества строк. DDA DAX: Программирование 3 06.03.2003 12:36
Изменение свойств Grid с помощью метода источника данных displayOption Anton Sk. DAX: База знаний и проекты 0 03.12.2001 18:08
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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