Контроль открытия файла в режиме совместного доступа

Автор siti, 5 декабря 2022, 14:39

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

sokol92

Попробуйте проделать следующее.

1. Уберите признак совместного использования документа.
2. Добавьте нижеследующий макрос в библиотеку Standard документа.
3. Назначьте этот макрос на событие "Открытие файла".
4. Сохраните документ и вновь откройте его.
5. Добавьте признак совместного использования документа, сохраните файл и закройте.

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

Sub OnDocOpen(oEvent)
  Dim oDocN, oDoc, n As Long, url As String
  oDocN=oEvent.Source
  url=oDocN.Location
  If url="" Then Exit Sub
  For Each oDoc In StarDesktop.Components
    If HasUnoInterfaces(oDoc, "com.sun.star.frame.XStorable") Then
      'Msgbox oDoc.URL & Chr(10) & oDoc.Location
      If oDoc.Location=url Then
        n=n+1
        If n>1 Then
          Msgbox "Этот документ уже открыт Вами ранее." & Chr(10) & "Закройте второй экземпляр документа", MB_ICONEXCLAMATION
          Exit Sub
        End If
      End If 
    End If
  Next oDoc
End Sub
Владимир.

siti

А как поступить если у меня уже есть макрос на это событие? Включить ваш код в мой макрос? Почему обязательно в стандартную библиотеку его надо?

sokol92

Вызывайте мой макрос из своего. Разумеется, макрос может быть в любой библиотеке (можно занести в Вашу библиотеку).
Владимир.

siti

Макрос работает, спасибо!
Но к сожалению, не решает основную проблему, как я хотел.
Если закрываем эту вторую копию, но есть не сохраненные правки в первой копии или мы вносим правки сейчас, то нам не дает сохранить первую копию.

Вылазит ошибка:
"Эта электронная таблица больше не находится в режиме совместного использования.

Сохраните электронную таблицу в отдельном файле и объедините изменения в совместно используемой электронной таблице вручную."

Полагаю, что это решится исправлением бага, но там им никто не занимается.
Есть способ активизировать этот процесс?

economist

Мысли вслух:

1) проблема локальная и редкая. Возможно, обучение пользователя, грамотная настройка умолчаний и ярлыков запуска, или использование Portable-версий, умеющих запрещать запуск нескольких экземпляров Calc - решат вашу проблему.

2) когда сбор данных в "общем доступе" становится слишком массовым - его неизбежно приходится заменять на базу данных, возможно и вам пора. Там не будет подобных проблем. В ряде случаев можно просто 5-ти пользователям заполнять 5-ть разных ODS-файлов, а в 6-м ODS - сливать их штатным механизмом Лист - Вставить... - Из файла - Связь

3) про "активизировать": успешные примеры глобальных (для всех) доработок с небольшим донатом, конечно же, были. Но узкоспециализированные доработки, имхо, требуют большего, а главное - времени, которого у разрабов мало. Я не разработчик, поэтому, столкнись с вашей проблемой, условные 10 тыс. руб. доната я бы на это "зажал" и искал сам решения в пп. 1-2 :-)
 
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

siti

#20
Мысли вслух:
1. У нас два пользователя всего и нет смысла разрабатывать базу данных. В Calc хоть можно в ручную поправить в визуальном режиме. И клиентам мы высылаем информацию в такой же таблице.

2. Проблема может быть и редкая, но в презентации нового LO 7.5 прям заявляют совместной работе в таблицах Calc. Они это не тестировали что-ли совсем???

https://www.libreoffice.org/discover/calc/#collapseFour

Может у Михаила Каганского есть прямые контакты разработчиков? - намекнуть им об этой проблеме...

economist

Цитата: siti от 20 февраля 2023, 10:38в презентации нового LO 7.5 прям заявляют совместной работе в таблицах Calc
Возможно вам стоит попробовать более старые версии LO. Данный функционал существует с момента появления LO и используется многими (значит работает), возможно какая-то версия LO не дает случайно открывать копию и проблема таким образом решится.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...