Как узнать, открыта ли форма каким-то пользователем?

  • Автор темы Истребитель
  • Дата начала
И

Истребитель

#1
Добрый день!

Ситуация такова: в сетевой базе 1С 8.1 (сервер 1С 8.1) есть обработка, которая по таймеру загружает заказы из интернет-сайта (xml файла). Из-за этого, если пользователь редактирует заказ, а в этот момент происходит его загрузка, пользователь после минут работы получает результат "данные исчезли или поменялись, нельзя сохранить".

Нужно, чтобы эта обработка проверяла, не редактирует ли какой-нибудь пользователь этот документ. И не писала в него, если он уже редактируется. В 1С есть алгоритм, следящий за этим - если попытаться открыть документ, начать его редактировать, другой пользователь откроет документ только в режиме просмотра (все поля будут закрыты для редактирования). Нужно как-то запросить это состояние (документ редактируется) из кода (запущенного возможно на другом экземпляре программы - форма.открыта() не подойдёт.

Помогите, пожалуйста.

Спасибо.
 

Дайнеко

Well-known member
19.11.2009
951
0
#2
Разберу вопрос по частям:
1. А Обработка, получается, лезет в существующие документы? Обычно импорты создают новые документы и записывают их.
2. "В 1С есть алгоритм, следящий за этим". Так Вы его видели, этот алгоритм? И что в нем?

Что касается ответа, может подойдет "БлокировкаДанных".
 
И

Истребитель

#3
1. Да обрабокта обновляет уже созданный заказ если пользователь на сайте его изменил. Например, дозаказал или отменил заказ на один из товаров в списке заказа. В э том случае обработка делает .получитьобъект() и затем .записать()

2. Открываете форму документа в одном клиенте, меняете любое поле, открываете форму этого же документа в другом клиенте, все поля становятся только для чтения
 

Дайнеко

Well-known member
19.11.2009
951
0
#4
Открываете форму документа в одном клиенте, меняете любое поле, открываете форму этого же документа в другом клиенте
А что написано в тексте программы этой "1С"? Можете посмотреть и запрограммировать так-же?
Слово "БлокировкаДанных" что-нибудь вам говорит?
 
И

Истребитель

#5
Я не вижу при открытии формы какого-то кода.

Правда я неверно сказал - не "рид онли" форма открывается, а вылезает сообщение при попытке редактирования "Не удалось заблокировать. Действие (редактирование...) не выполнено. Запись заблокирована пользователем..."

Слово "БлокировкаДанных" не говорит, сейчас погуглю
 
И

Истребитель

#6
Если я правильно понял намек на БлокировкуДанных, я должен в форме объекта, редактирование которого из обработки я хочу предотвратить, на обработку любого первого изменения этого объекта запустить блокировку объекта на запись, так? Но ведь тогда обработка просто упадет с собщением об ошибке, как и у меня при попытке вручную редактировать объект через форму с двух пользователей?
 

Дайнеко

Well-known member
19.11.2009
951
0
#7
Почему обязательно ошибка? Механизм блокировки для того и предназначен, чтобы заблокировать объект. А в случае неудачи, т.е. кем-то уже заблокирован получить об этом информацию.
Гугл лучше оставить в покое и почитать справку 1С по разделу "БлокировкуДанных"
Я пока не разбирался с блокировкой 8-ки. Но 7.7 это выглядело бы так:
Код:
Проц-ра ПриОткрытии()
Если НЕ(Блокировка() = 1) Тогда
Предупр("Занято!")
Форма.ТолькоПросмотр(1);
Конец