Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Создание пользовательских печатных форм из Access в Word (готовый вариант)  [new]
Swa111
Member

Откуда:
Сообщений: 92
Предлагаю на суд общественности почти готовое решение по созданию отчетов в формате RTF из Access с почти любой сложностью.
Способ формирования был взят от компонента для Delphi EkRtf.
Использование свободное при наличии в описании программы ссылки на данный топик.

Для создания отчета нужно придумать шаблон и сохранить его в формате RTF. В качестве управляющих полей используются поля (Что бы их увидеть alt+f9, что бы добавить ctrl+f9). Все управляющие команды имеют формат Функция(СписокПараметров).
Команды разделяются на две категории: управление ходом выполнения, управление данными

Управление ходом: Scan..EndScan Пара команд открывает данные и прокручивает блок для каждой строки
if..elif..else..endif - Стандартное ветвление

Для Вывода данных используется команда f(Поле)

В самом Access нужно заполнить таблицу t_rep - Объект отчета, содержит ссылку на шаблон и таблицу t_repQuery содержит запросы используемые командой Scan

Что бы распечатать отчет необходимо создать контекст
  Dim dic As New Scripting.Dictionary
  dic.CompareMode = TextCompare

инициализировать исходные данные
'Так сложно нужно только для форматера ;stdf:
  dic("Код.oper") = 1 'равно см таблицу t_operand
  dic("Код.value") = Me.Код.Value
  dic("Код.type") = "n" 'Тип параметра n-число, s-строка, d-Дата

а дальше запускаем формирование и чистим память
  PrintReport 1, dic' распечатать отчет с кодом 1 (таблица t_rep)
  Set dic = Nothing


более подробно как работают шаблоны см вложенную инструкцию.

К сообщению приложен файл (RtfReport.zip - 129Kb) cкачать
19 дек 18, 20:57    [21768893]     Ответить | Цитировать Сообщить модератору
 Re: Создание пользовательских печатных форм из Access в Word (готовый вариант)  [new]
Joss
Member

Откуда: г. Минск
Сообщений: 4840
Есть несколько вопросов к автору.
Чем Ваше решение лучше использования обыкновенных закладок для вывода информации в Word? Там ведь тоже используется шаблон, в котором размещаются закладки (правда формата DOT), а потом на их место подставляется нужный текст. (пример la_automati с LeaderSoft.ru)

Я в своё время собирал разные примеры по работе с Word из Access - Несколько советов по созданию документов в Word из Access вот тут на них можно посмотреть.

Мне например, нравится формирование документа напрямую из программы без шаблонов. В некоторых случаях это хорошее решение. Но для больших документов, типа договоров или бланков, я использую шаблоны.

Импорт в Word у Access организован из рук вон плохо. Ещё в Access XP/2003 для электронных документов я использовал формат PDF, который получал при помощи виртуального бесплатного принтера doPDF прямо из отчётов. Если же нужен был формат doc(rtf) то я полученные PDF документы обрабатывал программой SolidConverter. Получался довольно точный вид. Сейчас есть и другие программы для конвертации PDF в Word.

Пример прямого формирования документа Word из программы на Access
20 дек 18, 10:30    [21769214]     Ответить | Цитировать Сообщить модератору
 Re: Создание пользовательских печатных форм из Access в Word (готовый вариант)  [new]
Joss
Member

Откуда: г. Минск
Сообщений: 4840
Из-за ограничения сессии по времени пока возился с перерегистрацией пример отвалился. Прикрепляю повторно.

К сообщению приложен файл (PrintInWordM.zip - 29Kb) cкачать
20 дек 18, 10:32    [21769218]     Ответить | Цитировать Сообщить модератору
 Re: Создание пользовательских печатных форм из Access в Word (готовый вариант)  [new]
Swa111
Member

Откуда:
Сообщений: 92
Joss,

1) Чем лучше закладок

Если я правильно понял речь идет про механизм создания документов через рассылки?
Более гибкий механизм, возможно создавать иерархическую структуру документа (до 16 уровней вложенности запросов), использование условий позволяет включать или отключать части документа. Не нужно перескакивать между приложениями.

2) Шаблон vs программного метода

Минус программного метода: это необходимость программировать каждую часть документа.
Документ на базе шаблона если в нем не меняется запрос, может поправить и пользователь.
Документ на основе шаблона так же позволяет создавать более сложную структуру документа за более короткий срок, нежели полностью программным методом.
Если не нравится факт что вместе с БД нужно тащить шаблоны, то ни кто не мешает их хранить в самой БД.

3) Access -> Pdf -> Word
Костыли они конечно везде, но как то слишком много действий для конечного пользователя, да и в результате структура документа может не много отличаться от исходно задуманной.

Я не претендую на единственный верный способ формирования, просто предлагаю вариант. Основная же идея данного поста протестировать механизм на большем полигоне, отловить ошибки которые не выявлены на моих частных примерах.
20 дек 18, 12:05    [21769326]     Ответить | Цитировать Сообщить модератору
 Re: Создание пользовательских печатных форм из Access в Word (готовый вариант)  [new]
Joss
Member

Откуда: г. Минск
Сообщений: 4840
автор
1) Чем лучше закладок

Если я правильно понял речь идет про механизм создания документов через рассылки?
...
Нет. Здесь ни слова о рассылках. Прикладываю пример la_automat. Смотрите 3 пример Создание документа с использованием шаблона.

К сообщению приложен файл (la_automat.rar - 85Kb) cкачать
20 дек 18, 13:43    [21769489]     Ответить | Цитировать Сообщить модератору
 Re: Создание пользовательских печатных форм из Access в Word (готовый вариант)  [new]
Joss
Member

Откуда: г. Минск
Сообщений: 4840
автор
2) Шаблон vs программного метода

Минус программного метода: это необходимость программировать каждую часть документа.
Документ на базе шаблона если в нем не меняется запрос, может поправить и пользователь.
Документ на основе шаблона так же позволяет создавать более сложную структуру документа за более короткий срок, нежели полностью программным методом.
Если не нравится факт что вместе с БД нужно тащить шаблоны, то ни кто не мешает их хранить в самой БД.

Я не возражаю против использования шаблонов. Просто указал, что в некоторых случаях лучше использовать код. Кстати, я в некоторых программах , которые делаю для сторонних организаций храню шаблоны внутри программы. Причём предусмотрен механизм выгрузки и загрузки таких шаблонов в программу.

Пример.
Надо вывести в документ таблицу с переменным количеством строк (это чаще всего) или столбцов. Как Вы это сделаете при помощи шаблона? А кодом можно.
20 дек 18, 13:51    [21769499]     Ответить | Цитировать Сообщить модератору
 Re: Создание пользовательских печатных форм из Access в Word (готовый вариант)  [new]
Swa111
Member

Откуда:
Сообщений: 92
Joss,

С столбцами согласен, предложенный вариант не справится, точнее не будет корректно построен.
а вот с строками, легко. Сразу видно Вы не пробовали запустить пример, лучше сразу запустите "Печать за период" указав период с 01.12.2018 по 31.12.2018.
20 дек 18, 14:08    [21769540]     Ответить | Цитировать Сообщить модератору
 Re: Создание пользовательских печатных форм из Access в Word (готовый вариант)  [new]
Joss
Member

Откуда: г. Минск
Сообщений: 4840
Да, согласен. Закладки с этим не справятся.
20 дек 18, 14:37    [21769604]     Ответить | Цитировать Сообщить модератору
 Re: Создание пользовательских печатных форм из Access в Word (готовый вариант)  [new]
Joss
Member

Откуда: г. Минск
Сообщений: 4840
Маленький совет. В описании стоит указать сильные стороны вашего способа, его отличие от других, в каких случаях его предпочтительно использовать.
20 дек 18, 14:43    [21769615]     Ответить | Цитировать Сообщить модератору
 Re: Создание пользовательских печатных форм из Access в Word (готовый вариант)  [new]
Joss
Member

Откуда: г. Минск
Сообщений: 4840
Прочитав описание, я не увидел, чем Ваш способ лучше тех же закладок. А вот если бы Вы указали, что при вашем способе легко формируются списки и таблицы с произвольным количеством строк, то это наверняка бы многих заинтересовало.
20 дек 18, 14:47    [21769619]     Ответить | Цитировать Сообщить модератору
 Re: Создание пользовательских печатных форм из Access в Word (готовый вариант)  [new]
Swa111
Member

Откуда:
Сообщений: 92
Joss,

Под фразой "с почти любой сложностью" это и понималось, да и не считал что формирование таблиц это какая то архисложная задача
20 дек 18, 14:50    [21769630]     Ответить | Цитировать Сообщить модератору
 Re: Создание пользовательских печатных форм из Access в Word (готовый вариант)  [new]
alecko
Member

Откуда: Башкирия
Сообщений: 464
предложенный вариант не выполняет задачу, которая стоит перед программируемым шаблоном - изменение пользователем структуры документа (добавление новых данных, либо удаление их) - для того чтобы это сделать нужно лезть в базу.
вероятно каким-то промежуточным решением мог бы быть вывод полных данных, с названиями полей, их значениями и примером вызова этого поля (с учетом названия запроса) , также может быть функций с описанием, может ещё что - в эксель (ворд) (типа справки, просто чтоб знать как вызывать поле ИНН из базы например).
20 дек 18, 15:19    [21769678]     Ответить | Цитировать Сообщить модератору
 Re: Создание пользовательских печатных форм из Access в Word (готовый вариант)  [new]
Joss
Member

Откуда: г. Минск
Сообщений: 4840
Swa111, если хотите, чтобы Ваша разработка не затерялась в глубинах форума, разместите её на сайте Андрея Митина - am.rusimport.ru Там, в левом меню есть кнопка "Добавить статью". Подготовьте, добавьте. После оценки, Андрей её сделает доступной для всех. Правила там очень демократичны.

Форум там практически не посещаем, зато есть много примеров и наработок.
21 дек 18, 08:56    [21770216]     Ответить | Цитировать Сообщить модератору
 Re: Создание пользовательских печатных форм из Access в Word (готовый вариант)  [new]
Swa111
Member

Откуда:
Сообщений: 92
ПЕНСИОНЕРКА,
благодарю за внимание!

Исправлены некоторые ошибки, добавлены объявления переменным.

Теперь транслированный шаблон хранится в самой БД, (преобразование не обратимо).
Логика получения шаблона следующая:
Проверяется есть ли на диске файл с шаблоном (имя хранится в таблице t_rep)
Если время редактирования файла изменилось то запускается процесс трансляции во внутреннее представление
Если файл не существует или он не изменился то шаблон берется непосредственно из БД

Для переноса в свой проект необходимо:
+
перетащить объекты
  • t_rep
  • t_repQuery
  • Common
  • Filter
  • Report

    Так же в референсах необходимо подключить
  • Microsoft Scripting Runtime
  • Microsoft VBScript Regular Expressions 5.5


  • К сообщению приложен файл (pack.zip - 121Kb) cкачать
    3 фев 19, 17:11    [21800834]     Ответить | Цитировать Сообщить модератору
     Re: Создание пользовательских печатных форм из Access в Word (готовый вариант)  [new]
    aleks222
    Member

    Откуда:
    Сообщений: 595
    Joss
    Чем Ваше решение лучше использования обыкновенных закладок для вывода информации в Word?


    Закладки - это плохо.
    Я ваще не понимаю упертых идиотов, использующий этот механизм.
    Когда в Word уже 100 лет есть DocumentVariables.
    3 фев 19, 19:10    [21800878]     Ответить | Цитировать Сообщить модератору
     Re: Создание пользовательских печатных форм из Access в Word (готовый вариант)  [new]
    ПЕНСИОНЕРКА
    Member

    Откуда: Владимирская обл
    Сообщений: 4478
    Swa111
    Исправлены некоторые ошибки, добавлены объявления переменным.


    не всегда же количество платежей --четное
    добавила 13-й платеж --в ВОРД он не попал
    НеделяПлатежНеделяПлатеж
    11007120
    21208120
    31209120
    412010120
    513011100
    613012100
    3 фев 19, 19:53    [21800889]     Ответить | Цитировать Сообщить модератору
     Re: Создание пользовательских печатных форм из Access в Word (готовый вариант)  [new]
    ПЕНСИОНЕРКА
    Member

    Откуда: Владимирская обл
    Сообщений: 4478
    aleks222
    Joss
    Чем Ваше решение лучше использования обыкновенных закладок для вывода информации в Word?


    Закладки - это плохо.
    Я ваще не понимаю упертых идиотов, использующий этот механизм.
    Когда в Word уже 100 лет есть DocumentVariables.

    необязательно применять закладки --можно ЗАМЕНУ, некое слово в скобках, а в программе прописать

    заменить "фио",cells(номер активной строки, некого столбца)

    ------------пример документа-----------

    договор (номер) от (дата)
    заключен между (клиент) (должность клиента) (фио) и фирмой РОГА И КОПЫТА в лице....


    подписи
    клиент
    фирма (фирма)
    должность (должность клиента)
    фио (фио)
    ....
    -----------------------------------------------
    если имена замен будут соответствовать первой(второй) строке ексель -листа(или именам полей таблицы/запроса аксесс), то код модуля будет единый

    для всех непустых столбцов
    заменить "(" cells(1, некого столбца) & ")",cells(номер активной строки, некого столбца)

    ----
    для более полного понимания хотелок надо конечно сначала смотреть
    --пример типичной ексель/аксесс таблицы(данные можно условные)
    --пару примеров ворд-шаблонов(чистый договор без таблицы, договор с таблицей)

    таблицей считается только та, что показывает перечень услуг/работ
    таблица для форматирования шапок/подписей --это не таблица, а просто очень удобный прием для форматирования ворд-документа
    __________________
    4 фев 19, 08:24    [21801004]     Ответить | Цитировать Сообщить модератору
     Re: Создание пользовательских печатных форм из Access в Word (готовый вариант)  [new]
    Swa111
    Member

    Откуда:
    Сообщений: 92
    Внесены изменения в поиск параметров:

    Если параметр находится на форме, то теперь его можно не добавлять в контекст и использовать в запросе напрямую

    select * from Платежи where Код_контракта = %Forms!Контракты!Код_контракта%;
    


    Или же непосредственно в шаблоне {f(Forms!Контракты!Дата_контракта)}

    В результате код вызова будет таким

      Dim dic As Scripting.Dictionary 'Словарь только объявляется, не создавая новый экземпляр
      PrintReport 1, dic 'Распечатать 1-й отчет
      Set dic = Nothing 'Но удалить его все равно надо
    


    К сообщению приложен файл (pack.zip - 149Kb) cкачать
    4 фев 19, 12:49    [21801196]     Ответить | Цитировать Сообщить модератору
    Все форумы / Microsoft Access Ответить