Как скрыть дублирующие строки в MS Access

Вид формы

Я делал через условные выражения, скрывая шрифт с помощью заливки, если установлено поле “Скрыть”:

image

Поле “Скрыть” рассчитывается с помощью пары функций и глобальной переменной:

Public ПоследнийНомерЗаказаДляСкрыть

Public Function ЗакраситьЛиНомерЗаказа(НомерЗаказа)
  ' если текущий номер заказа не равен последнему
  '  ПоследнийЗакрашен = не ПоследнийЗакрашен
  '  ПоследнийНомерЗаказа = НомерЗаказа
  '
  ' если последний закрашен, то закрашиваем
  ' иначе не закрашиваем
  '
  If НомерЗаказа <> ПоследнийНомерЗаказа Then
    ПоследнийЗакрашен = Not ПоследнийЗакрашен
    ПоследнийНомерЗаказа = НомерЗаказа
  End If
  ЗакраситьЛиНомерЗаказа = ПоследнийЗакрашен
End Function

Public Function СкрытьЛиНомерЗаказа(НомерЗаказа)
  ' если текущий номер заказа не равен последнему
  '  ПоследнийЗакрашен = не ПоследнийЗакрашен
  '  ПоследнийНомерЗаказа = НомерЗаказа
  '
  ' если последний закрашен, то закрашиваем
  ' иначе не закрашиваем
  '
  If НомерЗаказа = ПоследнийНомерЗаказаДляСкрыть Then
    СкрытьЛиНомерЗаказа = True
  Else
    СкрытьЛиНомерЗаказа = False
  End If
  ПоследнийНомерЗаказаДляСкрыть = НомерЗаказа
End Function

Функция СкрытьЛиНомерЗаказа используется в запросе с параметрами, который создает промежуточную таблицу:

image

Созданная промежуточная таблица, потом соединяется со всеми остальными нужными для вывода в форму таблицами:

image

Кажется, что не сложно, пока не начнешь все это описывать.  Может кому-нибудь пригодится?

Back to MS Access

Познакомился я с MS Access 2.0 где-то в 1994 году (не помню - 2 или 3 курс института). Вкупе с изучением SQL, Access показался очень классным средством. В нем мы делали лабораторки – чего-то типа “найти всех родственников, если есть таблица с полями: человек, связь с другим”.  За точность формулировки не отвечаю, но задания были интересными.

Естественно о “серьезном” программировании в Access-е тогда речи не шло – был “чистый” VB (3.0) для Windows, был C для DOS.  Но Access оказался для меня воротами в мир БД (Clipper, с которым я сталкивался ранее, не “пошел”).

А потом появился Delphi, анонсированный  заранее (до офицального выпуска первой версии) тем же преподавателем, и остался очень-очень надолго. Но это отступление от темы.

К Access я, конечно, периодически возвращался, но далее задач типа “сделать форму или отчет на основе 1-2 таблиц с помощью мастера и слегка подправить” дело заходило редко - в этих случаях шел в дело Delphi. Естественно, посмотрел все версии Access в Office 95, Office 97, Office 2000 и 2003, но револиционных или даже сильно эволюционных изменений я в нем не находил, особенно что касалось программирования.

Все таки попытки написать логику на VBA я периодически предпринимал, но все время наступал на грабли Microsoft-а, когда первые два- три шага ты делаешь легко и предсказуемо, а когда надо сделать четвертый, то это уже оказывается нетривиальным, а точнее – совсем не похожим на предыдущие. Конечно, я сравнивал построение библиотеки функций и классов практически с эталоном красоты – VCL Delphi, и ,естественно , VBA в MS Access, как и вообще VB, здесь явно проигрывал и я возвращался к Delphi.

Так бы дело и шло, если бы не знакомство с 1С и некоторыми другими средствами программирования для бизнеса. Через какое-то время (лет через 10, а то и больше) я понял что у каждого инструмента есть своя цель.  Если тебе надо написать программу учета, то можно пожертвовать тем, что работа с сетью у тебя будет отличаться от работы с файлами или работа с файлами от работы с форамами, что нет полноценного ООП и т.д.

Начинаешь ценить другое – за сколько времени ты сделаешь программу, за сколько изменишь. Что будет нужно чтобы ее отладить на компьютере пользователя. 1С показала для меня некий другой стандарт платформы разработки. Есть программа, сразу же можно зайти в конфигуратор, создать новую структуру данных, под которую уже будет готова форма по-умолчанию. Есть встроенная система безопасности – т.е. то что, рано или поздно придется реализовывать.

С другой стороны 1С велика для установки, имеет аппаратную защиту. Но главное – простые таблицы и формы в Access создавать все равно быстрее! А присвоение полю в форме значения “=Функция()” ? Это вообще класс!

Если Delphi делает exe-шник, чтобы изменить который надо стартовать среду разработки, то здесь размер шрифта в поле формы, да и другие свойства  можно изменить, вообще не заходя в конструктор. Это все про скорость разработки.

Понятно, что грабли рано или поздно появятся и что есть некоторая точка роста программы, где поддержка приложения, написанного на Access и на Delphi будет уже не в пользу Access, по усилиям. Но я говорю сейчас о своей работе – менее 10 программ среднего размера и кучка мелких и везде – работа с БД. Да еще и SAP грядет в качестве замены наших основных программ. Т.е. нужно будет “что-то вокруг большой программы” и здесь моя надежда – на Access.

Только вот всплывают вопросы о готовых компонентах, которые так широко используются в Delphi. И еще – есть ли сообщество, где обмениваются исходным кодом. Пока нашел сайт одного MVP (http://allenbrowne.com/tips.html) - сайт классный, много материалов, но все-таки жалко, если придется искать код по сайтам “одиночек”, хотелось бы, чтобы было сообщество.

А пока скачал оттуда код всплывающего календаря, переделал под начало недели с понедельника. Еще надо на русский перевести. А потом опять выкладывать на “индивидуальный” сайт? В общем, надо поискать единомышленников.

Follow

Get every new post delivered to your Inbox.