Здравствуйте! Имею БД в Base, нужен выпадающий список в Wr...

Автор ForumOOo (бот), 5 апреля 2017, 11:02

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

ForumOOo (бот)

Компонент: Writer
Версия продукта: 4.x
Сборка: OpenOffice.org
ОС: Win7

Здравствуйте!
Имею БД в Base, нужен выпадающий список в Writer с содержимым из БД.Запрос1, как это организовать?

--
Подпись: ktotam
Эл. почта: ktotamby@mail.ru

economist

Не все так просто.

Да, можно вставить Поле со списком, а в его свойствах указать БД.Запрос1, но этот объект (само поле со списком) - не будет частью текста, и внешне будет очень "заметен".

Да, можно сделать как выше, но макросом по событию изменения все-таки добавлять простой текст. Он подчинится стилю, орфографии, переносам, поиску итп действиям, из-за которых мы там любим Writer и почитаем его как верстальную программу и мощный текстовый редактор.

Но есть способ проще. Жмём Ctrl+Shift+F4 (в новых LibreOffice) а в старых OpenOffice|LibreOffice - просто F4, раскрываем запрос вверху и тянем вниз значение из "списка".

Иногда Список проще сделать не в БД, а в самом Writer. Уместо, если список вида:
Да
Нет
Не знаю

 
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

ktotam

Хорошо, сделал список во Writer.
Имею таблицу, где в верхнюю ячейку столбца ввожу значение, как автоматически раздавать его в нижние ячейки? :roll:

economist

Не совсем понял значение слова раздавать, ну да ладно. Повангую:

Если нужно чтобы выбранный элемент из Поля-списка использовать в документе несколько раз, но задавать его только в одном месте (скажем, самом первом сверху) - то чтобы элемент был везде одинаков нельзя поле просто скопировать, т.к. каждая копия поля - это отдельная субстанция, которая сама обновляться/синхронизироваться не будет!

Но выход есть: скопировать поле-Список, перейти в нужное место, нажать Ctrl+Shift+V (Вставить как - Связь по DDE). В этом случае, выбрав в "настоящем" первом поле первым подписывающим Иванова, и нажав Сервис - Обновить все - мы увидим Иванова во всех связанных по DDE связях/копиях поля в других частях документа.

Связь DDE можно автоматически обновлять простым макросом, назначив его на любое "знаковое" и при этом однозначное событие - на печать, сохранение итп (Сервис - Настройка - События...)
Чтобы файл с такими полями при открытии не задавал вопрос по обновлению связей - сделайте Сервис - Параметры - LibreOffice Writer - Общие - Связи - Обновлять связи при загрузке - Всегда.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

ktotam


economist

А так, при выполнении такого макроса?


sub RefreshAll
' Обновляет все поля документа Writer - бывает нужно, когда есть "клоны"
' полей-списков или переменные пользователя (напр. два документа в одном файле)
dim document   as object
dim dispatcher as object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:UpdateFields", "", 0, Array()) ' если не работает - удалить!
dispatcher.executeDispatch(document, ".uno:UpdateAll", "", 0, Array())
end sub
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

economist

Замечу насчет связей DDE - если работа ведется в домене Windows/AD со злыми админами, DDE может быть запрещён на уровне групповых политик GP.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

ktotam

Цитата: economist от 10 апреля 2017, 12:08
Замечу насчет связей DDE - если работа ведется в домене Windows/AD со злыми админами, DDE может быть запрещён на уровне групповых политик GP.
Вероятность 99%

economist

ktotam -
Если злой админ не упрашивается - его увольняют за саботаж решений более высокого руководства. Но вообще DDE можно запретить только специально. Неспециально запрещаются серверы сценариев: com, bat, vbs, wsh, psh.

А макрос сработал?

 
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

ktotam


economist

Тогда файл в студию! Так как кол-во догадок превысило количество гипотез.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

ktotam


rami

Цитата: ForumOOo (бот) от  5 апреля 2017, 09:02Имею БД в Base, нужен выпадающий список в Writer с содержимым из БД.Запрос1, как это организовать?
На панели инструментов "Элементы управления" нажмите кнопки "Мастер" и "Список" и нарисуйте список, откроется мастер списка. После создания списка, можно отредактировать его свойства. А для чего вам нужен выпадающий список?

ktotam

#13
Цитата: rami от 12 апреля 2017, 12:26На панели инструментов "Элементы управления" нажмите кнопки "Мастер" и "Список" и нарисуйте список, откроется мастер списка. После создания списка, можно отредактировать его свойства. А для чего вам нужен выпадающий список?
А как при печати не выводить графическую часть списка, а только содержание?
Список для того, чтобы не вводить повторяющуюся информацию.
Например записка на выход человека за территорию.

economist

#14
Ctrl+F2 - Функции - Список - ввести Элемент - Добавить итд.

Такой список не имеет графической части и выглядит просто как часть текста.
Всё это называется "Поля" и представляет собой мощный инструмент автоматизации документа. Об этом я писал в #1 про Да/Нет/Не знаю.

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

Кстати, с этими TextField - мой макрос работает 100%. Если нужно на одном А4 сделать 2 дока, в котором будет видна фраза "Вышла покурить", то достаточно в одном месте выбрать нужный элемент из списка и обновить все поля макросом - в другом тоже будет про курение.

Недостаток таких полей - неудобно, если там много элементов. Плюс полей - произвольный порядок, меняемый за секунду. К примеру, в отделе три исполнителя - Иванов, Петров и Сидоров, каждый со своим телефоном - и это как раз случай вставить список из трех строк "ФИО, тел." в сам шаблон. Если что-то поменяется (смена кадров, отпуск) - это элементарно правится прямо в шаблоне (щелкнуть по полю - Правка...)    
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...