Имя: Пароль:
1C
1С v8
Программная блокировка документа от программного изменения
0 arsenfn
 
19.05.21
18:01
Добрый день!
Подскажите пожалуйста как заблокировать документ перед изменением, затем изменить и разблокировать? Метод объекта "Заблокировать()" не работает. Во всяком случае при программном изменении. Ситуация такая. Документ блокируется. Регламентным заданием по строкам документа на сайте по API формируются заказы и в строке документа записывается номер сформированного на сайте заказа. При следующем обращении к этому документу строки у которых есть присвоенные на сайте номера заказов пропускаются. Но так как блокировка документа не работает получается, что после формирования заказа на сайте документ не записывается и выдается ошибка "Ошибка при вызове метода контекста (Записать): Операция не может быть выполнена из-за несоответствия версии или отсутствия записи базы данных (возможно, запись была изменена или удалена)!". И  номера заказов в строках документа не сохраняются и при следующем обращении регл. задания к документу по этим строкам формируются повторные заказы на сайте. Конфигурация УТ 11.4.13.136 Платформа 8.3.17.1851. Мне нужно заблокировать документ перед формированием заказов на сайте и чтобы никто и ничего не могло его изменить пока заказы не будут сформированы на сайте и записаны изменения в сам документ.
1 pechkin
 
19.05.21
18:08
А рег задании тоже пытайся блокировать
2 arsenfn
 
19.05.21
19:55
Для начала хорошо бы сам документ заблокировать.
3 BIP1
 
20.05.21
06:38
(0) Зачем хранить эту инфу в документе? Почему не в регистре сведений?
4 Почему 1С
 
20.05.21
06:43
(0) Код блокировки в студию, может у тебя там и транзакции нет
5 Обработка
 
20.05.21
06:49
(0) У нас заказы падают от сайта могут в ручную править итп.
При этом регл задание каждые 3 минуты обрабатывает заказы.
Работает со статусам. Статусы у нас не страндартные из не 2-3 а 5статусов.
В зависимости от статусов идет обработка. Даже меняем статусы.
Никаких коллизии не было. Ладе если и будет на следующем цикле выполнения отработает как надо.
6 Simod
 
20.05.21
07:31
(0) https://its.1c.ru/db/v8std/content/490/hdoc
А вообще сам подход не верный - если РЗ блокирует документ и запускает формирование заказа на сайте, то время ожидания не может быть спрогнозировано, т.к. это другая система. Процесс необходимо делить.
7 Mikeware
 
20.05.21
08:01
(5) хм. статусы - добавили к типовым, или отдельную систему статусов?
8 Обработка
 
20.05.21
09:11
(7) добавили дополнительно.
9 arsenfn
 
20.05.21
12:05
ЗаказОбъект = ЗаказПоставщику.ПолучитьОбъект();

    
Попытка
    ЗаказОбъект.Заблокировать();
Исключение
    Возврат;    
КонецПопытки;
10 arsenfn
 
20.05.21
12:16
(6) Как вы предлагаете делить?
11 arsenfn
 
20.05.21
12:18
(3) С документом легче было работать. Да этих регистров добавил уже кучу.
12 lubitelxml
 
20.05.21
12:37
Я тоже за регистр сведений, смысл это хранить в документе?
13 Почему 1С
 
20.05.21
12:52
(9) данный код не запрещает редактировать объект кодом который не использует перед изменением метод Заблокировать()
14 arsenfn
 
20.05.21
13:11
(13) Как сделать тогда?
15 pechkin
 
20.05.21
13:15
Единственный 100% способ это блокировка в транзакции
16 arsenfn
 
20.05.21
13:17
(15) Подскажи пожалуйста как это сделать?
17 Почему 1С
 
20.05.21
13:22
(16)
НачатьТранзакцию();
    Попытка
        БлокировкаЗаписей = Новый БлокировкаДанных();
        БЗ = БлокировкаЗаписей.Добавить("Документ.ЗаказыПоставщику");
        БЗ.УстановитьЗначение("Ссылка", ЗаказПоставщику);
        БлокировкаЗаписей.Заблокировать();
        ЗаказОбъект = ЗаказПоставщику.ПолучитьОбъект();
        //код по изменению объекта
        ЗаказОбъект.Записать();
        ЗафиксироватьТранзакцию();
    Исключение
        ОтменитьТранзакцию();
    КонецПопытки;
18 arsenfn
 
20.05.21
13:27
(17) Спасибо. Попробую.