Показать сообщение отдельно
Старый 12.08.2020, 11:41   #4  
oleggy is offline
oleggy
Участник
 
256 / 36 (2) +++
Регистрация: 03.12.2019
Адрес: Россия
Цитата:
Сообщение от mazzy Посмотреть сообщение
нужно найти какая сволочь у вас берет Query и записывает его в QueryRun.Query, полностью игнорируя пользователя, и оторвать ему конечности. Даю маячок - это вполне может быть код от Майкрософта.

В любом случае - в runTime, если хотите сохранить настройки пользователя, работайте только с QueryRun.Query.
С Query работайте только в методе init после super когда сам объект уже создан, но еще не выполнен run для формы
Приведу полный код этого метода. Можете подсказать в каком месте Query записывает в QueryRun.Query ?
X++:
void changeValue()
{
    Common                  recordLocal;
    Args                    args = element.args();
    Object                  dS;

    DictField               dictField;

    Dialog                  dialog = new Dialog("@GEE28566");
    DialogField             df ;
    DialogField             dfUseDoUpdate;
    FormComboBoxControl     formControl;
    Object                  formControlObject;
    FormCheckBoxControl     formControlCheck;
    boolean                 isUseDoUpdate;
    RecordInfoEnumHandler enumHelper;
    boolean                   dialogLaunched;
    boolean                   dialogClosedOk;
    ;

    recordLocal    = args.record();
    dictField = new DictField(recordLocal.TableId, fieldname2id(recordLocal.TableId, tmpDevRecordInfo.FieldName));

    //if(dictField.typeId() == extendedTypeNum(Dimension))
        dictField = new DictField(recordLocal.TableId, fieldExt2Id(dictField.id()));
    if (dictField.type() != Types::Enum)
    {
        dfUseDoUpdate = dialog.addFieldValue(typeid(NoYesId), false, "@RTE121", "@RTE122");
        df  = dialog.addFieldValue((dictField.typeId() << 16) | dictField.type(), recordLocal.(dictField.id()));
    }
    else
    {
        formControlCheck = dialog.form().design().addControl(FormControlType::CheckBox, 'CheckBoxctrl');
        formControlCheck.label("@RTE121");

        formControl = dialog.form().design().addControl(FormControlType::ComboBox, 'enumctrl');
        formControl.enumType(dictField.enumId());
        formControl.selection(recordLocal.(dictField.id()));

        enumHelper = new RecordInfoEnumHandler();
        enumHelper.parmDialog(dialog);
        enumHelper.prepareControls();
        dialog.doRun();
        dialog.formRun().controlMethodOverload(true);
        dialog.formRun().controlMethodOverloadObject(enumHelper);
        dialog.wait();
        dialogClosedOk = dialog.closedOk();
        dialogLaunched = true;
    }

    //if (dialog.run())
    if(! dialogLaunched)
    {
        dialogClosedOk = dialog.run();
    }

    if (dialogClosedOk)
    {
        if (formControl)
        {
            formControlObject    = dialog.formRun().control(formControl.id());
            recordLocal.(dictField.id()) = formControlValue(formControlObject, Types::Enum);
            //inputValue           = formControlValue(formControlObject, Types::Enum);
            formControlObject    = dialog.formRun().control(formControlCheck.id());
            isUseDoUpdate        = formControlValue(formControlObject, Types::Enum);
        }
        else
        {
            recordLocal.(dictField.id()) = df.value();
            //inputValue      = df.value();
            isUseDoUpdate   = dfUseDoUpdate.value();
        }

        //recordLocal.(dictField.id()) = inputValue;

        ttsbegin;
        DevRecordInfoHistory::writeLogUpdate(recordLocal,
                                                 dictField.id(),
                                                 isUseDoUpdate);
        if (isUseDoUpdate)
        {
            recordLocal.doUpdate();
        }
        else
        {
            recordLocal.update();
        }

        ttscommit;
        tmpSysRecordInfoLocal.data(TmpDevRecordInfo);

        if(dictField.typeId() == extendedTypeNum(Dimension))
            element.close();
        else
        {
            tmpSysRecordInfoLocal.FieldValue = strFmt('%1', recordLocal.(dictField.id()));
            tmpSysRecordInfoLocal.update();
        }
        tmpSysRecordInfoLocal.data(TmpDevRecordInfo);
        TmpDevRecordInfo_ds.executeQuery();
        TmpDevRecordInfo_ds.findRecord(tmpSysRecordInfoLocal);

        dS = recordLocal.dataSource();
        dS.reread();
        dS.refresh();
    }
}