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

Вниз

АДО и master-detail   Найти похожие ветки 

 
Виталий Панасенко   (2010-01-13 17:14) [0]

Есть связка двух ADODataSetов, в мастере подсчитывается итого по детали(подзапросом select sum from dateail where id=master_id). Все работает, хотя есть одно "но". Даже два...Первое "но": при изменении данных в детали, мастер не решрешится сам. Ну это такое дело. Если мастер рефрешить вручную, то пересчитывается без проблем, указал Resync Command нужный(обновляется одна запись мастера). И тут возникает второе "но": деталь тоже передергивается, устанавливая указатель на первую запись.. Можно, конечно, сделать после рефреша мастера Last детали...Деталь редактируется в гриде, так удобно в данном случае для табличных данных...Есть ли другой вариант, окромя Master.Refresh/Detail.Last? Я просто привык к ФИБам, там это просто реализовано настройкой в детали опции ForceMasterRefresh, при этом сам НД детали "не передергивается"..:-)


 
Виталий Панасенко   (2010-01-13 17:18) [1]

Хотя при редактировании данных Detail.Last в AfterPost будет опять же, дергать НД детали.. только теперь в конец НД.


 
Anatoly Podgoretsky ©   (2010-01-13 17:24) [2]

> Виталий Панасенко  (13.01.2010 17:14:00)  [0]

Зачем мастеру рефрешить не измененые данные?


 
Виталий Панасенко   (2010-01-13 17:25) [3]

Почему не измененные? В мастере итоговая сумма всей детали


 
Виталий Панасенко   (2010-01-13 17:26) [4]

В детали вводится: код, количество. В мастере идет подсчет контрольной суммы количества для визуальной проверки (несколько страниц,по нарастающей)


 
Виталий Панасенко   (2010-01-13 17:34) [5]

У пользователя(да и у меня) от такого поведения ощущение "неуютности":-).. Кажется, что "что-то не то"..:-)


 
sniknik ©   (2010-01-13 17:38) [6]

> Кажется, что "что-то не то"..:-)
так и есть.

мастер на то и мастер что главный, а не наоборот. одно из значений master при переводе это хозяин...


 
Виталий Панасенко   (2010-01-13 17:39) [7]


> sniknik ©   (13.01.10 17:38) [6]

я чуток в английском понимаю.. т.е. я так понял, без вариантов в данном случае?


 
sniknik ©   (2010-01-13 17:49) [8]

если сделать задачу то вариантов масса, а вот если из мастера насильно сделать детайл то да, без вариантов.


 
Виталий Панасенко   (2010-01-13 17:54) [9]

странно.. почему-то в ФИБах за такие действия, мастер деталью не становится. Нормальное поведение - увидеть итог по счету или накладной, например...Если еще и клиент набирает товара на "вот у меня есть столько-то лавэ"..Ну да ладно. Решил. Тема закрыта


 
sniknik ©   (2010-01-13 17:56) [10]

а ты уверен что выбрал правильные термины для описания задачи?


 
Виталий Панасенко   (2010-01-13 18:07) [11]

Почти. Мне нужно при изменении данных в детали, участвующих в агрегатном расчете в мастере, происходил этот самый подсчет.. И при этом положение курсора в НД детали не изменялось бы. Все, это уже флуд. Тема решена и закрыта. С наступающим Старым Новым годом!:-)


 
Anatoly Podgoretsky ©   (2010-01-13 20:38) [12]

> Виталий Панасенко  (13.01.2010 17:25:03)  [3]

Какая еще сумма при изменение детали, callback что ли , так это дурость и отхождение от минимальной нормализации.


 
Anatoly Podgoretsky ©   (2010-01-13 20:40) [13]

> Виталий Панасенко  (13.01.2010 17:34:05)  [5]

Ты не в курсе, что рефреш можно сделать или выдав одноименную команду, или переоткрытием запроса - по выбору


 
Anatoly Podgoretsky ©   (2010-01-13 20:40) [14]

> Виталий Панасенко  (13.01.2010 17:39:07)  [7]

Смотри выше, проблем произвести рефреш нет, но и нужды тоже, только при неправильном проектирование такая нужда может возникнуть.


 
ANB   (2010-01-14 09:24) [15]


> Виталий Панасенко   (13.01.10 18:07) [11]

Сделай всю связку мастер-деталь руками (на событиях) и управляй ей, как хочешь.

ЗЫ. АДО не самая удобная библиотека для разработки.


 
Виталий Панасенко   (2010-01-14 09:30) [16]


> Anatoly Podgoretsky ©   (13.01.10 20:38) [12]

Обычная сумма по документу, изменяющаяся в процессе изменения составляющих. Типа
Мастер:
№ документа, Общее кол-во
Деталь
Код, Количество
Код, Количество

вот.. и при добавлении новой записи или изменении Количества в детали актуализировать Общее количество в Мастере..
Только это уже самый обычный флуд.. я ж писал, что тема закрыта...


 
Виталий Панасенко   (2010-01-14 09:31) [17]


> Anatoly Podgoretsky ©   (13.01.10 20:40) [13]

Я в первом посте писал, что
> указал Resync Command нужный(обновляется одна запись мастера)


 
sniknik ©   (2010-01-14 10:59) [18]

> ЗЫ. АДО не самая удобная библиотека для разработки.
чтобы любить кошек нужно уметь их готовить... (хотя, еще бывает и необоснованная любовь, типа "люблю, а почему не знаю")

> Я в первом посте писал, что
>> указал Resync Command нужный(обновляется одна запись мастера)
а зачем? менять значения в базе только для отображения их пользователю? странный подход. а если захочешь сделать "правильно" типа чтобы сохранять весть документ при нажатии "сохранить", а не при редактировании каждой записи. (правильно использование режима батчапдета, неправильно транзакция в базе при начале редактирования пользователем). что тогда?

> Обычная сумма по документу, изменяющаяся в процессе изменения составляющих. Типа
> Мастер:
> № документа, Общее кол-во
> Деталь
> Код, Количество
> Код, Количество
вместо этого -
Мастер:
№ документа
Деталь
Код, Количество
Код, Количество
и все. а "общее количество" сделать рассчитываемым полем, в рекордсете, в базе оно не нужно.


 
Виталий Панасенко   (2010-01-14 12:05) [19]

Оно и есть рассчитываемое.В первом посте писал
> Виталий Панасенко   (13.01.10 17:14)  


> Есть связка двух ADODataSetов, в мастере подсчитывается
> итого по детали(подзапросом select sum from dateail where
> id=master_id)


 
Sergey13 ©   (2010-01-14 12:13) [20]

> [19] Виталий Панасенко   (14.01.10 12:05)

так у тебя
> в мастере подсчитывается

а тебе и говорят, что надо в детали (или рядом) считать. Типа как в EHLib-овском гриде сумма по колонке.


 
Виталий Панасенко   (2010-01-14 12:41) [21]


> Sergey13 ©   (14.01.10 12:13) [20]

И что я там буду считать? Итог по всей детали? В каждой строке? А Эх тупо пробегает весь НД


 
Sergey13 ©   (2010-01-14 13:15) [22]

> [21] Виталий Панасенко   (14.01.10 12:41)
> И что я там буду считать? Итог по всей детали?

А что, у тебя в мастере не это посчитано?

> А Эх тупо пробегает весь НД

Открытый НД, заметь. И не переоткывает.


 
sniknik ©   (2010-01-14 13:57) [23]

> А Эх тупо пробегает весь НД
это "тупо" гораздо менее напряжено, чем по изменению каждой цифры загружать сервер изменением + перерасчетом + перезапросом,
т.е. я бы поменял знаки твоих представлений на противоположные.


 
Виталий Панасенко   (2010-01-14 14:01) [24]

ГоспАди! я ухе писал, что тема превратилась во флуд! Итог у меня в подзапросе мастера подсчитывается(старттопик смотри).. Меня просто НЕ УСТРАИВАЛО то, что для обновления суммы итого нужно "вручную" делать рефреш.. и при этом еще передергивается НД детали... вот и все...


 
Виталий Панасенко   (2010-01-14 14:04) [25]


> sniknik ©   (14.01.10 13:57) [23]

ты это серьезно ? делать вычисление для каждой позиции?. ну, пусть из сотни документов...клиент "умрет".... ладно.. флуд, он и есть флуд.. тему - в "потрепаться"...


 
Anatoly Podgoretsky ©   (2010-01-14 14:07) [26]

> sniknik  (14.01.2010 10:59:18)  [18]

Любовь зла - полюбишь и козла.


 
sniknik ©   (2010-01-14 14:51) [27]

> нужно "вручную" делать рефреш..
не нужно, если сделать как я говорил.

> ты это серьезно ? делать вычисление для каждой позиции?.
они не делаются "для каждой позиции", только для отображаемых.
+ можно например просто не рассчитывать для не открытого документа, или все таки рассчитывать но только если в числе 0 или документ текущий (редактируется), тут вся прелесть в том что все в твоих руках.

> клиент "умрет"
у меня тысячи не умирают, в подобной (примерно) ситуации... что то делаю не так.
а объединение таблиц в запросах чтобы получить подобную сумму вообще стандартная практика... тоже наверное что то не так делают, иначе клиенты бы дохли как мухи однодневки.


 
Виталий Панасенко   (2010-01-14 14:56) [28]

Это ты об
> sniknik ©   (14.01.10 10:59) [18]


> и все. а "общее количество" сделать рассчитываемым полем,
>  в рекордсете, в базе оно не нужно.
>

?


 
sniknik ©   (2010-01-14 15:17) [29]

а в чем сомнения?


 
Виталий Панасенко   (2010-01-14 15:26) [30]

вот мастера запрос
select m.mdoc_id, m.mdoc_date, m.mdoc_note,
m.ag_id, m.mng_id, m.mdoc_guid,
(select sum(doc_sum)from rm_doc where mdoc_id=M.mdoc_id) as mdoc_sum,
(select sum(doc_vatsum)from rm_doc where mdoc_id=M.mdoc_id) as mdoc_vatsum,
(select sum(doc_sumnnr)from rm_doc where mdoc_id=M.mdoc_id) as mdoc_nnrsum,
mdoc_status,
mdoc_num
from
rm_mdoc M

вот детали

select  d.*
from rm_doc d
where d.mdoc_id=:mdoc_id
and d.block_type=0
order by d.doc_id

как видно, суммы рассчитываются по детали


 
sniknik ©   (2010-01-14 16:05) [31]

разговор не про суммы, а по "общее количество" [16] которое пишется в базу, как понял по ветке, исключительно ради показа в гриде, а запись данных детали пишется ради расчета общего количества запросом.
так вот, но того ни того не нужно... если конечно нет каких то других, невысказанных здесь причин (например частых отчетов по количеству из "мастерной" таблицы)

> как видно, суммы рассчитываются по детали
суммы это количество? где видно? покажи в описании [0] или после в уточнении, например в [16].


 
Виталий Панасенко   (2010-01-14 16:24) [32]

а что есть сумма? количество денег, штук...
> sniknik ©   (14.01.10 16:05) [31]
>
> разговор не про суммы, а по "общее количество" [16] которое
> пишется в базу

я не говорил, что сумма пишется в БД.. нигде..

> Виталий Панасенко   (13.01.10 17:14)
>
> Есть связка двух ADODataSetов, в мастере подсчитывается
> итого по детали(подзапросом select sum from dateail where
> id=master_id).


 
sniknik ©   (2010-01-14 16:31) [33]

> я не говорил, что сумма пишется в БД.. нигде..
>> подзапросом select sum from dateail where > id=master_id
select делает выборку только из базы, т.что ты вот именно тут сказал, и повторил, что оно пишется.


 
Виталий Панасенко   (2010-01-16 12:26) [34]

Да, ты прав...я почему-то подумал, что догадаются, что сумма подсчитывается(sum  я так поля не называю)... Но в
> Виталий Панасенко   (14.01.10 15:26) [30]

прекрасно видно, что сумма рассчитывается..:-)


 
sniknik ©   (2010-01-16 12:59) [35]

раз уж переключились на суммы, то их бы как раз писать в записи заголовков документов можно было бы...
но, как говорил ([31] например) по другим причинам, не для того чтобы менять в процессе редактирования документа только для того чтобы отобразить на клиенте. а для каких то глобальных аналитических отчетов, которые это бы упростило (но зато добавило бы слежение за их правильностью, по примеру 1С с их точками актуальности, перерасчетами, закрытиями периодов...).


 
Виталий Панасенко   (2010-01-16 13:26) [36]

интересно, конечно, почему "не кошерно" отображать в процессе редактирования строк документа итог по ним...  в той же 1С аж бегом отображается на клиенте сумма по документы в процессе набора строк того же счета, к примеру...


 
sniknik ©   (2010-01-16 16:14) [37]

> почему "не кошерно" отображать в процессе редактирования строк документа итог по ним...
"не кошерно" делать так как это делаешь ты, сохраняешь каждую запись документа ради того чтобы запросом посчитать его сумму, о собственно к отображению предварительного итога претензий никто и не имел.


 
sniknik ©   (2010-01-16 16:18) [38]

> в той же 1С
кстати, даже в свои "махровые"  времена с файловой базой так никогда не делала, даже тогда у нее был временный файл документа, и значения записей не менялись прямо в базе в процессе редактирования.


 
Anatoly Podgoretsky ©   (2010-01-16 16:38) [39]

> sniknik  (16.01.2010 16:18:38)  [38]

> так никогда не делала,

Ты пол поменял?


 
sniknik ©   (2010-01-16 17:27) [40]

> Ты пол поменял?
я то тут то причем? это же от имени 1С, а она женского рода (не прав? с русским туго)


 
Виталий Панасенко(дом)   (2010-01-16 18:51) [41]


> sniknik ©   (16.01.10 16:18) [38]
>
> > в той же 1С
> кстати, даже в свои "махровые"  времена с файловой базой
> так никогда не делала, даже тогда у нее был временный файл
> документа, и значения записей не менялись прямо в базе в
> процессе редактирования.

и чем "временный файл документа" отличается от таблицы в БД? разница то какая?


 
sniknik ©   (2010-01-16 20:30) [42]

> разница то какая?
sniknik ©   (14.01.10 10:59) [18]
см. часть про транзакции.

и +
раз мы уже говорим про суммы, то вот ты редактируешь документ, еще не принял его а у какой то позиции цена вместо 100руб стала 200руб... а в это время кто-то вносит другой документ... или ты ошибся, и просто удалил ошибочную позицию... а цена в базе уже прописалась. и это без переоценок, учета. просто было чего то на 1000руб (10 штук) и вдруг стало на 2000руб.
считаешь правильно?
и это только потому что ты не можешь нормальный алгоритм реализовать.


 
Виталий Панасенко(дом)   (2010-01-16 21:17) [43]


> sniknik ©   (16.01.10 20:30) [42]

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


 
Виталий Панасенко(дом)   (2010-01-16 21:29) [44]

И, честно, я не встречал ни единой "фирменной" учетной системы, где бы при выписке любого документа, состоящего из шапки и собственно строк данных(счета, накладной, меневки, требования, возврата) не считался и не отображался итог по документу в процессе работы с ним(добавлении/удалении/редактировании).. количественный, суммарный..тот, что в данном документе актуальный.... будь то 1С, Парус, Акцент, Дебет+...


 
sniknik ©   (2010-01-16 21:36) [45]

> вообще, это как-то из другой оперы
из той же самой, делаешь все через запись/чтение базы, из-за этого и "передергивание" возникло, - причина -> следствие. уберешь причину следствие тоже исчезнет, а исправишь только следствие... и причина "даст в лоб" где нибудь в другом месте, т.к. в принципе не верна.

> уже стало не интересно..
всего лишь только что? а как мне столько раз одно и тоже в разных вариантах повторять?


 
sniknik ©   (2010-01-16 21:39) [46]

> я не встречал ни единой "фирменной" учетной системы ...
а ты не ищи те, что считают/отображают под итоги (против чего во всей ветке ни одного возражения), ты найди такую которая для того чтобы посчитать это все по ходу действий пишет в базу как ты.


 
Anatoly Podgoretsky ©   (2010-01-16 21:52) [47]

> Виталий Панасенко(дом)  (16.01.2010 21:29:44)  [44]

Но для этого совсем не требуются никакие запроса, особенно для не закоммитенных данных, достаточно обработчиков.



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

Форум: "Начинающим";
Текущий архив: 2010.03.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.59 MB
Время: 0.008 c
15-1262617930
Копир
2010-01-04 18:12
2010.03.21
Delphi


2-1263550088
lexii
2010-01-15 13:08
2010.03.21
Перенос значений переменных из одного Unit на доугой


2-1263934328
@!!ex
2010-01-19 23:52
2010.03.21
Как подогнать размеры TRichEdit под текст в нем


1-1240570370
MultIfleX
2009-04-24 14:52
2010.03.21
Адрес вызывающего функцию


1-1234778692
SPeller
2009-02-16 13:04
2010.03.21
Можно ли WideString спокойно использовать вместо String?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский