Проверка на открытие документа другим пользователем

1. user1226763 25.11.19 16:35 Сейчас в теме
Помогите настроить проверку на открытие документа. На форме рабочего стола создается предварительная запись, по которой можно создавать документ прием. Но почему-то появляется возможность создавать 2 документа приема, а этого не должно быть. В модуле документа прописала процедуру ПроверкаНаОткрытиеДокументаДругимПользователем(Отказ);
Но она срабатывает не всегда. Форма управляемая 8.3.9
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. PriestVI 25.11.19 16:53 Сейчас в теме
(1) Я не могу понять как работает Ваша процедура, кода нет.
В несколько похожей ситуации я делал регистр "БлокируемыеДокументы" и при начале работы с документом по указанному условию добавлял его туда. При открытии формы проверял есть-ли этот документ в данном регистре и если есть, то запрещал работу с ним.
3. PriestVI 25.11.19 17:00 Сейчас в теме
(2) Хотя в данной ситуации не думаю, что это лучшее решение, ради одного документа жалко создавать:)
4. Lenten 25 25.11.19 17:05 Сейчас в теме
я так понимаю вы должны проверять не открыт ли не записанный документ у текущего пользователя? или у вас в базе только 1 человек может открыть для создания новый документ (надеюсь что нет)

если 1 предположение верно, тогда просто при нажатии кнопки проверяйте открыта ли форма или нет
6. user1226763 25.11.19 20:50 Сейчас в теме
(4)да, должны проверять не открыт ли этот документ. Я сделала, чтобы при открытии документ записывался и выполняется процедура ПроверкаНаОткрытиеДокументаДругимПользователем(Отказ). Но почему-то разные пользователи могут зайти сразу и открыть этот документ. в итоге по предварительной записи создается 2 документа.
8. Lenten 25 26.11.19 09:20 Сейчас в теме
(6) я правильно понимаю у вас порядок такой

пользователь создает новый документ
он автоматом записывается
его находит другой пользователь в списке документов и открывает его (это вы пытаетесь запретить)?
9. user1226763 26.11.19 10:20 Сейчас в теме
(8) есть поле с таблицей по предварительной записи ( это документ основания документа Прием). Если один пользователь захотел создать по этой записи прием, нажимает правой кнопкой мыши "Создать прием" и ему открывается форма приема, потом второй решил по этой записи создать прием и делает тоже самое и ему тоже открывается форма приема...но в итоге они оба могут сохранить эти приемы, но под разными номерами. А это неправильно
10. Lenten 25 26.11.19 10:37 Сейчас в теме
(9) я бы сделал так.
при щелкают по "Создать прием" идет проверка есть ли по этой записи документ Прием (можно анализировать документы приема по реквизиту основание или в предварительную запись писать куда-то)
если документ прием уже есть (я так понял он записывается в базу при 1 открытии), пользователю пишут что документ уже создан.
Если он открыт у кого-то - об этом можно сообщить. Если нет, то открыть существующий
11. user1226763 26.11.19 10:53 Сейчас в теме
(10) при открытии у первого пользователя открывается форма Прием(создание) а у второго Прием уже с номером. и получается что оба приема можно сохранить
12. user1226763 26.11.19 10:54 Сейчас в теме
(10) сейчас попробую по вашему пути... в голове куча вариантов, но у всех какой-то косяк(
16. user1226763 26.11.19 11:30 Сейчас в теме
(10) вот моя процедура
&НаКлиенте
Процедура ПроверкаНаОткрытиеДокументаДругимПользователем(Отказ) Экспорт

Если ЭтаФорма.ТолькоПросмотр = Ложь Тогда
Попытка
ЭтаФорма.ЗаблокироватьДанныеФормыДляРедактирования();
Исключение
Ошибка = ОписаниеОшибки();
Ошибка = Сред(Ошибка, Найти(Ошибка, "сеанс:") + 7, СтрДлина(Ошибка));
Ошибка = Сред(Ошибка, 1, Найти(Ошибка, ",") - 1);

ТекстВопроса = "Документ уже открыт пользователем "+ Ошибка + ". Открыть для просмотра?";

Если Вопрос(ТекстВопроса , РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Нет Тогда
Отказ = Истина;
Иначе
ЭтаФорма.ТолькоПросмотр = Истина;
КонецЕсли;
КонецПопытки;
КонецЕсли;

КонецПроцедуры


Но почему-то обходит попытку(
25. user1226763 27.11.19 12:56 Сейчас в теме
(10) при нажатии на "Создать прием" в процедуре
Если НЕ ПЗРасшифровкаТекущейОбласти = Неопределено И ЗначениеЗаполнено(ПЗРасшифровкаТекущейОбласти.Событие) Тогда
//Проверка статуса записи
СтатусСобытия = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ПЗРасшифровкаТекущейОбласти.Событие, "Статус");
Прием = ВвестиПосещениеНаСервере(ПЗРасшифровкаТекущейОбласти.Событие, "Прием");
Если ЗначениеЗаполнено(Прием) Тогда
СтруктураПараметры = Новый Структура("Ключ", Прием);
Иначе
СтруктураПараметры = Новый Структура("Основание", ПЗРасшифровкаТекущейОбласти.Событие);
КонецЕсли;

ОткрытьФорму("Документ.Прием.ФормаОбъекта", СтруктураПараметры);
КонецЕсли;

по второму если открывает форму для создания(без номера документа), по первому если документ был записан, т.е уже записанный прием. может тут что не так.
26. Lenten 25 27.11.19 14:42 Сейчас в теме
(25) если у вас при открытии сразу запись документа идет, то внешне все нормально. но внешне и (13) работать должно
5. mar82 25.11.19 17:05 Сейчас в теме
добавьте параметр сеанса и взводите его при открытии :)
7. ImHunter 327 26.11.19 07:06 Сейчас в теме
Вероятно, можно воспользоваться методами объекта Заблокировать() и Заблокирован().
13. user1226763 26.11.19 11:03 Сейчас в теме
(7) уже и так писала
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
   Если ЭтаФорма.ТолькоПросмотр = Ложь Тогда
    	Попытка
            ЗаблокироватьДанныеДляРедактирования(Объект.Ссылка,, ЭтаФорма.УникальныйИдентификатор);
    	Исключение
    	    ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Документ уже открыт пользователем ");
    		ЭтаФорма.ТолькоПросмотр = Истина;
        
    	КонецПопытки;
    КонецЕсли;
Показать


работает криво
14. PriestVI 26.11.19 11:12 Сейчас в теме
(13) Конфигурация с возможностью изменений?
15. user1226763 26.11.19 11:28 Сейчас в теме
17. PriestVI 26.11.19 11:32 Сейчас в теме
(15) А Вы пробовали мой вариант? не претендую на 100% верность, но если он не подходит, уважаемые посетители форума поправят. Мне самому интересно.
18. user1226763 26.11.19 11:36 Сейчас в теме
(17) не делала. Я сделала проверку по запросу, есть ли созданный документ по предварительной записи или нет. Если есть тогда только просмотр. Но в итоге получилось что документ не смогла провести...Но мне нужно выдавать сообщение, что этот документ открыт пользователем таким-то.
19. PriestVI 26.11.19 11:52 Сейчас в теме
(18) Чем больше читаю, тем больше путаюсь. Я попробую сформулировать, а Вы скажите, где я не прав.
У Вас есть документ Предварительная запись, на основании него сотрудники создают документ прием. Проблема в том, что два сотрудника одновременно могут начать создавать документ прием и в результате будет задвоение. Вам нужно, чтобы, если один сотрудник уже начал создавать документ прием по конкретной заявке, второй пользователь не смог начать создание документа по этой заявке?
20. user1226763 26.11.19 12:04 Сейчас в теме
(19) да, все правильно. Должно выдаваться сообщение Прием открыт ...пользователем. И например, разрешить ему только просмотр этого документа.
21. PriestVI 26.11.19 12:11 Сейчас в теме
(20) Тогда я бы сделал все таки через регистр сведений. Вкратце смысл:
Создаем регистр сведений, в который добавляем заносим, Заявка(прием), пользователя который открыл, время открытия.
Когда пользователь начинает создавать прием проверяем по регистру начата ли работа по данному приему, если да, отказ, если нет, то добавляем запись в регистр. Когда мы создаем документ - т.е. прием создан, то удаляем запись по нему из регистра.
22. user1226763 26.11.19 12:14 Сейчас в теме
(21) чувствую надо и ваш способ попробовать. Не хотела регистры создавать и еще туда записывать....
23. PriestVI 26.11.19 12:20 Сейчас в теме
(22) Способ рабочий, но другое дело, что я сомневался, что в Вашем случае нет ничего проще. Надо еще учитывать, что при неожиданном завершении работы записи в регистре могут зависать. Поэтому я добавлял еще параметры сеанса, и периодически пробегался по регистру заданием - вычищал неактуальные записи если они были(в моем случае не было). Надо предусмотреть все варианты.
24. user1226763 27.11.19 12:48 Сейчас в теме
вопрос еще открыт. Сейчас при открытии документа прием вторым пользователем показывается сообщение и форма открыта для Только просмотр, за исключением одной таблицы, и если добавляю данные из этой таблицы, то при закрытии система предлагает сохранить и сохраняет(( и опять появляется дубликат по записи.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот