• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

Истребитель

Добрый день!

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

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

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

Спасибо.
 
Д

Дайнеко

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

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

Истребитель

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

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

Дайнеко

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

Истребитель

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

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

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

Истребитель

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

Дайнеко

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!