Форум: "Базы";
Текущий архив: 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