Имя: Пароль:
1C
1С v8
Ошибка получения поля ID при записи во внешний источник данных.
0 WizaXxX
 
31.10.16
11:08
Добрый день. проблема в следующем, есть внешняя SQL таблица, у неё есть поле id(автоинкремент). Пытаюсь в эту таблицу из 1С записать данные, а потом узнать какой ID получился. Так вот периодически получается ситуация когда, по факту данные в таблицу записываются, но вот прочитать я их не могу.

НоваяСтрока.УстановитьИзменяемыеПоля(МассивИзменяемыхПолей);
Попытка
НоваяСтрока.Записать();
Исключение
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки());
Возврат Неопределено;
КонецПопытки;

НоваяСтрока.Прочитать();

Возврат НоваяСтрока.id;
Иногда id возвращается просто 0. Таблица объектная, поле id установлено как поле ключа.

Платформа : 8.3.8.2088

SQL Server : 2012

Подскажите пожалуйста, в чем может быть проблема? Какой то зависимости в появлении проблемы не обнаружил(
1 Живой Ископаемый
 
31.10.16
11:18
запись выполняется асинхронно.
2 WizaXxX
 
31.10.16
12:18
(1) а есть какой метод ожидания, или что то подобное?
3 Живой Ископаемый
 
31.10.16
12:22
ожидание есть, но это а) тупо б) неправильно.
4 WizaXxX
 
31.10.16
12:26
(3) Подскажи пожалуйста каким образом тогда лучше это реализовать?
У меня в эту таблицу идет последовательное добавление новых записей, в большом количестве, и далее мне обязательно нужен этот идентификатор для отслеживания изменений.

И еще а то что запись именно в эту таблицу выполняется в асинхронном режиме, это настройка СУБД, или настройка СУБД именно для это таблицы? И вообще этим можно управлять??
5 Живой Ископаемый
 
31.10.16
12:31
хм... Не, я не знаю, в(1) - всего лишь гипотеза, которая может объяснить поведение описанное в (0)
Чтобы подтвердить ее правильность - можно например перед НоваяСтрока.Прочитать(); попробовать вставить какую-то задержку.

Можно ли управлять синхронностью/асинхронностью записи в СКЛ-таблицы - хз и на каком уровне - пока хз.
6 WizaXxX
 
31.10.16
13:41
(5) Что то я по ИТС полазал и не смог найти ни строчки про то что запись выполняется (или может выполнятся) асинхронно(
7 Живой Ископаемый
 
31.10.16
15:47
Можно еще
=====
Выполнение оператора Записать() приведёт к тому, что сначала будет вызван обработчик события ПередЗаписью, затем выполнена физическая запись в таблицу внешнего источника (INSERT), затем будет вызван обработчик события ПриЗаписи.

С ключевым полем таблицы внешнего источника вы можете поступать следующим образом. Если ключевое поле доступно для изменения, то тогда вы «вручную» задаёте его значение перед записью. Если изменение ключевого поля запрещено, то платформа самостоятельно получит ключ в INSERT или непосредственно после. Вы можете вмешаться в этот процесс с помощью метода УстановитьСсылкуНового() до физической записи (в обработчике события ПередЗаписью) или непосредственно после физической записи (в обработчике события ПриЗаписи).
====

Опрашивать это поле - АйДи в обработчике "ПриЗаписи"
Добавь подписку, и поставь там точку останова или запись в ЖР