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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.06.2006, 11:31   #1  
Vitaly_K is offline
Vitaly_K
Участник
 
34 / 10 (1) +
Регистрация: 16.09.2004
Адрес: Москва
? Хочу поделится
Привет всем !

Не знаю обсуждалось ли такая ситуация раньше, но признаться был удивлен ею!

На днях случайно столкнулся с такой проблемой!

В системе 1 пользователь создал новый заказ (salesTable) и больше ничего с ним не делал и не обновлял форму с заказами.
2-й пользователь у себя обработал этот же заказ.
Через какое-то время 1-ый пользователь решил удалить у себя этот заказ.Нажал крестик удаления и как ни странно удалил его, хотя обработанный заказ нельзя удалить.
Решил протестировать эту ситуацию и действительно оказалось, что возможно таким образом удалить заказ.

Проблему решил так: при удалении заказа, сначала обновлять источник данных (salestable_ds)

Но все таки очень странно, почему так произошло. Получается заказ удаляется из формы,а не из базы данных???????
Старый 16.06.2006, 11:37   #2  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
А что тут странного??
Заказ - это черновик. Главное - накладные. Заказ можно удалить. Накладные - только сторнировать. Заказ, в зависимости от настроек, или удаляется совсем, или переходит в статус "Удаленный".

С Уважением,
Георгий
Старый 16.06.2006, 11:46   #3  
Vitaly_K is offline
Vitaly_K
Участник
 
34 / 10 (1) +
Регистрация: 16.09.2004
Адрес: Москва
Дело в том, что у нас функционал отличается от стандартного, и если на заказе стоит определенный статус, то его никак нельзя удалить в нашей системе, а при таком раскладе получается, что можно......
Старый 16.06.2006, 11:59   #4  
KMV is offline
KMV
Участник
 
201 / 25 (1) +++
Регистрация: 11.10.2002
Адрес: Москва
И этот статус при удалении проверяется на DataSource формы?
Старый 16.06.2006, 12:01   #5  
simply2double is offline
simply2double
Участник
Аватар для simply2double
 
556 / 19 (2) ++
Регистрация: 08.09.2004
Адрес: alfa cen
Цитата:
Сообщение от George Nordic
А что тут странного??
Заказ - это черновик
...
Скорее не черновик... а некая папочка, объединяющая разнородные документики по одной теме... в частности по операции с клиентом. Плюс набор лекал, по которым можно эти самые документики быстро создавать.

Существует мнение, что заказы после проведения накладных надо удалять. Такой подход нам даже рекомендовали консультатнты из CITP. Единственное членораздельное обоснование, которое я слышал, этого уменьшение числа записей таблиц SalesTable и SalesLine... и как следствие уменьшение размера БД. Плата за это - свалка из накладных... счетов... фактур.. и прочих документов. А уж если использовать при создании заказов/закупок механизмы Intercompany концы вообще найти невозможно...
Старый 16.06.2006, 12:04   #6  
simply2double is offline
simply2double
Участник
Аватар для simply2double
 
556 / 19 (2) ++
Регистрация: 08.09.2004
Адрес: alfa cen
Цитата:
Сообщение от Vitaly_K
Дело в том, что у нас функционал отличается от стандартного, и если на заказе стоит определенный статус, то его никак нельзя удалить в нашей системе, а при таком раскладе получается, что можно......
Значит такой у вас функционал ))))

PS Добавь в таблицу SalesTableDelete поле, к примеру DeletedUserId, в которое пиши UserId удалившего заказ...
Примерно так:

Код:
// таблица SalesTableDelete
void initFromSalesTable(SalesTable _salesTable)
{
    this.salesId        = _salesTable.salesId;
    this.salesName      = _salesTable.salesName;
    this.custAccount    = _salesTable.custAccount;
    this.invoiceAccount = _salesTable.invoiceAccount;
    this.salesType      = _salesTable.salesType;
    this.projId         = _salesTable.projId;
    //вот он красавчик-->
    this.DeletedUserId  = CurUserId ( );
    //<--

    this.salesTable     = [_salesTable];
}

потом показательно выпори удалившего... и поверь больше ни одного заказа удалено не будет ))))

Последний раз редактировалось simply2double; 16.06.2006 в 12:11.
Старый 16.06.2006, 13:14   #7  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,233 / 974 (37) +++++++
Регистрация: 03.04.2002
Цитата:
Сообщение от simply2double
PS Добавь в таблицу SalesTableDelete поле, к примеру DeletedUserId, в которое пиши UserId удалившего заказ...
2Vitaly_K: Не слушайте Вы его, есть Администрирование-Настройки-Журнал базы данных
__________________
Isn't it nice when things just work?
Старый 19.06.2006, 09:56   #8  
simply2double is offline
simply2double
Участник
Аватар для simply2double
 
556 / 19 (2) ++
Регистрация: 08.09.2004
Адрес: alfa cen
Цитата:
Сообщение от macklakov
2Vitaly_K: Не слушайте Вы его, есть Администрирование-Настройки-Журнал базы данных
Ну по большому счету, в данном случае достаточно просто в свойствах таблицы SalesTableDelete включить свойства CreatedBy, CreatedDate, что бы видеть кто и когда грохнул заказ. И журналирование здесь совершенно необязательно, ибо это и есть почти журнал. Но ведь ветка называется ПРОГРАММИРОВАНИЕ.. вот и хотелось попрограммировать ))))

Последний раз редактировалось simply2double; 19.06.2006 в 10:14.
Старый 19.06.2006, 16:23   #9  
Vitaly_K is offline
Vitaly_K
Участник
 
34 / 10 (1) +
Регистрация: 16.09.2004
Адрес: Москва
Извиняюсь, что отсутствовал на форуме

Сообщение от KVM
И этот статус при удалении проверяется на DataSource формы?

Вот именно, что хоть функционал у нас переписан, но delete вызывается из DataSource формы думаю также как и у всех. просто заказ не удаляется с определенным статусом,а тут на тебе казус.
Решение я нашел просто - перед методом super() делаю salesTable_ds.reread().....Но ведь это не правильно, когда если не обновил бы форму, то возможно удалить заказ.



Сообщение от simply2double
PS Добавь в таблицу SalesTableDelete поле, к примеру DeletedUserId, в которое пиши UserId удалившего заказ...

Ну это мне совсем не надо, все логи ведутся в журнале БД
Старый 19.06.2006, 17:03   #10  
KMV is offline
KMV
Участник
 
201 / 25 (1) +++
Регистрация: 11.10.2002
Адрес: Москва
Можно тогда поподробнее как реализована проверка этого статуса перед удалением?
Старый 19.06.2006, 17:11   #11  
simply2double is offline
simply2double
Участник
Аватар для simply2double
 
556 / 19 (2) ++
Регистрация: 08.09.2004
Адрес: alfa cen
Цитата:
Сообщение от Vitaly_K
Сообщение от simply2double
PS Добавь в таблицу SalesTableDelete поле, к примеру DeletedUserId, в которое пиши UserId удалившего заказ...

Ну это мне совсем не надо, все логи ведутся в журнале БД
Интересно каков размер этих самых логов.. если они все ведутся
Старый 20.06.2006, 09:53   #12  
Vitaly_K is offline
Vitaly_K
Участник
 
34 / 10 (1) +
Регистрация: 16.09.2004
Адрес: Москва
Сообщение от KVM
Можно тогда поподробнее как реализована проверка этого статуса перед удалением?

X++:
void  delete()
{
    SalesTable            deleteSalesTable;
    SH_DialogReason       sh_DialogReason;
    SH_ReasonCode              sh_ReasonCode;
    ;
    salesTable_ds.reRead();// то что я вставил

    if (salesTable.checkUpdate())
    {
        deleteSalesTable.data(SalesTable);

   
        if (salesTableType)
        {
            salesTableType.sh_setReason(sh_ReasonCode);
            salesTableType.formMethodDataSourceDelete(element, salesTable_ds);
        }

        super();
        if(deleteSalesTable.RecId)
        {
            SalesTable.sh_transferTo( SH_ActionType::Delete, deleteSalesTable);
        }
    }
}
Старый 20.06.2006, 10:02   #13  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
пожалуйста, используйте тег xpp, чтобы выделить код.
В этом случае форум не будет создавать смайлики, а текст программы будет отображен с подсвеченным синтаксисом и не будет переноситься в случайных местах. Кроме того, сохранятся отступы

например, введенный вами текст
[xpp]while select LedgerTable
where LedgerTable.Accountnum == '01.01'[/xpp]

будет отображен форумом
X++:
while select LedgerTable
    where LedgerTable.Accountnum == '01.01'
__________________
полезное на axForum, github, vk, coub.
Старый 20.06.2006, 12:21   #14  
Vitaly_K is offline
Vitaly_K
Участник
 
34 / 10 (1) +
Регистрация: 16.09.2004
Адрес: Москва
ок, учту
Старый 20.06.2006, 16:55   #15  
wb is offline
wb
Участник
 
86 / 16 (1) ++
Регистрация: 26.01.2004
Адрес: Краснодар
Цитата:
Сообщение от Vitaly_K
Ну это мне совсем не надо, все логи ведутся в журнале БД
Позвольте поитересоваться,
а как Вы по логу в журнале БД определяете кем и что было изменено в заказе?
Старый 21.06.2006, 09:44   #16  
KMV is offline
KMV
Участник
 
201 / 25 (1) +++
Регистрация: 11.10.2002
Адрес: Москва
2 Vitaly_K: подтверждаю проблему и в стандартном функционале

1. Первый пользователь создает заказ
2. Второй пользователь меняет в нем статус (или любое другое поле)
3. Первый пользователь удаляет текущий заказ

Смотрим в отладчике , в методе validateDelete таблицы SalesTable все изменения сделанные на 2 шаге в таблице не видны.

Кэш?
Старый 21.06.2006, 12:28   #17  
Vitaly_K is offline
Vitaly_K
Участник
 
34 / 10 (1) +
Регистрация: 16.09.2004
Адрес: Москва
Цитата:
Сообщение от KMV
2 Vitaly_K: подтверждаю проблему и в стандартном функционале

1. Первый пользователь создает заказ
2. Второй пользователь меняет в нем статус (или любое другое поле)
3. Первый пользователь удаляет текущий заказ

Смотрим в отладчике , в методе validateDelete таблицы SalesTable все изменения сделанные на 2 шаге в таблице не видны.

Кэш?

KMV спасибо за участие, а то уже про логи начали спрашивать и отклонились от темы

И я про это думаю, что Кэш.... Как с этим бороться понятно, но ведь в чистом виде баг получается.
Вот и хотелось озвучить проблему! Возможно кому-то пригодится
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Хочу перейти на аксапту, посоветуйте с чего начать? Дедушка DAX: Прочие вопросы 4 04.04.2008 22:34
А не поделится ли кто примером Технического Задания? max99 DAX: Прочие вопросы 13 11.08.2005 12:00
Хочу чтобы введенные в грид данные не сразу попадали в базу.... ATimTim DAX: Программирование 8 15.06.2004 16:52
Очень хочу доку на английском Глазков DAX: Прочие вопросы 9 15.01.2004 09:39
Хочу видеть только итоги AKIS DAX: Функционал 1 19.08.2002 11:49

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

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

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