![]() |
#7 |
Участник
|
Общая логика работы всех оборотно-сальдовых ведомостей в Ax2009 выглядит примерно так
К пункту меню привязана форма RLedgerSheet В событии init формы RLedgerSheet создается экземпляр класса наследника от RLedgerSheetEngine, который открывает диалог с пользователем для установки ряда настроек и фильтров для последующего расчета. После установки настроек пользователем, если была нажата кнопка «Ок», то выполняется ряд расчетов в этом же классе. А, кроме того, создается и запускается экземпляр класса наследника от RLedgerSheetServer, который формирует и хранит список записей по документам-источникам и суммовые показатели по этим документам. X++: // init формы RLedgerSheet // Создается класс-наследник от RLedgerSheetEngine rLedgerSheetEngine = RLedgerSheetEngine::construct(element.args()); super(); // Диалог с пользователем if (! rLedgerSheetEngine.prompt()) { // Если нажади "Отмена", то закрываем форму this.close(); return; } // Передаем в класс ссылку на объект ListView на форме rLedgerSheetEngine.parmFormListControl(turnoverAmount); // Собственно выполнение расчета rLedgerSheetEngine.run(); X++: this.initFieldsData(); this.initValuesData(); this.initValuesData() – это метод, в котором можно инициализировать переменные. Как правило, не используется. Предполагается, что по умолчанию все переменные пустые, а пользователь их заполняет, если необходимо Метод run() перекрыт в классе наследнике RLedgerSheetClient. Если убрать «обвязку», то имеем следующее X++: this.initAccounts(); // Инициализация this.createRLedgerSheetServer(); // Создание экземпляра класса RLedgerSheetServer для расчета this.executeRLedgerSheetServer(); // Собственно расчет this.getDataFromServer(); // перекачка данных из расчетного класса в текущий this.initListView(); // Формирование столбцов объекта формы ListView this.fetchNextRows(); // Заполнение строк объекта формы ListView this.setItem(); // включение/выключение ряда объектов и установка фокуса X++: rLedgerSheetServer = RLedgerSheetServer::construct(this.parmRLedgerSheetType()); rLedgerSheetServer.initParameters(this.queryRun(), this.getParmContainer()); rLedgerSheetServer.run(this.initRunQuery()); this.queryRun() – настроенный пользователем QueryRun this.initRunQuery() – если не перекрыт, то queryRun.query() RLedgerSheetEngine::Construct(args). Определяет, какие именно классы-наследники от RLedgerSheetEngine и RLedgerSheetServer будут созданы. this.getParmContainer() – контейнер, содержащий список переменных с настройками пользователя X++: return [ currencyType, //Тип валюты, в которой выполнять расчет (основная, вторичная, указанная) deleteZero, //Из диапазона расчета исключить даты, не имеющие ни одной заявки на оплату showSumAccount, //Отображать строки с итоговыми суммами dimensionCriteria, //Финансовые аналитики fromDate, //Начальная дата диапазона toDate, //Конечная дата диапазона operationsTax, //По какому уровню рассчитывать бухгалтерское сальдо (Base Enum) currencyCode, //Код валюты, в которой выполнять расчет, если currencyType = указанная selectedFieldsOrder //Выбранные поля сортировки (поставщик, договор, счет ГК) ];
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
|
За это сообщение автора поблагодарили: Ruff (5). |