Давно известно, что когда код вынужденно разбит на кучу процедур и потому состоит из одних вызов, он вызывает только вопросы.
Ну, попробуем:
X++:
AxaptaRecord axRecord = AX.CreateAxaptaRecord("PST_Inventory_ItemProperties");
Int64 RecId = 0;
// определить тип данных
InventoryDataTypes DataType = GetInventoryDataType(PropertyType);
// конвертировать значение из строки (если нужно) и установить в нужное поле
string FieldName;
object DBPropertyValue = ConvertToInventoryDataType(PropertyType, PropertyValue, AssociatedLink, out FieldName);
if (DBPropertyValue == null)
return 0;
axRecord.set_Field(FieldName, DBPropertyValue);
if (FieldName != "Link" && AssociatedLink != null)
axRecord.set_Field("Link", AssociatedLink);
else if (FieldName != "StringValue" && Convert.ToString(DBPropertyValue) != PropertyValue)
axRecord.set_Field("StringValue", PropertyValue);
// заполнить прочие нужные поля записи
axRecord.set_Field("ItemType", (int)ItemType);
axRecord.set_Field("ItemRecId", ItemRecId);
axRecord.set_Field("DataSourceId", DataSourceId);
axRecord.set_Field("PropertyType", PropertyType.ID);
// поскольку мы не получаем группы отдельно (только вместе с элементами),
// то указываем группу, только если она только что загружена
PropertyTypeGroup PropertyGroup = (PropertyTypeGroup)PropertyGroups[Convert.ToInt64(PropertyGroupId)];
if (PropertyGroup != null)
{
axRecord.set_Field("PropertyGroupId", PropertyGroup.RecordID);
}
axRecord.set_Field("LanguageId", LanguageId);
try
{
if (axRecord.ValidateWrite())
{
axRecord.Write();
RecId = (Int64)axRecord.get_Field("RecId");
}
}
catch (Exception ExceptionData)
{
throw ExceptionData;
}
Сорри, я заменил первый пример, поскольку в этом месте чаще выпадает.
Комментарии это код из отдельной процедуры, метод TTSBegin вызывается До нее, а TTSCommit -после.
При ошибке сообщается, что она произошла в ValidateWrite(), но на таблице нет ни отношений, ни уникальных индексов, ни перекрытого метода ValidateWrite(). Обязательные поля заполнены все.