Экспорт отчетов в doc/docx или аналоги. Какие есть варианты?

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

Экспорт отчетов в doc/docx или аналоги. Какие есть варианты?

Сообщение RaFaeL »

Есть необходимость генерировать из Клариона нечто, что потом можно просто так взять и открыть с редактированием в обычном Word. Как правило, это форма договора с разными приложениями-спецификациями. Какие варианты существуют? Начну с того, что уже знаю:

1) Экспорт по OLE. Сейчас используется механизм, при котором "рыба" создается пользователем в Word, затем в него из программы в нужные места передаются переменные. Тут не устраивает то, что у каждой переменной может быть только 1 значение и таким способом не передать таблицы с произвольным количеством строк. Возможно, стоит попробовать полное создание документа Word по OLE с нуля по структуре отчета. Есть ли у кого-нибудь такой шаблон или класс?

2) Экспорт в векторный PDF и дальнейшая конвертация его в Word. Один из клиентов так делает онлайн-конвертером. Искал такие варианты. Онлайн-конвертеры с API все платные. Не нашел бесплатного, может кто знает? Также искал библиотеки которые можно прикрутить. Они есть! Например https://www.investintech.com/purchase/developer/ но стоят блин...

3) Экспорт в rtf! Много для чего могло бы хватить! Есть ли у кого-нибудь такой шаблон или класс?

4) Экспорт в HTML! Аналогично! Есть даже штатный (?) класс HTMLGenerator. Им кто-то пользуется? Примеры?

5) Экспорт напрямую в docx! Не нашел библиотек!

6) Еще варианты???

Тут везде я имею в виду шаблоны и классы, когда у нас есть готовая структура Report и ее хочется в не сильно много строк кода перенести в обсуждаемый формат. Кто чем и как пользуется?
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Экспорт отчетов в doc/docx или аналоги. Какие есть варианты?

Сообщение finsoftrz »

Я в своем генераторе и Фомин в фрб используем вывод в rtf с фреймами. Но не совсем на основании report структуры. Точнее сказать, из некоего промежуточного хранилища динамически строится report или rtf, в зависимости от заданного режима. Надписи в фреймах потом можно редактировать в ворде или райтере. Это, конечно, имеет некоторые ограничения. Изменять положение фреймов крайне не удобно.

Был еще и в архивах этого форума шаблон вывода в rtf, цепляющийся к стандартной report процедуре. Тоже со своими ограниченими.

Для договоров я давно обхожусь без report. Есть такой старый генератор отчетов, который на основании шаблона в формате rtf с вставками ## и файла с данными, строит уже полноценный rtf без фреймов, с таблицами и т.п. Можно задавать аналоги наших детейл структур. Можно приделать дополнительный список формул, чтобы часть вычислений вынести за рамки программы. Я также пробовал делать класс, чтобы обойтись без временного файла с данными, но до конца не отладил, так как область применения инструмента касается только договоров. Кстати, бланки очень легко редактируют обычные пользователи. Обычный текст, в котором обозначаются вставки. Называется этот генератор reportRtf.

Если современно и молодежно, то docx, он аналогичен xlsx, даже проще. Я не делал. Может, у Валеры Будько что-то есть готовое и не жалко.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7329
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Экспорт отчетов в doc/docx или аналоги. Какие есть варианты?

Сообщение Игорь Столяров »

RaFaeL писал(а): 12 Февраль 2020, 20:41 и таким способом не передать таблицы с произвольным количеством строк.
Элементарно. Шаблоны делать не умею, но могу объяснить принцип, если нужно … :)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

Экспорт отчетов в doc/docx или аналоги. Какие есть варианты?

Сообщение RaFaeL »

Игорь Столяров писал(а): 12 Февраль 2020, 21:24 Элементарно. Шаблоны делать не умею, но могу объяснить принцип, если нужно …
Расскажите, послушаю ) Только если это будет рассказ просто о том, как технически по OLE это сделать, так это и козе понятно. Вопрос в том, как такие переменные задать в Word, и чтобы адекватно, а не вот эти "##" с последующей тупой заменой текста
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

Экспорт отчетов в doc/docx или аналоги. Какие есть варианты?

Сообщение RaFaeL »

finsoftrz писал(а): 12 Февраль 2020, 21:12 Я в своем генераторе и Фомин в фрб используем вывод в rtf с фреймами. Но не совсем на основании report структуры. Точнее сказать, из некоего промежуточного хранилища динамически строится report или rtf, в зависимости от заданного режима. Надписи в фреймах потом можно редактировать в ворде или райтере. Это, конечно, имеет некоторые ограничения. Изменять положение фреймов крайне не удобно.
Можно из структуры. Структура у нас есть, из нее делается экспорт в xlsx. Есть примеры?
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Экспорт отчетов в doc/docx или аналоги. Какие есть варианты?

Сообщение finsoftrz »

RaFaeL писал(а): 12 Февраль 2020, 22:55
Игорь Столяров писал(а): 12 Февраль 2020, 21:24 Элементарно. Шаблоны делать не умею, но могу объяснить принцип, если нужно …
Расскажите, послушаю ) Только если это будет рассказ просто о том, как технически по OLE это сделать, так это и козе понятно. Вопрос в том, как такие переменные задать в Word, и чтобы адекватно, а не вот эти "##" с последующей тупой заменой текста
Зря Вы так про #. Для договоров это отличный вариант. В решетках может быть имя динамически вычисляемой переменной. Решетки также используются для выделения отдельных секций (деталек), позволяющих организовать вывод многострочных частей. И при этом используется прямое формирование ртф, без всяких оле.
Пользователям удобнее готовить договора в ворде, а не в каких-то экзотических дизайнерах. Этим часто занимаются юристы, не работающие в нашей программе.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Экспорт отчетов в doc/docx или аналоги. Какие есть варианты?

Сообщение finsoftrz »

RaFaeL писал(а): 12 Февраль 2020, 22:58
finsoftrz писал(а): 12 Февраль 2020, 21:12 Я в своем генераторе и Фомин в фрб используем вывод в rtf с фреймами. Но не совсем на основании report структуры. Точнее сказать, из некоего промежуточного хранилища динамически строится report или rtf, в зависимости от заданного режима. Надписи в фреймах потом можно редактировать в ворде или райтере. Это, конечно, имеет некоторые ограничения. Изменять положение фреймов крайне не удобно.
Можно из структуры. Структура у нас есть, из нее делается экспорт в xlsx. Есть примеры?
Пример чего, сформированного ртф файла? Могу завтра прикрепить, если нужно. Открываете через блокнот и там все видно.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7329
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Экспорт отчетов в doc/docx или аналоги. Какие есть варианты?

Сообщение Игорь Столяров »

RaFaeL писал(а): 12 Февраль 2020, 22:55 Вопрос в том, как такие переменные задать в Word
Возможно я не правильно понял задачу.
Как верно было замечено не мной - офисный пакет прекрасно подходит для заполнения пользователями готовых шаблонов,
но это могут быть не только одиночные поля, но и табличные структуры для счётов, накладных, спецификаций и т.д. без проблем.
Это работает лет пятнадцать, со времён Microsoft Office XP (был такой).

Поясните пожалуйста, что такое "переменные в Word", которые Вы хотите задать ?
Или Вы так называете поля для заполнения в шаблоне отчёта ?
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7329
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Экспорт отчетов в doc/docx или аналоги. Какие есть варианты?

Сообщение Игорь Столяров »

RaFaeL писал(а): 12 Февраль 2020, 20:41 таким способом не передать таблицы с произвольным количеством строк
RaFaeL писал(а): 12 Февраль 2020, 22:55 как технически по OLE это сделать, так это и козе понятно
Опять когнитивный диссонанс. :)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

Экспорт отчетов в doc/docx или аналоги. Какие есть варианты?

Сообщение RaFaeL »

Игорь Столяров писал(а): 13 Февраль 2020, 0:11 Поясните пожалуйста, что такое "переменные в Word", которые Вы хотите задать ?
Или Вы так называете поля для заполнения в шаблоне отчёта ?
Я имею в виду поля https://docs.microsoft.com/ru-ru/archiv ... ord-2010-2
Если при вставке поля выбрать не предопределенное поле, а DocVariable, то можно добавить поле с любым именем и затем его заполнить по OLE. Вот это поле типа DocVariable я называю переменной (ну логично же).
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

Экспорт отчетов в doc/docx или аналоги. Какие есть варианты?

Сообщение RaFaeL »

Игорь Столяров писал(а): 13 Февраль 2020, 0:11 Как верно было замечено не мной - офисный пакет прекрасно подходит для заполнения пользователями готовых шаблонов,
но это могут быть не только одиночные поля, но и табличные структуры для счётов, накладных, спецификаций и т.д. без проблем.
Это работает лет пятнадцать, со времён Microsoft Office XP (был такой).
Как вы эту таблицу опишете в Word? Может я чего-то не знаю
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Экспорт отчетов в doc/docx или аналоги. Какие есть варианты?

Сообщение Admin »

Что то типа такого https://github.com/DocxFactory/DocxFactory поискать
И сделать враппер как на xlsxwriter
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

Экспорт отчетов в doc/docx или аналоги. Какие есть варианты?

Сообщение RaFaeL »

Это я кстати смотрел пару лет назад. Штука интересная, но какого-то дикого размера (30 мб в развернутом виде, у меня все остальная программа столько) и с "нуля" не позволяет построить docx, только какое-то слияние. Т.е. это просто замена OLE в режиме работы с полями (переменными), не более того
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7329
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Экспорт отчетов в doc/docx или аналоги. Какие есть варианты?

Сообщение Игорь Столяров »

Игорь Столяров писал(а): 13 Февраль 2020, 0:15 Вот это поле типа DocVariable я называю переменной (ну логично же).
Я всегда за то, что бы не усложнять простое. :)
Предположим обычный пользователь, не знакомый с работами Татьяны Суровцевой, сам нарисовал в Microsoft Word
отчёт в том виде, как он его хочет видеть (или местный ботан ему помог). Получилось как в прикреплённом примере.
Как заменить одиночные поля - козе понятно :), нас интересует список. Открываем DOC(X), RTF, ODT и работаем через OLE.

Код: Выделить всё

  ! QSpisok - это произвольная QUEUE с записями для экспорта, WordObject - OLE с открытым документом.
  Loc:AllRecord = Records(QSpisok)  ! Кол-во записей для экспорта в табличную структуру

  WordObject{'Selection.Find.ClearFormatting'}             ! очистили ранее указанные параметры поиска
  WordObject{'Selection.Find.Replacement.ClearFormatting'} ! очистили ранее указанные параметры замены
                                                           ! ищем табличный блок и заменяем, по всему документу
  If WordObject{'Application.Selection.Find.Execute("' & Clip('[T01]') & '", , , , , , 1, 1, , "' & Clip('[T01]') & '", 1)'}

     Loop Loc:Count = 1 to Loc:AllRecord by 1
       Get(QSpisok,Loc:Count)

       WordObject{'Application.Selection.TypeText("' & QSpisok.Nomer & '")'}
       WordObject{'Application.Selection.MoveRight(12)'}
       WordObject{'Application.Selection.TypeText("' & QSpisok.Name & '")'}
       WordObject{'Application.Selection.MoveRight(12)'}
       WordObject{'Application.Selection.TypeText("' & Clip(Left(QSpisok.Kolvo)) & '")'}
       WordObject{'Application.Selection.MoveRight(12)'}
       WordObject{'Application.Selection.TypeText("' & QSpisok.Ed & '")'}
       WordObject{'Application.Selection.MoveRight(12)'}
       WordObject{'Application.Selection.TypeText("' & Clip(Left(QSpisok.Price)) & '")'}
       WordObject{'Application.Selection.MoveRight(12)'}
       WordObject{'Application.Selection.TypeText("' & Clip(Left(QSpisok.Summa)) & '")'}

       If Loc:Count <> Loc:AllRecord then WordObject{'Application.Selection.MoveRight(12)'}.
     end
  end
Кратко поясню происходящее:
1. Находим поле табличного блока (и устанавливаем курсор в левую верхнюю ячейку таблицы);
2. Вставляем значение каждой колонки в текущую ячейку и "нажимаем клавишу" стрелка вправо.
3. При заполнении строки, Word сам добавляет новую строку и переходит на неё - поэтому после
последнего поля, последней записи - не делаем "нажатие клавиши" (иначе будет пустая, лишняя строка).
4. Всё. Таблица вставлена. Надеюсь, что излишне говорить о том, что пользователь сам может задать в шаблоне
нужные ему форматы, выравнивание, оформление, цвета и т.д. отдельно для каждой ячейки в таблице … ;)
Вложения
Template.zip
(4.84 КБ) 170 скачиваний
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Экспорт отчетов в doc/docx или аналоги. Какие есть варианты?

Сообщение finsoftrz »

Вот из загашников reportRTF. В архиве много примеров с описанием. Есть сырцы на си и паскаль, при желании можно интегрировать в кларион, как некоторые любят. :-) Есть и готовый exe.
Я использую exe. Работа убрана в класс. Сделана еще развязка в виде динамических формул. Классу передается имя файла шаблона. Если рядом лежит файл с тем же именем и расширением txt, то класс автоматом подгружает из него формулы и вычисляет при формировании данных в нужных местах (секциях). В формулах доступно все, что ест evaluate.
Со стороны клариона у меня концепция единая для всех дизайнеров. Ее еще Фомин в FRB показал. Создается некая мастер-процедура, которая определяет правила для формирования определенного вида форм. К одной мастер-процедуре может быть отнесено множество форм. Содержимое конкретной формы (бланка) нашей программе не известно, только заданные правила.
Вложения
reportf2003.zip
(464.89 КБ) 174 скачивания
C6/C11, ШВС, tps/btrieve.
Ответить