powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / MDI-приложение и работа со справочниками
18 сообщений из 18, страница 1 из 1
MDI-приложение и работа со справочниками
    #38014467
ИцМи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеем MDI-приложение... справочники... документы... Справочники могут вызываться как независимое окно, так и окно выбора какого-то значения при формирования документа. Если вызываем как независимое окно - МДИ-чайлд, если для выбора - модально. Редактировать справочник можно в обоих вариантах.
Допустим мы открыли справочник как независимое окно (например, ГлавноеМеню=>Справочники=>Сотрудники), встали на "Иванов Иван Иванович". Оставили его открытым и вызвали формирование какого-то документа, в котором нужно из этого справочника выбрать "Петрова"... нажали какую-то кнопочку в форме ввода документа - справочник открылся модально... поискали в нем "Петрова" - не нашли... тут же (в модальном окне выбора) добали его в справочник... сохранили документ... все получилось... закрыли окно документа... вспомнили, что справочник открыт как независимое окно... поглядели и...

И тут собсно вопросы:
1. по феншую мы должны в первом инстансе справочника увидеть новый элемент справочника (Петрова)?
2. должно ли остаться позиционирование в первом инстансе на "Иванове"?
3. в общем случае, должны ли разные инстансы одного и того же справочника знать о существовании своих "клонов" и должны ли они быть все "синхронизированы"?

Может вопрос ламерский, да и мутновато описан, но с MDI до сего дня не связывался, а в SDI окошки вызывались модально, т.е. не возникало ситуаций, когда один (пусть будет) справочник мог открываться в нескольких экземплярах.
В общем, прошу помощи в идеологических вопросах у старших товарищей;)
...
Рейтинг: 0 / 0
MDI-приложение и работа со справочниками
    #38014525
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИцМи,

ну при чем тут формы?
надеюсь не каждая форма лезет в БД за данными?
...
Рейтинг: 0 / 0
MDI-приложение и работа со справочниками
    #38014566
ИцМи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ViPRos,
Пока еще никто никуда не лезет, пока только прорабатывается проект.
Но планируется базовая форма, от которой будут наследоваться все остальные... на базовой форме датасет, который будет брать данные из БД.
Хотя похоже понял куда Вы клоните - два инстанса одного и того же справочника полезут в БД за одними и теми же данными...
...
Рейтинг: 0 / 0
MDI-приложение и работа со справочниками
    #38014582
ИцМи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ViPRos,
Пока еще никто никуда не лезет, пока только прорабатывается проект.
Но планируется базовая форма, от которой будут наследоваться все остальные... на базовой форме датасет, который будет брать данные из БД.
Хотя похоже понял куда Вы клоните - два инстанса одного и того же справочника полезут в БД за одними и теми же данными...
...
Рейтинг: 0 / 0
MDI-приложение и работа со справочниками
    #38014997
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИцМи1. по феншую мы должны в первом инстансе справочника увидеть новый элемент справочника (Петрова)?


Да.

ИцМи2. должно ли остаться позиционирование в первом инстансе на "Иванове"?


Да.

ИцМи3. в общем случае, должны ли разные инстансы одного и того же справочника знать о существовании своих "клонов" и должны ли они быть все "синхронизированы"?


Да.

Вопросы, предложения, угрозы?
...
Рейтинг: 0 / 0
MDI-приложение и работа со справочниками
    #38015149
ИцМи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cane Cat Fisher,
пока только вопросы, угрозы (возможно) - потом))

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

Но есть несколько "но"...
В первом варианте после переоткрытия датасет получает все изменения, произведенные в конкурирующих приложениях (приложение многопользовательское), которые не видны в другом инстансе - получаем несинхронизированные экземпляры одного и того же справочника.
Во втором варианте теряем текущую позицию в одном из экземпляров справочника

Пока иссяк... есть, конечно же, какие-то более другие решения, но пока я до них не додумался.
Может наведете на правильный по фенщую путь?:)
...
Рейтинг: 0 / 0
MDI-приложение и работа со справочниками
    #38015885
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИцМиCane Cat Fisher,
пока только вопросы, угрозы (возможно) - потом))

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

Но есть несколько "но"...
В первом варианте после переоткрытия датасет получает все изменения, произведенные в конкурирующих приложениях (приложение многопользовательское), которые не видны в другом инстансе - получаем несинхронизированные экземпляры одного и того же справочника.
Во втором варианте теряем текущую позицию в одном из экземпляров справочника

Пока иссяк... есть, конечно же, какие-то более другие решения, но пока я до них не додумался.
Может наведете на правильный по фенщую путь?:)
Второй вариант - феншуйнее. Даже с учетом необходимости получения изменений РЕДКО изменяемых справочников (на то они и справочники) из других инстансов приложения. Обновление данных ВСЕГДА необходимо выполнять - либо явно, нажатием на "большую кнопку", либо после получении от сервера сообщения об имеющихся изменениях.

Проблема конфликта указателей в разных формах имеет крайне простое решение. В "общем виде" можно сделать примерно так:
К примеру, делается связка DataSet->BindingSource->Control, где к одному объекту DataSet подключается несколько BindingSource (для каждой отдельной MDI-формы), указатель на конкретный элемент данных в каждом из которых является полностью независимым от указателей в других. Тут есть подводный камень: две разные формы могут работать с одним и тем же элементом - но и это сравнительно легко решаемый вопрос.
...
Рейтинг: 0 / 0
MDI-приложение и работа со справочниками
    #38016557
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ИцМиРедактировать справочник можно в обоих вариантах.
Оставьте редактирование только в основной форме, проблемы и отпадут
...
Рейтинг: 0 / 0
MDI-приложение и работа со справочниками
    #38016684
ИцМи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_модОставьте редактирование только в основной форме, проблемы и отпадут
Формируем документ... заполнили уже два десятка полей... полезли в какой-то справочник за значением последнего поля... нужного в справочнике не нашли... и?:)
Cane Cat Fisherк одному объекту DataSet подключается несколько BindingSource (для каждой отдельной MDI-формы), указатель на конкретный элемент данных в каждом из которых является полностью независимым от указателей в других
Тут засада - разработка ведется в Делфи, т.е. имеем стандартный набор DataSet-DataSource-DBGrid... и, на сколько я знаю, тут не получится иметь независимые указатели, т.е. все прицепленные к одному датасету гриды будут иметь одну и ту же "активную" запись... в общем пока решения так и не вырисовывается:(

ЗЫ: может оно конечно не правильно раздел форума выбрал - сори
...
Рейтинг: 0 / 0
MDI-приложение и работа со справочниками
    #38016721
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ИцМи_модОставьте редактирование только в основной форме, проблемы и отпадут
Формируем документ... заполнили уже два десятка полей... полезли в какой-то справочник за значением последнего поля... нужного в справочнике не нашли... и?:)
У вас же MDI - форму не закрываем, идем в справочник, добавляем, возврат к форме, запрос на ввод
...
Рейтинг: 0 / 0
MDI-приложение и работа со справочниками
    #38016761
ИцМи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_мод,
МДИ - журналы документов, отчеты, справочники (можно скзать все те же журналы)... Формы ввода/редактирования документов - модальные... так что не получится перейти в открытый ранее справочник
...
Рейтинг: 0 / 0
MDI-приложение и работа со справочниками
    #38016801
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИцМи,
чтобы правильно ответить на ваш вопрос, необходимо составить себе варианты использования ( use case ) вашего приложения, и продумать, насколько часто может возникнуть такая ситуация, и насколько она критична.
По моему опыту, кейс, когда справочник будет открыт в виде независимого окна, довольно редкий, возможно, даже не существующий, поэтому тратить так много времени на разруливание редко встречающейся ситуации, имхо, бессмысленно. Сделайте всё через один датасет, и не парьтесь.
Представьте, какие функции будут востребованы ключевыми пользователями приложения наиболее часто, и, соответственно, бросьте все силы на правильную реализацию именно их. Вспомогательные функции реализуйте по остаточному принципу, по мере убывания их важности.

PS раздел выбран, действительно, не правильно. Я бы посоветовал вам перенести его в Разработку информационных систем, пожалуй.
...
Рейтинг: 0 / 0
MDI-приложение и работа со справочниками
    #38016806
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ИцМиФормы ввода/редактирования документов - модальные...
Это зря
...
Рейтинг: 0 / 0
MDI-приложение и работа со справочниками
    #38016808
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИцМи_модОставьте редактирование только в основной форме, проблемы и отпадут
Формируем документ... заполнили уже два десятка полей... полезли в какой-то справочник за значением последнего поля... нужного в справочнике не нашли... и?:)
Сначала refresh данных справочника из базы, чтобы получить изменения, сделанные другими пользователями. Потом добавление нового элемента, если нужного нет...

Проблема со СПРАВОЧНИКАМИ - по большому счету надумана...
Справочники (обычно) используются как источник данных для списков выбора, связанных "по ключу" с "главным" объектом...
Если при редактировании справочника указатель в справочнике "улетит" - для "главной формы" это изменения не особо критично. Критично, чтобы изменения элементов в справочнике были актуальны для связанного списка выбора. Общий источник данных для редактирования и для связанного списка автоматически решает эту ситуацию.

Кстати, потребую компенсации "за нарушение авторских прав"... :)
ИцМиCane Cat Fisherк одному объекту DataSet подключается несколько BindingSource (для каждой отдельной MDI-формы), указатель на конкретный элемент данных в каждом из которых является полностью независимым от указателей в других
Тут засада - разработка ведется в Делфи, т.е. имеем стандартный набор DataSet-DataSource-DBGrid... и, на сколько я знаю, тут не получится иметь независимые указатели, т.е. все прицепленные к одному датасету гриды будут иметь одну и ту же "активную" запись... в общем пока решения так и не вырисовывается:(

На самом деле, мне припоминается что-то типа DataSet->TTable/TQuery/TStorProc->DataSource->DBGrid. Соответственно, нужно прикрутить к ОДНОМУ TTable/TQuery/etc. НЕСКОЛЬКО разных DataSource, каждый из которых связан с "собственным" DBGrid... Это должно решить проблему с указателями на разные записи одного источника данных в разных DBGrid...
ИцМиЗЫ: может оно конечно не правильно раздел форума выбрал - сори
...
Рейтинг: 0 / 0
MDI-приложение и работа со справочниками
    #38016859
ИцМи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sphinx_mvНа самом деле, мне припоминается что-то типа DataSet->TTable/TQuery/TStorProc->DataSource->DBGrid. Соответственно, нужно прикрутить к ОДНОМУ TTable/TQuery/etc. НЕСКОЛЬКО разных DataSource, каждый из которых связан с "собственным" DBGrid... Это должно решить проблему с указателями на разные записи одного источника данных в разных DBGrid...
Нет, проблема не решается - позиционирование в разных гридах остается "синхронизированным"
sphinx_mvКстати, потребую компенсации "за нарушение авторских прав"... :)
не совсем понял:)
egorychПо моему опыту, кейс, когда справочник будет открыт в виде независимого окна, довольно редкий, возможно, даже не существующий, поэтому тратить так много времени на разруливание редко встречающейся ситуации, имхо, бессмысленно. Сделайте всё через один датасет, и не парьтесь.
Представьте, какие функции будут востребованы ключевыми пользователями приложения наиболее часто, и, соответственно, бросьте все силы на правильную реализацию именно их. Вспомогательные функции реализуйте по остаточному принципу, по мере убывания их важности.
Закон Парето?:) Примерно так сейчас им сделал... хотя ситуации с "независимым" справочником встречаются, не так чтоб часто, но они есть:)
...
Рейтинг: 0 / 0
MDI-приложение и работа со справочниками
    #38016900
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИцМиПока вижу два варианта:

2. оба экземпляра работают с одним и тем же датасетом
при редактировании в одном экземпляре все данные автоматически видны и во втором


Ага. А потом пользователь захочет в каждом окне свой фильтр, и программисту останется застрелиться. В печь общий датасет.

ИцМи1. оба экземпляра имеют собственный датасет
при редактировании одного из них посылается пользовательскон сообщение
второй экземпляр обрабатывает его: переоткрывает датасет и позиционируется на запись, активную до переоткрытия

В первом варианте после переоткрытия датасет получает все изменения, произведенные в конкурирующих приложениях (приложение многопользовательское), которые не видны в другом инстансе - получаем несинхронизированные экземпляры одного и того же справочника.


Ну если уж это так напрягает, то пересинхронизируйте все инстансы справочника хором. Хотя что это за справочник такой, который якобы терзают со всех рабочих мест, аж в глазах мельтешит. Либо это никому не надо, либо это вовсе не справочник.
...
Рейтинг: 0 / 0
MDI-приложение и работа со справочниками
    #38017287
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант:

1. Каждая форма имеют свой ДатаСет
2. При открытии форма открывает свой датасет
3. При активации (возврате из вызванной модальной или при переключении между формамипри немодальном варианте) форма обновляет свой датасет, при необходимости восстанавливая текущую запись, активный столбец и иже с ними

Возражения кроме "несусветного" расходования памяти на датасеты и "неимоверную" нагрузку на СУБД есть?
...
Рейтинг: 0 / 0
MDI-приложение и работа со справочниками
    #38017416
ИцМи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
АнатоЛой,
ну, справочники - это все же не основные журналы/регистры/реестры... да и на современных компах борьб за каждый байт уже не ведется:) а нагрузка на сервер - так при нормальном подходе к железу сервера и проектированию БД данные во второй интсанс с большой долей вероятности будут выдергиваться из кэша...
Хотя к идеологии системы это имеет небольшое отношение.

Все же склоняюсь к варианту "один интстанс - один датасет"
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / MDI-приложение и работа со справочниками
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]