Разработка программ и баз данных

Класс работы с Microsoft Word из Access

Класс используется для вывода на печать из Access отчетов типа Microsoft Word в виде бланков (доверенностей, договоров и т.п.), таблиц (накладных) или сложных форм, например, заказов с реквизитами поставщика и спецификацией. Цель разработки такого класса – это создание простого интерфейса, который будет выводить на печать документы Word, используя информацию запросов. При этом обращение к кодированию информации отчета путем VBA (visual basic for application) будет минимальным

 

О примере

В архиве Вы найдете файл с примером, в котором рассматривается вопрос подготовки отчета для заказов. Такой отчет имеет ряд сложных объектов.

Во первых у него есть "шапка", в которой записаны реквизиты поставщика и заказчика, а также номер отчета и дата, которая может иметь произвольный формат: 11.01.2010 или 11 января 2010 г.

Во вторых, у отчета есть спецификация, которая состоит из таблицы с товарами, наименование, количество, сумма, которая тоже может быть записана в формате ###-00, где - разделитель разрядов. Таким образом 510 руб. надо записать как 510-00 руб.

В третьих, у отчета есть сумма прописью. Например, у Вас заказ имеет 510 рублей, то в счете желательно написать сумму Пятьсот десять рублей 00 коп.

Инструкция

Класс и его функции предназначены для работы под управлением операционно�� системы Microsoft Windows с установленным программным комплексом Microsoft Office, обязательно включающим компонент Microsoft Access

Основные файлы

В примере, который находится в папке Programs, Вы найдете файл Microsoft Access (AccessWord.mdb), где будут находиться основные объекты программы. Вот они

  • clsReportWord – класс для работы с Word (главный объект выводы на печать)
  • la_Money – функции для перевода чисел в пропись
  • la_formInit – это функции для инициализации отчета Word
  • LA_CatalogReports – таблица с описанием отчетов


Обратите внимание. Эти все объекты надо переносить в другие проекты, если вам необходимо будет использовать вывод на печать отчетов в формате Microsoft Word. Для заполнения таблицы с отчетами есть интерфейс, который позволяет это сделать быстрее.

LA_InitReports – форма для редактирования таблицы LA_CatalogReports (не обязательный объект)


Вспомогательные файлы

В примере есть объекты для демонстрации примера работы с классом на базе распространенной формы заказов. Они содержат типовые таблицы

ЗАКАЗЫ список – список заказов
ЗАКАЗЫ данные – спецификация заказов
ФИРМЫ – список компаний и их реквизитов
АКТИВЫ ед_измерения – единицы измерения товаров
АКТИВЫ список – список товаров
Формы для заполнения реквизитов заказа

formЗаказы – форма заказов
formЗаказыВкладкаДанные – спецификация заказа
Запросы SQL для отчета

formЗаказыОтчетСчетWordQry – содержит поля для вывода шапки отчета
formЗаказыОтчетСчетWordQry_T – содержит поля для вывода таблицы отчета
Пример шаблона Word *.dot для вывода отчета. Используется для подготовки основного отчета

..\Database\Templates\Счет на предоплату.dot


Порядок действий

Откройте в режиме редактирования документ Счет на предоплату.dot (правой кнопкой в проводнике) и поставьте закладки в те места документа, которые нужно заполнить. Меню Вставка – Закладки. Пример документа Word с закладками.
Обратите внимание. Для того чтобы вставить закладку для таблицы используйте имя N1. Она добавляется в первое поле таблицы, под №1. На втором этапе работы с классом нужно определить запросы. Для этого используйте редактор запросов Access.


Запрос. formЗаказыОтчетСчетWordQry

Первый запрос содержит поля, которые добавляются в шапку отчета: БанкИмя, ФилиалИНН и т.п.

idЗаказ Филиал ФилиалИНН ФилиалАдрес БанкИмя БанкNсчета
1 ООО «Новая компания» 7722261008 124713, г. Москва, ул. Краснопролетарская, д.16 Банк рублевый 12345678901234567890
22 ООО «Новая компания» 7722261008 124713, г. Москва, ул. Краснопролетарская, д.16 Банк рублевый 12345678901234567890

Запрос. formЗаказыОтчетСчетWordQry_T

Второй запрос содержит поля таблицы заказов. Выводимые поля имеют префикс T_ , остальные - вспомогательные

T_Пункт T_Актив T_Кол_во T_ЕдИзм T_Цена~~format1 T_Сумма~~format1 format1

Обратите внимание. У некоторых полей, есть формат. Он идет после ~~. Например, поле Цена = 629,0000 надо вывести в формате 699-00, то оно должно иметь имя T_Цена~~format1. format1 – это вспомогательное поле и равно ##0-00. Итоги. Префикс Т_ означает, что это поле будет выводиться в таблице, а суффикс ~~format1 - что поле форматируется по формату поля format1. Формат данных соответствует условиям форматирования полей в Access.

3. Когда Вы создали запросы и отчет dot, то их нужно записать в таблицу (LA_CatalogReports) и из нее взять idReport, который будет использоваться для вывода на печать. Пример интерфейса.

Обратите внимание. Запросы содержат записи сразу многих заказов, чтобы вывести 1 заказ, нужно назначить фильтр. idЗаказ=%1. %1 будет заменен на поле формы заказа (idЗаказ) при выводе на печать.

Привязка к форме
Заключительным этапом вывода информации, является привязка отчета к кнопке формы. Код, который нужно написать на VBA, минимальный. Вот он

Private Sub butReport_Click()
' Сохраняем текст, если были изменения в форме

Me.Refresh
Dim rpt As rptRecord
Dim idReport As Long

' Код отчета берется из таблицы LA_CatalogReports
idReport = 228

' Инициализация отчета
fcInitReportADO Me.Form, idReport, rpt

' Отображение отчета
funPreviewReport rpt

End Sub
Обратите внимание. 228 соответствует индексу отчета.

 

Общие выводы

Таким образом, кажется, что для построения отчета нужно писать сложную программу. Но на самом деле все эти объекты и их настройка сведены к созданию SQL запроса, и для печати документа в Word не потребуется писать сложный программный код.

Достаточно просто составить запросы и файл * .dot таким образом, чтобы поля в запросах соответствовали закладкам. Более подробно об этом способе написано в документации к примеру.

Добавить комментарий