1c 77 метод Блокировка()

1. slim747 08.02.23 08:15 Сейчас в теме
Доброе утро господа айтишники. Проблема с методом Блокировка.
Суть такая: есть документ, содержащий данные. К данному документу организовал программный доступ (через НайтиДокумент(ИскомыйДок);) и изменяю в нем данные. Соответственно записываю и провожу. К данному документу может стучаться несколько пользователей одновременно. И вот здесь возникает проблемка несовпадения данных. С помощью Google и желтых книжек был найден метод Блокировка(). И вроде бы все расписано в нем: что возвращает, какие параметры устанавливать, всеравно конечного результата не добился. Для проверки работоспособности наваял обработку с методами и при помощи двух созданных пользователей пытаюсь протестить работу метода.

Процедура ПроверитьБлокировку()  
	Перем СтатусБлокировки;
	
	Док = СоздатьОбъект("Документ.ТестДок");
	Док.НайтиДокумент(ВыбДок); 
	СтатусБлокировки = Док.Блокировка();  
	Если СтатусБлокировки = 1 Тогда
		Сообщить("Блокировка включена"); 
	Иначе
		Сообщить("Блокировка отключена"); 
	КонецЕсли;
	
КонецПроцедуры   

Процедура УстановитьБлокировку()
	Док = СоздатьОбъект("Документ.ТестДок");
	Док.НайтиДокумент(ВыбДок); 
    Док.Блокировка(1);
	Док.Записать();
КонецПроцедуры

Процедура СнятьБлокировку()
	Док = СоздатьОбъект("Документ.ТестДок");
	Док.НайтиДокумент(ВыбДок); 
    Док.Блокировка(0);    
	Док.Записать();
КонецПроцедуры
Показать

Может кто сталкивался. Помогите разобраться.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Zevzm 08.02.23 08:34 Сейчас в теме
Не уверен, но не может быть проблема в "Док.Записать()"? Заблокировали - Записали - Блокировка сбросилась. Попробуйте сделать как в этой теме: https://forum.infostart.ru/forum9/topic106781/
3. CheBurator 3119 09.02.23 22:02 Сейчас в теме
Хз, я тоже внятно не добился (Записать можно заремить)
Это только если hogik по ссылке выше растолкует.
4. CheBurator 3119 09.02.23 22:07 Сейчас в теме
тут смысл такой.
- если ты попробовал поставить блокировку и она сработала - то 1. документ либо не заблокирован либо 2. ты в той же сессии где проведена ранее блокировка (блокированный документ в твоей же сессии считается доступным для тебя)
- снять блокировку можно только в той сессии где поставил.
.
Поэтому - получил программно документ и ставь блокировку. Отказ в блокировке - отлуп/стоп программной работы с документом. Сделал блокировку - работй с документом, после окончания работы - сняими блокировку (тупо без всяких проверок)
5. slim747 21.02.23 08:20 Сейчас в теме
Решение найдено. Как всегда все оказалось банально. Переменная для объявления документа должна быть описана в модуле документа как глобальная. Объект создается сразу же после открытия формы документа. Далее просто работаем с созданным объектом, без повторного создания в процедурах.
Иваныч; +1 Ответить
6. CheBurator 3119 22.02.23 18:14 Сейчас в теме
(5) а тестовый пример можешь?
7. slim747 09.03.23 09:44 Сейчас в теме
В примере создание объекта документ нужно было вынести из процедур, т.е. обявлять вне процедур.
Работает без нареканий.

Перем Док;

Процедура ПроверитьБлокировку()  
    Перем СтатусБлокировки;

    Док.НайтиДокумент(ВыбДок); 
    СтатусБлокировки = Док.Блокировка();  
    Если СтатусБлокировки = 1 Тогда
        Сообщить("Блокировка включена"); 
    Иначе
        Сообщить("Блокировка отключена"); 
    КонецЕсли;
    
КонецПроцедуры   

Процедура УстановитьБлокировку()
    Док.НайтиДокумент(ВыбДок); 
    Док.Блокировка(1);
    Док.Записать();
КонецПроцедуры

Процедура СнятьБлокировку()
    Док.НайтиДокумент(ВыбДок); 
    Док.Блокировка(0);    
    Док.Записать();
КонецПроцедуры


Док = СоздатьОбъект("Документ.ТестДок");
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот