Документ не редактируется по причине неизвестная причина блокировки 1с

Обновлено: 04.07.2024

Конфигурация 77.
Документ редактируется интерактивно (т.е. открываем форму и редактируем), либо же, для определенного набора прав, сделана обработка для редактирования документа.
Задача:
Нужно запретить одновременно редактировать один и тот же документ интерактивно (через форму документа) и через обработку.
Пытался:
в процедуре ПриОткрытии() документа делаю
ТекущийДокумент().Блокировка(1);
При попытке редактировать из обработки сначала проверяю, заблокирован ли такой документ:


Здесь РежимБлокировки - проверяет, заблокирован ли текущий документ, примерно так:

Не смотря на то, что принудительно было установлено в 1, здесь возвращает 0.
Почему, и как вообще работает Блокировка()?

Решение для "новой" постановки задачи:
Если речь идет о работе в части редактирования, то нет самой задачи/проблемы.
Т.к. система блокирует документ открытый на редактирование и не даёт другой сессии открыть этот документ в режиме редактирования.
А если требуется запретить открытие и в режиме чтения (если в другой сессии редактируют документ), то надо:


Согласен. Но это совсем не сложно доработать - еще несколько строчек в той же глобальной процедуре. И это я уже сделал
2) Требует ручного вмешательства, если аварийно завершается "блокирующая" сессия.
Согласен. В моем случае - это приемлемо. К тому же, при аварийном завершении требуются и другие операции.
3) Не обеспечивает достоверности обновления файла "блокировок".

Тут что-то заумное, я не въехал.

Если речь идет о работе в части редактирования, то нет самой задачи/проблемы.
Т.к. система блокирует документ открытый на редактирование и не даёт другой сессии открыть этот документ в режиме редактирования.
А если требуется запретить открытие и в режиме чтения (если в другой сессии редактируют документ), то надо:

(5) была бы sql-ная база, возможно, так и сделал бы.

А вообще:
в сабже была просьба


Т.е. я хотел узнать, как работает Блокировка(), что и когда она блокирует. И именно этого мне никто не разъяснил Что мешает двум сессиям открыть или получить/записать информацию "одновременно"?
Ну, или свалится аварийно, если 1С открывает/записывает этот файл эксклюзивно? "редактироваться через форму, и, одновременно, через обработку"(с)
В обработке у Вас не вызывается форма документа. Вы используете операторы встроенного языка для нахождения документа, чтения из него реквизитов, размещение их в некой диалоговой форме. Потом из этой формы переносите реквизиты в объект "Документ" и выполняете обновление в базе данных. Так?
Тогда это делается выдачей Блокировка(1) в самом начале Вашей обработки. И при успешном выполнении выдаётся Ваш специфический диалог. После обновления информации в базе данных вызывается Блокировка(0). Всё. :-)
Еще рекомендую охватить "блоком Попытка" все методы обновления базы данных с соответствующей обработкой наступления сбойного события. Да, и метод Блокировать(1) полезно охватить "Попыткой". :-) В обработке у Вас не вызывается форма документа. Вы используете операторы встроенного языка для нахождения документа, чтения из него реквизитов, размещение их в некой диалоговой форме. Потом из этой формы переносите реквизиты в объект "Документ" и выполняете обновление в базе данных. Так?
Тогда это делается выдачей Блокировка(1) в самом начале Вашей обработки. И при успешном выполнении выдаётся Ваш специфический диалог. После обновления информации в базе данных вызывается Блокировка(0). Всё. :-)
Еще рекомендую охватить "блоком Попытка" все методы обновления базы данных с соответствующей обработкой наступления сбойного события. Да, и метод Блокировать(1) полезно охватить "Попыткой". :-) (9)
статью обязательно прочту. Сегодня же, вечером.
Сейчас сильно некогда :(
Похоже, Вы не "понимаете" разницу между использованием метода:
Блокировка(1)
Блокировка()
Да?
Возможно, посему и обращался сюда.
Сейчас в конфигурации все переделано и кода дать не могу. напишу, как делал.
Итак.
Форма документа.
В процедуре ПриОткрытии() я проверял, заблокирован ли кем-то документ. Если нет - блокирую и продолжаю открывать. Примерно так:

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

далее работаю с документом и после окончания с ним работы:

Проверяю так:
открываю форму документа одним юзверем
и тут де открываю его в обработке другим юзверем.

(11)
Александр (whtblck).
Вам надо сделать только ЭТО и только ТУТ:

И желательно учесть мою рекомендацию про "блок Попытка".
Например, для блокировки использовать примерно такой код:

Аналогично использовать "попытку" для ВСЕХ методов обновления базы данных. Но, естественно, с другим алгоритмом "исключения".
Сделал, только в обработке.
В форме документа (если я правильно понял значение "только ТУТ") ничего не делал.
получается:
1. Открыл форму документа. Пока она открыта в обработке этот документ открыть не могу. Т.е. то, что мне и нужно
2. Открыл документ в обработке. И пока он открыт в обработке, могу открыть, изменить, записать, провести и закрыть документ интерактивно, через форму документа. Данные в обработке после этого, конечно же, будут "устаревшими". И второй пользователь, открывший документ обработкой, изменит документ снова. Вот это меня не устраивает В обработке я сначала получаю нужный мне документ, его реквизитами заполняю нужные реквизиты на форме обработки. При необходимости редактирую и потом записываю.
т.е. в обработке саму форму документа я не открываю.
все, что нужно сделать с реквизитами документа делается реквизитами на форме обработки (табличная часть выгружается в таблицу значений, реквизиты шапки, доступные для редактирования пользователю так же присваиваются реквизитам на форме обработки). При необходимости внести изменения в документ значения реквизитов из формы обработки присваиваются соответствующим реквизитам в документе. Объект-документ записывается.
Все.

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

Еще раз.
Документ можно изменить 2-мя способами:
1. Стандартной формой документа: открываю форму документа и меняю.
2. Обработкой. Создаю объект "документ". Нахожу нужный мне документ. НЕ открывая его формы получаю доступные для изменения пользователю реквизиты. Присваиваю эти значения реквизитам на форме обработки , не форме документа. Меняю их. Присваиваю эти значения реквизитам полученного объекта-документа. Записываю документ. Все. Форму документа в этом случае не открывал .

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

Алгоритм из (12) работает так, как написано в (13).
На (14) отвечу - из обработки вообще убрал Блокировка(0), не важно менял или нет документ.
Результат рассказывать?
весь текст обработки - 5 тыщ строк, оно Вам нужно?

Почему в ЗУП может быть недоступна для редактирования Ведомость в банк и как ее разблокировать для внесения изменений в документ?

Причины блокировки могут быть две.

Причина 1. Установлена защита после выгрузки

Если в настройках расчета зарплаты ( Настройка – Расчет зарплаты ) установлено, что необходимо Автоматически защищать платежные документы от редактирования после выгрузки из системы ,


то после выгрузки из Ведомости в банк файла, документ будет заблокирована для редактирования.


Для снятия блокировки в Ведомости в банк сбросим признак Передан для выплаты по команде Еще .


Документ станет доступен для редактирования.

После внесения необходимых корректировок вновь проведем Ведомость в банк . Чтобы заблокировать документ, не выгружая файл, воспользуемся командой Еще и установим признак Передан для выплаты .


Причина 2. Введен документ «Подтверждение выплаты доходов»

Если на основании Ведомости в банк был введен документ Подтверждение выплаты доходов ( Выплаты – Подтверждения выплаты доходов ), то Ведомость в банк будет заблокирована.


В этом случае снимем с проведения документ Подтверждение выплаты доходов . Затем заново откроем Ведомость в банк или же перечитаем данные в уже открытом документе по команде Еще — Перечитать .


После этого Ведомость в банк станет доступна для редактирования.


По завершению внесения изменений обратно проведем документы: Ведомость в банк и Подтверждение выплаты доходов .


Помогла статья?

Получите еще секретный бонус и полный доступ к справочной системе БухЭксперт8 на 14 дней бесплатно

Похожие публикации

    .После отпуска сложно втягиваться в рабочий ритм — мыслями мы.При подключении внешних печатных форм в 1С может появиться ошибка..

Карточка публикации

(1 оценок, среднее: 5,00 из 5)

Данную публикацию можно обсудить в комментариях ниже.
Обратите внимание! В комментариях наши кураторы не отвечают на вопросы по программам 1С и законодательству.
Задать вопрос нашим специалистам можно по ссылке >>

Добавить комментарий Отменить ответ

Для отправки комментария вам необходимо авторизоваться.

Вы можете задать еще вопросов

Доступ к форме "Задать вопрос" возможен только при оформлении полной подписки на БухЭксперт8

Вы можете оформить заявку от имени Юр. или Физ. лица Оформить заявку

Нажимая кнопку "Задать вопрос", я соглашаюсь с
регламентом БухЭксперт8.ру >>

В пятницу о приятном: в ЗУП 3.1.18 появились новые возможности быстрой донастройки отчетов.

Изменения в 2021 году, о которых нужно знать бухгалтеру

В 2022 году меняются правила выплаты пособий

Заполнение статистической формы №57-Т (ЗУП 3.1.4)

Блокировка данных объекта для редактирования из кода

Область применения: управляемое приложение, обычное приложение.

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

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

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

1.2. Для блокировки данных для редактирования из встроенного языка следует вызывать метод объектов Заблокировать или метод глобального контекста ЗаблокироватьДанныеДляРедактирования .

«Не удалось заблокировать запись. Действие (изменение, удаление или блокировка записи) не выполнено. Ошибка блокировки объекта. Объект уже заблокирован: компьютер: <имя компьютера>, пользователь: <имя пользователя>, сеанс: <номер сеанса>, начат: <дата и время>, приложение: <тип клиентского приложения>».

Аналогичным образом, можно воспользоваться методом глобального контекста ЗаблокироватьДанныеДляРедактирования :

Пример № 2. Требуется пропустить обработку объекта, если он заблокирован для редактирования. При очередном вызове процедуры (например, из фонового или регламентного задания) будет предпринята повторная попытка изменения объекта.

ФайлОбъект = ТекущаяВерсия.ПолучитьОбъект();
// Выполнить блокировку объекта от изменения другими режимами или пользователями.
УстановитьПолноеНаименование = Истина;
Попытка
ФайлОбъект.Заблокировать();
Исключение
// в случае блокировки - не выполнять изменение объекта
УстановитьПолноеНаименование = Ложь;
// записать предупреждение в журнал регистрации
ЗаписьЖурналаРегистрации(НСтр("ru = 'Фоновое обновление имен файлов'", Метаданные.ОсновнойЯзык.КодЯзыка),
УровеньЖурналаРегистрации.Предупреждение,, ФайлОбъект, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;

// Пропустить обработку объекта, если он заблокирован.
Если УстановитьПолноеНаименование Тогда
ФайлОбъект.ПолноеНаименование = ПолноеНаименование;
ФайлОбъект.Записать();
КонецЕсли;

1.3. При редактировании данных в формах, платформа 1С:Предприятие автоматически устанавливает блокировку объекта, указанного в качестве основного реквизита формы.

2. Не следует проверять блокировку объектов для редактирования в следующих случаях:

Конфликт блокировок при выполнении транзакции в 1С: причины и пути их устранения


Причина 1. Одновременная работа пользователей с большим объемом данных

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

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

Причина 2. Зависшие блокировки в 1С

Иногда возникают такие ситуации, что пользователь уже давно закрыл документ, вышел из программы, а его сеанс по-прежнему остается в системе. Т.е. какой-то сеанс поставил блокировку и не убрал ее. Такие ситуации чаще встречаются при использовании сетевых ключей защиты.


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



Причина 3. Ошибка в конфигурации

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

Помогла статья?

Получите еще секретный бонус и полный доступ к справочной системе БухЭксперт8 на 14 дней бесплатно

Похожие публикации

    Одним из самых страшных сценариев для пользователя при работе в....

Карточка публикации

Данную публикацию можно обсудить в комментариях ниже.
Обратите внимание! В комментариях наши кураторы не отвечают на вопросы по программам 1С и законодательству.
Задать вопрос нашим специалистам можно по ссылке >>
Вы можете задать еще вопросов

Доступ к форме "Задать вопрос" возможен только при оформлении полной подписки на БухЭксперт8

Вы можете оформить заявку от имени Юр. или Физ. лица Оформить заявку

Нажимая кнопку "Задать вопрос", я соглашаюсь с
регламентом БухЭксперт8.ру >>

Содержание

Вы можете задать еще вопросов

Доступ к форме "Задать вопрос" возможен только при оформлении полной подписки на БухЭксперт8

Вы можете оформить заявку от имени Юр. или Физ. лица Оформить заявку

Нажимая кнопку "Задать вопрос", я соглашаюсь с
регламентом БухЭксперт8.ру >>

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