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

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

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

siti

Столкнулся с такой проблемой. Таблица Calc сделана в режиме совместного доступа и сотрудник не в состоянии отследить открыт ли у него этот файл ранее. Он может отрыть его несколько раз и в итоге часть правок делается в одном окне этого документа, часть в другом. При сохранении и закрытии начинают вылазить всякие несостыковки.

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

Степень развития когнитивных функций сотрудника в рамках данной темы не рассматриваем.

mikekaganski

Цитата: siti от  5 декабря 2022, 14:39Таблица Calc сделана в режиме совместного доступа

Что это значит? Файл лежит на расшаренном сетевом ресурсе? Или используется режим "Сервис->Совместно использовать документ"?
С уважением,
Михаил Каганский

siti

Второе. Режим совместного использования
Ну и лежит на smb шаре, хотя это не принципиально в данном случае.

mikekaganski

Уточните, как возникает проблема.

Цитата: siti от  5 декабря 2022, 14:39сотрудник не в состоянии отследить открыт ли у него этот файл ранее. Он может отрыть его несколько раз

Как? Сотрудник работает на разных системах? Или на одной, но с разными профилями? Потому что в обычной ситуации работы на одной системе с одним профилем программа определяет сама, что данный документ (в т.ч. в режиме совместного использования) уже открыт, и просто переключится в нужное окно. Это не должно приводить к проблемам.

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

При открытии такого файла программа показывает предупреждение "The spreadsheet is in shared mode. This allows multiple users to access and edit the spreadsheet at the same time." (если оно не отключено чекбоксом "Do not show this warning again"). В принципе, ничего не мешает улучшить этот диалог и показывать текущих пользователей файла под развёртывающейся секцией (т.е. то, что показывает "Сервис->Совместно использовать документ"), аналогично развёртывающейся секции в предупреждении о том, что файл уже открыт для обычных файлов. Напишите запрос.
С уважением,
Михаил Каганский

siti

Разобрались с алгоритмом ошибки:
1. Открываем файл
2. Вносим изменения и сохраняем их
3. Отрываем файл повторно и он открывает вторую копию.

если изменения не сохранять, то открытия второй копии не происходит.

mikekaganski

С уважением,
Михаил Каганский

siti

Цитата: mikekaganski от  6 декабря 2022, 16:12Явный баг.
А вы можете это грамотно и на аглицком в виде бага оформить или это мой крест?

mikekaganski

С уважением,
Михаил Каганский

siti

#8
Там еще при закрытии одной из открытых копий после закрытия другой возникает сообщение, что данный файл не является файлом с общим доступом и предлагает сохранить изменения либо под другим именем, либо закрыть без сохранения и потерять все внесенные изменения. 
Несколько раз на такое влетали
Хотя вроде это описали в баге

siti

Так как баг будут исправлять неопределенное количество времени, возвращаюсь к проблеме.
Можно ли как то в режиме совместного доступа отследить, что данный пользователь имеет открытый данный файл и не давать открыть его вторую копию?

economist

Под Windows в РСД (режсовмдоступ) - при открытии создается временный файл вида
.~sharing.ФайлРСД.ods# внутри которого текст ДОМЕН/Юзер, имя_хоста, дата_время, URI к .lock-файлу блокировки в котором то же самое.

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

sokol92

Цитата: economist от 18 января 2023, 14:48То есть можно написать макрос, который срабатывает при открытии дока,
Проблема в том, что в ситуации, описанной в #4, события открытия документа не создаются при повторном открытии (только OnFocus/OnUnfocus).
Владимир.

economist

У меня как в #4 получается открыть две копии РСД-файла, но при этом макрос, назначенный на событие Открытие документа срабатывает всегда (и на Файл/Перезагрузить тоже).

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

sokol92

#13
Цитата: economist от 18 января 2023, 16:21макрос, назначенный на событие Открытие документа срабатывает всегда
Возможно, мы пишем о разных ситуациях.

У меня макрос, реагирующий на открытие любого документа, записан в библиотеку Standard из "Мои макросы" и назначен на событие "Открытие файла" (поле диалога "Настройка"/ События "Сохранить в: " - LibreOffice). Повторное открытие выполняется средствами операционной системы (двойным щелчком по имени файла), а не из приложения LibreOffice.

LO 7.4.2.3 Win 10.
Владимир.

siti

#14
Подтверждаю. В описываемой ситуации макрос, привязанный на открытие документа запускается всегда на всех копиях этого документа. Располагается он НЕ в библиотеке Standard, если это имеет значение.

Пользователь на одном компьютере всегда один, так что можно пропустить сравнение имен пользователей. Надо только проверить на наличие уже открытого на данном компьютере файла с аналогичным именем. Хотя если делать универсально решение, например так же на работу сотрудников через rdp то можно и пользователя сравнивать.

А нет возможности не искать созданный где-то файл, а перебрать имена всех открытых файлов в самом LO?