Archive for the ‘сопровождение’ Category
Стоит ли использовать временные таблицы для отчетов
Здравствуйте, уважаемые читатели.
Сегодня прочитал спорное мнение на форуме, что использовать временные таблицы при формировании отчетов это кривое решение. С этим мнением я в корне не согласен.
Мои доводы ЗА:
1. Модульность. Временные таблицы позволяют разделить между собой отчет и код расчета данных. В последующем это повышает сопровождаемость (см. п.3).
2. Удобство отладки. Если отчет перестал работать или работает как-то не правильно, то гораздо легче проверить расчет данных для него.
3. Сопровождаемость. В любой момент может возникнуть необходимость переделать либо расчет данных, либо переделать отчет, например, печатать его в word. Это все можно модифицировать по отдельности. Также пользователь может захотеть хранить рассчитанные данные, этого тоже будет просто добиться.
4. Документирование. Если разработчик укажет комментарии к полям для временной таблицы, то это можно считать документацией.
Мои доводы ПРОТИВ:
1. Увеличивается время разработки. Это происходит в том случае, если для отчета можно использовать простой запрос в качестве источника данных. Если же расчет данных не вписывается в простейшие запросы, то будет проще и надежней реализовать расчет отчета в коде.
Больше против я не вспомнил. Выбор очевиден
. Увлекаться данным способом естественно не стоит, каждой проблеме лучше подбирать свое решение. Этот метод подходит для отчетов со “сложными” расчетами данных.
До встречи!
(с) Скоков Сергей
Подписаться на: RSS или e-mail рассылку или добавить в ЖЖ друзья.
События
Здравствуйте, уважаемые читатели.
Поговорим в этом выпуске об очень интересной штуке – события. Я очень мало где видел их использование в MS Access. Но они очень сильно облегчают жизнь при работе, особенно с формами. У событий есть маленькое ограничение. Их могут использовать только объекты. Это означает, что их можно объявлять и получать только в модулях пользовательских классов, формах и отчетах.
Чтобы объявить событие необходимо в начале модуля класса (формы, отчета или пользовательского) написать:
Event ИмяСобытия( СписокАргументов )
Для использовании события необходимо объявить в начале модуля ссылку на объект и в списке (левый список, который расположен в редакторе кода) выбрать обявленный атрибут, в правом списке можно выбрать событие, если их несколько. В результате получим следующее:
Dim WithEvents Имя As Тип
Вызвать событие можно так:
RaiseEvent ИмяСобытия( Параметры )
Где это можно применить? Рассмотрим пример из жизни. На форме заказа есть поле клиента. В этом поле отображается, допустим, УНН и название клиента. Рядом с полем кнопка. По нажатию на кнопке отображается еще одна форма – список клиентов. Задача – выбрать клиента.
Одним из решений будет открыть модальное окно и тут возникает куча разных вариантов: записать напрямую с формы списка клиентов в поле формы заказов (очень плохая идея!!!), скрыть форму при нажатии пользователем кнопки “Ок” (Выбрать) и т.д.
При помощи событий получается простое и элегантное решение. Всего-то объявить на форме списка клиентов событие:
Event OnClientSelect(ByVal lId As Long)
На форме заказа это событие обработать:
Dim WithEvents m_frmKlientSepis As Form_frmKlientSpis
'--
Private Sub Kn_KlientSelect_Click()
'-- выбор клиента
'-- можно и так
'-- DoCmd.OpenForm "frmKlientSpis"
'-- Set m_frmKlientSepis = Forms("frmKlientSpis")
'-- но мне нравится этот вариант
Set m_frmKlientSepis = New Form_frmKlientSpis
m_frmKlientSepis.Visible = True
End Sub
Private Sub m_frmKlientSepis_OnClientSelect(ByVal lK_KLIENT As Long)
'-- клиент выбран пользователем
Me.K_KLIENT = lK_KLIENT
Set m_frmKlientSepis = Nothing '-- уничтожаем форму
End Sub
Подробности можете увидеть в примере. Чуть позже я расмотрю еще один пример – связные списки.
До скорых встреч!
(с) Скоков Сергей
Повышение сопровождаемости. Часть 1. Формы.
Здравствуйте, уважаемые подписчики.
В этом выпуске мы откроем очень важную тему сопровождаемость. Это то, что экономит время в последующем, когда изменения как правило нужно вносить быстро.
MS Access представляет из себя конструктор со встроенным языком программирования. Формы, отчеты, запросы и пр. никакого отношения к языку не имеют. Можно сказать, что они представляют из себя хранимые настройки классов Form, Report, QureyDef и п.р. При создании формы не обязательно создается модуль класса (далее класс), только если указать в свойстве «наличие модуля» да или создать обработчик события. В этом случае имя класса будет Form_<имя формы>. Это истинно и для отчетов.
К объектам MS Access (формы, отчеты, запросы, таблицы) обращаются по текстовому имени. В результате компилятор не проверяет правильность написания текстовых констант. В процессе жизни проект может пережить много модификаций: добавлений, удалений, переименований. После подобных изменений идет страшная череда тестирований и исправлений ошибок. Один из способов повышения сопровождаемости – это писать «компилируемый код». Да, смешно звучит. Т.е. переносить проверку кода с этапа выполнения на этап компиляции. Сейчас все поясню. Все что будет сказано про форму, в той или иной степени относится к отчетам.
Read the rest of this entry »