Помимо привычных отчетов, содержащих итоговые данные, а также отчетов шапка-строки по какому-либо документу, иногда возникает необходимость построить отчет по списку документов, каждый из которых содержит шапку и строки. Такой отчет можно построить с помощью GER достаточно легко и быстро.
Рассмотрим быстрый способ создания отчета с тройной вложенностью. Возьмем для примера заказы на продажу, строки и проводки.
Создаем модель TrainerITSalesOrders. Добавляем корень SalesReport.
Создаем поля модели:
Lines является дочерним узлом для SalesOrders
InventTrans является дочерним узлом для Lines
Создаем сопоставление модели
По этой кнопке создается сопоставление модели с БД. Можно в дереве модели создать отдельно сопоставление. Это лучше тем, что до него быстрее добираться из дерева (не заходя в модель), и к тому же если мы захотим использовать эту модель для импорта или для других экспортов, то сопоставление лучше чтобы было отдельно, ибо тогда будет галка Использовать сопоставление по умолчанию. Ну пока нам хватит и такого сопоставления.
Для выборки данных из связанных таблиц мы будем пользоваться отношениями на таблицах в АХ (релейшенами).
Добавляем в качестве источника данных Записи таблицы SalesTable
Ставим галку Запросить запрос - это позволит увидеть расширенный фильтр в диалоге вызова отчета. И галку Точка интеграции - для возможности вызова отчета через пункт меню.
Для преобразования ЕНУМа Status в заказе добавим Перечисление АХ:
Есть 3 способа преобразования перечисления:
1. В модель добавляется только перечисление АХ, далее оно преобразовывается в явно прописанные строковые значения с помощью формул
2. В модель добавляется перечисление АХ и перечисление модели данных. Затем с помощью формулы значениям перечисления АХ сопоставляются значения перечисления модели данных.
3. В модель добавляется перечисление АХ, а также вычисляемые поля, позволяющие с помощью формул преобразовать значение ЕНУМа в его аксаптовую метку. Этот способ самый сложный, но и самый результативный - даже если перечисление изменится в АХ, в GER его значения менять не придется.
Мы воспользуемся первым способом.
Связываем источники данных с полями модели:
Поле Worker связываем с полем из релейшенов:
Из DirPerson_FK берем поле Name
Для поля Status задаем формулу
Код:
CASE(@.SalesStatus,
Enums.SalesStatusEnum.Canceled, "Отменено",
Enums.SalesStatusEnum.Delivered, "Доставлено",
Enums.SalesStatusEnum.Invoiced, "Выставлен счет",
Enums.SalesStatusEnum.None, "",
Enums.SalesStatusEnum.Backorder, "Открытый заказ"
)
Для строк заказа возьмем SalesLine из релейшенов таблицы SalesTable
Связываем SalesLine и Lines справа
Через InventTransOrigin
Обращаемся к InventTrans и связываем с InventTrans справа
Номер лота берем из InventTransOrigin
Кол-во - из InventTrans
Складские аналитики возьмем из InventDim