|   |   | 
| 
 | Ошибка при обмене: конфликт блокировок | ☑ | ||
|---|---|---|---|---|
| 0
    
        zak555 20.03.19✎ 12:19 | 
        есть база ут 10.3.50.3 под sql
 есть БП во фрещше делаю синхронизацию, возникает ошибка Конфликт блокировок при выполнении транзакции: Microsoft SQL Server Native Client 11.0: Превышено время ожидания запроса на блокировку. HRESULT=80040E31, SQLSrvr: SQLSTATE=HYT00, state=31, Severity=10, native=1222, line=1 куда копать ? | |||
| 1
    
        zak555 20.03.19✎ 12:28 | 
        ругается на РС кэш программных интерфейсов     | |||
| 2
    
        zak555 20.03.19✎ 12:45 | 
        какой-то код странный
 Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТаблицаКэша.ДатаОбновления КАК ДатаОбновления, | ТаблицаКэша.Данные КАК Данные, | ТаблицаКэша.ТипДанных КАК ТипДанных |ИЗ | РегистрСведений.КэшПрограммныхИнтерфейсов КАК ТаблицаКэша |ГДЕ | ТаблицаКэша.Идентификатор = &Идентификатор | И ТаблицаКэша.ТипДанных = &ТипДанных"; Идентификатор = Идентификатор; Запрос.УстановитьПараметр("Идентификатор", Идентификатор); Запрос.УстановитьПараметр("ТипДанных", ТипДанных); НачатьТранзакцию(); ОшибкаУстановкиБлокировки = Ложь; Попытка СтруктураКлюча = Новый Структура("Идентификатор, ТипДанных", Идентификатор, ТипДанных); Ключ = РегистрыСведений.КэшПрограммныхИнтерфейсов.СоздатьКлючЗаписи(СтруктураКлюча); Попытка ЗаблокироватьДанныеДляРедактирования(Ключ); Исключение // Данные уже обновляются из другого сеанса ОшибкаУстановкиБлокировки = Истина; ВызватьИсключение; КонецПопытки; Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.КэшПрограммныхИнтерфейсов"); ЭлементБлокировки.УстановитьЗначение("Идентификатор", Идентификатор); ЭлементБлокировки.УстановитьЗначение("ТипДанных", ТипДанных); Блокировка.Заблокировать(); Результат = Запрос.Выполнить(); // Убедимся что данные требуют обновления Если НЕ Результат.Пустой() Тогда Выборка = Результат.Выбрать(); Выборка.Следующий(); Если НЕ ЗаписьКэшаВерсийУстарела(Выборка) Тогда // Данные актуальны ОтменитьТранзакцию(); Возврат; КонецЕсли; КонецЕсли; Набор = РегистрыСведений.КэшПрограммныхИнтерфейсов.СоздатьНаборЗаписей(); Набор.Отбор.Идентификатор.Установить(Идентификатор); Набор.Отбор.ТипДанных.Установить(ТипДанных); Запись = Набор.Добавить(); Запись.Идентификатор = Идентификатор; Запись.ТипДанных = ТипДанных; Запись.ДатаОбновления = ТекущаяУниверсальнаяДата(); Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Или Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда Данные = ПодготовитьДанныеКэшаВерсий(ТипДанных, ПараметрыПолучения); Запись.Данные = Новый ХранилищеЗначения(Данные); Иначе Набор.ДополнительныеСвойства.Вставить("ПараметрыПолучения", ПараметрыПолучения); КонецЕсли; Набор.Записать(); ЗафиксироватьТранзакцию(); | |||
| 3
    
        zak555 20.03.19✎ 12:45 | 
        создали уже запись , потом пытаюсь ещё раз записать с теми же ключами     | |||
| 4
    
        GreyK 20.03.19✎ 12:58 | 
        (0) Предупреждений по синхронизации нет?     | |||
| 5
    
        zak555 20.03.19✎ 13:13 | 
        даже при попытке проверить подключение такая же ошибка     | |||
| 6
    
        zak555 20.03.19✎ 13:25 | 
        какая логика в коде из 2 ?     | |||
| 7
    
        aleks_default 20.03.19✎ 13:42 | 
        (6)Дату обновления меняют     | |||
| 8
    
        aleks_default 20.03.19✎ 13:44 | 
        Хотя код конечно говно     | |||
| 9
    
        aleks_default 20.03.19✎ 13:49 | 
        Транзакцию отменять надо если результат запроса пустой, если попытка блокировки не удалась(хотя зачем она здесь ума не приложу). А здесь ее фиксируют в конце  вне зависимости от результата записи Вот тебе ошибки ожидания заверщения транзакции и выдает     | |||
| 10
    
        aleks_default 20.03.19✎ 13:51 | 
        Если ПодготовитьДанныеКэшаВерсий никаких записей в базу данных не делает, то транзакция здесь вообще нахер не нужна     | |||
| 11
    
        zak555 20.03.19✎ 13:56 | 
        сейчас в РС всё пусто     | |||
| 12
    
        zak555 20.03.19✎ 13:59 | 
        (10) есть данные     | |||
| 13
    
        zak555 20.03.19✎ 14:04 | 
        Ключ = РегистрыСведений.КэшПрограммныхИнтерфейсов.СоздатьКлючЗаписи(СтруктураКлюча);
 уже создаёт запись без ХЗ, которую блокирует | |||
| 14
    
        aleks_default 20.03.19✎ 14:04 | 
        Набор.ДополнительныеСвойства.Вставить("ПараметрыПолучения", ПараметрыПолучения);
 Загляни в модуль набора записей регистра. Видимо там еще какая-то обработка делается перед записью набора. Может там зависает. | |||
| 15
    
        aleks_default 20.03.19✎ 14:05 | 
        (14)Или подписка     | |||
| 16
    
        aleks_default 20.03.19✎ 14:08 | 
        (13)Это не запись в базу данных, это ключ записи, которая еще не записана. Типа как объект документа.     | |||
| 17
    
        zak555 20.03.19✎ 14:09 | 
        (16) данные пишет, но не фиксирует транзакцию     | |||
| 18
    
        zak555 20.03.19✎ 14:13 | 
        (14)
 Процедура ПередЗаписью(Отказ, Замещение) // Проверка значения свойства ОбменДанными.Загрузка отсутствует по причине того, что ограничения, // накладываемые данным кодом, не должны обходить установкой этого свойства равным Истина // (на стороне кода, который выполняет попытку записи в данный регистр). // // Данный регистр не должен входить в любые обмены или операции выгрузки / загрузки данных при включенном // разделении по областям данных. ТребуетсяКонтроль = ОбщегоНазначенияПовтИсп.РазделениеВключено() И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных(); Если ТребуетсяКонтроль Тогда ПараметрыПолучения = Неопределено; Если Не ДополнительныеСвойства.Свойство("ПараметрыПолучения", ПараметрыПолучения) Тогда ВызватьИсключение НСтр("ru = 'При записи данных в регистр сведений КэшПрограммныхИнтерфейсов из сеансов |с включенным разделением требуется передавать параметры получения данных для кэша |интерфейсов в дополнительном свойстве набора записей ПараметрыПолучения!'"); КонецЕсли; Для Каждого Запись Из ЭтотОбъект Цикл Данные = ОбщегоНазначения.ПодготовитьДанныеКэшаВерсий( Запись.ТипДанных, ПараметрыПолучения); Запись.Данные = Новый ХранилищеЗначения(Данные); КонецЦикла; ТаблицаКонтроля = ЭтотОбъект.Выгрузить(); КонецЕсли; КонецПроцедуры | |||
| 19
    
        zak555 20.03.19✎ 14:59 | 
        закоментил всё, что связано с транзакциями -- в РС появились записи     | |||
| 20
    
        zak555 20.03.19✎ 15:00 | 
        теперь новая беда
 в базе Бух 3.0 не найдена настройка с узлом УТ | |||
| 21
    
        zak555 20.03.19✎ 15:00 | 
        в УТ же нет РС псевдонимы узлов     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |