Общие поля свойтва пользователя для документов

Автор as1234, 14 апреля 2012, 23:16

0 Пользователи и 1 гость просматривают эту тему.

as1234

Продолжаю играться с данныйми полями =)
Суть такова , есть два документа , в них одинаковые поля свойства пользователя , как сделать чтоб при изменение одного поля в одном документе , изменялась такое же поле только во втором документе .
Тоесть как то  сделать их общими для этих документов , подскажите как это можно сделать . Буду благодарен !

Hasim

Вместо ссылки на текущий документ (ThisComponent) используйте ссылку на другой документ (StarDesktop.loadComponentFromURL).

JohnSUN

А каков общий замысел? Возможно, есть способ проще...
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

as1234

Смысл в том том что есть документы в которых есть общая информация , просто пример два шаблона с рамками , чтобы я мог быстро заполнить в одном документе рамку , при этом автоматически рамка в другом документе заполнилась теми же данными ))

JohnSUN

А как насчет того, чтобы вынести эти поля в базу данных и в текстах документов использовать именно поля? Ctrl+F2 - Базы данных - Поля слияния?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

as1234

#5
я с бд вообще еще не работал  , поэтому мне проще чтоб было именно так как я описал :-[ , а результат получиться тот же самый ?
тоесть можно эти поля свойств занести в бд?или будут какой то другой вид полей ?


JohnSUN

Да, если честно, я тоже предпочитаю с БД не связываться  ;D
Просто как раз сегодня наткнулся на вот эту статью.
Суть та же самая: однотипные данные для разных случаев нужно где-то хранить в "общем месте" и вставлять в нужные места документов.
Автор статьи предложил сохранить данные в DBF-таблицах (Calc это делает очень просто), каталог со всеми этими таблицами указать как источник данных для БД. А потом просто выбирать нужные поля из нужных таблиц и их значения появятся в документе.
Ни тебе макросов, ни принудительной синхронизации данных между разными файлами... Стоит попробовать. Тем более, что Base как база данных там не сильно перед глазами маячит...
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

as1234


as1234

#8
Почитал , попробывал , понавставлял всяких <name> и тп  .  Но по мне так это совсем чтото не то  :-\
Это опять же нужно перетаскивать все поля  в ручную ....

В идеале делаю такую штуку . Есть документ . Открывая его мы видем небольшую формочку из 4 кнопочек , 3 из которых открывает по шаблону документов (договоров) , четвертая собственно открывает диалог в котором редактируються поля свойств пользователя (прим . организация , директор , разработал и тп ) которые присутствуют в каждом из договоров , вот нужно чтоб поля изменялись непосредственно одновременно в 3х документах при помощи 1 диалога ))
1)Разобрался как собсно при помощи диалога редактировать поля
2)Открывать нужные документы
3)над третьем работаю ))))

JohnSUN

#9
А другой вариант?
Все три документа - это один документ, один длинный документ из трех секций. В каждой секции нумерация страниц начинается с единицы. Тогда все поля назначенные на этот комплексный документ определяются в нем и только в нем. В этом случае можно обойтись не свойствами документа, а полями пользователя (это во вкладке Переменные диалога Поля). Я так оформлял Договор с пятью приложениями: на самой первой странице делал таблицу из двух колонок - название поля, понятное для пользователя, и собственно поле Переменная пользователя или Задать переменную. А дальше по тексту - поля Показать переменную. Саму таблицу просто не печатаю.

Кроме того, офис может работать с такими штуками как Составные документы и Вложенные документы. Честно скажу, в последний раз пробовал их еще во времена ООо 2.4, поэтому не смогу подробно рассказать что это такое и подходит ли для твоих задач, сорри...

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

as1234

#10
Этот вариант хорош , но в том то и загвостка что требуеться именно редактированние группы документов из 1 диалога )))

"Вместо ссылки на текущий документ (ThisComponent) используйте ссылку на другой документ (StarDesktop.loadComponentFromURL)." ломал голову над этим , прочитал кучу лит-ры но результата никакого  ???

JohnSUN

Да, это проблема... Дело в том, что по StarDesktop.loadComponentFromURL открываешь - явно или в скрытом режиме, но именно открываешь - один документ. А выходит, что открывать нужно пачку? Все, кому нужно изменить значение пользовательского свойства? А по какому признаку их искать?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

as1234

#12
Для каждого документа своя кнопочка настроенна для открытия в отдельном окне по Url (пока их 3) , тоесть скажем нужно открыть 2 из 3 , 1 из 3 , или все три это дело пару щелчков мыши , вот в этих открытых документах и нужно редактировать поля через один диалог


вот пример , шаблоны ( one.ott , two.ott , three.ott ) у всех троих забиты в свойствах ( XXX , ZZZ ) открываються c C:\tmp\

[вложение удалено Администратором]

JohnSUN

Погоди! Точно ott?!! Именно шаблоны? То есть свойства нужно прописать не в них, а в новые файлы, созданные на их основании?

Я тут уже успел заготовку макроса набросать:Sub DoubleParamsTo(sURL As String)
Dim oDoc As Variant ' Открываемый документ
Dim oDocumentProperties As Variant ' Свойства текущего документа
Dim oUserDefinedProperties As Variant ' Пользовательские свойства текущего документа
Dim oEnum As Variant
Dim oPropertySetInfo As Variant
Dim oProperties As Variant
Dim oVal, sVal$
Dim i%
Globalscope.BasicLibraries.loadLibrary("Tools") ' Загрузить стандартную библиотеку "Tools"
oDoc = OpenDocument(ConvertToURL(sURL), Array()) ' Эта процедура из "Tools" откроет файл, если он еще не открыт
REM Получить пользовательские свойства текущего документа
oDocumentProperties = ThisComponent.getDocumentProperties()
oUserDefinedProperties = oDocumentProperties.getUserDefinedProperties()
oPropertySetInfo = oUserDefinedProperties.getPropertySetInfo()
oProperties = oPropertySetInfo.getProperties()
REM Здесь нужно получить пользовательские свойства открытого документа oDoc...
REM Теперь перебрать все свойства текущего документа
For i = LBound(oProperties) To UBound(oProperties)
oVal = oProperties(i)
sVal = oVal.Name
REM Здесь каким-то образом переприсвоить свойства по имени
Next i
oDoc.store() ' Записать документ oDoc
DisposeDocument(oDoc) ' Аккуратно закрыть oDoc (тоже процедура из "Tools")
End Sub

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

as1234

#14
"Погоди! Точно ott?!! Именно шаблоны? То есть свойства нужно прописать не в них, а в новые файлы, созданные на их основании?"

Yes  :) огось спасибо , чем дальше тем страшнее выглядят макросы ))) начну разбираться