04.10.2022, 12:20 | #1 |
Участник
|
D365FO: GER Заказы со строками, проводками и картинками
В предыдущей статье рассказывалось как построить отчет по заказам со строками и проводками. Теперь в этот отчет выведем изображение продукта из его карточки.
Создаем дочернюю модель от Заказы, строки, проводки (TrainerITSalesOrders) и называем ее TrainerITSalesOrdersImage В модели добавляем поля: Идем в к.Сопоставить модель с источником данных Добавляем Записи таблицы = SalesTable - это будут сами заказы на продажу Добавляем записи таблицы = SalesLine - эта таблица будет использоваться для создания вычисляемого поля в SalesTable. Без добавления SalesLine как Записи таблицы в корень нельзя будет использовать переменную SalesLine в формуле вычиляемого поля. Это как объявление переменной в коде. Здесь мы не будем пользоваться релейшеном для вытаскивания строк заказа, а явно создадим вычисляемое поле @SalesLine. Это позволит нам быстрее добираться до полей, релейшенов и методов SalesLine. К тому же я столкнулась с тем, что при использовании релейшенов получается такой уровень вложенности, что метод вытаскивания изображения для продукта не работает! Минус здесь только один - в формуле вычисляемого поля для фильтрации записей по входному параметру пользователя нам придется использовать функцию WHERE вместо FILTER. При использовании FILTER будет ошибка … Создаем вычисляемое поле для строк заказа на продажу: Называем поле $SalesLine Формула для поля: X++: FILTER(SalesLine, SalesLine.SalesId=@.SalesId) Нам потребуется от строки перейти к номенклатуре, чтобы получить из нее изображение. Поэтому добавим таблицу InventTable в корень модели. Мы будем пользоваться статическим методом таблицы find, поэтому нам нет смысла вытаскивать записи из БД, достаточно типа Таблица. Получили картинку: Теперь добавляем вычисляемое поле в строки заказа: Имя поля: $InventTable Формула: X++: InventTable.'find()'(@.ItemId) Для следующего выч.поля нам потребуется метод класс ImageReference. Поскольку сам объект класса нам не нужен, добавляем просто Класс ImageReference Теперь создаем выч.поле на строках заказа: Имя поля $ImageReference Формула X++: ImageReference.constructForPackedData(@.'$InventTable'.'productImageThumbnail()') К выч.полю $InventTable добавим выч.поле $Documents, которое будет возвращать записи из таблицы вложений в продукту (изображение продукта хранится как вложение) Имя поля $Documents Формула X++: @.'<Relations'.'<Documents' Связываем поля источников данных с полями модели: Для поля 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 расширяем на одну строчку вниз. Обновим шаблон в формате TrainerITSalesOrdersImage Встаем на диапазон ProductImage, на в.Сопоставление справа нажимаем кнопку с карандашиком и пишем формулу X++: @.IsItemImagePresent=TRUE Такая настройка будет скрывать диапазон, если картинка отсутствует Для ячейки ItemImage нажимаем Изменить формулу и пишем X++: IF(@.IsItemImagePresent, @.ItemImageAsContainer, Base64StringToContainer("")) Проверка позволяет избежать ошибки привязки к формату, если картинки в продукте нет. Формат сохраняем, завершаем. В шаблон вместо картинки желательно поместить пустое изображение - чтобы оно не занимало места. Последний раз редактировалось sukhanchik; 04.10.2022 в 12:36. |
|
|
За это сообщение автора поблагодарили: EVGL (5), trud (10), raz (5), Raven Melancholic (5), smailik (2). |
Теги |
electronic reporting, er, ger |
|
|