Имя: Пароль:
1C
1С v8
Ошибка: Операция не может быть выполнена из за несоответствия версии или отсутствия записи
0 Alex2411
 
18.03.21
17:49
Добрый день! Столкнулся с такой проблемой, рассказываю, БД самописная на управляемом приложение, 2 ТСД работают одновременно с одним документом, первый ТСД пишет данные в документ второй нет!
вот функция, которую вызывает ТСД в момент записи:

    ДокОбъект = Объект.ДокРаскладка.Ссылка.ПолучитьОбъект();
    
    Если ДокОбъект.ТЧ.Итог("Количество")<>ДокОбъект.ТЧ.Итог("КоличествоФакт") тогда
        СтрокаДок = ДокОбъект.ТЧ[НомерСтрокиДокумента-1];
        Если конечныйШКполучен = 0 Тогда
            СтрокаДок.КоличествоФакт     = ТекКолво;
        КОнецЕсли;    
                
        СтрокаДок.РаскладкаВремя    = Формат(ТекущаяДата(),"ДЛФ=В");
        СтрокаДок.РаскладкаДата        = ТекущаяДата();
        СтрокаДок.СтрокаКЗачету       = 1;
            
        //Если конечныйШКполучен = 1 Тогда// 17-03            .
        Если НЕ ОднаСтрокаВТЧ() Тогда// 17-03        
            СтрокаДок.Комментарий = СокрЛП(СтрокаДок.Комментарий) +  ?(СтрокаДок.Комментарий = "НачалоКонец", "", "Конец");
        Иначе
            Если конечныйШКполучен = 1 Тогда            
                СтрокаДок.Комментарий = СокрЛП(СтрокаДок.Комментарий) + ?(СтрокаДок.Комментарий = "", "", "Конец");        
            КонецЕсли;
        КонецЕсли;
        ТекРежим=8;        

        ДокОбъект.Записать(РежимЗаписиДокумента.Запись);
        Если конечныйШКполучен = 1 Тогда
            ТипЗаписи = 1;
        КонецЕсли;
                        
    КонецЕсли;
1 Alex2411
 
18.03.21
17:50
период между записями не меньше 10 сек.
2 Alex2411
 
18.03.21
17:52
Может Объект.ДокРаскладка.Ссылка.ПолучитьОбъект() возвращает не измененный объект, со старой версией?
3 Alex2411
 
18.03.21
17:53
Платформа 1С:Предприятие 8.3 (8.3.18.1208)
4 mikecool
 
18.03.21
17:54
перечитать объект перед записью
5 polosov
 
18.03.21
18:00
(0) Так ошибка в какой момент возникает?
Возможно оба клиента делают ПолучитьОбъект()
Один клиент меняет объект, у другого тут же протухает версия полученного ранее объекта.
6 Alex2411
 
18.03.21
18:07
разница между запусками функции минимум 10 сек. функция выполняется мгновенно
7 Alex2411
 
18.03.21
18:07
база крутиться в SQL
8 polosov
 
18.03.21
18:25
(6) Чудес не бывает. Блокируй документ после получения объекта.
9 Alex2411
 
19.03.21
12:35
ДокОбъект = Объект.ДокРаскладка.ПолучитьОбъект();
    ДокОбъект.Прочитать();

Написал вот так и все работает!!! До конца только не понятно(((( почему так!!!
10 Вафель
 
19.03.21
13:26
между тем как получил и записал ктото еще успел записать
11 Вафель
 
19.03.21
13:27
(8) нужно ДО
12 Alex2411
 
19.03.21
14:45
(10) Исключено, в журнале регистрации смотрел. Я тесты делал на копии, в которой работали только эти два тсд.
Так работает
ДокОбъект = Объект.ДокРаскладка.ПолучитьОбъект();
ДокОбъект.Прочитать();

а вот так:
ДокОбъект = Объект.ДокРаскладка.ПолучитьОбъект();

Не работает, в чем разница??? разве когда я пишу ПолучитьОбъект() он мне не последнию версию возвращает????? По сути Прочитать() здесь лишнее.
13 vicof
 
19.03.21
14:58
14 Вафель
 
19.03.21
15:08
посмотри версии поле получить и после прочитать