Не удалось заблокировать запись 1с

Не удалось заблокировать запись 1с

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

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

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

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

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

Пример № 1. Требуется заблокировать объект и, если это удалось, модифицировать данные. В противном случае – проинформировать пользователя об отказе в выполнении операции с помощью сообщения вида:

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

ФайлОбъект = ДанныеФайла.Ссылка.ПолучитьОбъект();
// Выполнить блокировку объекта от изменения другими режимами
// или пользователями; в случае блокировки —
// вывести пользователю сообщение об исключении.
ФайлОбъект.Заблокировать();
// Затем изменить и записать объект
ФайлОбъект.Редактирует = Справочники.Пользователи.ПустаяСсылка();
ФайлОбъект.Записать();

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

ФайлОбъект = ДанныеФайла.Ссылка.ПолучитьОбъект();
// Выполнить блокировку объекта от изменения другими режимами
// или пользователями; в случае блокировки —
// вывести пользователю сообщение об исключении.
ЗаблокироватьДанныеДляРедактирования(ДанныеФайла.Ссылка);
// Затем изменить и записать объект
ФайлОбъект.Редактирует = Справочники.Пользователи.ПустаяСсылка();
ФайлОбъект.Записать();

Читайте также:  X800gto драйвер windows 10

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

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

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

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

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

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

В один прекрасный день перестала работать синхронизация между двумя базами 1с.
Из журнала:
Ошибка при начале чтения файла сообщения обмена: <Обработка.КонвертацияОбъектовРаспределенныхИнформационныхБаз.МодульОбъекта(121)>: Ошибка при вызове метода контекста (НачатьЧтение): Не удалось заблокировать запись. Действие (изменение, удаление или блокировка записи) не выполнено.
Ошибка блокировки объекта. Объект уже заблокирован:
компьютер: 1C, сеанс: 17, начат: 07.01.2017 в 14:58:47, приложение: Фоновое задание

Ошибка при начале записи файла сообщения обмена: <Обработка.КонвертацияОбъектовРаспределенныхИнформационныхБаз.МодульОбъекта(232)>: Ошибка при вызове метода контекста (НачатьЗапись): Не удалось заблокировать запись. Действие (изменение, удаление или блокировка записи) не выполнено.
Ошибка блокировки объекта. Объект уже заблокирован:
компьютер: 1C, сеанс: 17, начат: 07.01.2017 в 14:58:47, приложение: Фоновое задание

Пишет что объект уже заблокирован. Но кем он может быть заблокирован, если я единственный активный пользователь?
C ftp все в порядке. В настройках синхронизации перепроверил параметры.

Подскажите пожалуйста в каком направлении мне копать?

Тем, кто ещё не знаком с термином "Расширение конфигурации", советую прочесть следующую публикацию, так любезно предоставленную нам 1С ИТС: http://its.1c.ru/db/v83doc#bookmark:dev:TI000001523

Читайте также:  Шар вписан в конус свойства

Моими исходными данными были конфигурация 1С Бухгалтерия 8.2, сильно доработанная в ряде документов и в учете. И все это нужно было перевести на 1С:Предприятие 8.3 (8.3.6.2041) Бухгалтерия предприятия, редакция 3.0 (3.0.38.55) . Для переноса интерфейсных решений и отредактированных форм решил использовать Расширение конфигурации.

Создать расширение не составило труда. Решил начать переносить самые ходовые объекты, в моем случае это был Справочник Договоры контрагентов и Справочник Контрагенты.

Формы позаимствовались легко и без проблем. Но вот мои реквизиты, которые я сам добавил, такие как Площадь, Объект, График платежей перенесены не были, так как они не присутствуют на типовой управляемой форме, и все свои реквизиты пришлось переносить вручную. Операция, не требующая каких-то умственных затрат, но довольно раздражительно, так как мне пришлось переносить 25 реквизитов, каждый по отдельности, выделить несколько объектов для переноса нельзя. Также после каждого перенесенного реквизита конфигурация сворачивается и переходит в дерево расширения, и приходится прыгать туда-сюда.

Более легкий способ для решения подобной задачи , это создать ФормуЭлемента, чтобы на ней отразились все Реквизиты Справочника, и заимствовать в расширение эту форму, тогда все ваши реквизиты перейдут в расширение и все связанные с ними объекты, после чего уже можно приступить к доработке.

В процессе доработки при запуске 1С предприятия через отладчик было замечено, что расширение не всегда подтягивается. На причинах возникновения данной проблемы я не заострял внимания, так как перезапуск отладчика всегда помогал, отнёс эту проблему к "ну что-то 1С не понравилось при запуске".

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

Следующая особенность Расширения — это то, что в программном коде внутри Расширения можно обращаться только к тем элементам, которые есть внутри текущего расширения. То есть если вам нужно программно обратиться к справочнику, например:

Читайте также:  Сумма чисел в строке python

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

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

Также на более новых платформах при отладке может выходить сообщение об ошибке, следующего содержания:
"При выполнении операции над расширением возникла ошибка:
Не удалось заблокировать запись. Действие (изменение, удаление или блокировка записи) не выполнено.
Ошибка блокировки объекта. Объект уже заблокирован:".

Для решения данной проблемы необходимо в конфигураторе (Сервис -> Параметры -> Запуск 1С:Предприятия -> Параметр запуска) указать параметр "РежимОтладки". После чего будет возможно проводить отладку.

У меня была заведена процедура Событие ПриОткрытииФормы(), также в Расширении данной формы я создал дополнительную процедуру ИЕАПереходПриОткрытии() (где ИЕАПереход — название моего расширения). Все работало. Со временем из Конфигурации источник была удалена процедура ПриОткрытииФормы(), но в свойствах формы в Разделе События -> ПриОткрытии, название вызываемой процедуры удалено не было. В результате в ИЕАПереходПриОткрытии() в расширении не срабатывал. Но как только из Свойств формы было удалено название несуществующей процедуры, код расширения тут же заработал

Это только на уровне программы. Запуск у пользователей состоится через 2 недели. Тогда и ожидаю увидеть основные проблемы и нюансы.

Ссылка на основную публикацию
Направление эдс в цепи
Чтобы правильно записать уравнения, описывающие процессы в электрических цепях, и произвести анализ этих процессов, необходимо задать условные положительные направления ЭДС...
На компе горит красная лампочка
Почему стал постоянно гореть красный индикатор на передней панели ПК и компьютер стал заметно медленее работать ? Аппаратная конфигурация: Тип...
На что можно поспорить с мужем
Содержание статьи: По утверждению психологов, у победителя в споре не только улучшается настроение, но и повышается самооценка. Пари – это...
Не работает плеер твича
Привет, друзья! Совсем недавно появилась проблема у пользователей с России. Черный экран на твиче или не загружается плеер твича, другими...
Adblock detector