Имя: Пароль:
1C
 
механизм блокировок
0 vip67
 
04.08.15
10:40
Всем привет! УПП длЯ Украины, 1-3-30-1.
Необходимо перевести табель учета рабочего времени в режим управляемых блокировок (т.к. подразделений много (50), сотрудников в одном подразделении может быть 100-800), в итоге - пока один не запишет табель, другой не может его записать - вываливается ошибка)
установил на конфигурацию режим блокировок автоматический и управляемый, на табель и регистр сведений "ГрафикиРаботыПоВидамВремени" управляемый, код приписал, в итоге при сохранении табеля ошибка: "ошибка менеджера блокировок. Автоматическая блокировка не может использоваться в данной транзакции". причем в отладчике в пошаговом режиме ошибка возникает уже после прохождения всех процедур записи ("конецпроцедуру" - жму "шаг" - ошибка). установил управляемый режим для справочников и регистров, на которые есть ссылки в табеле - не помогло. Как определить причину?
1 Славен
 
04.08.15
10:42
Смотреть как ты инициализирукшь блокировку при записи в график
2 NcSteel
 
04.08.15
10:42
(0) так вроде там и так упр блокировки.
3 Славен
 
04.08.15
10:42
А у рс графика управляемый режим поставил?
4 NcSteel
 
04.08.15
10:43
А вообще перейти на скуль там что автомат, что управляемые блокировки на уровне записей.
5 Господин ПЖ
 
04.08.15
10:44
>перейти на скуль

а автор где?
6 NcSteel
 
04.08.15
10:46
(5) Без понятия. Нет информации
7 Господин ПЖ
 
04.08.15
10:47
в файловой эмулировать блокировки как-то тупо...
8 NcSteel
 
04.08.15
10:47
А вообще ошибка объяснима, а именно документ в режиме авто блокировок а регистр упр, вот и ошиюка
9 Mitriy
 
04.08.15
10:47
(5) пошел на скуль...
10 NcSteel
 
04.08.15
10:48
(7) Автор не понимает как работают блокировки, так что может быть все что угодно
11 Господин ПЖ
 
04.08.15
10:48
(9) а раньше в бухгалтерию посылали
12 vip67
 
04.08.15
10:55
автор здесь, на месте. не ожидал такого участия! отвечаю:
база на скуле.
на РС управляемый режим
и мне действительно впервые приходится этим заниматься (управляемые блокировки) - но все когда-то с чем-то впервые встречались. Вопрос задаю после многих часов/недель просмотра документации. Не скажу, что полностью въехал - много вопросов без ответа.
привожу код в процедуре, где без управляемых блокировок возникала проблема:

Процедура УдалитьЗаписиЗаПериодДокумента()
    
    УБчт = Новый БлокировкаДанных;
    УБчтРГ = УБчт.Добавить("РегистрСведений.ГрафикиРаботыПоВидамВремени");
    УБчтРГ.Режим = РежимБлокировкиДанных.Разделяемый;
    УБчтРГ.УстановитьЗначение("Документ",Ссылка);
    УБчт.Заблокировать();

    Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    Запрос.УстановитьПараметр("Документ", Ссылка);
    
    
    Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    ГрафикиРаботы.ГрафикРаботы,
    |    ГрафикиРаботы.Месяц
    |ПОМЕСТИТЬ ВТСотрудникоМесяц
    |ИЗ
    |    РегистрСведений.ГрафикиРаботыПоВидамВремени КАК ГрафикиРаботы
    |ГДЕ
    |    ГрафикиРаботы.Документ = &Документ";
    Запрос.Выполнить();
    
    Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |СотрудникоМесяц.ГрафикРаботы КАК Сотрудник,
    |СотрудникоМесяц.Месяц КАК Месяц,
    |ВЫБОР
    |    КОГДА ВведенныеДокументы.ГрафикРаботы ЕСТЬ NULL
    |        ТОГДА ИСТИНА
    |    ИНАЧЕ ЛОЖЬ
    |КОНЕЦ КАК УдалятьЗаписиЗаПериод
    |
    |ИЗ
    |    ВТСотрудникоМесяц КАК СотрудникоМесяц
    |ЛЕВОЕ СОЕДИНЕНИЕ    
    |    (ВЫБРАТЬ
    |    СотрудникоМесяц.ГрафикРаботы,
    |    СотрудникоМесяц.Месяц
    |    ИЗ
    |        ВТСотрудникоМесяц КАК СотрудникоМесяц
    |    ВНУТРЕННЕЕ СОЕДИНЕНИЕ
    |        РегистрСведений.ГрафикиРаботыПоВидамВремени КАК ГрафикиРаботы
    |    ПО
    |        ГрафикиРаботы.ГрафикРаботы = СотрудникоМесяц.ГрафикРаботы
    |        И НЕ ГрафикиРаботы.План
    |        И ГрафикиРаботы.Месяц = СотрудникоМесяц.Месяц
    |        И ГрафикиРаботы.Документ <> &Документ
    |        И ГрафикиРаботы.Документ <> ЗНАЧЕНИЕ(Документ.ТабельУчетаРабочегоВремениОрганизации.ПустаяСсылка)
    |    )КАК ВведенныеДокументы
    |ПО
    |    ВведенныеДокументы.ГрафикРаботы = СотрудникоМесяц.ГрафикРаботы
    |    И ВведенныеДокументы.Месяц = СотрудникоМесяц.Месяц";
    ВыборкаЗапроса = Запрос.Выполнить().Выбрать();
    
    НаборЗаписей = РегистрыСведений.ГрафикиРаботыПоВидамВремени.СоздатьНаборЗаписей();
    сзСотрудников = новый СписокЗначений;
    Пока ВыборкаЗапроса.Следующий() Цикл
        УБзп = Новый БлокировкаДанных;
        УБзпРГ = УБчт.Добавить("РегистрСведений.ГрафикиРаботыПоВидамВремени");
        УБзпРГ.Режим = РежимБлокировкиДанных.Исключительный;
        УБзпРГ.УстановитьЗначение("ГрафикРаботы",ВыборкаЗапроса.Сотрудник);
        УБзп.Заблокировать();
        //попытка
        //НачатьТранзакцию(РежимУправленияБлокировкойДанных.Управляемый);
        Месяц_ = ВыборкаЗапроса.Месяц;
        НаборЗаписей.Отбор.План.Установить(Ложь);
        НаборЗаписей.Отбор.ГрафикРаботы.Установить(ВыборкаЗапроса.Сотрудник);
        НаборЗаписей.Отбор.Месяц.Установить(ВыборкаЗапроса.Месяц);
//        
        Если ВыборкаЗапроса.УдалятьЗаписиЗаПериод Тогда
            НаборЗаписей.Очистить();
            НаборЗаписей.Записать();
        Иначе
            
            НаборЗаписей.Прочитать();
            Для Каждого Запись Из НаборЗаписей Цикл
                Если (Запись.Документ = Ссылка) Тогда
                    Запись.ОсновноеЗначениеПолное = 0;
                    Запись.ДополнительноеЗначениеПолное = 0;
                    Запись.Документ = Документы.ТабельУчетаРабочегоВремениОрганизации.ПустаяСсылка();
                КонецЕсли;
            КонецЦикла;
            НаборЗаписей.Записать();
        КонецЕсли;

        
        
    КонецЦикла;
КонецПроцедуры  // УдалитьЗаписиЗаПериодДокумента()
13 NcSteel
 
04.08.15
10:57
(12) Ответ на ошибку из (0) уже был дан, но ты видимо плохо читаешь посты. Представляю как ты изучаешь документацию
14 vip67
 
04.08.15
10:59
для теста заремил строку вызова данной процедуры - ошибка та-же. т.е. код - ни при чем
15 vip67
 
04.08.15
11:00
(13) если ответ был в (8), то документ то-же в режиме управляющих
16 NcSteel
 
04.08.15
11:02
(15) Суть в том, что документ вызывает блокировку в одном режиме, а регистр в другом режиме. И не обязательно проблемный регистр это "ГрафикиРаботыПоВидамВремени"

Я уверен, что документ делает и другие движения по другим регистрам, которые остались в режмиме авто блокировок
17 vip67
 
04.08.15
11:04
а как узнать, какие объекты  остались в режиме автоматической блокировки? т.е., проследить состояние блокировки?
18 NcSteel
 
04.08.15
11:06
(17) ну так открой документ, посмотри по каким регистрам двигает документ. и прощелкай все регистры.
19 vip67
 
04.08.15
11:28
(18) открыл, посмотрел, по всем регистрам поставил управляемый режим - не помогло
20 H A D G E H O G s
 
04.08.15
11:32
У автора в (12) блокировка всего регистра + потенциальный deadlock. вы че курите?
21 NcSteel
 
04.08.15
11:33
(20) Текст ошибки в (0) говорит о другом, потом и к дедлокам прийдем.
22 NcSteel
 
04.08.15
11:34
(19) То есть везде упр режим и все ровно ошибка в (0) ? - не верю
23 H A D G E H O G s
 
04.08.15
11:35
(21) ок
(0) Автор, в свойствах конфы включи только управляемый режим.
24 vip67
 
04.08.15
11:54
(23) счас попробую
25 vip67
 
04.08.15
11:58
прокатило - ошибок нет
26 NcSteel
 
04.08.15
12:00
(25) О чем тебе толдычат уже целый час....
27 H A D G E H O G s
 
04.08.15
12:08
(25) Не переживай, они скоро появятся.
28 vip67
 
04.08.15
12:10
тогда следующий вопрос: я не перевожу полностью базу под управляемый режим - мне нужно решить только эту проблему. в документации рекомендуется установить на конфигурацию управляемый и автоматический режим. как я понял - если при переводе чисто на управляемый режим ошибка исчезла, это говорит о том, что где-то есть автоматический режим в транзакции. Вот и вопрос - как вычислить этот объект? не оставлять же в свойставх конфигурации чисто управляемый редим блокировок
29 Господин ПЖ
 
04.08.15
12:10
(26) а все равно не понятно откуда автоблокировка шла
30 NcSteel
 
04.08.15
12:22
(28) Перевод всей конфигурации на упр режим это грубое решение.
Надо анализировать все транзакции которые создает документ при проведении (движения регистров, может он документы смежные перезаписывает или справочники). И если у связанного объекта стоит авто блокировки то получаем ошибку.

Почему документацию не читаешь?
31 H A D G E H O G s
 
04.08.15
12:22
(28) Ищи все что пишется.
Нумераторы,
Последовательности,
Константы,
Справочники,
32 NcSteel
 
04.08.15
12:23
(29) вроде понятно, а именно слепота автора и вывих рук одновременно
33 Господин ПЖ
 
04.08.15
12:24
(32) я к тому что инструмента получается нет? и надо эмпирически вычислять как с правами было (куда нет доступа) до появления логирования события в ЖР
34 NcSteel
 
04.08.15
12:26
(33) Имхо, но достаточно и конфигуратора.
Других более удобны механизмов не знаю
35 vip67
 
04.08.15
14:26
ок, я поддерживаю (33) в том, что неудобно, когда инструмента нет, спс всем участвующим! Особенно   H A D G E H O G s !!!
Книги читаю, а так как не нашел внятного совета в них про инструментарий, обратился сюда, и к сожалению - подтверждение отсутствия такового этим сайтом - то остается - глубокий анализ и мучение. Это уже претензии к разработчикам - могли бы и придумать что-либо...
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс