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

Тема в разделе "1C и всё что с ней связано", создана пользователем Истребитель, 12 авг 2011.

  1. Истребитель

    Истребитель Well-Known Member

    Регистрация:
    9 июн 2010
    Сообщения:
    110
    Симпатии:
    0
    Добрый день!

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

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

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

    Спасибо.
     
  2. Дайнеко

    Дайнеко Well-Known Member
    1C Team

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

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

    Истребитель Well-Known Member

    Регистрация:
    9 июн 2010
    Сообщения:
    110
    Симпатии:
    0
    1. Да обрабокта обновляет уже созданный заказ если пользователь на сайте его изменил. Например, дозаказал или отменил заказ на один из товаров в списке заказа. В э том случае обработка делает .получитьобъект() и затем .записать()

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

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    А что написано в тексте программы этой "1С"? Можете посмотреть и запрограммировать так-же?
    Слово "БлокировкаДанных" что-нибудь вам говорит?
     
  5. Истребитель

    Истребитель Well-Known Member

    Регистрация:
    9 июн 2010
    Сообщения:
    110
    Симпатии:
    0
    Я не вижу при открытии формы какого-то кода.

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

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

    Истребитель Well-Known Member

    Регистрация:
    9 июн 2010
    Сообщения:
    110
    Симпатии:
    0
    Если я правильно понял намек на БлокировкуДанных, я должен в форме объекта, редактирование которого из обработки я хочу предотвратить, на обработку любого первого изменения этого объекта запустить блокировку объекта на запись, так? Но ведь тогда обработка просто упадет с собщением об ошибке, как и у меня при попытке вручную редактировать объект через форму с двух пользователей?
     
  7. Дайнеко

    Дайнеко Well-Known Member
    1C Team

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

Поделиться этой страницей