16.06.2006, 11:31 | #1 |
Участник
|
Хочу поделится
Привет всем !
Не знаю обсуждалось ли такая ситуация раньше, но признаться был удивлен ею! На днях случайно столкнулся с такой проблемой! В системе 1 пользователь создал новый заказ (salesTable) и больше ничего с ним не делал и не обновлял форму с заказами. 2-й пользователь у себя обработал этот же заказ. Через какое-то время 1-ый пользователь решил удалить у себя этот заказ.Нажал крестик удаления и как ни странно удалил его, хотя обработанный заказ нельзя удалить. Решил протестировать эту ситуацию и действительно оказалось, что возможно таким образом удалить заказ. Проблему решил так: при удалении заказа, сначала обновлять источник данных (salestable_ds) Но все таки очень странно, почему так произошло. Получается заказ удаляется из формы,а не из базы данных??????? |
|
16.06.2006, 11:37 | #2 |
Модератор
|
А что тут странного??
Заказ - это черновик. Главное - накладные. Заказ можно удалить. Накладные - только сторнировать. Заказ, в зависимости от настроек, или удаляется совсем, или переходит в статус "Удаленный". С Уважением, Георгий |
|
16.06.2006, 11:46 | #3 |
Участник
|
Дело в том, что у нас функционал отличается от стандартного, и если на заказе стоит определенный статус, то его никак нельзя удалить в нашей системе, а при таком раскладе получается, что можно......
|
|
16.06.2006, 11:59 | #4 |
Участник
|
И этот статус при удалении проверяется на DataSource формы?
|
|
16.06.2006, 12:01 | #5 |
Участник
|
Цитата:
Сообщение от George Nordic
А что тут странного??
Заказ - это черновик ... Существует мнение, что заказы после проведения накладных надо удалять. Такой подход нам даже рекомендовали консультатнты из CITP. Единственное членораздельное обоснование, которое я слышал, этого уменьшение числа записей таблиц SalesTable и SalesLine... и как следствие уменьшение размера БД. Плата за это - свалка из накладных... счетов... фактур.. и прочих документов. А уж если использовать при создании заказов/закупок механизмы Intercompany концы вообще найти невозможно... |
|
16.06.2006, 12:04 | #6 |
Участник
|
Цитата:
Сообщение от 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 |
NavAx
|
Цитата:
Сообщение от simply2double
PS Добавь в таблицу SalesTableDelete поле, к примеру DeletedUserId, в которое пиши UserId удалившего заказ...
__________________
Isn't it nice when things just work? |
|
19.06.2006, 09:56 | #8 |
Участник
|
Цитата:
Сообщение от macklakov
2Vitaly_K: Не слушайте Вы его, есть Администрирование-Настройки-Журнал базы данных
Последний раз редактировалось simply2double; 19.06.2006 в 10:14. |
|
19.06.2006, 16:23 | #9 |
Участник
|
Извиняюсь, что отсутствовал на форуме
Сообщение от KVM И этот статус при удалении проверяется на DataSource формы? Вот именно, что хоть функционал у нас переписан, но delete вызывается из DataSource формы думаю также как и у всех. просто заказ не удаляется с определенным статусом,а тут на тебе казус. Решение я нашел просто - перед методом super() делаю salesTable_ds.reread().....Но ведь это не правильно, когда если не обновил бы форму, то возможно удалить заказ. Сообщение от simply2double PS Добавь в таблицу SalesTableDelete поле, к примеру DeletedUserId, в которое пиши UserId удалившего заказ... Ну это мне совсем не надо, все логи ведутся в журнале БД |
|
19.06.2006, 17:03 | #10 |
Участник
|
Можно тогда поподробнее как реализована проверка этого статуса перед удалением?
|
|
19.06.2006, 17:11 | #11 |
Участник
|
Цитата:
Сообщение от Vitaly_K
Сообщение от simply2double
PS Добавь в таблицу SalesTableDelete поле, к примеру DeletedUserId, в которое пиши UserId удалившего заказ... Ну это мне совсем не надо, все логи ведутся в журнале БД |
|
20.06.2006, 09:53 | #12 |
Участник
|
Сообщение от 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 |
Участник
|
пожалуйста, используйте тег xpp, чтобы выделить код.
В этом случае форум не будет создавать смайлики, а текст программы будет отображен с подсвеченным синтаксисом и не будет переноситься в случайных местах. Кроме того, сохранятся отступы например, введенный вами текст [xpp]while select LedgerTable where LedgerTable.Accountnum == '01.01'[/xpp] будет отображен форумом X++: while select LedgerTable where LedgerTable.Accountnum == '01.01' |
|
20.06.2006, 12:21 | #14 |
Участник
|
ок, учту
|
|
20.06.2006, 16:55 | #15 |
Участник
|
Цитата:
Сообщение от Vitaly_K
Ну это мне совсем не надо, все логи ведутся в журнале БД
а как Вы по логу в журнале БД определяете кем и что было изменено в заказе? |
|
21.06.2006, 09:44 | #16 |
Участник
|
2 Vitaly_K: подтверждаю проблему и в стандартном функционале
1. Первый пользователь создает заказ 2. Второй пользователь меняет в нем статус (или любое другое поле) 3. Первый пользователь удаляет текущий заказ Смотрим в отладчике , в методе validateDelete таблицы SalesTable все изменения сделанные на 2 шаге в таблице не видны. Кэш? |
|
21.06.2006, 12:28 | #17 |
Участник
|
Цитата:
Сообщение от KMV
2 Vitaly_K: подтверждаю проблему и в стандартном функционале
1. Первый пользователь создает заказ 2. Второй пользователь меняет в нем статус (или любое другое поле) 3. Первый пользователь удаляет текущий заказ Смотрим в отладчике , в методе validateDelete таблицы SalesTable все изменения сделанные на 2 шаге в таблице не видны. Кэш? KMV спасибо за участие, а то уже про логи начали спрашивать и отклонились от темы И я про это думаю, что Кэш.... Как с этим бороться понятно, но ведь в чистом виде баг получается. Вот и хотелось озвучить проблему! Возможно кому-то пригодится |
|