Поле Remain датасета ds_OfferingInMovement содержит null после открытия датасета

Добрый день.
После открытия датасета поле ds_OfferingInMovement.Remain содержит null вместо корректного значения. Значение у записи точно есть, проверял в клиенте, вытянув колонку [Остаток] из крестика в детали [Продукты] раздела [Склад]. Такое чувство, что поле Remain инициализируется в момент вытягивания соответствующей колонки в гриде. Как получить корректное значение данного поля при открытии датасета?

var ds = Services.GetNewItemByUSI('ds_OfferingInMovement');
ApplyDatasetFilter(ds, 'ID', '{7C0709E9-5EB9-4D1A-B313-8F3A583FD063}', true);
ds.Open();
var val = ds.Values('Remain');
debugger;

Нравится

5 комментариев

Здравствуйте.
Это вычисляемое поле, соответственно значение не хранится в таблице БД, а вычисляется на событии OnDatasetCalcFields и хранится именно в датасете, пока он открыт.
Посмотрите данное событие, а именно то, как вычисляется данное поле, и продублируйте логику.

Здравствуйте.
Нет, это не вычисляемое поле. Тип поля в датасете - "дробное", в sq значение поля получается подзапросом.

Олег, а в sq это поле отмечено галочкой всегда выбирать в запросе? И также поставьте галочку напротив данного поля, чтобы оно всегда выбиралось, т.к. по умолчанию - оно отключено.

Действительно, проблема была в том, что в запросе колонка Remain была отключена. Но откуда тогда в клиенте берется значение при вытягивании Остатка из крестика?

Олег, все просто - при вытягивании колонки в реестр - колонка включается.

Отключили её, чтобы не всегда выполнять перерасчет, и нагружать БД.

Показать все комментарии