Имя: Пароль:
1C
1С v8
Почему постоянно обработка выдает "не удалось заблокировать таблицу..."
0 ЕщеОдин Программист
 
24.05.16
15:20
Есть файловая КА2.0, в ней около пяти активных пользователей. Запускаю в ней простенькую обработку по передлке и перепроведению накладных, и она отрабатывает максимум штучек пять накладных и вываливается с сообщением "Не удалось заблокировать таблицу", в частности DOCUMENTJOURNAL... или еще какие-нибудь. С сетевыми в восьмерке я еще не много поработал, но на семерке подобная обработка отработала бы без проблем. Почему такая бяка?
1 Nuobu
 
24.05.16
15:21
Делаешь через попытку?
2 ЕщеОдин Программист
 
24.05.16
15:22
нет, останавливается и выдает сообщение. Откуда столько блокировок? Я ее раз десять запускал, и одна-пять накладных и останавливается.
3 Cyberhawk
 
24.05.16
15:23
Так база файловая, вот и блокировки
4 Cyberhawk
 
24.05.16
15:23
Файловая не подходит для многопользовательской работы пользователей с одними и теми же видами документов...
5 ЕщеОдин Программист
 
24.05.16
15:26
(4) в текущий момент вообще не заводят накладные, т.к. ответственный за это человек отсутствует. Что там делают остальные не знаю, но не накладные.
6 ЕщеОдин Программист
 
24.05.16
15:28
у меня эти блокировки пару раз даже на локальной копии вылезли. Откуда? Никаких документов у меня при этом открыто не было.
7 КнОпка
 
24.05.16
15:33
(6) используйте обработку  Групповая обработка справочников и документов
вот такая у вас обработка значит )
8 Cyberhawk
 
24.05.16
15:35
(6) Сложно сказать, нужно смотреть на код обработки
9 ЕщеОдин Программист
 
24.05.16
15:38
Обработка очень простенькая:

    сп = новый Массив;
    
    выб = Документы.ПоступлениеТоваровУслуг.Выбрать();
    пока выб.Следующий() Цикл
        
        Если выб.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщикаРеглУчет Тогда
            сп.Добавить(выб.Ссылка);
        КонецЕсли;
        
    КонецЦикла;
    
    Для каждого ссы из сп Цикл
        о = ссы.ПолучитьОбъект();
        о.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщика;
        
        Если о.Проведен Тогда
            о.Записать(РежимЗаписиДокумента.Проведение);
        Иначе
            о.Записать(РежимЗаписиДокумента.Запись);
        КонецЕсли;
    КонецЦикла;
10 Cyberhawk
 
24.05.16
15:42
Картинку с ошибкой в базе с одним пользователем (тобой) в студию. Желательно на демобазе КА воспроизвести.
11 ЕщеОдин Программист
 
24.05.16
15:51
(10) если бы я знал, что ты захочешь картинку, я бы обязательно сделал. Но на одном пользователе оно не каждый раз вылазит.
12 КнОпка
 
24.05.16
15:52
(9) никогда не используйте синтаксис 7.7 в 8
Вы же все документы берете для перепроведения, со времен царя Гороха, а так же в закрытом периоде. Потому и вылетает
Используйте предложенную типовую обработку
13 ЕщеОдин Программист
 
24.05.16
15:55
(12) там всего четыре месяца и ни одного закрытого. Попробовал я типовую, она что-то там покрутила, и сказал, что ни одного документа не изменено. Хотя согласно отбору было выбрано 255 доков.
14 Cyberhawk
 
24.05.16
16:02
(11) Из ЖР картинка с текстом тоже пойдет, если платформа ее там зафиксировала, конечно...
15 b_ru
 
24.05.16
16:13
Я так думаю, блокировка с самим собой возможна, когда это чудо попытается провести один из N - N mod 20 последних документов. Выборка выбирает документы по 20 штук, возможно с этим связано. Ну или все проще и банальнее - регламентные задания.

(0) Если вкратце, то в 8 никогда не используй выборку из документов или справочников. Только запросы.
16 aleks_default
 
24.05.16
16:18
"Что там делают остальные не знаю, но не накладные."
Ну так блокировки-то по регистрам делаются, а не по документам. А у регистра как правило не один Документ-регистратор. Смекаешь?
17 ЕщеОдин Программист
 
24.05.16
16:20
из анализа журнала регистрации вывел, что здесь замешаны фоновые задания, описание ошибки в ЖР:
Событие: отражение в регламентированном учете.
Комментарий:
Не удалось отразить в регл. учете документ "Списание на расходы 0000-000003 от 01.01.2016 12:00:03" по причине: {ОбщийМодуль.РеглУчетПроведениеСервер.Модуль(1488)}: Ошибка при вызове метода контекста (Записать)
    ОтражениеВРеглУчете.Записать();
по причине:
Ошибка при выполнении обработчика - 'ПередЗаписью'
по причине:
{ОбщийМодуль.ОбновлениеИнформационнойБазыСлужебный.Модуль(3957)}: Ошибка при вызове метода контекста (Получить)
    СведенияОБлокируемыхОбъектах = Константы.СведенияОБлокируемыхОбъектах.Получить().Получить();
по причине:
Конфликт блокировок при выполнении транзакции:
18 ЕщеОдин Программист
 
24.05.16
16:20
(это было на другой обработке, то же простенькой)
19 КнОпка
 
24.05.16
16:26
(13) у вас же КА 2.0, т.е. УФ

попробуйте в списке документов выделить документы Shift + стрелка вниз либо вверх, и перепровести )
Какой будет результат?
20 ЕщеОдин Программист
 
24.05.16
16:32
(19) запустилась обработка проведения, периодически поплевываясь на ошибку заполненности данных. Интересное свойство, буду знать, но какое отношение оно имеет к текущему вопросу?
21 КнОпка
 
24.05.16
16:54
(20) ну а теперь уберите изменение реквизита в вашей обработке и запустите ее. И какой будет результат?