Показать сообщение отдельно
Старый 06.05.2021, 10:01   #1  
axm2017 is offline
axm2017
Участник
 
1,758 / 292 (13) ++++++
Регистрация: 15.05.2017
О рукожо..ах (?). И немножко ER
В силу того что люди таки начали осваивать ER ( и довольно на удивление успешно, напоминая порой тетенек-бухгалтерш ака виртуозов Excel) приходится анализировать и их неудачи.

Одна из них оказалась связана с отчетом "Sales tax declaration info report for HU":

Кто то талантливый из видимо в MS (в терминах одного самокритичного коллеги работавшего на данную контору - см заголовок) не стал как обычно выводить название в параметры или использовать константы, смог как то обойти кодревью, проверки и втиснуть шедевр в класс SalesTaxDeclarationInformationReportService который как понимаю таки венгерский отчет но без всяких суффиксов.

Благодаря его столь решительному подходу попытки сделать свое в виде derive ов и прочего у консультантов обрекались на неудачу.

X++:
/// <summary>
    /// Called by service controller.
    /// </summary>
    /// <param name = "_dataContract">The report parameters.</param>
    [Microsoft.Dynamics.BusinessPlatform.SharedTypes.InternalUseOnlyAttribute]
    public void run(SalesTaxDeclarationInfoReportContract _dataContract)
    {
        dataContract = _dataContract;

        this.processReport();

        this.runER();
    }

    /// <summary>
    /// Called by service controller.
    /// </summary>
    private void runER()
    {
        ERIModelDefinitionParamsAction parameters = new ERModelDefinitionParamsUIActionComposite()
                    .add(
                        new ERModelDefinitionDatabaseContext()
                            .addTemporaryTable(this.getTmpTaxReport()))
                    .add(
                        new ERModelDefinitionDatabaseContext()
                            .addValue(tableNum(CompanyInfo), fieldNum(CompanyInfo, DataArea), curext()))
                   .add(
                        new ERModelDefinitionInputParametersAction()
                            .addParameter('ParameterReportMode', dataContract.parmReportMode()))
                    .add(
                        new ERModelDefinitionInputParametersAction()
                            .addParameter('model/ParameterFromDateRange',dataContract.parmTaxReportPeriodFromDate()))
                   .add(
                        new ERModelDefinitionInputParametersAction()
                            .addParameter('model/ParameterToDateRange', dataContract.parmTaxReportPeriodToDate()));

        // Call ER to generate the report.
        ERFormatMappingTable eRFormatMappingTable;
        select RecId from eRFormatMappingTable where eRFormatMappingTable.Name == "Sales tax declaration info report for HU";
        ERFormatMappingId formatMapping = eRFormatMappingTable.RecId;

        ERObjectsFactory::createFormatMappingRunByFormatMappingId(formatMapping)
            .withFileDestination(ERObjectsFactory::createFileDestinationBrowser())
                .withParameter(parameters)
                        .withCreatingObjectParameter(SalesTaxDeclarationInfoReportContract::parmERModelname(),
                                                     classStr(SalesTaxDeclarationInfoReportContract),
                                                     dataContract).run();
    }
Вопрос в том как это можно безболезненно и с минимумом кода поправить?