Не блокируется окно владельца 1с

Обновлено: 07.07.2024

Пользователь ругается, что не всегда отрабатывает блокировка,бывает что могут два пользователя редактировать.

Собственно вопрос, почему в коде написано в одном месте Заблокировать и Разблокировать ?
Кто то же сделал это не с проста, думаю как раз дело в Разблокировать.
Плюс как можно проверить в одном конфигураторе вход двух разных пользователей?

(11)А вы и так его не блокируете, так как у вас все происходит в попытке, не смогли заблокировать, вышли в исключение, смогли..то и разблокировали сразу,
Тут вопрос в другом , нужно при открытии формы документа тогда дописывать что то типа

Поправка, в УФ надо в процедуре при ПриСозданииНаСервереэто делать

И при закрытии документа, его разблокировать. тогда этот метод прокатит у вас , а иначе ничего не отработает.

он блокируется и разблокируется в одной "попытке"? " ТЧ есть процедура Выбора" - т.е. выбрали и блокировка снялась.

1.1. Прежде чем изменять существующий объект информационной базы из кода на встроенном языке, следует предварительно его заблокировать (установить «блокировку данных для редактирования» или «объектную блокировку»), тем самым, во-первых, убедиться, не заблокирован ли он другими объектами, во-вторых, попытаться предотвратить его изменение другими пользовательскими сеансами (или другими экземплярами объекта в этом же сеансе).

В противном случае, если при изменении и записи из встроенного языка не устанавливать блокировку объекта на время редактирования, то может возникнуть, например, ситуация, когда пользователь не сможет сохранить свои изменения, если эти же самые данные были конкурентно изменены в другом сеансе.

При этом блокировка данных для редактирования не запрещает запись заблокированных данных в других пользовательских сеансах (или в других экземплярах объекта в этом же сеансе), а лишь не позволяет нескольким объектам одновременно установить блокировку одних и тех же данных.

Сервис - Параметры - Запуск 1с
Можно выбрать пользователя под которым запускать 1с для отладки

(2) Да.В одной попытке, хотел поменять, но зачем то это же сделали же.. Отсюда и вопросы..
При этом блокировка данных для редактирования не запрещает запись заблокированных данных в других пользовательских сеансах (или в других экземплярах объекта в этом же сеансе), а лишь не позволяет нескольким объектам одновременно установить блокировку одних и тех же данных.
По поводу этого, по сути устанавливается же блокировка объекта, как тогда пользователь ещё может зайти ? Выходит дело всё-таки в блокировка и разблокировке в одном месте и достаточно убрать разблокировать? этот код у вас проверяет есть блокировка или нет а не блокирует поэтому и есть в одном месте блокировка и разблокировка (если объект заблокирован другим пользователем - то попадаете в исключение, а если свободен - то ничего не происходит) этот код у вас проверяет есть блокировка или нет а не блокирует (5) То есть имеет смысл после Разблокировать (); Написать снова объект.Заблокировать? И разблакировка автоматически снимется после записи объекта ? (7) Я бы сказал, такое возможно. Но это не есть хорошая практика. Для этого есть метод Заблокирован() .
Исключение, должно оставаться исключением, и не гоже использовать его в качестве управляющего блока. (8) И в каком же мне месте проверять на методом Заблокирован(), если у меня идёт блокировка,а после сразу разблокировка. ?

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

(10) Но если я принудительно не заблокирую, то и блокировки не будет.

И что вы подразумеваете после "Тогда" писать ?

Видимо не дописали Вы,быстро ответил я.
Вот именно меня и интересует когда ставить Заблокировать ? После моей конструкции?
А при закрытии документов делать Разблокировать ?

(11)А вы и так его не блокируете, так как у вас все происходит в попытке, не смогли заблокировать, вышли в исключение, смогли..то и разблокировали сразу,
Тут вопрос в другом , нужно при открытии формы документа тогда дописывать что то типа

Поправка, в УФ надо в процедуре при ПриСозданииНаСервереэто делать

И при закрытии документа, его разблокировать. тогда этот метод прокатит у вас , а иначе ничего не отработает.

(14) В итоге сделал при Выборе документов принудительную Блокировку.
А при выходе,закрытии написал следующее:

Насколько это корректно ?

При закрытии формы документа ? если да то вполне нормально..только блокировку я бы прописал в при создании, потому как открыть документы можно же не только из этой обработки,

(19) У пользователя только три варианта закрыть форму, это выйти в список документов, либо на крестик в верхнем углу обработки, либо кнопка "Выйти". Соответственно везде и добавил этот кусок призакрытии. (22) Короче, всё зависит от вашего конкретного случая. Что вы там делаете мы не знаем, а значит будет у вас блокировка или нет, думайте сами. Главное запомните. Блокировка действует в период: от вызова "Заблокировать" - до конца процедуры её вызвавшей. Соответственно устанавливать или проверять блокировку на форме не имеет практического смысла, в большинстве случаев использования. Но вполне возможно, что в вашем конкретном случае, это и имеет практическое применение. Блокировка действует в период: от вызова "Заблокировать" - до конца процедуры её вызвавшей

откуда такая инфа, не подскажете? Не могу найти подтверждения

(14) Этот код не будет работать. Т.к. в данном случае ЭтотОбъект - это УправляемаяФорма. РеквизитФормыВЗначение("Объект").Заблокировать(). Тоже не сработает. Т.к. блокировка работает только на время выполнения процедуры. Соответственно после выполнения "ПередОткрытием" ничто не мешает другому сеансу/коду изменить объект, до того как первый пользователь нажмёт кнопку "Записать". (18) Ну у меня у формы реквизит ДокументОбъект.ЗаказПокупателя.
Его и блокирую.
А по другому пользователи как кроме выбрать из списка и создать новый ничего больше не могут. Только записать и провести прямо в списке. Но так делать не будут думаю,хотя.. заставили задуматься Вы меня :) (25) В обычных формах, объект живёт на клиенте. В данном случае всё упрощается. Делайте блокировку в модуле объекта. А разблокируйте ПослеЗаписи.
Я поправил под УФ, просто код скопировал под обычные формы.
Там при создании на сервере, блокироваться должен объект, тогда пока формы будет открыта объект связанный с формой тоже будет заблокирован, кстати нигде не сказано что блокировка действует только на время выполнения процедуры. откуда такие данные ? По идее блокировка на объект должна действовать пока вы его не разблокируете, или сам объект( в данном случае объект открытого документа ) не будет удален программой, т.е. пользователь закроет форму.

(28) Не, забираю свои слова обратно. Не работает ПриСозданииНаСервере. Всё равно объект не блокируется. Почему тогда возникала ошибка ("объект не выбран") не понятно.

кстати нигде не сказано что блокировка действует только на время выполнения процедуры. откуда такие данные

Экспериментально. Открыл два окна. В одном окне заблокировал, попробовал во втором. Блокировка не сработала. Поставил на паузу после блокировки. Попробовал заблокировать во втором - блокировка сработала. В общем эти сведения мне дебагер сообщил

(28) Продолжил, дальше исследовать поведение метода "Заблокировать".
1е. РеквизитФормыВЗначение("Объект") не имеет ни какого эффекта. Блокировка не устанавливается
2е. Заблокировать() - работает только пока исполняется процедура её вызвавшая
3е. Заблокирован() - работает только для сеанса его установившего. В остальных случаях всегда даёт ответ - "НЕТ"
4е. Объект блокируется автоматически только после записи объекта, и пока форма открыта (в чём смысл, не понятно)

Было проверено на совершенно разных версиях платформ. В клиент-серверном и файловом вариантах. Так что единственно правильным вариантом использования будет всё же изначальный:

(1) Несколько раз возникала данная проблема. Зависает конкретная база, пользователи не могут ничего сделать в текущем сеансе. Новые сеансы не пускает. При этом, другие базы в кластере продолжают работать. Подозреваю, что это происходит из-за того что платформа не может достучаться до журнала регистрации. Проблема воспроизводилась пару раз, как раз когда пытался что-то найти в журнале. Перезагрузка сервера не помогала.

Помогает отключение службы сервера и удалением файлов журнала регистрации. После чего служба стартовала и работа пользователей нормализовалась.

Как разобраться какой сеанс или процесс блокирует журнал?

(2)Без проблем, итак : 1) собственно сама база, отображаемая при запуске в "Администрирование серверов 1С Предприятия x86-64" на сервере, при попытке запуска 1с просто наглухо зависает (думаю тут картинка не нужна, просто висит окошко которое появляется ДО начала ввода пароля)
2) Появляется сеанс (при попытке запуска)
Ну и во вкладке "Блокировки" появляется наш же сеанс, который собственно заблокирован при попытке войти.
Очистка сеансов и отсоединение базы в SQL не помогают. Решение я описал, но оно подразумевает отвал на время остальных баз. Возможно ли эту проблему исключить или решить иначе? Может кто сталкивался.

Все эти блокировки, которые видны на вашей картинке - абсолютно нормальное явление и на вход пользователя не влияют.
То есть рыть вам необходимо не в сторону блокировок.

Причин зависания 1С на самом деле очень много.

И потому анализ лучше доверить 1С специалисту. Вы скорее всего не разберетесь с проблемой.

Как минимум это очевидно из вашего вывода о блокировках как причине зависания.
Я не стремлюсь вас уколоть поверьте!

По переписке на форуме эту проблему локализовать очень трудно. Когда специалист видит ситуацию глазами - там совершенно другие скорости решения.

Вот как вариант ситуаций:
Зависает вход в 1 базу , или все базы?
Насколько Регулярно зависает?
Как входят пользователи каким образом в базу?

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

Прежде чем изучать открытие формы программно, познакомимся с очень интересным свойством управляемой формы 1С, которое называется РежимОткрытияОкна. Именно это свойство отвечает, каким образом откроется новое окно. Это свойство принимает три значения: Независимый, Блокировать окно владельца и Блокировать весь интерфейс.

Свойство формы 1С режим открытия окна

Если у формы 1С установлен Независимый режим открытия окна, то форма откроется в отдельном окне, как на рисунке ниже.

Независимый режим открытия окна

Здесь и далее приведена конфигурация из книги «Основы разработки в 1С: Такси».

В том случае если установлен режим Блокировать окно владельца или Блокировать весь интерфейс, то форма откроется по верх всех окон.

Форма 1С открыта по верх всех окон

Только в случае режима Блокировать окно владельца, будет заблокирована форма, в которой было инициализировано открытие новой формы. А в случае режима Блокировать весь интерфейс заблокируется весь интерфейс программы 1С. По сути, форма откроется в модальном режиме.

Со свойством формы разобрались, перейдем к открытию формы при помощи программного кода. Делать мы это будем при помощи уже знакомого нам метода ОткрытьФорму. Как работает этот метод, читайте в моей статье:

У этого метода есть последний седьмой параметр, который называется РежимОткрытияОкна, этот параметр имеет тип системное перечисление РежимОткрытияОкнаФормы, которое содержит в себе уже знакомые нам режимы: Независимый, Блокировать окно владельца и Блокировать весь интерфейс.

Если мы в методе ОткрытьФорму установим в седьмой параметр какое-либо значение, то форма откроется согласно этому значению.

Ниже приведены все три варианта открытия окна формы с использованием параметра РежимОткрытияОкна:

Изучайте управляемые формы 1С с моими статьями:

Открытие управляемой формы существующего объекта

Открытие управляемой формы 1С на основании другого объекта

Открытие обычной формы в управляемом приложении 1С

Очень подробно вопросы по работе с управляемыми формами в частности и с управляемым приложением в целом рассмотрены в книге «Основы разработки в 1С: Такси. Разработка управляемого приложения за 12 шагов». Эта книга станет настоящим подспорьем для тех, кто только начал знакомится с разработкой управляемого приложения.


  1. Без сложных технических терминов;
  2. Более 600 страниц практического материала;
  3. Каждый пример сопровождается рисунком (скриншот);
  4. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!

Промо-код на скидку в 16%: vCph8bW3rE


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

можно оплатить вручную:

Читайте также: