Цитата:
Сообщение от
Ilyaae
А можно подробней, чем реализовать это в АХ? Где пример посмотреть?
В Аксапте у каждой таблицы существуют методы. В том числе и Insert(),Update(),Delete(), которые и будут являться аналогами триггеров на SQL. Перекрывая их, Вы можете написать в них свой алгоритм, который отработает при каждом : добавлении записи - Insert(), обновлении - Update() и удалении - Delete().
Простейший пример можно увидеть посмотрев эти методы на таблице Справочника номенклатуры inventTable.
В методах Insert() и Update() автоматически проставляется краткое наименование номенклатуры :
X++:
void insert()
{
#OCCRetryCount
;
try
{
ttsbegin;
this.insertInventItemOrderSetup();
this.insertBOMTable();
this.setNameAlias();
super();
............
}
X++:
void update()
{
InventTable this_Orig = this.orig();
ItemGroupId itemGroup_Orig = this_Orig.ItemGroupId;
ForecastSales forecastSales;
ForecastPurch forecastPurch;
;
ttsbegin;
this.setNameAlias();
this.inventModelGroup().inventModelType().preUpdateInventTable(this);
super();
.............
}
В методе Delete() автоматически будут удалены спецификации по версиям этой номенклатуры :
X++:
public void delete()
{
BOMTable bomTable;
BOMVersion bomVersion;
BOMVersion bomVersion2;
;
ttsbegin;
if( !isConfigurationkeyEnabled(configurationkeynum(BOMVersion)) && this.inventItemType().canHaveBOM())
{
while select bomVersion
group by bomId
where bomVersion.ItemId == this.ItemId
notexists join bomVersion2
where bomVersion2.bomId == bomVersion.bomId &&
bomVersion2.ItemId != this.ItemId
{
delete_from bomTable
where bomTable.bomId == bomVersion.bomId;
}
}
super();
ttscommit;
}