Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Ошибка при вызове метода контекста (Заблокировать)
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
gololol
1С:Предприятие 8.3 (8.3.10.2667)
Толстый Клиент
Обычное приложение


Доброго времени суток.

Есть таблица: ДокументСостояние

В этой таблице одна запись (один документ)

В этом документе есть поля:

Состояние = "1"
ВерсияДанных = "AAAAAABc4OoM"

Есть РегламентноеЗадание: РЗ_ИзменитьСостояние (запускается один раз в период времени)
Это реглмантное задание изменяет значение поля "Состояние"

Ситуация следующая.

РЗ_ИзменитьСостояние - запустилось и изменило значение полей

Состояние = "2"
ВерсияДанных = "AAAAAABc4OoP"

Далее пользователь делает двойной клик на записи
и происходит переход из ФормыСписка в ФормуДокумента

В ФормеДокумента выполняется

Процедура ПриОткрытии()

        ...

    Если Не Ссылка.Пустая() Тогда
         ЭтотОбъект.Заблокировать();
    КонецЕсли;
    

КонецПроцедуры


Проблема в том, что блокируется запись у которой

ВерсияДанных = "AAAAAABc4OoM"

а на самом деле

ВерсияДанных = "AAAAAABc4OoP"

т.е. программа пытается заблокировать запись с несуществующей ВерсиейДанных

ош: Ошибка при вызове метода контекста (Заблокировать)
ЭтотОбъект.Заблокировать();
по причине:
Операция не может быть выполнена из-за несоответствия версии или отсутствия записи базы данных
(возможно, запись была изменена или удалена)!

Всё правильно.

Вопрс: "Как можно решить эту проблему?"
volodya1122
gololol @ Сегодня, 11:23 необходимо зарегистрироваться для просмотра ссылки ,

такого не должно быть. тут скорее всего что-то "держит" этот документ.
Что проверить:
1. Маловероятно но все же в ПриОткрытии() или в ПередОткрытием() не меняются никакие реквизиты документа?
2. Ваше регламентное задание выполняется не единожды, а крутится по кругу. И поэтому постоянно блокирует документ.
3. В регламентном задании в конце очистить объект документа где вы его меняете ((тот что ПолучитьОбъект()).
4. Возможно где-то в другом месте этот документ блкируете и держите постоянно его в каком то реквизите.

Цитата(gololol @ 18.11.20, 11:23) необходимо зарегистрироваться для просмотра ссылки
Проблема в том, что блокируется запись у которой

ВерсияДанных = "AAAAAABc4OoM"

а на самом деле

ВерсияДанных = "AAAAAABc4OoP"

т.е. программа пытается заблокировать запись с несуществующей ВерсиейДанных


Тут неверно понимаете поведение платформы 1С. 1С пытается заблокировать не реквизиты в вашем документе а сам документ (и неважно что внутри документа поменялись данные)
Поясню на примере. Например у Вас есть обычная паперовая папка с документами. Лежит у Вас на столе. Вы на ней написали (внутри лежит 10 документов. Другой человек взял эту папку и открыл (заблокировал, в терминологии 1С). Положил туда еще какие-то дукументы, закрыл и положил на место (папка опять доступна). Хотя содержимое внутри уже не соответствует описанию , вы всеравно можете взять эту папку и открыть (заблокировать уже от себя) и при открытии папки можете видеть новое содержимое..
А теперь представте. Другой человек взял эту папку, открыл (ПолучитьОбъект() - в терминологии 1С) положил в нее свои документы (или ничего не положил) и держит в руках. В таком случае Вы не можете взять и заблокировать свою папку. Это вам и сообщает 1С
gololol
gololol @ Сегодня, 11:23 необходимо зарегистрироваться для просмотра ссылки ,

Проблема решена.

Я запускал (вручную) Регламентное Задание находясь в ФормеСписка документа.
А надо было вызвать не Регламентное Задание, а метод этого Регламентного Задания.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.