Ошибка при вызове метода контекста заблокировать использование

Ошибка при вызове метода контекста (Заблокировать)…

Я
   krekotnev

21.01.13 — 18:42

Коллеги, приветствую!

Вот такая ситуация. Используем 1С БУ 8. В соответствии со спецификой учета на предприятии применяем три операции:

1) поступление ТМЦ,

2) перемещение ТМЦ,

3) передача ТМЦ на объект строительства через треб.-накл.

Сегодня нашел ошибку в одной из операций перемещения. Отменил ее проведение. Поменял счета учета на правильные (003.01 — 003.01), но снова провести документ не смог — система выдала ошибку: «Ошибка при вызове метода контекста (Заблокировать): Значение субконто, заданное с помощью ссылки на ПВХ, должно быть ссылочного типа, пространство блокировки = РегистрБухгалтерии.Хозрасчетный».

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

Спасибо!

   krekotnev

1 — 21.01.13 — 18:43

Используем 1С Бухгалтерия 8.3

   krekotnev

2 — 21.01.13 — 18:47

Был на Гэлэкси, там есть похожее обсуждение

http://www.1c-galaxy.ru/forum4/topic602010/

Но не могу понять ((

   krekotnev

3 — 23.01.13 — 12:11

Народ, когда возникает ошибка, то в подробностях идет ссылка на конкретную процедуру УстановитьУправляемуюБлокировку в модуле ОбщегоНазначения:

Процедура УстановитьУправляемуюБлокировку(СтруктураПараметров, КоллекцияЗначенийБлокировки = Неопределено, КоллекцияОписанияИсточника = Неопределено, Отказ = Ложь, Заголовок = «») Экспорт

   
   Если НЕ ТипЗнч(СтруктураПараметров) = Тип(«Структура») Тогда

       Возврат;

   КонецЕсли;

   
   ИспользоватьЗначенияБлокировки = КоллекцияЗначенийБлокировки <> Неопределено

       И (ТипЗнч(КоллекцияЗначенийБлокировки) = Тип(«Структура»)

           ИЛИ ТипЗнч(КоллекцияЗначенийБлокировки) = Тип(«Соответствие»))

       И КоллекцияЗначенийБлокировки.Количество() > 0;

       
   ИспользоватьИсточникДанных     = КоллекцияОписанияИсточника <> Неопределено

       И (ТипЗнч(КоллекцияОписанияИсточника) = Тип(«Структура»)

           ИЛИ ТипЗнч(КоллекцияОписанияИсточника) = Тип(«Соответствие»))

       И КоллекцияОписанияИсточника.Количество() > 0

       И СтруктураПараметров.Свойство(«ИсточникДанных»);

   
   Если НЕ ИспользоватьЗначенияБлокировки И НЕ ИспользоватьИсточникДанных Тогда

       Возврат;

   КонецЕсли;

   
   Блокировка = Новый БлокировкаДанных;

   
   ТипТаблицы = ?(СтруктураПараметров.Свойство(«ТипТаблицы»), СтруктураПараметров.ТипТаблицы, «РегистрНакопления»);

   ИмяТаблицы = СтруктураПараметров.ИмяТаблицы;

   ПространствоБлокировки = ТипТаблицы  + «.» + ИмяТаблицы;

   ЭлементБлокировки = Блокировка.Добавить(ПространствоБлокировки);

   
   РежимБлокировки = ?(СтруктураПараметров.Свойство(«РежимБлокировки»), СтруктураПараметров.РежимБлокировки, РежимБлокировкиДанных.Исключительный);

   ЭлементБлокировки.Режим = РежимБлокировки;

   
   Если ИспользоватьЗначенияБлокировки Тогда

       
       Для каждого ЭлементКоллекции Из КоллекцияЗначенийБлокировки Цикл

           
           ЭлементБлокировки.УстановитьЗначение(ЭлементКоллекции.Ключ, ЭлементКоллекции.Значение);

           
       КонецЦикла;

   
   КонецЕсли;

   
   Если ИспользоватьИсточникДанных Тогда

       
       ИсточникДанных = СтруктураПараметров.ИсточникДанных;

       
       Если ТипЗнч(ИсточникДанных) = Тип(«МенеджерВременныхТаблиц») Тогда

       
           Запрос = Новый Запрос;

           Запрос.МенеджерВременныхТаблиц = ИсточникДанных;

           ТекстЗапроса = «»;

           Для каждого ЭлементКоллекции Из КоллекцияОписанияИсточника Цикл

               ТекстЗапроса = ТекстЗапроса + «,

               |    Таб.» + ЭлементКоллекции.Значение;

           КонецЦикла;

           ТекстЗапроса = Сред(ТекстЗапроса, 2);

           ТекстЗапроса =            

           «ВЫБРАТЬ РАЗЛИЧНЫЕ»

           + ТекстЗапроса + »

           |ИЗ

           |    » + СтруктураПараметров.ИмяВременнойТаблицы + » КАК Таб»;

           Запрос.Текст = ТекстЗапроса;

           Результат    = Запрос.Выполнить();

           
           ЭлементБлокировки.ИсточникДанных = Результат;

           
       Иначе

           
           ЭлементБлокировки.ИсточникДанных = ИсточникДанных;

           
       КонецЕсли;

   
       Для каждого ЭлементКоллекции Из КоллекцияОписанияИсточника Цикл

           
           ЭлементБлокировки.ИспользоватьИзИсточникаДанных(ЭлементКоллекции.Ключ, ЭлементКоллекции.Значение);

           
       КонецЦикла;

   
   КонецЕсли;

   
   Попытка

   
       Блокировка.Заблокировать();

   
   Исключение

       
       ОбщегоНазначения.СообщитьОбОшибке(ОписаниеОшибки(), Отказ, Заголовок);

       ВызватьИсключение «Операция не выполнена»;

       
   КонецПопытки;

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

Пожалуйста, помогите понять, где и что надо исправить. Учетная политика не менялась.

   krekotnev

4 — 23.01.13 — 13:24

Временная мера позволила перепроводить документы, гдебыли отменены проводки. В «хвостовой» части процедуры «УстановитьУправляемуюБлокировку» закомментированы строки:

Попытка

   
       Блокировка.Заблокировать();

   
   Исключение

       
       ОбщегоНазначения.СообщитьОбОшибке(ОписаниеОшибки(), Отказ, Заголовок);

       ВызватьИсключение «Операция не выполнена»;

       
   КонецПопытки;

После этого получается выполнить перепроведение документов по операции «Перемещение товаров». Остается открытым вопрос: а на что повлияет комментирование указанных строк?..

Может, обсудим?

   krekotnev

5 — 25.01.13 — 18:03

Более опытный коллега подсказал, что это связано с несовпадением субконто.

  

krekotnev

6 — 25.01.13 — 18:03

тема закрыта, всем спасибо!

Перейти к контенту

Всем доброго дня!

Делаю расширение с версионированием. Скопировал стандартный механизм в расширение. Все работало ок.

Тут добавил новый документ в типы объекта расширения и при попытке заблокировать таблицу получаю следующую ошибку

{ЭИТ ОбщийМодуль.ЭИТ_ВерсионированиеОбъектов.Модуль(1402)}: Ошибка при вызове метода контекста (Заблокировать): Неверный тип значения: РегистрСведений.ЭИТ_ВерсииОбъектов.Объект

Вот код, который приводит к ошибке.

    Если ТранзакцияАктивна() Тогда

        БлокировкаДанных = Новый БлокировкаДанных();

        ЭлементБлокировки = БлокировкаДанных.Добавить(«РегистрСведений.ЭИТ_ВерсииОбъектов»);

        ЭлементБлокировки.УстановитьЗначение(«Объект», Ссылка);

        БлокировкаДанных.Заблокировать();

    КонецЕсли;

проблема только в одной базе. Делаю ее копию через восстановление бэкапа sql — все работает

База продакшн почти 24/7, так что час на бэкап и его восстановление — непозволительная роскошь

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

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

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

Может у кого есть какие идеи?

  1. Добрый день. При проведении документа в БП 3.0 последней версии Реализация товаров и услуг, выдает ошибку — Ошибка при вызове метода контекста (Заблокировать): Неверные значения типов полей : РегистрНакопления.ПрочиеРасчеты.РасчетныйДокумент — Возврат товаров от покупателя
    Не можем понять даже при чем тут Возврат товаров от покупатля.

  2. Offline

    nbIpKuH_BaH9I
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    8.157
    Симпатии:
    553
    Баллы:
    204
  3. Offline

    nickpugachev
    Профессионал в 1С
    Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.397
    Симпатии:
    156
    Баллы:
    104

    обработчик проведения пытается заблокировать остатки регистра по измерению РасчетныйДокумент по значению. В значении указывает документ возврата товаров, которого нет среди типов значения измерения — вот и ошибка.

    скорее всего что-то сделали не так в возврате, раз он его ловит на расчетах.

  4. «В значении указывает документ возврата товаров, которого нет среди типов значения измерения» — в 1С не такой специалист, где можно посмотреть, что он указывает? Перерыл весь документ.

    — Объединение сообщений, 7 июл 2014

    В общем пока не понимаю что делать

    Последнее редактирование: 7 июл 2014

  5. Это пишет в отладчике

    {ОбщийМодуль.РеализацияТоваровУслугФормыКлиент.Модуль(70)}: Ошибка при вызове метода контекста (Записать)
    Если Форма.Записать(ПараметрыЗаписи) Тогда
    по причине:
    Ошибка при выполнении обработчика — ‘ОбработкаПроведения’
    по причине:
    {ОбщийМодуль.ОбщегоНазначенияБПВызовСервера.Модуль(987)}: Операция не выполнена
    Если Форма.Записать(ПараметрыЗаписи) Тогда

    по причине:
    Ошибка при выполнении обработчика — ‘ОбработкаПроведения’
    по причине:
    {ОбщийМодуль.ОбщегоНазначенияБПВызовСервера.Модуль(987)}: Операция не выполнена

    {ОбщийМодуль.ОбщегоНазначенияБПВызовСервера.Модуль(987)}: Операция не выполнена
    ВызватьИсключение НСтр(«ru=’Операция не выполнена’»);

  6. Ошибка устранена. Дело оказалось в косячном обновлении 34.10 откатил до 33 и все нормально начало проводиться

Ошибка при вызове метода контекста (Заблокировать): Неверные значения типов полей : РегистрНакопления.ИПМПЗОтгруженные.ДокументОтгрузки — Списание с расчетного счета Интересно они когда нибудь эту ошибку поправят? Ошибки уже больше года, а воз и ныне там

если писать на мисту — то нет, пиши в 1с :)

И что это даст? Неужели нужно 1001 письмо чтобы исправить? Или за год никто не написал и я буду первым? А насчет мисты ты зря так думаешь, там мониторят и правят ошибки, плюс на мисте есть много людей которые поближе к 1С чем я, и поэтому вероятность исправление будет выше, чем от моего одинокого письма

ты сам привёл темы на мисте, целых 3, а их наверно и больше было. результата то нет) Да исправят когданибудь… пути 1с неисповедимы

Ну так может кто поближе, знают то, что я не знаю. Например что в 33 релизе это исправят

или как обойти эту ошибку

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

дык исправь, иль на автоматический режим регистр переведи.

Да чтоб я знал как, не спрашивал бы

нет БП под рукой, судя по ошибке — неправильно параметры задаёт, в СП описано что должно быть (типы) и т.д., это проверь сначала в отладчике, что в параметры лезет

Он просто зачем то пытается наложить блокировку на ИПМПЗОтгруженные, при этом в измерении регистра ДокументОтгрузки, не включен документ (списание с расчетного счета), который передается ему в качестве параметра (берется из ТЧ документа корректировка долга)

В принципе, чтобы не заморачиватся можно прописать Если СтруктураПараметров.ИмяТаблицы=»ИПМПЗОтгруженные» тогда Возврат; КонецЕсли; Или добавить в измерения Списание со счета

движения регистра будут корректные в итоге? тогда да, заглушку ставь

Ну эта же блокировка, т.е. на движение не влияет, а только на параллельную работу

Вечером, сейчас люди работают, а дома в файловой версии эта ошибка не воспроизводится

Тэги: 1С 8

Комментарии доступны только авторизированным пользователям

Stasya
28.08.2013 07:55 Прочитано: 6343

При проведении документа в серверной версии бухгалтерии 1с 8.2 (обычное приложение) вылетает ошибка:
Ошибка при вызове метода контекста (Заблокировать): У счета отсутствует субконто, заданное ссылкой на характеристику.
При проведении только одного документа»Возврат поставщику», остальные документы проводятся нормально. Сделала копию базы, обновила. В копии ошибка исчезла, при обновлении рабочей базы — ошибка осталась.
Что делать??? Откуда у такой ошибки «ноги растут»?


Изменено 28.08.13 07:55:49

Yandex
Возможно, вас также заинтересует

Реклама на портале

Jonsony
28.08.2013 09:00 Ответ № 1

релиз платформы?
релиз конфы?

без этого ноги не просто искать

Stasya
28.08.2013 13:53 Ответ № 2

ой, извитие. Платформа: 8.2.17.157, релиз БП 2.0.44.5

Stasya
28.08.2013 14:04 Ответ № 3

отбой, слетел режим совместимости с 8.2.13. Установила, все заработало.

Stasya
28.08.2013 14:04 Ответ № 4

Вопрос закрыт!

Подсказка: Вы можете добавить любую страничку в Избранное щелкнув по значку

Тема: Блокировки Данных 1с по билетам  (Прочитано 5853 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Пытаю воспроизвести нечего не выходит

Блокировка = Новый БлокировкаДанных;
    ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры");
    ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
    ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры;
    ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
    Блокировка.Заблокировать();

Скрыть

Ошибка при выполнении обработчика — ‘ОбработкаПроведения’
по причине:
{Документ.РасходнаяНакладная.МодульОбъекта(18)}: Ошибка при вызове метода контекста (Заблокировать)
Блокировка.Заблокировать();
по причине:
Использование блокировки допустимо только внутри транзакции в режиме управляемых блокировок!


Записан


Ну так включи управляемые блокировки в свойствах конфигурации. По умолчанию там автоматические.


Записан




Записан



Здравствуйте,

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

{ОбщийМодуль.внЖурналРегистрацииСервер.Модуль(492)}: Ошибка при вызове метода контекста (Заблокировать)
Блокировка.Заблокировать();
по причине:
Использование блокировки допустимо только внутри транзакции в режиме управляемых блокировок!

Ошибка возникает в процедуре «РегистрацияИзмененияОбъекта», которая по логике вызывается как при подписках записи объектов, так и при начальном заполнении. Но разница в том, что при записи объектов платформа неявно открывает транзакцию самостоятельно, а при начальном заполнении явного открытия транзакции я не увидел, т.е. происходит попытка блокировки вне транзакции. Впрочем, код просматривал бегло, может и пропустил чего или недопонял.

Обновлено: 13.06.2023

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      

  • Wavecom модем gsm прошивка
  •   

  • Как сделать стикер для whatsapp в фотошопе
  •   

  • Как открыть страницу регистрации в веб браузере
  •   

  • Резервное копирование visual studio
  •   

  • Программа polish для компьютера

Понравилась статья? Поделить с друзьями:
  • Ошибка при вызове метода контекста заблокировать блокировка заблокировать
  • Ошибка при вызове метода контекста документ не выбран
  • Ошибка при вызове метода контекста вызватьhttpметод
  • Ошибка при вызове метода контекста добавить недопустимое значение параметров
  • Ошибка при вызове метода контекста выгрузитьколонку