Имя: Пароль:
1C
 
Ошибка: объект заблокирован
0 Gamma
 
27.07.07
09:43
Всем здравтсвуйте! загружаю данные из торговли в бухгалтерию стандартными обработками, а он мне пишет:
ОбъектБД.Записать();
{Обработка.ЗагрузкаДанных.Форма.Модуль(2349)}: Объект заблокирован: Операция ГАС0006541
вставила проверку по блокировке, выдает "0"
1 ZanderZ
 
27.07.07
10:01
открыта наверно кем то ..
2 Копер
 
27.07.07
10:03
"вставила проверку по блокировке, выдает "0" -"
как это?
3 Gamma
 
27.07.07
10:05
сижу монопольно,и документы у меня все закрыты, а проверку делала Документ.Блокировка()
4 Морозов Александр
 
27.07.07
10:05
надо так

Если ОбъектБД.Блокировка(1)=1 Тогда
ОбъектБД.Блокировка(0);
ОбъектБД.Записать();
Иначе
Сообщить ("Хто-то заблокировал объект");
КонецЕсли;
5 Sasha_H
 
27.07.07
10:06
Мой совет таков. Внеси изменения в этот отчет

~Запись:Попытка
ОбъектБД.Записать();
Исключение
  Если Вопрос("Объект заблокирован, пробовать еще раз?","Да+Нет") = "Да" Тогда
       Перейти ~Запись;
  Инначе
   //я думаю, что это у тебя в цикле
   Продолжить;
  КонецЕсли;
КонецПопытки;
6 Sasha_H
 
27.07.07
10:06
База сиквельная!?
7 Морозов Александр
 
27.07.07
10:08
фуууууу...
8 Sasha_H
 
27.07.07
10:08
бывает, подвисает в журнале и 1С думает, что объект действительно заблокирован.
При этом поможет перезапуск СКЛ или сервака.
9 Sasha_H
 
27.07.07
10:08
(7) Чего ты фукаешь!? это ты мне :)
10 Морозов Александр
 
27.07.07
10:09
ктож в наше время по меткам ходит?
11 Sasha_H
 
27.07.07
10:10
(5) Запись с Попыткой и Переходом удобно использовать в связи если окуеть много позиций загружаешь и при этом возмжна блокировка объекта, можно подождать и попросить пользователя выйти из объекта и продолжить запись далее очень удобно хотя  я и сам противник использования операторов перехода но...
12 Sasha_H
 
27.07.07
10:11
(10) Со всем к тебе уважением :) скажи этот модуль содержит ошибку!? Или он неправилен ?
13 Морозов Александр
 
27.07.07
10:13
не айс... не гламурно  и т.д и т.п.

а так ошибки то нет... :-)
14 Sasha_H
 
27.07.07
10:16
(13) Ну от скажи как по-твоему тут использовать не Перейти (я по-просту незнаю)
Если я отвече попробовать еще раз записать этот объект потому как знаю, что объект уже разблокирован. Честно говорю просто не знаю :(
15 Gamma
 
27.07.07
10:18
у меня пишет так:
ОбъектБД.Блокировка()=0 получается не заблокирован, а при ОбъектБД.Записать() пишет ошибку что заблокирован...
база DBF
16 Морозов Александр
 
27.07.07
10:19
(15) Это фишка 1С... читай 4 пост
17 Морозов Александр
 
27.07.07
10:19
(14) В цикле
18 Gamma
 
27.07.07
10:20
ок, спасибо, попробую
19 Sasha_H
 
27.07.07
10:21
(15) попробуй перезагрузится. Возможно, что подвис блин журнал такое бывает. Если реально ты в монопольном режиме и в модуле обработки нету ошибок и ты сам же этот объект не используешь :)
20 Sasha_H
 
27.07.07
10:23
(17) А как !? примерчик. Мы находимся в цикле и еще один цикл вещать :)

Пока ГлавныйЦикл = 1 Цикл
Объект.Записать();
//как тут применить дополнительный цикл :)

КонецЦикла;
21 Sasha_H
 
27.07.07
10:25
Сань мне кажется так тоже не гламурно и кода больше получится и переменных лишних больше а? как думаешь. Ибо как 1С Перейти (это Слава Богу не славнозвесный GO TO).
22 Морозов Александр
 
27.07.07
10:28
Функция ЗаписатьОБъект(ОБъект)

для х=1 по 100 Цикл
Если ОбъектБД.Блокировка(1)=1 Тогда
  ОбъектБД.Блокировка(0);
  ОбъектБД.Записать();
    Возврат 1;
КонецЕсли;
КонецЦИкла;
Возврат 0;
КонецФукции

...
...
...

Если ЗаписатьОБъект(ОБъект)=0 Тогда
Сообщить ("Хто-то заблокировал объект");
КонецЕсли;
23 Sasha_H
 
27.07.07
10:34
(22) Ну вот он у тебя сдесь будет излишне проганять 100 раз и прикинь если ты загружаешь в базу даных что-то по номенклатуре если их и так дофигище еще вешать маленький виснячокс.
Так как
для х=1 по 100 Цикл
Если ОбъектБД.Блокировка(1)=1 Тогда
  ОбъектБД.Блокировка(0);
  ОбъектБД.Записать();
    Возврат 1;
КонецЕсли;
КонецЦИкла;

Условие будет правдиво для объектов не заблокированых, а для заблокированых объектов будет шагать 100 раз зачем это!?
и почему именно 100 можно и с 1 по 1
быстрее будет всеравно с таким методом программа не дает возможности попробовать записать еше раз
24 Andrey_28
 
27.07.07
10:38
Функция ЗаписатьОБъект(ОБъектБД)

Если ОбъектБД.Блокировка(1)=1 Тогда
    ОбъектБД.Блокировка(0);
    ОбъектБД.Записать();
    Возврат 1;
Иначе
    Возврат 0;
КонецЕсли;

КонецФункции


Если ЗаписатьОБъект(ОБъект)=0 Тогда
Сообщить ("Хто-то заблокировал объект");
КонецЕсли;
25 Andrey_28
 
27.07.07
10:38
(24) к (23)
26 Морозов Александр
 
27.07.07
10:39
(23) по твоему лучше сидеть и жать "да" "нет"?
27 dk
 
27.07.07
10:41
(23)

для х=1 по 100 Цикл

намени на

Заблокирован  = ОбъектБД.Блокировка(1);
Пока Заблокирован = 0 Цикл
   Вопрос("Попытаемся еще раз?","Да+Нет+Отмена", 60) = "Да" Тогда
       Заблокирован  = ОбъектБД.Блокировка(1);
   Иначе
       Заблокирован  = 1;
   КонецЕсли;
КонецЦикла

Хотя буков действительно больше, зато "Айс"
28 Морозов Александр
 
27.07.07
10:41
(23) да и если блокировка удачно поставилась  то и цикл прерывается.... теперь остается другой вопрос - транзакция! :-)
29 Sasha_H
 
27.07.07
10:44
(25) и (26)
Думаю лучше так как возможно множество даных нужно изменить у ручками их перезабивать ну его на... и тем более, что объект заблокирован возможно не один. Согласен если использовать обработку в монопольном режиме мой вариант ни к чему но если это использовать во-время работы пользователей думаю более лучше использовать вариант перехода.
30 Sasha_H
 
27.07.07
10:52
(27) Но зачем Отмена! Это вообще сдесь ничео не сделает, нужно дополнительную перемену создавать, так как судя по нажатию Отмена должна прерватся абсолютна вся оброботка.
31 Gamma
 
27.07.07
10:56
записывает, теперь пишет:
Объект.СнятьПометкуУдаления();
{Обработка.ЗагрузкаДанных.Форма.Модуль(1828)}: Пометка на удаление измененного документа невозможна!
32 Sasha_H
 
27.07.07
10:57
Модуль кинь где оно у тебя !
33 Морозов Александр
 
27.07.07
10:58
вообще цикл нужен потому как, бывает что так что объект никто уже не блокирует. а вот сама 1С (ну или СКЛ, не помню точно) еще не сняла блокировку
34 dk
 
27.07.07
11:02
(27) Угу, нужна еще одна переменная, лениво писАть.
(33) Имхо, цикл без вопросов - зло. Ибо грузит проц на 100%. А если это терминал?
35 Sasha_H
 
27.07.07
11:03
(33) Ну быстрей всего 1С.
Короче думаю ни вашь вариант ни мой не является ошибочным по-скольку все зависит от ситуации загружаемых даных и каким способом оно происходит.
36 Gamma
 
27.07.07
11:03
Функция УстановитьСтатусУдаления(Объект, СтатусВПравилах="Авто", СтатусВФайле="НеИзвестен")
   
Если        СтатусВПравилах = "Авто"            Тогда
       
   Если СтатусВФайле="НеИзвестен"    Тогда
       Возврат(Объект);
   ИначеЕсли ПустоеЗначение(СтатусВФайле) = 1 Тогда                                
   
       Если Объект.ПометкаУдаления() = 1 Тогда    //Закомментировано Инсталлятором МОД:Объект.СнятьПометкуУдаления();
           Объект.СнятьПометкуУдаления();
       КонецЕсли;
   Иначе                                                                            
       Если Объект.ПометкаУдаления() = 0 Тогда    //Закомментировано Инсталлятором МОД:Объект.Удалить(0);
           Объект.Удалить(0);
       КонецЕсли;
   КонецЕсли;                                      
       
ИначеЕсли    СтатусВПравилах = "Пометить"        Тогда
   
   Если Объект.ПометкаУдаления() = 0 Тогда    //Закомментировано Инсталлятором МОД:Объект.Удалить(0);  
       Объект.Удалить(0);
   КонецЕсли;
       
ИначеЕсли    СтатусВПравилах = "СнятьПометку"    Тогда
       
   Если Объект.ПометкаУдаления() = 1 Тогда    //Закомментировано Инсталлятором МОД:Объект.СнятьПометкуУдаления();
       Объект.СнятьПометкуУдаления();
   КонецЕсли;
       
КонецЕсли;
           
Возврат(Объект);
   
КонецФункции
37 Gamma
 
27.07.07
11:05
Мод давно не используем, а комментарии остались
а это стандартная функция
38 Andrey_28
 
27.07.07
11:09
(37) Объект.СнятьПометкуУдаления() до или после записи объекта у тебя?
39 Sasha_H
 
27.07.07
11:10
(36) а отладчик что говорит!
40 Sasha_H
 
27.07.07
11:11
(38) да это тоже очень важно!!!
41 Gamma
 
27.07.07
11:11
(37) после записи
42 Sasha_H
 
27.07.07
11:11
При снятии  метки нужно проверять записан ли Объект вообще :)
43 Sasha_H
 
27.07.07
11:12
(41) Отладчик посмотри что там!?
44 Gamma
 
27.07.07
11:12
(39) Объект.ПометкаУдаления()=1 и потом выдает ошибку
45 Sasha_H
 
27.07.07
11:13
Сам код логически верно, но возможно, что-то с Объектом как-то неверно передался.
46 Sasha_H
 
27.07.07
11:14
Все понятно Объект либо не записан либо вообше что-то ни то!!! Кури в сторону Объекта
47 Sasha_H
 
27.07.07
11:15
(44) У тебя ошибка уже при условии проверки! А это значит, что пытаешся проверить Пометку у объекта которому эта функция недосиупна
48 Морозов Александр
 
27.07.07
11:16
:-)
49 Gamma
 
27.07.07
11:27
Объект - это операция под номером, загружает изначально он все правильно, а вот уже когда изменения загрузили, то выдает ошибку
50 Sasha_H
 
27.07.07
11:32
Где именно... Если операция существует и по логике вещей обработка твоя должна работать так

Если операция найдена и помечена на удаление снять эту пометку, а потом уже проводить изменения и записывать! Влавливаешь суть ошибки... Пометка на удаление измененного документа невозможна!
51 Sasha_H
 
27.07.07
11:33
И вообще я не понимаю зачем помечать на удаление операцию в которой ты что-то меняешь !
Основная теорема систематики: Новые системы плодят новые проблемы.