|
Ошибка: Операция не может быть выполнена из за несоответствия версии или отсутствия записи
|
Я
|
|
Alex2411 18.03.21 - 17:49 | Добрый день! Столкнулся с такой проблемой, рассказываю, БД самописная на управляемом приложение, 2 ТСД работают одновременно с одним документом, первый ТСД пишет данные в документ второй нет!
вот функция, которую вызывает ТСД в момент записи:
ДокОбъект = Объект.ДокРаскладка.Ссылка.ПолучитьОбъект();
Если ДокОбъект.ТЧ.Итог("Количество")<>ДокОбъект.ТЧ.Итог("КоличествоФакт") тогда
СтрокаДок = ДокОбъект.ТЧ[НомерСтрокиДокумента-1];
Если конечныйШКполучен = 0 Тогда
СтрокаДок.КоличествоФакт = ТекКолво;
КОнецЕсли;
СтрокаДок.РаскладкаВремя = Формат(ТекущаяДата(),"ДЛФ=В");
СтрокаДок.РаскладкаДата = ТекущаяДата();
СтрокаДок.СтрокаКЗачету = 1;
//Если конечныйШКполучен = 1 Тогда// 17-03 .
Если НЕ ОднаСтрокаВТЧ() Тогда// 17-03
СтрокаДок.Комментарий = СокрЛП(СтрокаДок.Комментарий) + ?(СтрокаДок.Комментарий = "НачалоКонец", "", "Конец");
Иначе
Если конечныйШКполучен = 1 Тогда
СтрокаДок.Комментарий = СокрЛП(СтрокаДок.Комментарий) + ?(СтрокаДок.Комментарий = "", "", "Конец");
КонецЕсли;
КонецЕсли;
ТекРежим=8;
ДокОбъект.Записать(РежимЗаписиДокумента.Запись);
Если конечныйШКполучен = 1 Тогда
ТипЗаписи = 1;
КонецЕсли;
КонецЕсли; |
Alex2411 1 - 18.03.21 - 17:50 | период между записями не меньше 10 сек.
|
Alex2411 2 - 18.03.21 - 17:52 | Может Объект.ДокРаскладка.Ссылка.ПолучитьОбъект() возвращает не измененный объект, со старой версией?
|
Alex2411 3 - 18.03.21 - 17:53 | Платформа 1С:Предприятие 8.3 (8.3.18.1208)
|
mikecool 4 - 18.03.21 - 17:54 | перечитать объект перед записью
|
polosov 5 - 18.03.21 - 18:00 | ( 0) Так ошибка в какой момент возникает?
Возможно оба клиента делают ПолучитьОбъект()
Один клиент меняет объект, у другого тут же протухает версия полученного ранее объекта. |
Alex2411 6 - 18.03.21 - 18:07 | разница между запусками функции минимум 10 сек. функция выполняется мгновенно
|
Alex2411 7 - 18.03.21 - 18:07 | база крутиться в SQL
|
polosov 8 - 18.03.21 - 18:25 | ( 6) Чудес не бывает. Блокируй документ после получения объекта. |
Alex2411 9 - 19.03.21 - 12:35 | ДокОбъект = Объект.ДокРаскладка.ПолучитьОбъект();
ДокОбъект.Прочитать();
Написал вот так и все работает!!! До конца только не понятно(((( почему так!!! |
Вафель 10 - 19.03.21 - 13:26 | между тем как получил и записал ктото еще успел записать
|
Вафель 11 - 19.03.21 - 13:27 | |
Alex2411 12 - 19.03.21 - 14:45 | ( 10) Исключено, в журнале регистрации смотрел. Я тесты делал на копии, в которой работали только эти два тсд.
Так работает
ДокОбъект = Объект.ДокРаскладка.ПолучитьОбъект();
ДокОбъект.Прочитать();
а вот так:
ДокОбъект = Объект.ДокРаскладка.ПолучитьОбъект();
Не работает, в чем разница??? разве когда я пишу ПолучитьОбъект() он мне не последнию версию возвращает????? По сути Прочитать() здесь лишнее. |
vicof 13 - 19.03.21 - 14:58 | |
Вафель 14 - 19.03.21 - 15:08 | посмотри версии поле получить и после прочитать
|