|
Загрузить файл в БД один и только один раз | ☑ | ||
---|---|---|---|---|
0
bolobol
08.11.19
✎
14:54
|
Добрый день!!
Подскажите-помогите... Пользователь загружает файл в открытый (созданный) интерактивно Документ.ВхФайл, проверяет, при необходимости - сохраняет документ. Как только форма закрыта или Документ записан в БД - работа с файлом считается законченной. Надо: На время от нажатия кнопки Загрузить до записи или закрытия формы Документа - ставить блокировку записи/чтения Документа с реквизитом ИмяФайла = ИмяЗагружаемогоФайла. Как это написать? Пишу: Блокировка = Новый БлокировкаДанных; ЭлементБлокировки= Блокировка.Добавить(); ЭлементБлокировки.Область = "Документ.ВхФайл"; ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; ЭлементБлокировки.УстановитьЗначение("ИмяФайла", ИмяЗагружаемогоФайла); Блокировка.Заблокировать(); // - не работает: Ошибка при вызове метода контекста (Заблокировать) И что не так? |
|||
1
Cyberhawk
08.11.19
✎
15:00
|
Нет транзакции - нет и упр. блокировки
|
|||
2
bolobol
08.11.19
✎
15:28
|
Добавил НачатьТранзакцию(РежимУправленияБлокировкойДанных.Управляемый); - та же фигня
В свойствах документа стоит Автоматический В свойствах конфы - Управляемый Что не так? |
|||
3
bolobol
08.11.19
✎
15:28
|
ПоляБлокировкиДанных у документа - пусто
|
|||
4
D_E_S_131
08.11.19
✎
15:39
|
Если документ новый, то никто и не узнает, что уже кто-то пытается загрузить этот файл.
Нужен какой-то другой объект. Например РС, в котором измерение "Имя файла", а ресурс это Документ.ВхФайл. Перед нажатием кнопки "Загрузить()" искать запись РС с именем файла. Если запись есть, то выполнять "ЗаблокироватьДанныеДляРедактирования()" по ключу записи. Если записи нет, то создавать и потом уже ее блокировать. В метод "ЗаблокироватьДанныеДляРедактирования()" передается УИД формы и пока она открыта никто другой не получит доступ записи РС. |
|||
5
Cyberhawk
08.11.19
✎
15:41
|
"ЗаблокироватьДанныеДляРедактирования" не защищает от программного изменения, если то программное изменение не пытается делать то же самое
|
|||
6
bolobol
08.11.19
✎
15:44
|
Если записать сам документ, то и регистр не нужен будет - по документу будет понятно, что это ИмяФайла обработано. А без записи, получается, никак?
|
|||
7
bolobol
08.11.19
✎
15:47
|
Надо переходить на ФуЗину - там это одной строчкой делается, говорят... Никто не видел, но говорят постоянно.
|
|||
8
D_E_S_131
08.11.19
✎
16:05
|
(5) Уверен?
|
|||
9
МихаилМ
08.11.19
✎
16:19
|
9 лет долбоибических воросов на этом форуме. а это шедевр -
Срочно! Сколько объём среднего арбуза в литрах?. |
|||
10
bolobol
08.11.19
✎
16:33
|
(9) Не отчаивайтесь, и у вас когда-нибудь будут шедевры!
|
|||
11
dezss
08.11.19
✎
16:36
|
Погодь. Ты хочешь заблокировать данные, которых еще нет в базе?
|
|||
12
Cyberhawk
08.11.19
✎
16:38
|
(8) Ага
|
|||
13
bolobol
08.11.19
✎
16:38
|
(11) Или которые есть. Блокируются ведь не данные, а разрез данных, ну, или... блин, как правильно выразиться? Всё понимаю - сказать не могу))
|
|||
14
dezss
08.11.19
✎
16:50
|
(13) А вот ты уверен, что это так?
Чет мне кажется, что блокируются именно данные. Просто ты можешь задать какие конкретно строки таблицы блокировать. |
|||
15
bolobol
08.11.19
✎
16:59
|
(14) Блин... теперь в этом не уверен, блокировка записей - логично выглядит... но смысла в подобной реализации - кот накакал, а в 1С и кот появился не так давно...
|
|||
16
D_E_S_131
08.11.19
✎
17:00
|
(11) Я потому и предложил доп.объект для контроля. И если надо будет менять программно, то перед записью в Попытке выполнять Заблокировать(), что бы проверить, а не загружает ли этот файл уже кто-нибудь.
|
|||
17
dezss
08.11.19
✎
17:02
|
(16) Дык оно и понятно, что тут по-другому никак.
|
|||
18
bolobol
08.11.19
✎
17:16
|
Да вот только записать в доп.объект - это целостность данных нужно контролировать, а это дополнительная сложность в, казалось бы, простой задаче. Проще обязательно записывать документ - так всё само работать будет, из коробки)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |