Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

20 Ноябрь 2017, 23:43 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1 2 »   Вниз
  Печать  
Автор Тема: Замена циркулярному письму  (Прочитано 1288 раз)
0 Пользователей и 1 Гость смотрят эту тему.
dimmon777
Пользователь
**
Offline Offline

Сообщений: 52


« Стартовое сообщение: 4 Июль 2017, 17:59 »

Добрый день!
(В учреждении около 20 рабочих мест, как не пытался внедрить циркулярное письмо, ничего к сожалению не получается.)
Есть Excel (.ods)- таблица, в которую заносятся данные по организациям (свыше 15 тысяч наименований), ИНН, ОГРН, наименование, телефоны, и т.д. По итогу, нужно составить договора во Writer (- .odt).
В общем, при работе макроса получается следующее: 1- поиск в таблице по ключу, 2-назначение переменных,  3. В шаблоне,  Writer - предварительно расставлены "закладки", т.е. небольшие фрагменты, которые входе выполнения макроса заменяются (функция найти-заменить) между собой. Так например, ФИО_Руководителя -> Иванов И.В.
Как-бы нужно реализовать 3й пункт, через текстовые поля, т.е. изменяю имя одного параметра текста - меняются все текстовые подобные поля. Непонимающий
Записан
mikekaganski
Ветеран
*****
Online Online

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 662


« Ответ #1: 4 Июль 2017, 18:46 »

Mail Merge?
Записан

С уважением,
Михаил Каганский
dimmon777
Пользователь
**
Offline Offline

Сообщений: 52


« Ответ #2: 4 Июль 2017, 21:04 »

Mail Merge?

само циркулярное письмо пробовал - не годится. Так как наблюдаются сложности и "глюки". Во-первых, нужно настроить и обучить более 20пользователей предпенсионного возраста. Во- вторых, база редактируется "на лету" (хранится на сервере), а в циркулярном письме обновляется через 20-40 минут (новые записи появляются через 20-40 минут)! Мне бы хотелось все же воспользоваться макросом, т.к. он гибче
Записан
dimmon777
Пользователь
**
Offline Offline

Сообщений: 52


« Ответ #3: 4 Июль 2017, 21:21 »

Порылся на сайте, единственное, что нашел это
Цитата:
sub insTF
 Rem Макрос написан Alexey7ov для 0xJah 25/12/13,
 Rem стр.: http://forumooo.ru/index.php/topic,3844.0.html
 dim i as integer
 dim tdoc as object
 dim usF as object
 dim txtF(1) as object
 dim tCursS as object
 dim tCursE as object
 dim tCurs as object
 tdoc=thiscomponent
 tCursS=tdoc.Text().getStart()
 tCursE=tdoc.Text().getEnd()
 usF=tdoc.createInstance("com.sun.star.text.fieldmaster.User") ' Создание в документе пользовательского поля
 usF.Name="Al": usF.Content="Alexey7ov"
 for i=0 to 1
  txtF(i)=tdoc.createInstance("com.sun.star.text.textfield.User")
  txtF(i).attachTextFieldMaster(usF) ' Создаёт ссылку на главное поле
  tCurs=iif(i=0,tCursS,tCursE)
  tdoc.Text.insertTextContent(tCurs,txtF(i),0)
 next
end sub
, у Питоньяка примерно то же самое - создать текстовое поле. А мне нужно не создавая поля, измнеть usF.Content="Alexey7ov" на свой,  так как поле уже будет создано  В замешательстве
Записан
maksvlad
Пользователь
**
Offline Offline

Сообщений: 67


« Ответ #4: 5 Июль 2017, 17:38 »

Если я правильно понял "ТЗ", то нужен обработчик шаблона?
Делал я что-то подобное при помощи связки python + sqlite + jinja2
Морда лица была в odb
Создавался шаблон в odt с триггерами а-ля {{ИМЯ_КОНТОРЫ}}, которые потом на основе базы данных менялись на ООО "Рога и Копыта"
Записан
dimmon777
Пользователь
**
Offline Offline

Сообщений: 52


« Ответ #5: 5 Июль 2017, 18:39 »

maksvlad
ТЗ, правильно поняли! НО, я ниразу не программист. Разобраться бы с Бейскик ОО сначала)))

maksvlad, Может быть будут рабочие примеры???
Записан
maksvlad
Пользователь
**
Offline Offline

Сообщений: 67


« Ответ #6: 6 Июль 2017, 10:36 »

Я сам далек от программирования и IT (ни по образованию, ни по профессии ни разу не программист).
Когда встал примерно такой вопрос как в топике, то бейсик оказался не сильно удобным инструментом, тем более, ограниченный ООо (LО)
Решение нашел через использование внешней базы данных (sqlite в моем случае, может быть любая другая), движка шаблонов jinja2 для расстановки данных в шаблон xml и связывающего это все хозяйство скрипта на python, который обеспечивал запрос данных из БД, обработку результатов в нужном формате для шаблонизатора, манипуляцию с файлами и архивами
Алгоритм работы примерно следующий:
1) В ЛО создается шаблон в виде файла в формате odt (odt-шаблон), в котором указываются соответствующие метки.
2) Из odt-шаблона создается копия, которая и будет в последующем фалом с результатом (odt-копия)
3) Их  odt-шаблона извлекается context.xml, последний и используется как шаблон для Jinja2
4) На следующем этапе Jinja шинкует данные по шаблону в файл xml, который будучи поименованным context.xml помещается в odt-копию (файлы OOo LO - это zip-архивы)
И мы имеем нужную нам версию документа

Для быстрой разработки "междумордия" (GUI) использовал BASE.

Поскольку делалось исключительно для себя, без цели распространения, то смысла выкладывать код не вижу, ибо комментарии там личные, а чистить (переписывать) мне их лень.
Записан
dimmon777
Пользователь
**
Offline Offline

Сообщений: 52


« Ответ #7: 6 Июль 2017, 11:02 »

maksvlad  Спасибо!  Всё хорошо,
Компьютера в учреждении закрыты,  даже флешку так просто не вставишь,  не говоря об установке всяких jinja и прочего  Плачущий Есть только Орен офис и все.  Так что вопрос актуальный
Записан
maksvlad
Пользователь
**
Offline Offline

Сообщений: 67


« Ответ #8: 6 Июль 2017, 11:14 »

Если средствами ОпенОффис, Проще всего через поля слияния.
Сам пользу поля и связь с таблицами, условие и обработку данных (например формирование текста определенного содержания) можно делать в таблице (во всяком случае для меня так проще)
На форуме есть некто АКА "economist", из его постов следует, что он слияние пользует активно. Может быть согласится помочь Улыбка
Кстати, в ЛО, если нажать на кнопку быстрой печати, то программа выведет запрос на использование данных по ссылкам в полях и выдаст таблицу с выбором вариантов. Это оказалось проще, чем циркулярное письмо (mail merge)
Записан
economist
Ветеран
*****
Offline Offline

Сообщений: 739


« Ответ #9: 6 Июль 2017, 11:34 »

само циркулярное письмо пробовал - не годится. Так как наблюдаются сложности и "глюки". Во-первых, нужно настроить и обучить более 20пользователей предпенсионного возраста. Во- вторых, база редактируется "на лету" (хранится на сервере), а в циркулярном письме обновляется через 20-40 минут (новые записи появляются через 20-40 минут)!

На самом деле Сервис - Рассылка писем - абсолютно годный, несложный для пенсионеров и неглючный вариант.  
Глюки связаны с тем, что механизм сталкивается с невалидным значением (вместо числа - текст) или со значением ошибки (например, в кач-ве БД используется Таблица (xls/ods), а в ячейке её - #N/A #Н/Д #ДЕЛ/0 итп.

Поэтому:
1) выбор БД - в сторону SQLite - правильный. В неё все хранится как есть, то есть как текст. У меня база данных 200 Мб обновляется по сети каждые 3-10 минут, от разных клиентов, без сервера (файловый режим).  

2) выбор БД в виде Эл. таблицы - требует внимания, и допустим на уровне маленького отдела, в одном кабинете

3) поля слияния во Writer - лучшее, что сделано в мире ПО. Они форматируются, переносятся, ищутся, проверяется орфография (здесь вру, но несильно).

4) механизм выборочного слияния, по Ctrl+Shift+F4 (или просто F4) - шедевр юзабельности. Научить жать Ctrl+F, находить нужную строку и жать кнопку Данные в поля - очень легко.

PS А в чем были глюки и сложности? Если с данными - так их надо готовить... Поясните.  
Записан

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

Сообщений: 67


« Ответ #10: 6 Июль 2017, 11:42 »

1) выбор БД - в сторону SQLite - правильный. В неё все хранится как есть, то есть как текст. У меня база данных 200 Мб обновляется по сети каждые 3-10 минут, от разных клиентов, без сервера (файловый режим). 

Что значить обновляется по сети? У каждого клиента своя реплика? И как конфликты разрешаются?
Записан
dimmon777
Пользователь
**
Offline Offline

Сообщений: 52


« Ответ #11: 6 Июль 2017, 12:02 »

maksvlad, как писал выше,  циркулярное письмо не вариант.  Есть 20 пользователей - предпенсионного возраста,  работающие за копейки (т. е.  учеба про всякие циркулярные письма им не интересна). Сделал макрос,  в котором вводишь один из параметров - ИНН организации,  открывается Шаблон в котором меняются поля на нужные (найти - заменить,  писал выше).  Впринципе работа макроса устраивает. Но хотелось бы повторно этот макрос использовать,  так как поля уже поменяны,  а новые значения он не вставляет!
Записан
economist
Ветеран
*****
Offline Offline

Сообщений: 739


« Ответ #12: 6 Июль 2017, 12:55 »

maksvlad - файл SQLite - базы один, лежит на сетевой шаре. Подключение - файловое, через сетевые диски или в манере \\fileserver\share\dbfile.sqlite  или \\ip-address\share\dbfile.sqlite   

Файл поддерживает 4 потока на чтение и 1 поток на запись, все что больше - уходит в регулируемый тайм-аут. У меня при ежечасных 20 чтениях от 20 пользователей - никто не жалуется, т.к. сама SQLite быстрая неимоверно. Таймауты на 10 секунд возникают единичные, в основном при записи кем-то. Саму базу читают до 100 человек, но отслеживать коннекты я после краштестов перестал, т.к. всё работает ровно. По скорости - равно MS Access 2003 при 5-10 юзверях.

Вся магия в "указателях" внутри файла БД, он не перезаписывается целиком никогда.

Конфликтов в SQLite не бывает, кто последний - тот и папа, ACID и Rollback - есть. 
Записан

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

Пол: Мужской
Сообщений: 2 291


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #13: 6 Июль 2017, 12:59 »

Впринципе работа макроса устраивает. Но хотелось бы повторно этот макрос использовать,  так как поля уже поменяны,  а новые значения он не вставляет!
Повторно этот макрос использовать не надо. Для изменения содержимого существующего поля пользователя (с именем "Al" как в предыдущем примере или другим существующим) используйте:
Код:
Sub main
Dim oUserField
oUserField=ThisComponent.TextFieldMasters.getByName("com.sun.star.text.fieldmaster.User.Al")
oUserField.Content="Новый Content"
End Sub
Записан

economist
Ветеран
*****
Offline Offline

Сообщений: 739


« Ответ #14: 6 Июль 2017, 13:14 »

dimmon777 - "циркулярка" нужна не всегда, поясню. Вот как работает у меня:

Для нескольких писем конкретным адресатам:

1) Пользователь запускает Writer и выбирает из шаблона, а чаще просто в пустом листе набирает 2-3 буквы - фб (фирменный бланк), пж (письмо-жалоба), пз (претензия по задолженности), дп (договор поставки) и жмет F3. Появляется готовый документ с "серыми" полями из БД. В письме-претензии - это порядка 10 полей, в договоре - 20.

2) Пользователь жмет Ctrl+Shift+F4 (открывается таблица СУБД - результат запроса, содержащая всё, что может понадобиться в жизни - адреса, фио и ДР рук-ей, номера доверенности, суммы задолженности, лимит её, среднемесячный оборот, количество просрочек, колонку прайса итп),

3) Пользователь жмет Ctrl+F вводит "хвост" ИНН (5-6 цифр) и Enter. Курсор находит нужную строку.

4) Пользователь жмет кнопку Данные - в поля. Всё, документ готов к печати


Для тысячи писем - всем из таблицы "Должники с просрочкой свыше 100000 и 3-х мес":
...
3) Сервис - Рассылка - Далее (4 раза). Всё, получен один 1000 страничный или 1000 одностраничных ODT/DOC/PDF-файлов, с помощью расширения MultiSave.  

Обучаются этой системе за 2-3 часа. Макросов здесь нет, а если и есть - копеечные. Например тут, когда нужна "обратная связь" - файла ODT -> ODB -> ODBC -> SQLite -> ODB -> другой ODT. Скажем, у меня человек пишет заявление на матпомощь во Writer, тратит 1 минуту (там списки, чекбоксы, автодиагностика - положена она ему или нет) - данные из него сразу попадают в SQLite, её отчеты, и вот они: в любой момент готовые Протоколы профкома, Реестр на выдачу, Платежная ведомость. Красота...
« Последнее редактирование: 6 Июль 2017, 13:16 от economist » Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
Страниц: 1 2 »   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!