Конфликт блокировок при записи объекта справочника
Есть процедура создания контрагента и физического лица, при попытке записать объект ФизЛицо выскакивает конфликт блокировок. Не могу понять в чем причина. Возможен ли конфликт блокировок именно при создании нового объекта или все же это из-за полученного объекта (ПолучитьОбъект()) ?
МЕСТО ОШИБКИ:
КРАТКИЙ КОД:
ПОЛНЫЙ КОД:
МЕСТО ОШИБКИ:
Попытка
ФизЛицо.Записать();
Исключение
ОбщегоНазначения.СообщитьПользователю("Не удалось записать физ.лицо по причине: " + ОписаниеОшибки(),,,,Отказ);
ОтменитьТранзакцию();
Возврат;
КонецПопытки;
КРАТКИЙ КОД:
&НаСервере
Процедура СоздатьВладельцаНаСервере(Знач Контрагент = Неопределено, Отказ)
НачатьТранзакцию();
Если Контрагент = Неопределено Тогда
Контрагент = Справочники.Контрагенты.СоздатьЭлемент();
// заполняем реквизиты контрагента
Иначе
Контрагент = Контрагент.ПолучитьОбъект();
// заполняем реквизиты контрагента
КонецЕсли;
//Создадим физика
Если НЕ ЗначениеЗаполнено(Контрагент.ФизЛицо) Тогда
ФизЛицо = Справочники.ФизическиеЛица.СоздатьЭлемент();
// заполняем реквизиты физ. лица
Иначе
ФизЛицо = Контрагент.ФизЛицо.ПолучитьОбъект();
// заполняем реквизиты физ. лица
КонецЕсли;
// заполняем другие реквизиты физ. лица
Попытка
ФизЛицо.Записать();
Исключение
ОбщегоНазначения.СообщитьПользователю("Не удалось записать физ.лицо по причине: " + ОписаниеОшибки(),,,,Отказ);
ОтменитьТранзакцию();
Возврат;
КонецПопытки;
// заполняем другие реквизиты контрагента
Попытка
Контрагент.Записать();
Исключение
ОбщегоНазначения.СообщитьПользователю("Не удалось записать контрагента по причине: "+ОписаниеОшибки(),,,,Отказ);
ОтменитьТранзакцию();
Возврат;
КонецПопытки;
ЗаполнитьДополнительныеСвойства(Контрагент.Ссылка);
ЗафиксироватьТранзакцию();
ВладелецКарты = Контрагент.Ссылка;
КонецПроцедуры
ПоказатьПОЛНЫЙ КОД:
&НаСервере
Процедура СоздатьВладельцаНаСервере(Знач Контрагент = Неопределено, Отказ)
НачатьТранзакцию();
Если Контрагент = Неопределено Тогда
Контрагент = Справочники.Контрагенты.СоздатьЭлемент();
//контакты
НомерТелефона = Контрагент.КонтактнаяИнформация.Добавить();
НомерТелефона.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон;
НомерТелефона.Вид = Справочники.ВидыКонтактнойИнформации.ТелефонКонтрагента;
НомерТелефона.Представление = Телефон;
НомерТелефона.НомерТелефона = Телефон;
Если ЗначениеЗаполнено(ЭлектроннаяПочта) Тогда
КИ_ЭлектроннаяПочта = Контрагент.КонтактнаяИнформация.Добавить();
КИ_ЭлектроннаяПочта.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты;
КИ_ЭлектроннаяПочта.Вид = Справочники.ВидыКонтактнойИнформации.EmailКонтрагента;
КИ_ЭлектроннаяПочта.Представление = ЭлектроннаяПочта;
КИ_ЭлектроннаяПочта.АдресЭП = ЭлектроннаяПочта;
КонецЕсли;
Контрагент.м_Страна = ЭтаФорма.РеквСтрана;
Контрагент.м_Город = ЭтаФорма.РеквГород;
Иначе
Контрагент = Контрагент.ПолучитьОбъект();
Для каждого СтрокаКИ Из Контрагент.КонтактнаяИнформация Цикл
Если СтрокаКИ.Вид = Справочники.ВидыКонтактнойИнформации.EmailКонтрагента И ЗначениеЗаполнено(ЭлектроннаяПочта) Тогда
СтрокаКИ.Представление = ЭлектроннаяПочта;
СтрокаКИ.АдресЭП = ЭлектроннаяПочта;
ИначеЕсли СтрокаКИ.Вид = Справочники.ВидыКонтактнойИнформации.ТелефонКонтрагента Тогда
СтрокаКИ.Представление = Телефон;
СтрокаКИ.НомерТелефона = Телефон;
КонецЕсли;
КонецЦикла;
Если НЕ ЗначениеЗаполнено(Контрагент.м_Страна) Тогда
Контрагент.м_Страна = ЭтаФорма.РеквСтрана;
ИначеЕсли НЕ ЗначениеЗаполнено(Контрагент.м_Город) Тогда
Контрагент.м_Город = ЭтаФорма.РеквГород;
КонецЕсли;
КонецЕсли;
//Создадим физика
Если НЕ ЗначениеЗаполнено(Контрагент.ФизЛицо) Тогда
ФизЛицо = Справочники.ФизическиеЛица.СоздатьЭлемент();
//контакты
НомерТелефона = ФизЛицо.КонтактнаяИнформация.Добавить();
НомерТелефона.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон;
НомерТелефона.Вид = Справочники.ВидыКонтактнойИнформации.ТелефонФизическогоЛица;
НомерТелефона.Представление = Телефон;
НомерТелефона.НомерТелефона = Телефон;
Если ЗначениеЗаполнено(ЭлектроннаяПочта) Тогда
КИ_ЭлектроннаяПочта = ФизЛицо.КонтактнаяИнформация.Добавить();
КИ_ЭлектроннаяПочта.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты;
КИ_ЭлектроннаяПочта.Вид = Справочники.ВидыКонтактнойИнформации.EmailФизическогоЛица;
КИ_ЭлектроннаяПочта.Представление = ЭлектроннаяПочта;
КИ_ЭлектроннаяПочта.АдресЭП = ЭлектроннаяПочта;
КонецЕсли;
Иначе
ФизЛицо = Контрагент.ФизЛицо.ПолучитьОбъект();
Для каждого СтрокаКИ Из ФизЛицо.КонтактнаяИнформация Цикл
Если СтрокаКИ.Вид = Справочники.ВидыКонтактнойИнформации.EmailФизическогоЛица И ЗначениеЗаполнено(ЭлектроннаяПочта) Тогда
СтрокаКИ.Представление = ЭлектроннаяПочта;
СтрокаКИ.АдресЭП = ЭлектроннаяПочта;
ИначеЕсли СтрокаКИ.Вид = Справочники.ВидыКонтактнойИнформации.ТелефонФизическогоЛица Тогда
СтрокаКИ.Представление = Телефон;
СтрокаКИ.НомерТелефона = Телефон;
КонецЕсли;
КонецЦикла;
КонецЕсли;
ФизЛицо.Наименование = СокрЛП(Фамилия + " " + Имя + " " + Отчество);
ФизЛицо.ДатаРождения = ДатаРождения;
ФизЛицо.Пол = Пол;
ФизЛицо.EmailОтсутствует = EmailОтсутствует;
ФизЛицо.м_ОтказалсяОтСМСРассылки = м_ОтказалсяОтСМСРассылки;
Попытка
ФизЛицо.Записать();
МенеджерЗаписи = РегистрыСведений.ФИОФизЛиц.СоздатьМенеджерЗаписи();
МенеджерЗаписи.ФизЛицо = ФизЛицо.Ссылка;
МенеджерЗаписи.Период = ТекущаяДата();
МенеджерЗаписи.Фамилия = Фамилия;
МенеджерЗаписи.Имя = Имя;
МенеджерЗаписи.Отчество = Отчество;
МенеджерЗаписи.Записать(Истина);
Исключение
ОбщегоНазначения.СообщитьПользователю("Не удалось записать физ.лицо по причине: " + ОписаниеОшибки(),,,,Отказ);
ОтменитьТранзакцию();
Возврат;
КонецПопытки;
//заполним контрагента
Контрагент.Наименование = СокрЛП(Фамилия + " " + Имя + " " + Отчество);
Контрагент.НаименованиеПолное = СокрЛП(Фамилия + " " + Имя + " " + Отчество);
Контрагент.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо;
Контрагент.ФизЛицо = ФизЛицо.Ссылка;
Контрагент.Покупатель = Истина;
Попытка
Контрагент.Записать();
Исключение
ОбщегоНазначения.СообщитьПользователю("Не удалось записать контрагента по причине: "+ОписаниеОшибки(),,,,Отказ);
ОтменитьТранзакцию();
Возврат;
КонецПопытки;
ЗаполнитьДополнительныеСвойства(Контрагент.Ссылка);
ЗафиксироватьТранзакцию();
ВладелецКарты = Контрагент.Ссылка;
КонецПроцедуры
ПоказатьПо теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2) Здравствуйте, в начале написал при попытке записать объект ФизЛицо.
Вот здесь возникает конфликт блокировок
Попытка
ФизЛицо.Записать();
Исключение
ОбщегоНазначения.СообщитьПользователю("Не удалось записать физ.лицо по причине: " + ОписаниеОшибки(),,,,Отказ);
ОтменитьТранзакцию();
Возврат;
КонецПопытки;
Вот здесь возникает конфликт блокировок
ФизЛицо.Записать();
МенеджерЗаписи = РегистрыСведений.ФИОФизЛиц.СоздатьМенеджерЗаписи();
МенеджерЗаписи.ФизЛицо = ФизЛицо.Ссылка;
МенеджерЗаписи.Период = ТекущаяДата();
МенеджерЗаписи.Фамилия = Фамилия;
МенеджерЗаписи.Имя = Имя;
МенеджерЗаписи.Отчество = Отчество;
МенеджерЗаписи.Записать(Истина);
Показатьпопробуйте разделить 2 эти записи на 2 попытки
и скиньте текст ошибки
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот