AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Функционал
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.10.2022, 12:20   #1  
Mirta is offline
Mirta
Участник
 
12 / 52 (2) ++++
Регистрация: 23.11.2011
D365FO: GER Заказы со строками, проводками и картинками
В предыдущей статье рассказывалось как построить отчет по заказам со строками и проводками. Теперь в этот отчет выведем изображение продукта из его карточки.

Создаем дочернюю модель от Заказы, строки, проводки (TrainerITSalesOrders) и называем ее TrainerITSalesOrdersImage
В модели добавляем поля:

Название: 1.png
Просмотров: 79

Размер: 6.1 Кб

Нажмите на изображение для увеличения
Название: 2.png
Просмотров: 4
Размер:	36.9 Кб
ID:	13465

Идем в к.Сопоставить модель с источником данных

Нажмите на изображение для увеличения
Название: 3.png
Просмотров: 4
Размер:	37.5 Кб
ID:	13466

Добавляем Записи таблицы = SalesTable - это будут сами заказы на продажу
Добавляем записи таблицы = SalesLine - эта таблица будет использоваться для создания вычисляемого поля в SalesTable. Без добавления SalesLine как Записи таблицы в корень нельзя будет использовать переменную SalesLine в формуле вычиляемого поля. Это как объявление переменной в коде.
Здесь мы не будем пользоваться релейшеном для вытаскивания строк заказа, а явно создадим вычисляемое поле @SalesLine. Это позволит нам быстрее добираться до полей, релейшенов и методов SalesLine. К тому же я столкнулась с тем, что при использовании релейшенов получается такой уровень вложенности, что метод вытаскивания изображения для продукта не работает! Минус здесь только один - в формуле вычисляемого поля для фильтрации записей по входному параметру пользователя нам придется использовать функцию WHERE вместо FILTER. При использовании FILTER будет ошибка …

Создаем вычисляемое поле для строк заказа на продажу:

Нажмите на изображение для увеличения
Название: 4.png
Просмотров: 5
Размер:	44.2 Кб
ID:	13467

Называем поле $SalesLine
Формула для поля:

X++:
FILTER(SalesLine, SalesLine.SalesId=@.SalesId)
Получили такую картинку:
Нажмите на изображение для увеличения
Название: 5.png
Просмотров: 4
Размер:	23.8 Кб
ID:	13468

Нам потребуется от строки перейти к номенклатуре, чтобы получить из нее изображение. Поэтому добавим таблицу InventTable в корень модели.
Нажмите на изображение для увеличения
Название: 6.png
Просмотров: 4
Размер:	13.7 Кб
ID:	13469

Мы будем пользоваться статическим методом таблицы find, поэтому нам нет смысла вытаскивать записи из БД, достаточно типа Таблица.
Название: 7.png
Просмотров: 81

Размер: 13.1 Кб

Получили картинку:
Название: 8.png
Просмотров: 79

Размер: 10.9 Кб

Теперь добавляем вычисляемое поле в строки заказа:
Нажмите на изображение для увеличения
Название: 9.png
Просмотров: 5
Размер:	32.9 Кб
ID:	13472

Имя поля: $InventTable
Формула:

X++:
InventTable.'find()'(@.ItemId)
Это выч.поле будет возвращать нам номенклатуру строки.

Для следующего выч.поля нам потребуется метод класс ImageReference. Поскольку сам объект класса нам не нужен, добавляем просто Класс ImageReference
Нажмите на изображение для увеличения
Название: 10.png
Просмотров: 4
Размер:	14.1 Кб
ID:	13473

Название: 11.png
Просмотров: 79

Размер: 13.4 Кб

Теперь создаем выч.поле на строках заказа:
Нажмите на изображение для увеличения
Название: 12.png
Просмотров: 4
Размер:	28.2 Кб
ID:	13475

Имя поля $ImageReference
Формула

X++:
ImageReference.constructForPackedData(@.'$InventTable'.'productImageThumbnail()')
Получили картинку:
Нажмите на изображение для увеличения
Название: 13.png
Просмотров: 4
Размер:	31.1 Кб
ID:	13476

К выч.полю $InventTable добавим выч.поле $Documents, которое будет возвращать записи из таблицы вложений в продукту (изображение продукта хранится как вложение)
Нажмите на изображение для увеличения
Название: 14.png
Просмотров: 4
Размер:	32.1 Кб
ID:	13477

Имя поля $Documents
Формула

X++:
@.'<Relations'.'<Documents'
Получим картинку:
Нажмите на изображение для увеличения
Название: 15.png
Просмотров: 4
Размер:	27.2 Кб
ID:	13478

Связываем поля источников данных с полями модели:
Нажмите на изображение для увеличения
Название: 16.png
Просмотров: 4
Размер:	62.4 Кб
ID:	13479

Для поля ImageName пишем формулу:

X++:
IF(@.'$ImageReference'.parmImageType="Base64",
@.'$ImageReference'.parmImageData,"")
Она возвратит путь к картинке, если картинка есть

Для поля IsItemImagePresent пишем формулу:

X++:
IF(IsEmpty(@.'$InventTable'.'<Relations'.'<Documents'),FALSE,TRUE)
Она возвратит Истину, если есть вложение.

Для поля ItemImageAsContainer пишем формуду

X++:
@.'$InventTable'.'$Documents'.'getFileContentAsContainer()'
Она возвратит саму картинку.

Маппинг модели завершили. Сохраняем, закрываем. Модель переводим в статус Завершено.

Настраиваем формат.
Для формата необходимо подготовить шаблон.
Возьмем шаблон от предыдущей задачи Заказы, строки, проводки и изменим его.
Вставили под строкой заказа еще одну строчку, расширили ее, объединили первые две ячейки, вставили в них картинку с компьютера. Размер картинки уменьшили до размера ячейки. Сделали диапазон строки, назвали его ProductImage. Встали на картинку, пишем в правой верхней ячейке название ItemImage и нажимаем Enter. Диапазон SalesHeader расширяем на одну строчку вниз.
Нажмите на изображение для увеличения
Название: 17.png
Просмотров: 7
Размер:	101.8 Кб
ID:	13480

Обновим шаблон в формате TrainerITSalesOrdersImage

Встаем на диапазон ProductImage, на в.Сопоставление справа нажимаем кнопку с карандашиком и пишем формулу

X++:
@.IsItemImagePresent=TRUE
Нажмите на изображение для увеличения
Название: 18.png
Просмотров: 4
Размер:	65.7 Кб
ID:	13481

Такая настройка будет скрывать диапазон, если картинка отсутствует

Для ячейки ItemImage нажимаем Изменить формулу и пишем

X++:
IF(@.IsItemImagePresent, @.ItemImageAsContainer, Base64StringToContainer(""))
Получили картинку:
Нажмите на изображение для увеличения
Название: 19.png
Просмотров: 6
Размер:	87.7 Кб
ID:	13482

Проверка позволяет избежать ошибки привязки к формату, если картинки в продукте нет.
Нажмите на изображение для увеличения
Название: 20.png
Просмотров: 4
Размер:	65.7 Кб
ID:	13483

Формат сохраняем, завершаем.

В шаблон вместо картинки желательно поместить пустое изображение - чтобы оно не занимало места.

Последний раз редактировалось sukhanchik; 04.10.2022 в 12:36.
За это сообщение автора поблагодарили: EVGL (5), trud (10), raz (5), Raven Melancholic (5), smailik (2).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
D365FO: GER Заказы со строками и проводками Mirta DAX: Функционал 11 31.10.2022 00:19
d365technext: D365FO Interview Question Blog bot DAX Blogs 2 10.09.2021 10:52
AX2012, D365FO: Способы ограничения финансовых аналитик sukhanchik DAX: Функционал 7 09.03.2021 02:58
sertandev: How to receive D365FO push notifications using Azure Notification Hubs Blog bot DAX Blogs 0 04.07.2019 18:11
erconsult: Copy-paste with keyboard script 2: from Excel to D365FO Blog bot DAX Blogs 0 03.08.2018 11:12
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 08:18.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.