|
|
|
MDI-приложение и работа со справочниками
|
|||
|---|---|---|---|
|
#18+
Имеем MDI-приложение... справочники... документы... Справочники могут вызываться как независимое окно, так и окно выбора какого-то значения при формирования документа. Если вызываем как независимое окно - МДИ-чайлд, если для выбора - модально. Редактировать справочник можно в обоих вариантах. Допустим мы открыли справочник как независимое окно (например, ГлавноеМеню=>Справочники=>Сотрудники), встали на "Иванов Иван Иванович". Оставили его открытым и вызвали формирование какого-то документа, в котором нужно из этого справочника выбрать "Петрова"... нажали какую-то кнопочку в форме ввода документа - справочник открылся модально... поискали в нем "Петрова" - не нашли... тут же (в модальном окне выбора) добали его в справочник... сохранили документ... все получилось... закрыли окно документа... вспомнили, что справочник открыт как независимое окно... поглядели и... И тут собсно вопросы: 1. по феншую мы должны в первом инстансе справочника увидеть новый элемент справочника (Петрова)? 2. должно ли остаться позиционирование в первом инстансе на "Иванове"? 3. в общем случае, должны ли разные инстансы одного и того же справочника знать о существовании своих "клонов" и должны ли они быть все "синхронизированы"? Может вопрос ламерский, да и мутновато описан, но с MDI до сего дня не связывался, а в SDI окошки вызывались модально, т.е. не возникало ситуаций, когда один (пусть будет) справочник мог открываться в нескольких экземплярах. В общем, прошу помощи в идеологических вопросах у старших товарищей;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2012, 13:25 |
|
||
|
MDI-приложение и работа со справочниками
|
|||
|---|---|---|---|
|
#18+
ИцМи, ну при чем тут формы? надеюсь не каждая форма лезет в БД за данными? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2012, 14:00 |
|
||
|
MDI-приложение и работа со справочниками
|
|||
|---|---|---|---|
|
#18+
ViPRos, Пока еще никто никуда не лезет, пока только прорабатывается проект. Но планируется базовая форма, от которой будут наследоваться все остальные... на базовой форме датасет, который будет брать данные из БД. Хотя похоже понял куда Вы клоните - два инстанса одного и того же справочника полезут в БД за одними и теми же данными... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2012, 14:19 |
|
||
|
MDI-приложение и работа со справочниками
|
|||
|---|---|---|---|
|
#18+
ViPRos, Пока еще никто никуда не лезет, пока только прорабатывается проект. Но планируется базовая форма, от которой будут наследоваться все остальные... на базовой форме датасет, который будет брать данные из БД. Хотя похоже понял куда Вы клоните - два инстанса одного и того же справочника полезут в БД за одними и теми же данными... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2012, 14:28 |
|
||
|
MDI-приложение и работа со справочниками
|
|||
|---|---|---|---|
|
#18+
ИцМи1. по феншую мы должны в первом инстансе справочника увидеть новый элемент справочника (Петрова)? Да. ИцМи2. должно ли остаться позиционирование в первом инстансе на "Иванове"? Да. ИцМи3. в общем случае, должны ли разные инстансы одного и того же справочника знать о существовании своих "клонов" и должны ли они быть все "синхронизированы"? Да. Вопросы, предложения, угрозы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2012, 17:08 |
|
||
|
MDI-приложение и работа со справочниками
|
|||
|---|---|---|---|
|
#18+
Cane Cat Fisher, пока только вопросы, угрозы (возможно) - потом)) Пока вижу два варианта: 1. оба экземпляра имеют собственный датасет при редактировании одного из них посылается пользовательскон сообщение второй экземпляр обрабатывает его: переоткрывает датасет и позиционируется на запись, активную до переоткрытия 2. оба экземпляра работают с одним и тем же датасетом при редактировании в одном экземпляре все данные автоматически видны и во втором Но есть несколько "но"... В первом варианте после переоткрытия датасет получает все изменения, произведенные в конкурирующих приложениях (приложение многопользовательское), которые не видны в другом инстансе - получаем несинхронизированные экземпляры одного и того же справочника. Во втором варианте теряем текущую позицию в одном из экземпляров справочника Пока иссяк... есть, конечно же, какие-то более другие решения, но пока я до них не додумался. Может наведете на правильный по фенщую путь?:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2012, 18:47 |
|
||
|
MDI-приложение и работа со справочниками
|
|||
|---|---|---|---|
|
#18+
ИцМиCane Cat Fisher, пока только вопросы, угрозы (возможно) - потом)) Пока вижу два варианта: 1. оба экземпляра имеют собственный датасет при редактировании одного из них посылается пользовательскон сообщение второй экземпляр обрабатывает его: переоткрывает датасет и позиционируется на запись, активную до переоткрытия 2. оба экземпляра работают с одним и тем же датасетом при редактировании в одном экземпляре все данные автоматически видны и во втором Но есть несколько "но"... В первом варианте после переоткрытия датасет получает все изменения, произведенные в конкурирующих приложениях (приложение многопользовательское), которые не видны в другом инстансе - получаем несинхронизированные экземпляры одного и того же справочника. Во втором варианте теряем текущую позицию в одном из экземпляров справочника Пока иссяк... есть, конечно же, какие-то более другие решения, но пока я до них не додумался. Может наведете на правильный по фенщую путь?:) Второй вариант - феншуйнее. Даже с учетом необходимости получения изменений РЕДКО изменяемых справочников (на то они и справочники) из других инстансов приложения. Обновление данных ВСЕГДА необходимо выполнять - либо явно, нажатием на "большую кнопку", либо после получении от сервера сообщения об имеющихся изменениях. Проблема конфликта указателей в разных формах имеет крайне простое решение. В "общем виде" можно сделать примерно так: К примеру, делается связка DataSet->BindingSource->Control, где к одному объекту DataSet подключается несколько BindingSource (для каждой отдельной MDI-формы), указатель на конкретный элемент данных в каждом из которых является полностью независимым от указателей в других. Тут есть подводный камень: две разные формы могут работать с одним и тем же элементом - но и это сравнительно легко решаемый вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2012, 01:05 |
|
||
|
MDI-приложение и работа со справочниками
|
|||
|---|---|---|---|
|
#18+
ИцМиРедактировать справочник можно в обоих вариантах. Оставьте редактирование только в основной форме, проблемы и отпадут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2012, 10:07 |
|
||
|
MDI-приложение и работа со справочниками
|
|||
|---|---|---|---|
|
#18+
_модОставьте редактирование только в основной форме, проблемы и отпадут Формируем документ... заполнили уже два десятка полей... полезли в какой-то справочник за значением последнего поля... нужного в справочнике не нашли... и?:) Cane Cat Fisherк одному объекту DataSet подключается несколько BindingSource (для каждой отдельной MDI-формы), указатель на конкретный элемент данных в каждом из которых является полностью независимым от указателей в других Тут засада - разработка ведется в Делфи, т.е. имеем стандартный набор DataSet-DataSource-DBGrid... и, на сколько я знаю, тут не получится иметь независимые указатели, т.е. все прицепленные к одному датасету гриды будут иметь одну и ту же "активную" запись... в общем пока решения так и не вырисовывается:( ЗЫ: может оно конечно не правильно раздел форума выбрал - сори ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2012, 11:23 |
|
||
|
MDI-приложение и работа со справочниками
|
|||
|---|---|---|---|
|
#18+
ИцМи_модОставьте редактирование только в основной форме, проблемы и отпадут Формируем документ... заполнили уже два десятка полей... полезли в какой-то справочник за значением последнего поля... нужного в справочнике не нашли... и?:) У вас же MDI - форму не закрываем, идем в справочник, добавляем, возврат к форме, запрос на ввод ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2012, 11:50 |
|
||
|
MDI-приложение и работа со справочниками
|
|||
|---|---|---|---|
|
#18+
_мод, МДИ - журналы документов, отчеты, справочники (можно скзать все те же журналы)... Формы ввода/редактирования документов - модальные... так что не получится перейти в открытый ранее справочник ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2012, 12:09 |
|
||
|
MDI-приложение и работа со справочниками
|
|||
|---|---|---|---|
|
#18+
ИцМи, чтобы правильно ответить на ваш вопрос, необходимо составить себе варианты использования ( use case ) вашего приложения, и продумать, насколько часто может возникнуть такая ситуация, и насколько она критична. По моему опыту, кейс, когда справочник будет открыт в виде независимого окна, довольно редкий, возможно, даже не существующий, поэтому тратить так много времени на разруливание редко встречающейся ситуации, имхо, бессмысленно. Сделайте всё через один датасет, и не парьтесь. Представьте, какие функции будут востребованы ключевыми пользователями приложения наиболее часто, и, соответственно, бросьте все силы на правильную реализацию именно их. Вспомогательные функции реализуйте по остаточному принципу, по мере убывания их важности. PS раздел выбран, действительно, не правильно. Я бы посоветовал вам перенести его в Разработку информационных систем, пожалуй. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2012, 12:35 |
|
||
|
MDI-приложение и работа со справочниками
|
|||
|---|---|---|---|
|
#18+
ИцМиФормы ввода/редактирования документов - модальные... Это зря ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2012, 12:35 |
|
||
|
MDI-приложение и работа со справочниками
|
|||
|---|---|---|---|
|
#18+
ИцМи_модОставьте редактирование только в основной форме, проблемы и отпадут Формируем документ... заполнили уже два десятка полей... полезли в какой-то справочник за значением последнего поля... нужного в справочнике не нашли... и?:) Сначала refresh данных справочника из базы, чтобы получить изменения, сделанные другими пользователями. Потом добавление нового элемента, если нужного нет... Проблема со СПРАВОЧНИКАМИ - по большому счету надумана... Справочники (обычно) используются как источник данных для списков выбора, связанных "по ключу" с "главным" объектом... Если при редактировании справочника указатель в справочнике "улетит" - для "главной формы" это изменения не особо критично. Критично, чтобы изменения элементов в справочнике были актуальны для связанного списка выбора. Общий источник данных для редактирования и для связанного списка автоматически решает эту ситуацию. Кстати, потребую компенсации "за нарушение авторских прав"... :) ИцМиCane Cat Fisherк одному объекту DataSet подключается несколько BindingSource (для каждой отдельной MDI-формы), указатель на конкретный элемент данных в каждом из которых является полностью независимым от указателей в других Тут засада - разработка ведется в Делфи, т.е. имеем стандартный набор DataSet-DataSource-DBGrid... и, на сколько я знаю, тут не получится иметь независимые указатели, т.е. все прицепленные к одному датасету гриды будут иметь одну и ту же "активную" запись... в общем пока решения так и не вырисовывается:( На самом деле, мне припоминается что-то типа DataSet->TTable/TQuery/TStorProc->DataSource->DBGrid. Соответственно, нужно прикрутить к ОДНОМУ TTable/TQuery/etc. НЕСКОЛЬКО разных DataSource, каждый из которых связан с "собственным" DBGrid... Это должно решить проблему с указателями на разные записи одного источника данных в разных DBGrid... ИцМиЗЫ: может оно конечно не правильно раздел форума выбрал - сори ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2012, 12:36 |
|
||
|
MDI-приложение и работа со справочниками
|
|||
|---|---|---|---|
|
#18+
sphinx_mvНа самом деле, мне припоминается что-то типа DataSet->TTable/TQuery/TStorProc->DataSource->DBGrid. Соответственно, нужно прикрутить к ОДНОМУ TTable/TQuery/etc. НЕСКОЛЬКО разных DataSource, каждый из которых связан с "собственным" DBGrid... Это должно решить проблему с указателями на разные записи одного источника данных в разных DBGrid... Нет, проблема не решается - позиционирование в разных гридах остается "синхронизированным" sphinx_mvКстати, потребую компенсации "за нарушение авторских прав"... :) не совсем понял:) egorychПо моему опыту, кейс, когда справочник будет открыт в виде независимого окна, довольно редкий, возможно, даже не существующий, поэтому тратить так много времени на разруливание редко встречающейся ситуации, имхо, бессмысленно. Сделайте всё через один датасет, и не парьтесь. Представьте, какие функции будут востребованы ключевыми пользователями приложения наиболее часто, и, соответственно, бросьте все силы на правильную реализацию именно их. Вспомогательные функции реализуйте по остаточному принципу, по мере убывания их важности. Закон Парето?:) Примерно так сейчас им сделал... хотя ситуации с "независимым" справочником встречаются, не так чтоб часто, но они есть:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2012, 13:09 |
|
||
|
MDI-приложение и работа со справочниками
|
|||
|---|---|---|---|
|
#18+
ИцМиПока вижу два варианта: 2. оба экземпляра работают с одним и тем же датасетом при редактировании в одном экземпляре все данные автоматически видны и во втором Ага. А потом пользователь захочет в каждом окне свой фильтр, и программисту останется застрелиться. В печь общий датасет. ИцМи1. оба экземпляра имеют собственный датасет при редактировании одного из них посылается пользовательскон сообщение второй экземпляр обрабатывает его: переоткрывает датасет и позиционируется на запись, активную до переоткрытия В первом варианте после переоткрытия датасет получает все изменения, произведенные в конкурирующих приложениях (приложение многопользовательское), которые не видны в другом инстансе - получаем несинхронизированные экземпляры одного и того же справочника. Ну если уж это так напрягает, то пересинхронизируйте все инстансы справочника хором. Хотя что это за справочник такой, который якобы терзают со всех рабочих мест, аж в глазах мельтешит. Либо это никому не надо, либо это вовсе не справочник. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2012, 13:27 |
|
||
|
MDI-приложение и работа со справочниками
|
|||
|---|---|---|---|
|
#18+
Вариант: 1. Каждая форма имеют свой ДатаСет 2. При открытии форма открывает свой датасет 3. При активации (возврате из вызванной модальной или при переключении между формамипри немодальном варианте) форма обновляет свой датасет, при необходимости восстанавливая текущую запись, активный столбец и иже с ними Возражения кроме "несусветного" расходования памяти на датасеты и "неимоверную" нагрузку на СУБД есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2012, 16:02 |
|
||
|
MDI-приложение и работа со справочниками
|
|||
|---|---|---|---|
|
#18+
АнатоЛой, ну, справочники - это все же не основные журналы/регистры/реестры... да и на современных компах борьб за каждый байт уже не ведется:) а нагрузка на сервер - так при нормальном подходе к железу сервера и проектированию БД данные во второй интсанс с большой долей вероятности будут выдергиваться из кэша... Хотя к идеологии системы это имеет небольшое отношение. Все же склоняюсь к варианту "один интстанс - один датасет" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2012, 16:57 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=44&tid=1541494]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 242ms |
| total: | 378ms |

| 0 / 0 |
