|   |   | 
| 
 | Загрузить файл в БД один и только один раз | ☑ | ||
|---|---|---|---|---|
| 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 | 
        Да вот только записать в доп.объект - это целостность данных нужно контролировать, а это дополнительная сложность в, казалось бы, простой задаче. Проще обязательно записывать документ - так всё само работать будет, из коробки)     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |