|
Программная блокировка документа от программного изменения | ☑ | ||
---|---|---|---|---|
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) Спасибо. Попробую.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |