Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Программная блокировка документа от программного изменения

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

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

        ЗаказОбъект.Записать();
        ЗафиксироватьТранзакцию();
    Исключение
        ОтменитьТранзакцию();
    КонецПопытки;
   arsenfn
 
18 - 20.05.21 - 13:27
(17) Спасибо. Попробую.

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.