Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.08.28;
Скачать: [xml.tar.bz2];

Вниз

Проблемы с документом (связка master-detail)   Найти похожие ветки 

 
MMF   (2003-07-25 10:52) [0]

Форма документа содержит шапку и грид. Вопросы у меня, безусловно, детские:
1) Как обеспечить возможность отката изменений при условии, что могут одновременно вводить/редактировать несколько документов. Насколько я понимаю, CancelUpdates откатит все изменения для общих для этих доков датасетов.
2) Как правильно делать пересчет значений в полях (к примеру, Сумма=Цена*Кол-во) при изменении любого поля (Цена, Кол-во) и не создавать рекурсию (OnChange/OnFieldChanged).
3) Как побороть добавление новой записи при хождении по гриду вниз.
Было бы совсем замечательно, если бы кто-нить подкинул ссылку/ образец кода/подсказал верный путь для создания класса некоего универсального документа. Заранее благодарю за помощь.


 
Andrey_1   (2003-08-01 16:21) [1]

сделай поиск в инете по словам Delphi5vol1.pdf или Delphi5vol2.pdf там на эту тему есть данные
1 - 5метров, 2 - 6 метров.если инет быстрый - качай

Всего наилучшего


 
MsGuns   (2003-08-01 16:39) [2]

Прежде всего основное - могут ли один документ вводить (править) более одного узера одновременно ? От ответа на это вопрос зависит очень многое. Предположим, что не могут (т.е. документ типа накладной или счета-фактуры, с которым одновременно может работать реально только один чел)

1. Откат. За исключением небольшого кол-ва спец.случаев предпочтительно коммитить каждую введенную-измененную строку с соотв. пересчетом агрегатных полей по документу и коррекции их в мастере. В этом случае макс. потеря - одна запись.
Аргумент простой: проще удалить ручками неверно введенные записи, чем повторно ввести их еще раз в случае потери при откате или сбоя ПК.

2. Пересчет сумм. Прежде всего выяснить необходимость хранения в БД таких полей. Если они всегда калькулируются, то я бы вообще их не хранил. В другом случае (например, в накладных прихода, где сумма совсем не обязательно = цена*кол-во) - авторасчет на клиенте, как и возможность ручной коррекции узером

3. Способов несколько. Если редактить узер должен только в гриде, то обрабатывать соотв. события НД (AfterScrool,BeforePost,BeforeDelete,BeforeInsert,..) и играть опцией грида ReadOnly или другими
Лично я предпочитаю все коррекции давать делать не в DB-Aware контролах, расположенных в удобном виде на отд.панельке, показываемой в соотв. месте грида после нажатия узером соотв. кнопульки "редактировать", "добавить", "удалить" и т.д. в контр.панеле проги.
На панельке редактирования помимо контролов типа TEdit есть кнопки "Записать" и "Отменить". Удобно, кстати, делать проверки правильности введенных данных не дергая по-напрасну сервер.
А вообще, создание интерфейса - вещь, ИМХО, одна из самых тонких и зависит от очень большого кол-ва самых разных факторов



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.08.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.006 c
6-92156
RichY
2003-06-19 18:16
2003.08.28
Копирование на удаленную машину


6-92139
Димыч
2003-06-19 22:12
2003.08.28
Сетевые пакеты


3-92002
shark_mas
2003-08-05 22:46
2003.08.28
Как работать с field query?


14-92179
Dysan
2003-08-11 16:42
2003.08.28
COM


7-92271
Aleksei
2003-06-15 12:39
2003.08.28
Как создать ярлык на Desktop





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский