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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.03.2005, 08:54   #1  
bagyr is offline
bagyr
Участник
 
74 / 10 (1) +
Регистрация: 15.02.2005
Адрес: Томск
Angry Не даёт сделать 2 вставки подряд
Здраствуйте!
PHP код:
MyTable t1t2;
;
while 
select QuantityCust_Price from t1
{
// суммируем произведение
}
// присваиваем значения в поля t2
t2.insert();
// присваиваем другие значения в поля t2
t2.insert(); 
На второй вставке говорит: joined-курсор был использован в другом операторе SELECT
Старый 01.03.2005, 10:13   #2  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Хм. Если это одна и таже запись, то тогда позволю себе напомнить о чудесном операторе "update".
Если же разные, то рекомендую почитать BP.
Переменную надо очистить перед повторным использованием:
t2.insert();
..........
t2.clear();
t2.initValue();
t2.Что-то там = t1.Что то тут;
t2.insert();

И, кстати, не помешает все это делать в рамках транзакции, Вы не находите?

С Уважением,
Георгий.
Старый 01.03.2005, 11:45   #3  
bagyr is offline
bagyr
Участник
 
74 / 10 (1) +
Регистрация: 15.02.2005
Адрес: Томск
George Nordic:
Транзакция - это само собой разумеещееся.
Предложенный Вами вариант не изменил результат, то же сообщение на второй вставке. Но если я убираю цикл, то обе вставки проходят на ура.
Старый 01.03.2005, 11:53   #4  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Выложи полный код. Да, и делай clear и перед ПЕРВОЙ вставкой тоже!

С Уважением,
Георгий.
Старый 01.03.2005, 12:38   #5  
bagyr is offline
bagyr
Участник
 
74 / 10 (1) +
Регистрация: 15.02.2005
Адрес: Томск
PHP код:
void clicked()
{
    
// 3 вида сложности полуфабрикатов:
    // 0 - полуфабрикат производится только из сырья
    // 1 - полуфабрикат производится из сырья и самого себя
    // 2 - полуфабрикат производится из сырья и/или самого себя и/или других полуфабрикатов,
    //      участвует в производсве других полуфабрикатов, в т.ч. из которых сделан полуфабрикат

    // эта процедура расчёта полуфабрикатов сложности 0

    
Doc_kmp_prod dkp;
    
Kmp_prod kp;
    
Cust_Dep_Tmp cdt;
    
Cust_Prime_Price cpp1cpp2;
    
Cust_Half_Tmp cht;
    
real rsk;
    
str 10 s1;
    
RGUID r1;
    
int b;
    ;
    
super();

    
// расчёт себестоимости полуфабрикатов

    // создание расходной части
    
while select ID from cdt
        group by ID
    join Id_Type_Document from dkp
        group by Id_Type_Document
        where dkp
.Id_Org == cdt.RGUID
            
&& dkp.Id_Type_Document == 8
            
&& dkp.Date_Doc >= str2date("01/10/2004"123)
            && 
dkp.Date_Doc <= str2date("31/10/2004"123)
    
join Id_Productionsum(Kol), Id_Prod_Part from kp
        group by Id_Production
Id_Prod_Part
        where kp
.Id_Doc == dkp.Id_Doc
    join Cust_Price from cpp1
        group by Cust_Price
        where cpp1
.Deport == cdt.ID
            
&& cpp1.Id_stuff == kp.Id_Production
    join Half from cht
        group by Half
        where cht
.Half == kp.Id_Prod_Part
    
{
        
cpp2.Deport cdt.ID;
        
cpp2.Calc_Month str2date("01/10/2004"123);
        
cpp2.Id_Production kp.Id_Prod_Part;
        
cpp2.Id_stuff kp.Id_Production;
        
cpp2.Quantity kp.Kol;
        
cpp2.Prime_price cpp1.Cust_price;
        
cpp2.Cust_price cpp1.Cust_price;
        
cpp2.insert();
    }

    
// создание приходной части
    
while
        
select ID from cdt
            group by ID
        join Id_Type_Document from dkp
            group by Id_Type_document
            where dkp
.Org_Id_Org == cdt.RGUID
                
&& dkp.Id_Type_Document == 7
                
&& dkp.Date_Doc >= str2date("01/10/2004"123)
                && 
dkp.Date_Doc <= str2date("31/10/2004"123)
        
join Id_Productionsum(Kolfrom kp
            group by Id_Production
            where kp
.Id_Doc == dkp.Id_Doc
        join Half from cht
            group by Half
            where cht
.Half == kp.Id_Production
    
{
        
// вычислили полуфабрикат, перебираем и суммируем сырьё
        
0;
        
0;
        
s1 cdt.ID;
        
r1 kp.Id_Production;
        
kp.Kol;
        while 
select QuantityCust_price from cpp1
            where cpp1
.Deport == s1
                
&& cpp1.Calc_Month == str2date("01/10/2004"123)
                && 
cpp1.Id_Production == r1
                
&& cpp1.Id_stuff != 0
        
{
            
cpp1.Quantity cpp1.Cust_price;
            
cpp1.Quantity;
        }
        
cpp2.clear();
        
cpp2.initValue();
        
cpp2.Deport s1;
        
cpp2.Calc_Month str2date("01/10/2004"123);
        
cpp2.Id_Production r1;
        
cpp2.Id_stuff 0;
        
cpp2.Quantity k;
        if (
s==0)
        {
            
cpp2.Prime_price 0;
            
cpp2.Cust_price 0;
        }
        else
        {
            
cpp2.Prime_price r/s;
            
cpp2.Cust_price r/s;
        }
        
cpp2.insert();

        
cpp2.clear();
        
cpp2.initValue();
        
cpp2.Deport s1;
        
cpp2.Calc_Month str2date("01/10/2004"123);
        
cpp2.Id_Production 0;
        
cpp2.Id_stuff r1;
        
cpp2.Quantity k;
        if (
s==0)
        {
            
cpp2.Prime_price 0;
            
cpp2.Cust_price 0;
        }
        else
        {
            
cpp2.Prime_price r/s;
            
cpp2.Cust_price r/s;
        }
        
cpp2.insert(); // после выполнения этого шага возникает ошибка
    
}

Старый 01.03.2005, 12:52   #6  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Ничего удивительного - возможно, у Вас возникает 2 одинаковых записи. Есть Primary Index?
Есть ли уникальность по полю Deport?

С Уважением,
Георгий.
Старый 01.03.2005, 12:58   #7  
bagyr is offline
bagyr
Участник
 
74 / 10 (1) +
Регистрация: 15.02.2005
Адрес: Томск
Есть сложный index: Calc_Month, Deport, Id_Production, Id_Stuff. Но дубликаты разрешены.
Сейчас попробовал убрать вторую вставку, результат тот же, но уже на предыдущей вставке.
Старый 01.03.2005, 13:07   #8  
bagyr is offline
bagyr
Участник
 
74 / 10 (1) +
Регистрация: 15.02.2005
Адрес: Томск
Нда, дело ещё непонятнее... Выдаёт ту же ошибку вообще без вставок
Старый 01.03.2005, 13:09   #9  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Почисти таблицу.
Старый 01.03.2005, 13:26   #10  
bagyr is offline
bagyr
Участник
 
74 / 10 (1) +
Регистрация: 15.02.2005
Адрес: Томск
Вообще ничего не понимаю...
Перенёс всё в отдельный метод, начиная с "// создание приходной части", и всё нормально заработало.
Старый 01.03.2005, 13:40   #11  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Бывает, когда строишь/меняешь индексы, при этом у тебя уже есть данные в таблицах...

Ну, в бубен не забывай бить.

С Уважением,
Георгий.
Старый 01.03.2005, 14:37   #12  
bagyr is offline
bagyr
Участник
 
74 / 10 (1) +
Регистрация: 15.02.2005
Адрес: Томск
Вставил перед "// создание приходной части" :
PHP код:
cdt.clear();
dkp.clear();
kp.clear();
cpp1.clear();
cht.clear();
cpp2.clear(); 
и всё заработало в одном методе
Похоже курсор из первого "while" ещё жив оставался.

Без бубна никак.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как сделать фильтр по группе пользователей? Zabr DAX: Программирование 12 08.04.2009 11:40
Заумный отчет по ОС, как сделать? Бриллиантик DAX: Программирование 13 09.07.2008 16:36
getCellValue не даёт нужного значения AvrDen DAX: Программирование 2 12.01.2006 14:51
Как лучше сделать? Smith DAX: Программирование 7 12.10.2004 13:57
дизайн отчета (как сделать его с разделителями между столбцами?) puz DAX: Программирование 7 02.09.2003 08:50

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

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

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