Мне нужно:
1. Выполнять различный лукап в зависимости от значения друго поля. Срослось.
2. Разрешать выбор нескольких значений. Посмотел, как делается на SysQueryForm, сделал, не работает. Заменяет другое значение при повторном выборе:
X++:
protected void dialogAccountRelation_lookup()
{
SysLookup sysLookup;
Query query=new Query();
QueryBuildDataSource queryBuildDataSource;
FormControl _formcontrol=dialog.curFormControl_RU();
TmpSysQuery TmpSysQuery;
boolean rn=false;
;
oldvalue=_formcontrol.valueStr();
dialog.dialogOnClient_RU().updateServer();
if(this.priceModule(dialogRelation.value())==ModuleInventCustVend::Vend){
switch(dialogAccountCode.value()){
case TableGroupAll::All:break;
case TableGroupAll::GroupId:
queryBuildDataSource=query.addDataSource(tablenum(VendGroup));
TmpSysQuery.initValue();
TmpSysQuery.Table_Id=tablenum(VendGroup);
TmpSysQuery.Field_Id=fieldnum(VendGroup,VendGroup);
TmpSysQuery.insert();
rn=true;
break;
case TableGroupAll::Table:
queryBuildDataSource=query.addDataSource(tablenum(VendTable));
TmpSysQuery.initValue();
TmpSysQuery.Table_Id=tablenum(VendTable);
TmpSysQuery.Field_Id=fieldnum(VendTable,AccountNum);
TmpSysQuery.insert();
rn=true;
break;
}
if(rn){
syslookup::lookupRange(_formcontrol,TmpSysQuery,query);
dialog.updateClient(dialog.dialogOnClient_RU());
}
} else info("Поддерживается только для модуля поставщиков");
Переделал midified, чтобы отработать ситуацию. В нем оказалось, что старое значение сохраняется в это методе:
X++:
protected void dialogAccountRelation_modified(){
;
dialog.dialogOnClient_RU().updateServer();
if(OldValue) dialogAccountRelation.value(OldValue+dialogAccountRelation.value());
dialog.updateClient(dialog.dialogOnClient_RU());
}
Т.е. выбирал в первый раз 001, поставил "|", сделал повторный лукап, выбрал 002, на выходе в значении поля - не "001|002", как ожидалось, а "001|001|"
Не подскажете, где косяк?