Выход тут только один, придется писать программу на VBA, что для начинающего специалиста может оказаться довольно трудным.
С другой стороны, когда Вы делаете много отчетов: договора, акты, заказы и т.п. нужен уже будет другой подход. Необходимо разработать класс на VBA, чтобы его можно было использовать много, много раз для абсолютно разных документов.
Цель разработки такого класса – это создание простого интерфейса, который будет выводить на печать документы Word, используя информацию запросов. При этом обращение к кодированию информации отчета путем VBA (visual basic for application) будет минимальным.
|
В архиве Вы найдете файл с примером, в котором рассматривается вопрос подготовки отчета для заказов. Такой отчет имеет ряд сложных объектов.
Во первых у него есть шапка, в которой записаны реквизиты поставщика и заказчика, а также номер отчета и дата, которая может иметь произвольный формат: 11.01.2010 или 11 января 2010 г.
Во вторых, у отчета есть спецификация, которая состоит из таблицы с товарами, наименование, количество, сумма, которая тоже может быть записана в формате ###-00, где - разделитель разрядов. Таким образом 510 руб. надо записать как 510-00 руб.
В третьих, у отчета есть сумма прописью. Например, у Вас заказ имеет 510 рублей, то в счете желательно написать сумму Пятьсот десять рублей 00 коп.
|
|
В примере, который находится в папке 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 |
Запрос. formЗаказыОтчетСчетWordQry_T
Второй запрос содержит поля таблицы заказов. Выводимые поля имеют префикс T_ , остальные - вспомогательные
|
T_Пункт |
T_Актив |
T_Кол_во |
T_ЕдИзм |
T_Цена~~format1 |
T_Сумма~~format1 |
format1 |
1 |
Клан Пещерного Медведя |
1
|
шт.
|
99,00р.
|
99,00р.
|
# ##0-00
|
1 |
Jet Live, комплект из 2 шт. |
3
|
|
820,00р.
|
2 460,00р.
|
# ##0-00
|
Обратите внимание. У некоторых полей, есть формат. Он идет после ~~. Например, поле Цена = 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() Dim rpt As rptRecord ' Инициализация отчета fcInitReportADO Me.Form, 228, rpt ' Отображение отчета funPreviewReport rpt End Sub
Обратите внимание. 228 соответствует индексу отчета в базе данных. Для других документов договоров, актов и т.п. нужно только будет изменить этот индекс.
|
|
Таким образом, используя такой класс, нужно только научиться делать только закладки и составлять запросы SQL, чтобы выводить на печать сложные документы в формате Word
|
|