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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.11.2008, 11:50   #1  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Нельзя изменить изменено другим пользователем
Есть такая проблема в одной строке закупки(может и не одной, но покрайней мере в одной) не получается сменить поле подтверждено(дата).
Пишет,
Цитата:
Сообщение (11:49:18)
Значение, введенное в поле "Подтверждено" таблицы "Строки закупки" ("18.11.2008") нельзя сохранить, поскольку оно изменено другим пользователем (новое значение - ""). Используйте функцию "Восстановить", чтобы подставить новое значение.
Невозможно отредактировать запись в "Строки закупки" ("PurchLine").
Одно или более полей в записи изменено другим пользователем, или в форме выбраны не все поля. Воспользуйтесь функцией "Восстановить".
Создал новую форму положил один датасорс(PurchLine) и два поля номер закупки и эту дату.
В этой закупке одна строка.
На таблице PurchLine изменил update. Вынес doupdate() повыше
X++:
public void  update(boolean  dropInvent = false)
{
    PurchLineType purchLineType;
    ;
    this.doupdate();
    //purchLineType = this.type();
    //purchLineType.update(dropInvent);
}
validateWrite и validateField закоментировал.
AOC перезагружал.
Мож кто сталкивался с подобным.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.

Последний раз редактировалось miklenew; 20.11.2008 в 11:53.
Старый 20.11.2008, 12:03   #2  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2155 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
А функция "Восстановить" (тобишь, F5) не помогает?
__________________
Ivanhoe as is..
Старый 20.11.2008, 12:34   #3  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
Посмотрите для этой записи значение поля RecVersion.
Если оно равно 0, то попробуйте изменить его на любое другое (в оснастке sql сервера)
__________________
Axapta v.3.0 sp5 kr2
Старый 20.11.2008, 12:35   #4  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Да, забыл написать: Ошибка появляется как раз на doupdate().
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
А функция "Восстановить" (тобишь, F5) не помогает?
Пробовал. Но дело то не в этом.
Я знаю я работаю один с этой записью.
Код остался только в upadate(). Всё остальное что могло вызваться закоментировал.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Старый 20.11.2008, 12:49   #5  
CDR is offline
CDR
MCTS
MCBMSS
 
236 / 175 (6) ++++++
Регистрация: 27.11.2003
Цитата:
Сообщение от miklenew Посмотреть сообщение
Да, забыл написать: Ошибка появляется как раз на doupdate().

Пробовал. Но дело то не в этом.
Я знаю я работаю один с этой записью.
Код остался только в upadate(). Всё остальное что могло вызваться закоментировал.
Такая ситуация возникает в том случае, когда запись в результате "хитрого кода" пытается сохраниться дважды.
Наиболее распространенная ошибка следующая:
Пользователь пытается сохранить изменения -> при сохранении записи запускается цепочка методов write, update и т.д. -> в одном из методов есть find текущей записи и ее update() с использованием отдельной переменной -> соответственно, когда очередь доходит до сохранения курсора формы, запись уже была изменена в коде. -> Ядро считает, что запись изменена другим пользователем и выдает ошибку.

Резюме: внимательно смотрите Ваш код, с 99% вероятностью ошибка аналогична описанной.
__________________
Dynamics AX Experience
Старый 20.11.2008, 12:53   #6  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от AndyD Посмотреть сообщение
Посмотрите для этой записи значение поля RecVersion.
Если оно равно 0, то попробуйте изменить его на любое другое (в оснастке sql сервера)
RecVersion на всех записях 0.
Но на этой ошибка воспроизводиться, а на других нет.
У нас Oracle.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Старый 20.11.2008, 13:01   #7  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
А если не через интерфейс, а в коде поменять дату - получится?
__________________
Axapta v.3.0 sp5 kr2
Старый 20.11.2008, 13:17   #8  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от CDR Посмотреть сообщение
Такая ситуация возникает в том случае, когда запись в результате "хитрого кода" пытается сохраниться дважды.
Щас вообще все методы на таблице закоментировал. Для чистоты эксперимента.
А форму я писал, создал новую(чистую).
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Старый 20.11.2008, 13:22   #9  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от AndyD Посмотреть сообщение
А если не через интерфейс, а в коде поменять дату - получится?
Кодом получилось.
Ситуация ушла.
Теперь всё нормально меняется.
Но интересно что же это было.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Старый 20.11.2008, 13:22   #10  
CDR is offline
CDR
MCTS
MCBMSS
 
236 / 175 (6) ++++++
Регистрация: 27.11.2003
Цитата:
Сообщение от miklenew Посмотреть сообщение
Щас вообще все методы на таблице закоментировал. Для чистоты эксперимента.
А форму я писал, создал новую(чистую).
Для чистоты эксперемента лучше все-таки посмотреть со стороны Oracle, обновляется ли запись таблицы PurchLine до возникновения ошибки, или нет.
__________________
Dynamics AX Experience
Старый 20.11.2008, 13:25   #11  
CDR is offline
CDR
MCTS
MCBMSS
 
236 / 175 (6) ++++++
Регистрация: 27.11.2003
Цитата:
Сообщение от miklenew Посмотреть сообщение
Кодом получилось.
Ситуация ушла.
Теперь всё нормально меняется.
Но интересно что же это было.
А на методах modifiedField() на таблице и датасоурсе никакого кода не было?
__________________
Dynamics AX Experience
Старый 20.11.2008, 13:28   #12  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от CDR Посмотреть сообщение
А на методах modifiedField() на таблице и датасоурсе никакого кода не было?
Я думаю если я ещё раз скажу нет, вы мне не поверите
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Старый 20.11.2008, 15:13   #13  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Вообщем чё оказалось.
В систему был добавлен новый тип документа по закупке.
При разноске была написана такая штука.
X++:
_purchLine.ConfirmedDlv = priceDisc.deliveryDays() + _ReadyDate;
_ReadyDate тип Date
priceDisc.deliveryDays() тип Days
На входе date = 0, days = 14.
Через отладчик и через Axapt-у ConfirmedDlv = 0 или пусто соответственно.
Захожу в базу Oracle вижу там где дата действительно пустая 01.01.1900, а в нашей испорченой 15.01.1900.
Поправил код
X++:
_purchLine.ConfirmedDlv = _ReadyDate ? priceDisc.deliveryDays() + _ReadyDate : _ReadyDate;
Теперь всё ок.
Вот такой механизм ломания табличных строк.
Странно что захотел воспроизвести пример на новой таблице.
Создал таблицу с датой(тип PurchLineDlvDate) и job.
X++:
static void Job27(Args _args)
{
    Table1 t1;
    date   d;
    Days   d1;
;
    d1 = 14;
    ttsbegin;
    t1.selectForUpdate(true);
    while select firstonly t1
    {
        t1.TransDate = d1 + d;
        t1.update();
    }
    ttscommit;
}
Дата сохраняется нормально.
... какая-то
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.

Последний раз редактировалось miklenew; 20.11.2008 в 15:28.
Старый 20.11.2008, 15:24   #14  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Можно воспроизвести эту ошибку (изменена другим пользователем).
Создать таблицу. Создать строку с пустой датой.
Зайти в оракл исправить 01.01.1900 на 15.01.1900, и в Axapt-e попытаться сменить дату руками. Наслаждаемся ошибкой
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Старый 20.11.2008, 15:43   #15  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
А можете посмотреть, какие запросы на сервер уходят?
__________________
Axapta v.3.0 sp5 kr2
Старый 20.11.2008, 16:13   #16  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Вот такой
X++:
UPDATE PURCHLINE SET 
CONFIRMEDDLV=:in1,
MODIFIEDDATE=:in2,
MODIFIEDTIME=:in3,
MODIFIEDBY=:in4,
RECVERSION=:in5 
WHERE ((SUBSTR(NLS_LOWER(DATAAREAID),1,3)=NLS_LOWER(:in6)) AND (RECID=:in7))
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Достаточно ли изменить дату в таблицах inventTrans, inventTransPosting, VendPackingSlipJour? DmitryS DAX: Программирование 3 18.09.2008 14:37
Как изменить фамилию гл.буха в счет-фактуре? AX 3.0. Подскажите... Бриллиантик DAX: Функционал 5 07.05.2008 11:50
Обработка накладной – функция изменить дату Sanya DAX: Функционал 2 05.08.2005 12:50
Ошибка "Запись удалена другим пользователем" ArturK DAX: Программирование 6 02.02.2005 15:55
Как программно изменить к-во в строке заказа в форме SalesTable BorDark DAX: Программирование 2 13.01.2005 17:02

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 12:08.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.