Показать сообщение отдельно
Старый 12.09.2022, 19:47   #2  
Mirta is offline
Mirta
Участник
 
12 / 52 (2) ++++
Регистрация: 23.11.2011
Теперь добавлям входной параметр для фильтрации заказов по клиенту
Нажмите на изображение для увеличения
Название: 20.png
Просмотров: 21
Размер:	23.3 Кб
ID:	13445

Указываем имя и ЕДТ
Нажмите на изображение для увеличения
Название: 21.png
Просмотров: 21
Размер:	27.3 Кб
ID:	13446

Здесь же можем управлять формулами для опций Только чтение и Значение по умолчанию (эти две опции появились только в версии 10.0.27) для вх.параметра

Теперь создаем вычисляемое поле FilterCustAccount
Нажмите на изображение для увеличения
Название: 22.png
Просмотров: 21
Размер:	38.4 Кб
ID:	13447

C формулой

Код:
IF(CustAccount="",SalesTable,FILTER(SalesTable, SalesTable.CustAccount = CustAccount))
Использование проверки позволит не фильтровать заказы по клиенту, если клиент не задан.

Теперь свяжем выч.поле FilterCustAccount слева и SalesOrders справа
На вопрос изменить ли привязку ответим "Да"
Нажмите на изображение для увеличения
Название: 23.png
Просмотров: 26
Размер:	39.6 Кб
ID:	13448

Сохраняем изменения, завершаем модель

Подготовим шаблон для выгрузки отчета
У нас должно быть три диапазон - на проводки, на строки и на весь заказ в целом.
Нажмите на изображение для увеличения
Название: 24.png
Просмотров: 38
Размер:	66.5 Кб
ID:	13449

И именованные ячейки для каждого поля:
Нажмите на изображение для увеличения
Название: 25.png
Просмотров: 22
Размер:	6.7 Кб
ID:	13450

Создаем формат для нашей модели, назовем его TrainerITSalesOrdersFormat, загрузим в него наш файл
У нас создадутся диапазоны, поддиапазоны и ячейки в соответствии с шаблоном.
Переходим на вкладку Сопоставление и связываем диапазоны со списками записей, а ячейки с полями.
Получим картинку:
Нажмите на изображение для увеличения
Название: 26.png
Просмотров: 29
Размер:	96.3 Кб
ID:	13451

Сохраняем и завершаем формат.

В итоге у нас получается вот такая выгрузка:
Нажмите на изображение для увеличения
Название: 27.png
Просмотров: 20
Размер:	107.4 Кб
ID:	13452

Правда, это уже в формате pdf (автоматическое преобразование). Но в Excel выглядит идентично.

И наконец создадим класс для выгрузки нашего отчета программно, а не из конфигурации эл.отчетности

X++:
using Microsoft.Dynamics365.LocalizationFramework;

internal final class SalesOrdersHeaderLines
{
    static void main(Args  _args)
    {
        SalesOrdersHeaderLines  salesOrdersHeaderLines = new SalesOrdersHeaderLines();
        CustTable     custTable = _args.record();
        CustAccount   custAccount = custTable.AccountNum;
        salesOrdersHeaderLines.run(custAccount);
    }

    public void run(CustAccount   _custAccount)
    {
        ERFormatMappingTable    formatMapping;
        ERFormatMappingId       formatMappingId;
        select firstonly formatMapping
            where formatMapping.Name == "TrainerITSalesOrdersFormat";
        formatMappingId = formatMapping.Format;
        const str modelStr = "model";
        const str custAccountStr = "CustAccount";

        try
        {
            ERModelDefinitionInputParametersAction  eRModelDefinitionInputParametersAction = new ERModelDefinitionInputParametersAction();
            eRModelDefinitionInputParametersAction.addParameter(ERPath::Combine(modelStr, custAccountStr), _custAccount);
            ERObjectsFactory::createFormatMappingRunByFormatMappingId(formatMappingId)
                .withParameter(eRModelDefinitionInputParametersAction)
                .withFileDestination(ERObjectsFactory::createFileDestinationBrowser()).run();
        }
        catch
        {
            error("Ошибка");
        }
    }

}
Теперь данный класс можно как запустить самостоятельно, так и привязать к MenuItem, вывести этот MenuItem на расширение формы клиентов и получить отчет, показывающий заказы для выбранного клиента.

Последний раз редактировалось Mirta; 12.09.2022 в 19:50.
За это сообщение автора поблагодарили: EVGL (10), skuull (5).