Простой экспорт списка в MS Word

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7498
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 18 раз
Поблагодарили: 51 раз

Простой экспорт списка в MS Word

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

Привет всем !
Извиняюсь за наивный вопрос, но может кто подскажет: как не особенно парясь вывести в MS Word список, например фамилий с датами рождений ? А если бы еще в простой табличке ... :)

Если можно кусочком кода, саму идею вывода. Заранее спасибо !
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Re: Простой экспорт списка в MS Word

Сообщение Andrew™ »

Игорь Столяров писал(а):Привет всем !
Извиняюсь за наивный вопрос, но может кто подскажет: как не особенно парясь вывести в MS Word список, например фамилий с датами рождений ? А если бы еще в простой табличке ... :)

Если можно кусочком кода, саму идею вывода. Заранее спасибо !
Выводи в RTF, очень простой формат для реализация данной задачи, и открывай через MS Word

ЗЫ
есть готовые решения, EasyListPrint - натравливается на LIST, Queue, табличный вывод в самые распространённые формты (XLS,RTF,WMF..)
Лукьянов
Новичок
Сообщения: 9
Зарегистрирован: 14 Июль 2005, 12:53

Сообщение Лукьянов »

?WordObject{PROP:Create} = 'Word.Application'
?WordObject{'Documents.Open(' & Clip(DTP:BodyUp) & ',ReadOnly=1)'}




FFound# = ?WordObject{'ActiveDocument.Bookmarks.Exists("Table_Reclam")'}
if FFound#
currentparametrs{Prop:Sql} = 'select AgreementID from Agreement where Status <> 0 and TypeAgreement = 10 ' & |
' and AgreementYear = ' & Pac:ParamYear & |
' and AgreementMonth = ' & Pac:ParamMonth & |
' and AgreementLongID = ' & AgreementLongID
next(CurrentParametrs)
if ErrorCode() then
Loc:AgreementID = 0
else
Loc:AgreementID = Cur:TransmitString
.
?WordObject{'ActiveDocument.Bookmarks("Table_Reclam").Select'}
?WordObject{'Application.Selection.ConvertToTable (1,1,6)'}
?WordObject{'Application.Selection.Tables(1).Borders.Enable'} = True
?WordObject{'Application.Selection.ApplyStyleHeadingRows'} = True
?WordObject{'Application.Selection.ApplyStyleLastRow '} = True
?WordObject{'Application.Selection.ApplyStyleFirstColumn'} = True
?WordObject{'Application.Selection.ApplyStyleLastColumn'} = True

?WordObject{'Application.Selection.MoveRight(12)'}
?WordObject{'Application.Selection.ParagraphFormat.Alignment'} = 1
?WordObject{'Application.Selection.TypeText("№")'}

?WordObject{'Application.Selection.MoveRight(12)'}
?WordObject{'Application.Selection.ParagraphFormat.Alignment'} = 0
?WordObject{'Application.Selection.TypeText("Наименование")'}

?WordObject{'Application.Selection.MoveRight(12)'}
?WordObject{'Application.Selection.ParagraphFormat.Alignment'} = 1
?WordObject{'Application.Selection.TypeText("Ед. изм.")'}

?WordObject{'Application.Selection.MoveRight(12)'}
?WordObject{'Application.Selection.ParagraphFormat.Alignment'} = 1
?WordObject{'Application.Selection.TypeText("Кол-во")'}

?WordObject{'Application.Selection.MoveRight(12)'}
?WordObject{'Application.Selection.ParagraphFormat.Alignment'} = 1
?WordObject{'Application.Selection.TypeText("Цена, руб.")'}

?WordObject{'Application.Selection.MoveRight(12)'}
?WordObject{'Application.Selection.ParagraphFormat.Alignment'} = 1
?WordObject{'Application.Selection.TypeText("Сумма, руб.")'}

?WordObject{'Application.Selection.Tables(1).AutoFitBehavior(1)'}
?WordObject{'Application.Selection.Tables(1).AutoFitBehavior(1)'}

if Loc:AgreementID
Cnt# = 1
SLA:AgreementID = Loc:AgreementID
Set(SLA:FKeyServListAgreementAgreementID,SLA:FKeyServListAgreementAgreementID)
loop
if Access:ServListAgreement.Next() then break.
if SLA:AgreementID <> Loc:AgreementID then break.
SER:ServiceID = SLA:ServiceID
Access:Service.Fetch(SER:PKeyServiceID)
?WordObject{'Application.Selection.MoveRight(12)'}
if Cnt# = 1 then ?WordObject{'Application.Selection.Font.Bold'} = 9999998.
?WordObject{'Application.Selection.TypeText("' & Cnt# & '")'}

?WordObject{'Application.Selection.MoveRight(12)'}
if Cnt# = 1 then ?WordObject{'Application.Selection.Font.Bold'} = 9999998.
?WordObject{'Application.Selection.TypeText("' & Clip(SER:NameToDocument) & '")'}

?WordObject{'Application.Selection.MoveRight(12)'}
if Cnt# = 1 then ?WordObject{'Application.Selection.Font.Bold'} = 9999998.
?WordObject{'Application.Selection.TypeText("' & Clip(SER:EdIsmer) & '")'}

Loc:QuantityRec = Format(SLA:CountService, SER:FormatString)
?WordObject{'Application.Selection.MoveRight(12)'}
if Cnt# = 1 then ?WordObject{'Application.Selection.Font.Bold'} = 9999998.
?WordObject{'Application.Selection.TypeText("' & Loc:QuantityRec & '")'}

Loc:PriceRec = SLA:Amount / SLA:CountService
?WordObject{'Application.Selection.MoveRight(12)'}
if Cnt# = 1 then ?WordObject{'Application.Selection.Font.Bold'} = 9999998.
?WordObject{'Application.Selection.TypeText("' & format(Loc:PriceRec,@n_12_.2) & '")'}

?WordObject{'Application.Selection.MoveRight(12)'}
if Cnt# = 1 then ?WordObject{'Application.Selection.Font.Bold'} = 9999998.
?WordObject{'Application.Selection.TypeText("' & format(SLA:Amount,@n_12_.2) & '")'}

if SER:IsNP and Loc:PrivateFace and Agr:Cash = 1 !был налог с продаж при расчетах
Loc:NP = SLA:Amount * Per:NP / (100+Per:NP)
else
Loc:NP=0
.
SLA:Amount -= Loc:NP
if SER:IsNDS
Loc:NDSRec += SLA:Amount * Per:NDS/ (100 + Per:NDS)
.
Loc:TotalAmountRec += SLA:Amount
Cnt# += 1
.
.
?WordObject{'Application.Selection.MoveRight(12)'}

?WordObject{'Application.Selection.MoveRight(12)'}
?WordObject{'Application.Selection.Font.Bold'} = 9999998
?WordObject{'Application.Selection.TypeText("ИТОГО")'}

?WordObject{'Application.Selection.MoveRight(12)'}
?WordObject{'Application.Selection.MoveRight(12)'}
?WordObject{'Application.Selection.MoveRight(12)'}

?WordObject{'Application.Selection.MoveRight(12)'}
?WordObject{'Application.Selection.Font.Bold'} = 9999998
?WordObject{'Application.Selection.TypeText("' & format(Loc:TotalAmountRec,@n_12_.2) & '")'}


?WordObject{'Application.Selection.Tables(1).Rows.Alignment'} = 1
if Loc:NDSRec
FieldToWord(?WordObject,'NDS_Rec','(в том числе НДС ' & format(Per:NDS,@n_4.1) & '% ' & format(Loc:NDSRec,@n_12_.2) & ' руб.')
else
FieldToWord(?WordObject,'NDS_Rec','(НДС не облагается)')
Loc:NDSRec = 0
.
AmountByWord = Clip(AmountByWord(Loc:TotalAmountRec))
FieldToWord(?WordObject,'AmountRec','_' & format(Loc:TotalAmountRec,@n_12_.2) & '_')
FieldToWord(?WordObject,'AmountByWordR',AmountByWord)
.


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

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

Уф ! Спасибо за ответ по существу вопроса.
Здорово ! Буду потихоньку разбираться ... :)
jura
Новичок
Сообщения: 16
Зарегистрирован: 08 Июль 2005, 5:42
Откуда: Ulan-Ude

Сообщение jura »

есть такая штука Reportf
там это все уже сделано
нужно только прицепить к своему приложению
добавить немного кода и все
lsgsoftware
Ветеран
Сообщения: 311
Зарегистрирован: 08 Июль 2005, 22:04

Сообщение lsgsoftware »

Если не хочешь парится, то следуй совету Андрея Мялина-работа через RTF.Возьми шаблон В.Дегтяренко и все получишь без всякого кода
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7498
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 18 раз
Поблагодарили: 51 раз

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

Еще раз спасибо за пример экспорта накладной в MS Word - все получилось более, чем отлично.
Есть вопрос: существует ли в природе описание (или просто список) VBA функций для управлением вывода данных в MS Word из Clarion ?
Конечно, все функции описаны в самом VBA, но часто контекст их вызова и использования из Clarion выглядит более чем неожиданно ... ;)
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Сообщение Andrew™ »

Игорь Столяров писал(а):Еще раз спасибо за пример экспорта накладной в MS Word
Советую проверить, что после использования MS Word'а в качестве OLE объекта в пограмме он не остаётся как запущенный процесс, т е он просто не выгружается и повторное использование запускает новый процесс, они накапливаются...

Насколько я помню были с этим проблемы.
Аватара пользователя
Tolusha
Активист
Сообщения: 123
Зарегистрирован: 11 Январь 2006, 16:50
Откуда: Украина, г. Черкассы
Контактная информация:

Сообщение Tolusha »

Игорь Столяров писал(а): Есть вопрос: существует ли в природе описание (или просто список) VBA функций для управлением вывода данных в MS Word из Clarion ?
Справка по Visual Basic есть в любом Ворде (если конечно установлена). Аналогично с Excel :D
Аватара пользователя
Tolusha
Активист
Сообщения: 123
Зарегистрирован: 11 Январь 2006, 16:50
Откуда: Украина, г. Черкассы
Контактная информация:

Сообщение Tolusha »

Andrew Myalin писал(а): Советую проверить, что после использования MS Word'а в качестве OLE объекта в пограмме он не остаётся как запущенный процесс, т е он просто не выгружается и повторное использование запускает новый процесс, они накапливаются...
Насколько я помню были с этим проблемы.
В конце работы необходимо выполнять команду
?WordObject{'Application.Quit'}, тогда все путем.
ru_alex
Ветеран
Сообщения: 333
Зарегистрирован: 21 Сентябрь 2005, 11:05
Откуда: Нижний Новгород
Контактная информация:

Сообщение ru_alex »

Нет, батенька, не всегда все так легко отрабатывает
И по этому поводу много уже говорилось, только про Excel это было. 3 раза prop:deactivate в большинсиве случаев снимает и то не всегда.

PS^ Знать бы еще отчего это... :)
Аватара пользователя
Tolusha
Активист
Сообщения: 123
Зарегистрирован: 11 Январь 2006, 16:50
Откуда: Украина, г. Черкассы
Контактная информация:

Сообщение Tolusha »

Эта команда у меня отлично срабатывает. И никаких запущенных после этого процессов не остается (при коректном завершении работы программы).
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7498
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 18 раз
Поблагодарили: 51 раз

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

Не знаю - наверно есть зависимость от версии OC, самого Word, и версии Clarion (OLE драйвера), плюс особенности написания кода.
Возможно - есть неудачные комбинации ... ;)

Я уже говорил про Excel, что проблема надуманна. Там вроде разобрались в конце-концов сами, когда немного посмотрели.

Сейчас проверил с MS Word: Простое разрушение контрола снимает MS Word без всяких проблем, да и сколько помню - никогда таких проблем не было ...

Loop 3 times
Destroy(WordObj) ! уничтожили OLE-контрол
end
ru_alex
Ветеран
Сообщения: 333
Зарегистрирован: 21 Сентябрь 2005, 11:05
Откуда: Нижний Новгород
Контактная информация:

Сообщение ru_alex »

После многочисленных обращений от клиентов по данной проблеме пришлось вставить после этой команды трехкратный prop:deactivate. Сейчас никто не жалуется. Но, опять же за не знанием сути вопроса (почему именно 3 раза), не буду утверждать, что нужно делать именно так.
ru_alex
Ветеран
Сообщения: 333
Зарегистрирован: 21 Сентябрь 2005, 11:05
Откуда: Нижний Новгород
Контактная информация:

Сообщение ru_alex »

2 Игорь:
А разве destroy 3 раза? По-моему prop:deactivate. Это ведь не я придума. Или здесь или в рассылке нашел...
Ответить