Ноу Інти, лекція, створення інтерактивних офісних документів в excel
У поняття офісне програмування я вкладаю ширший сенс, ніж програмування задач, що виникають в офісній діяльності. Сфера застосування офісного програмування може бути значно ширше - його можна використовувати для розробки будь-яких додатків невеликого і середнього обсягу, всього того, що не входить в поняття "великого проекту". Ця система з успіхом може застосовуватися при навчанні. Головне її призначення - використання в практичній роботі людей самих різних спеціальностей: бізнесменів, економістів, журналістів, соціологів. У зв'язку з цим у програмістів, які займаються офісним програмуванням, сфера прикладної орієнтації може бути досить широка.
Система Microsoft Office замислювалася, в першу чергу. для вирішення офісних завдань, а тому їх розгляд представляє великий інтерес. Тому я в цьому розділі і ряді наступних глав приділю таким завданням велику увагу. Чим займаються в офісі? Відповідь проста - людьми і документами. Людей залишимо в спокої і займемося документами. У сучасному офісі практично всі документи повинні бути інтерактивними. Що таке інтерактивний документ? Як зробити документ інтерактивним? Вирішенням цих питань зараз і займемося.
Інтерактивні документи та бази даних
На три моменти хочу звернути увагу:
- Документи повинні зберігатися досить довго. Тому без бази даних не обійтися. При цьому не завжди обов'язково зберігати сам документ в тій формі, в якій з ним працює користувач. Часто досить зберігати в базі даних інформацію, пов'язану з документом. При цьому важливо дотримуватися наступного принципу. Якщо інформація, що розміщується на документі в момент його створення, уже є в базі даних, то її слід переносити в документ з бази даних, а не створювати заново. Будь-яку нову інформацію, отриману в процесі роботи користувача з документом, слід перенести в базу даних. Цей принцип роботи з документами сприяє підтримці повноти і несуперечності даних.
- Найчастіше, саме Excel є тим додатком, де обробляються дані, що зберігаються в базах даних. Тому багато офісних документи, що вимагають інтерактивність, створюються як документи Excel.
- Хоча скрізь в тексті цієї глави я буду говорити про базу даних, слід мати на увазі, що джерела даних для документа, в загальному випадку, можуть бути різні, - як структуровані (бази даних), так і не структуровані. Про це досить докладно йшлося в попередніх розділах при розгляді об'єктів ADO.
Інтерактивна форма документа "Рахунок-фактура" офісу РР
Я буду розглядати питання створення інтерактивних документів на конкретному прикладі. Сподіваюся, він буде досить переконливим і дозволить продемонструвати, як багато хто з проблем, що виникають в процесі створення подібних документів, так і шляхи вирішення цих проблем.
Створення документа почнемо не на порожньому місці. У цій іпостасі розглянемо один з документів офісу "РР", про який вже йшла мова в попередніх розділах, і для якого база даних вже створена. Будемо припускати, що створюваний документ використовується в цьому офісі при оформленні замовлень на книги, і являє варіацію типового документа, званого зазвичай "Рахунок-фактура".
Я нагадаю, що один з тез, пропагованих мною в офісному програмуванні, полягає в тому, що програміст є членом команди розробників, метою якої є створення системи документів. Програмний проект, створюваний програмістом, не є самоціллю, - він лише частина документа. Інші частини документа можуть бути створені іншими учасниками спільної роботи без програмування. Про це я досить докладно говорив у всіх попередніх книгах по офісному програмування. Зокрема, в книзі [2] я детально описав процес створення бланка "Рахунок-фактура" офісу РР, який був створений "руками", без програмування. Саме цей документ і послужить нам основою для подальшої роботи. Ось як він виглядає:
Мал. 7.1. Документ "Рахунок-фактура" в початковій стадії
Наша мета - надати інтерактивність вже створеному документу.
Програмну роботу з документом почнемо з ініціалізації. І перший крок у ініціалізації - підключення бази даних офісу РР. Це розумно, оскільки, як я вже говорив, інтерактивний документ практично завжди взаємодіє з базою даних. Ініціалізація документа проводиться, як правило, в момент відкриття документа, а це значить - в обробнику події Open. Ось текст цього обробника:
Зауважте, зазвичай, я намагаюся будувати прості обробники подій, текст яких складається з одного рядка, що містить виклик відповідної процедури стандартного модуля. Тут, і в подальшому, я буду дотримуватися цього принципу. А тому, мені, перш за все, довелося додати в програмний проект стандартний модуль, якому я дав ім'я InterAction. Наведу заголовну частину цього модуля:
Як бачите, при ініціалізації документа зважаться три завдання - встановлюється з'єднання з базою даних, задається початкова конфігурація об'єкта Command і проводиться чистка полів бланка. Кожна з цих завдань вирішується відповідною процедурою. Про чищення поговоримо трохи пізніше, а ось текст процедури CreateConnection привести самий час:
Тепер, коли деякі початкові дії вже виконані, можна переходити до вирішення основного завдання - надання інтерактивних властивостей нашому документу. Зауважте, в бланку документа можна виділити кілька частин або розділів. Деякі з них постійні і не змінюються в процесі роботи з бланком. До них, наприклад, відносяться шапка документа і стверджують підписи. У шапці вказується назва організації, логотип, реквізити. Ці частини документа нас зараз цікавити не будуть. Виділимо три розділи бланка "Рахунок-фактура", в які додамо інтерактивність. Ці розділи умовно будемо називати:
- Реквізити покупця (замовника).
- Співробітники.
- Замовлення.
Давайте докладніше розглянемо роботу, яку слід виконати при формуванні кожного з цих розділів.