Простой экспорт списка в MS Word
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- Игорь Столяров
- Ветеран движения
- Сообщения: 7498
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 18 раз
- Поблагодарили: 51 раз
Простой экспорт списка в MS Word
Привет всем !
Извиняюсь за наивный вопрос, но может кто подскажет: как не особенно парясь вывести в MS Word список, например фамилий с датами рождений ? А если бы еще в простой табличке ...
Если можно кусочком кода, саму идею вывода. Заранее спасибо !
Извиняюсь за наивный вопрос, но может кто подскажет: как не особенно парясь вывести в MS Word список, например фамилий с датами рождений ? А если бы еще в простой табличке ...
Если можно кусочком кода, саму идею вывода. Заранее спасибо !
Re: Простой экспорт списка в MS Word
Выводи в RTF, очень простой формат для реализация данной задачи, и открывай через MS WordИгорь Столяров писал(а):Привет всем !
Извиняюсь за наивный вопрос, но может кто подскажет: как не особенно парясь вывести в MS Word список, например фамилий с датами рождений ? А если бы еще в простой табличке ...
Если можно кусочком кода, саму идею вывода. Заранее спасибо !
ЗЫ
есть готовые решения, EasyListPrint - натравливается на LIST, Queue, табличный вывод в самые распространённые формты (XLS,RTF,WMF..)
?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
?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 раз
-
- Ветеран
- Сообщения: 311
- Зарегистрирован: 08 Июль 2005, 22:04
- Игорь Столяров
- Ветеран движения
- Сообщения: 7498
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 18 раз
- Поблагодарили: 51 раз
Еще раз спасибо за пример экспорта накладной в MS Word - все получилось более, чем отлично.
Есть вопрос: существует ли в природе описание (или просто список) VBA функций для управлением вывода данных в MS Word из Clarion ?
Конечно, все функции описаны в самом VBA, но часто контекст их вызова и использования из Clarion выглядит более чем неожиданно ...
Есть вопрос: существует ли в природе описание (или просто список) VBA функций для управлением вывода данных в MS Word из Clarion ?
Конечно, все функции описаны в самом VBA, но часто контекст их вызова и использования из Clarion выглядит более чем неожиданно ...
Советую проверить, что после использования MS Word'а в качестве OLE объекта в пограмме он не остаётся как запущенный процесс, т е он просто не выгружается и повторное использование запускает новый процесс, они накапливаются...Игорь Столяров писал(а):Еще раз спасибо за пример экспорта накладной в MS Word
Насколько я помню были с этим проблемы.
- Tolusha
- Активист
- Сообщения: 123
- Зарегистрирован: 11 Январь 2006, 16:50
- Откуда: Украина, г. Черкассы
- Контактная информация:
В конце работы необходимо выполнять командуAndrew Myalin писал(а): Советую проверить, что после использования MS Word'а в качестве OLE объекта в пограмме он не остаётся как запущенный процесс, т е он просто не выгружается и повторное использование запускает новый процесс, они накапливаются...
Насколько я помню были с этим проблемы.
?WordObject{'Application.Quit'}, тогда все путем.
- Игорь Столяров
- Ветеран движения
- Сообщения: 7498
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 18 раз
- Поблагодарили: 51 раз
Не знаю - наверно есть зависимость от версии OC, самого Word, и версии Clarion (OLE драйвера), плюс особенности написания кода.
Возможно - есть неудачные комбинации ...
Я уже говорил про Excel, что проблема надуманна. Там вроде разобрались в конце-концов сами, когда немного посмотрели.
Сейчас проверил с MS Word: Простое разрушение контрола снимает MS Word без всяких проблем, да и сколько помню - никогда таких проблем не было ...
Loop 3 times
Destroy(WordObj) ! уничтожили OLE-контрол
end
Возможно - есть неудачные комбинации ...
Я уже говорил про Excel, что проблема надуманна. Там вроде разобрались в конце-концов сами, когда немного посмотрели.
Сейчас проверил с MS Word: Простое разрушение контрола снимает MS Word без всяких проблем, да и сколько помню - никогда таких проблем не было ...
Loop 3 times
Destroy(WordObj) ! уничтожили OLE-контрол
end