В этом шаге я хочу немного коснуться вопросов оптимизации работы программ связанных с выводом данных на форму. Это особенно актуально, если приходится работать с большим количеством объектов.
Представьте ситуацию, когда на форме несколько десятков объектов, и они по событию меняют свое значение. Чтобы мы не делали, команды в программе выполняются последовательно, поэтому картинка может "перетекать". Как же добиться эффекта одновременности?
Можно заблокировать форму от вывода, изменить требуемые значения и после этого снять блокировку. Тогда все прорисуется почти одновременно. Это может выглядеть примерно так.
Вместо:
m_DocForm.Caption=alltrim(str(nNo)) m_DocForm.Text5r.Value=curdoccur.sum5r m_DocForm.Text10r.Value=curdoccur.sum10r m_DocForm.Text50r.Value=curdoccur.sum50r * так далее m_DocForm.SumText.Value=curdoccur.totsum m_DocForm.CurSumText.Value=curdoccur.totsum m_DocForm.VedNoText.Value=curdoccur.vedno m_DocForm.VedDateText.Value=curdoccur.veddate m_DocForm.SymKasText.Value=curdoccur.symkas m_DocForm.RecountCheck.Value=curdoccur.recount m_DocForm.KlientCombo.Value=curdoccur.klname
Сделаем:
select curdoccur with m_DocForm .LockScreen = .t. .Caption = alltrim(str(nNo)) .Text5r.Value = sum5r .Text10r.Value = sum10r .Text50r.Value = sum50r * так далее .SumText.Value = totsum .CurSumText.Value = totsum .VedNoText.Value = vedno .VedDateText.Value = veddate .SymKasText.Value = symkas .RecountCheck.Value = recount .KlientCombo.Value = klname .LockScreen = .f. endwith
Вот и все, оптимизация налицо.