Экспорт отчетов в doc/docx или аналоги. Какие есть варианты?
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4615
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 6 раз
- Поблагодарили: 37 раз
Экспорт отчетов в doc/docx или аналоги. Какие есть варианты?
Вот бланк в rtf, сформированный FRB. Его смотреть надо через Word. OpenOffice имеет погрешность в вычислении горизонтальных координат фреймов (разные единицы измерения относительно Word). Поэтому в настройках программ я задаю, какой пакет используется, и в своем дизайнере автоматически корректирую погрешность. Если открыть в блокноте, то можно достаточно легко разобраться, как формировать. Когда Word сохраняет файл в rtf, то включает туда кучу служебной информации, а тут все чисто и прозрачно. Для договоров я такой подход не рекомендовал бы.
- Вложения
-
- 1.zip
- (3.65 КБ) 168 скачиваний
C6/C11, ШВС, tps/btrieve.
Экспорт отчетов в doc/docx или аналоги. Какие есть варианты?
Брось взгляд на генератор отчётов combit List & Label. Есть совсем простой пример Кларион-приложения ( examples\people.app ) с экспортом в rtf/pdf/xls https://mega.nz/#!lsRDjQrJ!3Vldj49d4Zyx ... F3oK91lh_o. Cейчас вроде бы можно генерить и docx, давно не смотрел.
Бланки могут правиться пользователями ( было такое ), можно поиграться с примером. Но, естественно, не без ограничений.
Бланки могут правиться пользователями ( было такое ), можно поиграться с примером. Но, естественно, не без ограничений.
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1376
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 7 раз
- Поблагодарили: 1 раз
- Контактная информация:
Экспорт отчетов в doc/docx или аналоги. Какие есть варианты?
Игорь, я извиняюсь, но эмулировать "нажатия клавиш" это детский сад, а не программирование. А если он это вот [T01] не в таблице напишет? Я уж не говорю о том, что все видимо заточено под какую-то жестко заданную таблицу. Несерьезно все это, никакой "защиты от дурака"Игорь Столяров писал(а): ↑13 Февраль 2020, 5:41 Кратко поясню происходящее:
1. Находим поле табличного блока (и устанавливаем курсор в левую верхнюю ячейку таблицы);
2. Вставляем значение каждой колонки в текущую ячейку и "нажимаем клавишу" стрелка вправо.
3. При заполнении строки, Word сам добавляет новую строку и переходит на неё - поэтому после
последнего поля, последней записи - не делаем "нажатие клавиши" (иначе будет пустая, лишняя строка).
4. Всё. Таблица вставлена. Надеюсь, что излишне говорить о том, что пользователь сам может задать в шаблоне
нужные ему форматы, выравнивание, оформление, цвета и т.д. отдельно для каждой ячейки в таблице …
Последний раз редактировалось RaFaeL 13 Февраль 2020, 10:33, всего редактировалось 1 раз.
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1376
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 7 раз
- Поблагодарили: 1 раз
- Контактная информация:
Экспорт отчетов в doc/docx или аналоги. Какие есть варианты?
У нас свой весьма навороченный редактор отчетов, вопрос только в записи в необходимый формат файла, сам редактор отчетов необходимо оставить свой
- Игорь Столяров
- Ветеран движения
- Сообщения: 7373
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 13 раз
- Поблагодарили: 48 раз
Экспорт отчетов в doc/docx или аналоги. Какие есть варианты?
"Нажатие клавиши" - это я Вам написал смысл действия Application.Selection.MoveRight(12), никаких клавиатурных команд там нет.
Насколько я понимаю, есть 2 пути:
- создаётся общепринятый DOC/XLS на основании отчёта программы (как в 1С);
- пользователь (или настройщик) сам задаёт оформление и содержание отчёта в шаблоне, а программа его заполняет данными.
Во втором случае, конечно существуют некоторые правила создания шаблона для отчёта, расстановки полей, графики и т.д.
Если указанный Вами вопрос доминирует, то можно закрыть для пользователей редактирование шаблонов, у нас был
вариант, когда шаблоны отчетов хранились в BLOB и обновлялись вместе с версией программы.
За теми кто отстал - не возвращаться. (С) Кодекс
- Игорь Столяров
- Ветеран движения
- Сообщения: 7373
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 13 раз
- Поблагодарили: 48 раз
Экспорт отчетов в doc/docx или аналоги. Какие есть варианты?
Готов поспорить, что ни у кого нет редактора отчётов круче, чем обычный Microsoft Word (если в нём делать шаблоны отчётов).
За теми кто отстал - не возвращаться. (С) Кодекс
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1376
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 7 раз
- Поблагодарили: 1 раз
- Контактная информация:
Экспорт отчетов в doc/docx или аналоги. Какие есть варианты?
Спасибо, вот это подходящий под задачу вариант, мне очень понравилось. Еще бы примеров кода ((
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1376
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 7 раз
- Поблагодарили: 1 раз
- Контактная информация:
Экспорт отчетов в doc/docx или аналоги. Какие есть варианты?
Здесь смотрите какая ситуация. У нас есть простенький модуль заполнения готовых вордовских файлов через поля (переменные). Он древний, написан лет 15 назад на скорую руку, не развиваем. И есть визуальный редактор форм с экспортом в разные форматы (сейчас поддерживается wmf, png, pdf, xls, xlsx), что-то типа как в 1С. Там нет никаких шаблонов файлов, все хранится в наших внутренних структурах. И вот в этот редактор надо прикрутить экспорт в Word (либо во что-то, что понимает Word).Игорь Столяров писал(а): ↑13 Февраль 2020, 10:46 Насколько я понимаю, есть 2 пути:
- создаётся общепринятый DOC/XLS на основании отчёта программы (как в 1С);
- пользователь (или настройщик) сам задаёт оформление и содержание отчёта в шаблоне, а программа его заполняет данными.
Во втором случае, конечно существуют некоторые правила создания шаблона для отчёта, расстановки полей, графики и т.д.
Если указанный Вами вопрос доминирует, то можно закрыть для пользователей редактирование шаблонов, у нас был
вариант, когда шаблоны отчетов хранились в BLOB и обновлялись вместе с версией программы.
- Игорь Столяров
- Ветеран движения
- Сообщения: 7373
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 13 раз
- Поблагодарили: 48 раз
Экспорт отчетов в doc/docx или аналоги. Какие есть варианты?
Всё - понял. Вам нужен конвертер готовых отчётных форм в файл, который можно открыть Microsoft Word.
Кстати, здесь можно рассмотреть варианты работы с OCR или PDF (есть библиотеки конвертации PDF в DOC).
За теми кто отстал - не возвращаться. (С) Кодекс
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1376
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 7 раз
- Поблагодарили: 1 раз
- Контактная информация:
Экспорт отчетов в doc/docx или аналоги. Какие есть варианты?
Ну так я сразу так в заголовке и написалИгорь Столяров писал(а): ↑13 Февраль 2020, 11:16 Всё - понял. Вам нужен конвертер готовых отчётных форм в файл, который можно открыть Microsoft Word.
Ищу, не могу найти, от 2500$есть библиотеки конвертации PDF в DOC.
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4615
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 6 раз
- Поблагодарили: 37 раз
Экспорт отчетов в doc/docx или аналоги. Какие есть варианты?
Это все в составе навороченного класса дизайнера. Выдрал рутинку, которая выводит в rtf, может, поможет чем.
Код: Выделить всё
outRTF_r routine !вывод в rtf
DATA
lor:date long
lor:clock long
lor:korX2 real
lor:korY2 real
lor:korL real
lor:h real
lor:queueFonts queue, pre()
lor:font string(32)
end
lor:queueColors queue, pre()
lor:color long
end
lor:j long
lor:f string(3)
lor:colorFont string(32)
lor:colorBgr string(32)
lor:colorLine string(32)
lor:colorWhite string(32)
lor:colorTmp long
lor:colorInb byte,DIM(4),OVER(lor:colorTmp)
CODE
if SELF.FlagRTF=0
loc:err=7
exit
end
if SELF.FileNameRTF=''
loc:err=7
exit
end
if sub(lower(SELF.FileNameRTF),len(clip(SELF.FileNameRTF))-3,4)<>'.rtf'
SELF.FileNameRTF=clip(SELF.FileNameRTF) & '.rtf'
end
if exists(SELF.FileNameRTF)
remove(SELF.FileNameRTF)
end
ASCIIFile{PROP:NAME}=SELF.FileNameRTF
create(ASCIIFile)
open(ASCIIFile)
if error()
loc:err=8
exit
end
lor:date=today()
lor:clock=clock()
SELF.SetKoeff(1) !тест
loop loc:i=1 to records(SELF.DrawButtonsRTF)
get(SELF.DrawButtonsRTF,loc:i)
if SELF.DrawButtonsRTF.ButtonFontName<>''
lor:font=SELF.DrawButtonsRTF.ButtonFontName
get(lor:queueFonts,lor:font)
if error()
add(lor:queueFonts,lor:font)
end
end
if SELF.DrawButtonsRTF.ButtonFontColor>0
clear(lor:queueColors)
lor:color=SELF.DrawButtonsRTF.ButtonFontColor
get(lor:queueColors,lor:color)
if error()
add(lor:queueColors,lor:color)
end
end
if SELF.DrawButtonsRTF.ButtonBackGround>0 and SELF.DrawButtonsRTF.ButtonFlagBackGround=1
clear(lor:queueColors)
lor:color=SELF.DrawButtonsRTF.ButtonBackGround
get(lor:queueColors,lor:color)
if error()
add(lor:queueColors,lor:color)
end
end
if SELF.DrawButtonsRTF.ButtonBorderColor>0
clear(lor:queueColors)
lor:color=SELF.DrawButtonsRTF.ButtonBorderColor
get(lor:queueColors,lor:color)
if error()
add(lor:queueColors,lor:color)
end
end
end
arf:rec='{{\rtf1\ansi\deff0'
add(ASCIIFile)
arf:rec='{{\fonttbl{{\f0\fcharset204 Arial;}'
if records(lor:queueFonts)>0
loop lor:j=1 to records(lor:queueFonts)
get(lor:queueFonts,lor:j)
arf:rec=clip(arf:rec) & '{{\f' & lor:j & '\fcharset204 ' & clip(lor:font) & ';}'
end
end
arf:rec=clip(arf:rec) & '}'
add(ASCIIFile)
arf:rec='{{\colortbl \red0\green0\blue0;'
if records(lor:queueColors)>0
loop lor:j=1 to records(lor:queueColors)
get(lor:queueColors,lor:j)
lor:colorTmp=lor:color
arf:rec=clip(arf:rec) & '\red' & lor:colorInb[1] & '\green' & lor:colorInb[2] & '\blue' & lor:colorInb[3] & ';'
end
end
lor:colorTmp=COLOR:White
arf:rec=clip(arf:rec) & '\red' & lor:colorInb[1] & '\green' & lor:colorInb[2] & '\blue' & lor:colorInb[3] & ';'
lor:colorWhite='\brdrcf' & records(lor:queueColors)+1 !белые границы для скрытия рамки
arf:rec=clip(arf:rec) & '}'
add(ASCIIFile)
arf:rec='{{\info{{\title ' & clip(SELF.ReportComment) & '}{{\author ФинСофт:Дизайнер бланков}' & |
'{{\creatim\yr' & year(lor:date) & '\mo' & format(month(lor:date),@n02) & '\dy' & format(day(lor:date),@n02) & |
'\hr' & sub(format(lor:clock,@t01),1,2) & '\min' & sub(format(lor:clock,@t01),4,2) & '}' & |
'{{\*\windowcaption ' & clip(SELF.ReportComment) & '}}'
add(ASCIIFile)
if SELF.ReportPaperNoStd=0
if SELF.ReportFlagLand=0
arf:rec='\paperw' & (round(8252*1445.4/1000,1)) & '\paperh' & (round(11688*1445.4/1000,1)) & '\margl' & round(SELF.ReportMargLeft*567/10,1) & '\margr' & round(SELF.ReportMargRight*567/10,1) & '\margt' & round(SELF.ReportMargTop*567/10,1) & '\margb' & round(SELF.ReportMargBottom*567/10,1) & '\sectd\psz256\viewkind1\viewscale100\viewzk0'
else
arf:rec='\paperw' & (round(11688*1445.4/1000,1)) & '\paperh' & (round(8252*1445.4/1000,1)) & '\margl' & round(SELF.ReportMargLeft*567/10,1) & '\margr' & round(SELF.ReportMargRight*567/10,1) & '\margt' & round(SELF.ReportMargTop*567/10,1) & '\margb' & round(SELF.ReportMargBottom*567/10,1) & '\sectd\psz256\viewkind1\viewscale100\viewzk0\landscape'
end
else
if SELF.ReportFlagLand=0
arf:rec='\paperw' & (round(8252/210*SELF.ReportPaperWidth*1445.4/1000,1)) & '\paperh' & (round(8252/210*SELF.ReportPaperHeight*1445.4/1000,1)) & '\margl' & round(SELF.ReportMargLeft*567/10,1) & '\margr' & round(SELF.ReportMargRight*567/10,1) & '\margt' & round(SELF.ReportMargTop*567/10,1) & '\margb' & round(SELF.ReportMargBottom*567/10,1) & '\sectd\psz256\viewkind1\viewscale100\viewzk0'
else
arf:rec='\paperw' & (round(8252/210*SELF.ReportPaperHeight*1445.4/1000,1)) & '\paperh' & (round(8252/210*SELF.ReportPaperWidth*1445.4/1000,1)) & '\margl' & round(SELF.ReportMargLeft*567/10,1) & '\margr' & round(SELF.ReportMargRight*567/10,1) & '\margt' & round(SELF.ReportMargTop*567/10,1) & '\margb' & round(SELF.ReportMargBottom*567/10,1) & '\sectd\psz256\viewkind1\viewscale100\viewzk0\landscape'
end
end
add(ASCIIFile)
loop loc:i=1 to records(SELF.DrawButtonsRTF)
get(SELF.DrawButtonsRTF,loc:i)
if SELF.DrawButtonsRTF.ButtonID=-1 and loc:i>1
arf:rec='\par\pard\plain'
add(ASCIIFile)
arf:rec='\par\page'
add(ASCIIFile)
cycle
end
if SELF.DrawButtonsRTF.ButtonFontName=''
lor:f='\f0'
else
lor:font=SELF.DrawButtonsRTF.ButtonFontName
get(lor:queueFonts,lor:font)
lor:f='\f' & pointer(lor:queueFonts)
end
lor:colorFont=''
lor:colorBgr=''
lor:colorLine=''
if SELF.DrawButtonsRTF.ButtonBackGround>0 and SELF.DrawButtonsRTF.ButtonFlagBackGround=1
clear(lor:queueColors)
lor:color=SELF.DrawButtonsRTF.ButtonBackGround
get(lor:queueColors,lor:color)
lor:colorBgr='\cbpat' & pointer(lor:queueColors)
end
if SELF.DrawButtonsRTF.ButtonBorderColor>0
clear(lor:queueColors)
lor:color=SELF.DrawButtonsRTF.ButtonBorderColor
get(lor:queueColors,lor:color)
lor:colorLine='\brdrcf' & pointer(lor:queueColors)
end
if SELF.DrawButtonsRTF.ButtonFontColor>0
clear(lor:queueColors)
lor:color=SELF.DrawButtonsRTF.ButtonFontColor
get(lor:queueColors,lor:color)
lor:colorFont='\cf' & pointer(lor:queueColors)
end
if SELF.DrawButtonsRTF.ButtonType=0 !текст
arf:rec='\par\pard\plain'
if band(SELF.DrawButtonsRTF.ButtonFontStyle,FONT:bold)=700
arf:rec=clip(arf:rec) & '\b'
end
if band(SELF.DrawButtonsRTF.ButtonFontStyle,FONT:italic)>0
arf:rec=clip(arf:rec) & '\i'
end
if band(SELF.DrawButtonsRTF.ButtonFontStyle,FONT:underline)>0
arf:rec=clip(arf:rec) & '\ul'
end
if band(SELF.DrawButtonsRTF.ButtonFontStyle,FONT:strikeout)>0
arf:rec=clip(arf:rec) & '\strike'
end
arf:rec=clip(arf:rec) & lor:colorFont
case SELF.DrawButtonsRTF.ButtonTextJust
of 0 !влево
arf:rec=clip(arf:rec) & '\ql'
of 1 !вправо
arf:rec=clip(arf:rec) & '\qr'
of 2 !центр
arf:rec=clip(arf:rec) & '\qc'
end
if SELF.PrgViewRTF=0 !MCO
SELF.DrawButtonsRTF.ButtonPadLeft=2 !делаем стандартные отступы, что избежать погрешностей????
SELF.DrawButtonsRTF.ButtonPadRight=2
end
if SELF.DrawButtonsRTF.ButtonLineW>1 !корректировка поля отступа для жирных линий
lor:korL=10
else
lor:korL=0
end
if SELF.DrawButtonsRTF.ButtonLeft=1
arf:rec=clip(arf:rec) & '\brdrl\brdrs\brdrw' & round(choose(SELF.DrawButtonsRTF.ButtonLineW=0,1,SELF.DrawButtonsRTF.ButtonLineW)*10,1) & clip(lor:colorLine) & '\brsp' & round(SELF.DrawButtonsRTF.ButtonPadLeft*SELF.ReportKoefX*10-lor:korL,1)
else
arf:rec=clip(arf:rec) & '\brdrl\brdrs\brdrw' & round(choose(SELF.DrawButtonsRTF.ButtonLineW=0,1,SELF.DrawButtonsRTF.ButtonLineW)*10,1) & clip(lor:colorWhite) & '\brsp' & round(SELF.DrawButtonsRTF.ButtonPadLeft*SELF.ReportKoefX*10,1)
end
if SELF.DrawButtonsRTF.ButtonRight=1
arf:rec=clip(arf:rec) & '\brdrr\brdrs\brdrw' & round(choose(SELF.DrawButtonsRTF.ButtonLineW=0,1,SELF.DrawButtonsRTF.ButtonLineW)*10,1) & clip(lor:colorLine) & '\brsp' & round(SELF.DrawButtonsRTF.ButtonPadRight*SELF.ReportKoefX*10-lor:korL,1)
else
arf:rec=clip(arf:rec) & '\brdrr\brdrs\brdrw' & round(choose(SELF.DrawButtonsRTF.ButtonLineW=0,1,SELF.DrawButtonsRTF.ButtonLineW)*10,1) & clip(lor:colorWhite) & '\brsp' & round(SELF.DrawButtonsRTF.ButtonPadRight*SELF.ReportKoefX*10,1)
end
if SELF.DrawButtonsRTF.ButtonTop=1
arf:rec=clip(arf:rec) & '\brdrt\brdrs\brdrw' & round(choose(SELF.DrawButtonsRTF.ButtonLineW=0,1,SELF.DrawButtonsRTF.ButtonLineW)*10+10,1) & clip(lor:colorLine) & '\brsp' & round(SELF.DrawButtonsRTF.ButtonPadTop*SELF.ReportKoefY-lor:korL,1)
else
arf:rec=clip(arf:rec) & '\brdrt\brdrs\brdrw' & round(choose(SELF.DrawButtonsRTF.ButtonLineW=0,1,SELF.DrawButtonsRTF.ButtonLineW)*10,1) & clip(lor:colorWhite) & '\brsp' & round(SELF.DrawButtonsRTF.ButtonPadTop*SELF.ReportKoefY,1)
end
if SELF.DrawButtonsRTF.ButtonBottom=1
arf:rec=clip(arf:rec) & '\brdrb\brdrs\brdrw' & round(choose(SELF.DrawButtonsRTF.ButtonLineW=0,1,SELF.DrawButtonsRTF.ButtonLineW)*10+10,1) & clip(lor:colorLine) & '\brsp' & round(SELF.DrawButtonsRTF.ButtonPadBottom*SELF.ReportKoefY-lor:korL,1)
else
arf:rec=clip(arf:rec) & '\brdrb\brdrs\brdrw' & round(choose(SELF.DrawButtonsRTF.ButtonLineW=0,1,SELF.DrawButtonsRTF.ButtonLineW)*10,1) & clip(lor:colorWhite) & '\brsp' & round(SELF.DrawButtonsRTF.ButtonPadBottom*SELF.ReportKoefY,1)
end
if SELF.PrgViewRTF=0 !MCO
lor:korX2=(SELF.DrawButtonsRTF.ButtonPadLeft+SELF.DrawButtonsRTF.ButtonPadRight)*SELF.ReportKoefX*10+36
lor:korY2=-15.75
lor:h=round(SELF.DrawButtonsRTF.ButtonY2*SELF.ReportKoefY-lor:kory2,1)
else !OO
lor:korX2=-2
lor:kory2=-20
lor:h=round(SELF.DrawButtonsRTF.ButtonY2*SELF.ReportKoefY-lor:kory2,1)
end
arf:rec=clip(arf:rec) & '\phmrg\pvmrg\posx' & round(SELF.DrawButtonsRTF.ButtonX1*SELF.ReportKoefX,1) & |
'\posy' & round(SELF.DrawButtonsRTF.ButtonY1*SELF.ReportKoefY,1) & '\absw' & round(SELF.DrawButtonsRTF.ButtonX2*SELF.ReportKoefX-lor:korX2,1) & '\absh' & choose(SELF.DrawButtonsRTF.ButtonTextResize=0,'-','-') & lor:h & |
'\overlay' & clip(lor:colorBgr) & clip(lor:f) & '\fs' & round(SELF.DrawButtonsRTF.ButtonFontSize*2,1) & '{{' & clip(SELF.StrReplace(SELF.DrawButtonsRTF.ButtonText,chr(13) & chr(10),'\line')) & '}'
add(ASCIIFile)
else !картинка
arf:rec='\par\pard\phmrg\pvmrg'
arf:rec=clip(arf:rec) & '\posx' & round(SELF.DrawButtonsRTF.ButtonX1*SELF.ReportKoefX,1) & |
'\posy' & round(SELF.DrawButtonsRTF.ButtonY1*SELF.ReportKoefY,1) & '\overlay' & clip(lor:colorBgr) & clip(lor:f) & '\fs' & round(SELF.DrawButtonsRTF.ButtonFontSize*2,1) & |
'{{{{\pict\wmetafile8\picwgoal' & round(SELF.DrawButtonsRTF.ButtonX2*SELF.ReportKoefX,1) & '\pichgoal' & round(SELF.DrawButtonsRTF.ButtonY2*SELF.ReportKoefY,1)
add(ASCIIFile)
loop loc:j=1 to records(SELF.DrawPictRTF)
get(SELF.DrawPictRTF,loc:j)
if SELF.DrawPictRTF.PictName=SELF.DrawButtonsRTF.ButtonText
loop loc:j=SELF.DrawPictRTF.PictNumStart to SELF.DrawPictRTF.PictNumEnd
get(SELF.DrawPictDetRTF,loc:j)
arf:rec=SELF.DrawPictDetRTF.PictDetStr
add(ASCIIFile)
end
break
end
end
arf:rec='}}'
add(ASCIIFile)
end
end
! \par - конец абзаца
! \pard - стандартная настройка абзаца
! \ql, \qr, \qc - выравнивание по левому, правому краю или центру
! \brdrt, \brdrb, \brdrl, \brdrr - рамки сверху, снизу, слева, справа
! \brspn - расстояние в twips между рамкой и объектом
! \brdrs - простая рамка
! \brdrwn - толщина границы
! \posxn, \posyn - расстояния слева и сверху для объекта в twips
! \pvmgr, \phmgr - позиция по вертикали и горизонтали относительно полей
! \ul - установка подчеркивания текста (параметр 0 для отмены)
! \plain - установить стандартные параметры форматирования
! \b - жирный шрифт
! \i - курсив
! \strike - зачеркнутый текст
! \page - переход на новую страницу
! \fs - размер шрифта
! \fn - номер фонта
! \overlay - текст внутри фрейма
! \linN - отступ слева для параграфа
! \piccroprN - добавляет отступ в twips вокруг картинки, если N<0
! \piccropbN - добавляет границу в twips вокруг картинки, если N<0
!для теста ---
!arf:rec='\par\pard\plain\b\ul\ql\lin33\phmrg\pvmrg\posx0\posy0\absw8352\absh-290\overlay\f0\fs28{{Список сотрудников}'
!add(ASCIIFile)
!arf:rec='\par\pard\plain\b\ql\lin31\phmrg\pvmrg\posx0\posy435\absw2523\absh-290\overlay\f0\fs20{{30/10/2013}'
!add(ASCIIFile)
!arf:rec='\par\pard\plain\b\qc\brdrt\brdrs\brdrw10\brsp0\brdrb\brdrs\brdrw10\brsp0\brdrl\brdrs\brdrw10\brsp0\brdrr\brdrs\brdrw10\brsp0\phmrg\pvmrg\posx35\posy836\absw974\absh-300\overlay\f0\fs20{{Код}'
!add(ASCIIFile)
!arf:rec='\par\pard\plain\b\ql\brdrt\brdrs\brdrw10\brsp0\brdrb\brdrs\brdrw10\brsp0\brdrl\brdrs\brdrw10\brsp0\brdrr\brdrs\brdrw10\brsp0\phmrg\pvmrg\posx1079\posy836\absw5788\absh-300\overlay\f0\fs20{{ФИО}'
!add(ASCIIFile)
!arf:rec='\par\pard\plain\b\ql\lin31\phmrg\pvmrg\posx0\posy1131\absw6931\absh-290\overlay\f0\fs20{{скл2}'
!add(ASCIIFile)
!arf:rec='\par\pard\plain\qc\brdrt\brdrs\brdrw10\brsp0\brdrb\brdrs\brdrw10\brsp0\brdrl\brdrs\brdrw10\brsp0\brdrr\brdrs\brdrw10\brsp0\phmrg\pvmrg\posx35\posy1416\absw974\absh-300\overlay\f0\fs20{{ 7}'
!add(ASCIIFile)
!arf:rec='\par\pard\plain\ql\brdrt\brdrs\brdrw10\brsp0\brdrb\brdrs\brdrw10\brsp0\brdrl\brdrs\brdrw10\brsp0\brdrr\brdrs\brdrw10\brsp0\phmrg\pvmrg\posx1079\posy1416\absw5788\absh-300\overlay\f0\fs20{{Алексухин Константин Александрович}'
!add(ASCIIFile)
! --
arf:rec='\par }'
add(ASCIIFile)
close(ASCIIFile)
free(lor:queueFonts)
free(lor:queueColors)
C6/C11, ШВС, tps/btrieve.
-
- ✯ Ветеран ✯
- Сообщения: 4983
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 20 раз
Экспорт отчетов в doc/docx или аналоги. Какие есть варианты?
Я делаю как Игорь Столяров. Через OLE, на основе шаблонов. Время создания, конечно, фантастическое. Зато чистый Ворд.
Странно, что нет библиотек прямой записи, а-ля Excel. Принцип похож. Ну может только для меня .
Странно, что нет библиотек прямой записи, а-ля Excel. Принцип похож. Ну может только для меня .
We are hard at work… for you.
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4615
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 6 раз
- Поблагодарили: 37 раз
Экспорт отчетов в doc/docx или аналоги. Какие есть варианты?
На самом деле, для конкретной ситуации выгоднее использовать тот или иной инструмент. У меня набор всяких дизайнеров. Из сторонних только FRB.Игорь Столяров писал(а): ↑13 Февраль 2020, 10:51Готов поспорить, что ни у кого нет редактора отчётов круче, чем обычный Microsoft Word (если в нём делать шаблоны отчётов).
Общее деление по функционалу такое.
Основная масса отчетов в табличной форме. Используется либо вывод на экран в list с возможностью автоматического сохранения в в xls, либо дизайнер xls форм. Есть вариант вывода xls форм в report, но это редко используется, обычно xls в xls.
Для печатных форм первичных документов (счетов, накладных и т.п.) используется FRB или свой дизайнер с похожим функционалом. В обоих случаях есть возможность вывода в report или rtf.
Для печати договоров используется reportRTF.
Изредка бывает надо в текст или html, применяется текстовый дизайнер.
Вывод в xlsx на будущее, в боевых режимах не используется.
Базируется на технологии мастер-процедур, про которую я уже писал. Ole, com не применяются принципиально. У коллег из Энигмы, кстати, аналогичный подход. Я когда увидел, даже улыбнулся. Как за спиной друг у друга стояли.
C6/C11, ШВС, tps/btrieve.
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4615
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 6 раз
- Поблагодарили: 37 раз
Экспорт отчетов в doc/docx или аналоги. Какие есть варианты?
Кстати, если кому интересно, выкладывал некоторую информацию о технологиях подготовки разных бланков.
https://olegon.ru/showthread.php?t=18532
https://olegon.ru/showthread.php?t=18532
C6/C11, ШВС, tps/btrieve.