Добрый день!
Подскажите, пожалуйста, возможно ли извлечь изображения из пакетов раздела Images?
фото

Нравится

2 комментария

Добрый день!

В общем данный вопрос обсуждался в этом топике - http://www.community.terrasoft.ru/forum/topic/12709
Ответ на свой вопрос можете найти в этом комментарии - http://www.community.terrasoft.ru/forum/topic/12709#comment-54014

Дмитрий, спасибо большое!

Показать все комментарии

Добрый день!
Стоит задача: добавить в реестр детали продуктов изображение восклицательный знак возле записи, у которой выполняется некое условие, наподобие функционала в подборе продуктов.
Как это можно реализовать?
Версия 7.6

Нравится

1 комментарий

Здравствуйте, Иван!

В разделе "Продажи" есть колонка "Настроение", которая выводится в реестр в виде изображения.

Вы можете посмотреть реализацию и сделать по аналогии.

Показать все комментарии

Доброго времени суток!

Столкнулся с проблемой: заказчику необходим Excel-отчет. Отчет готов, но в его шапке необходимо разместить логотип компании. Само изображение считывается из БД, записывается в stream примерно вот так:

var ImageStream = new ActiveXObject('ADODB.Stream');
ImageStream.Open();
Image.SaveToStream(ImageStream);

И теперь самое главное, каким образом поместить изображение в WorkBook.ActiveSheet? Находил способы считывания файла с ФС, но это накладывает свои неудобства - не у всех есть какая либо папка, или может быть закрыт доступ к ней.

Нравится

2 комментария

Спасибо за Ваше обращение. Мы зарегистрировали его в Службе технической поддержки и назначили специалиста, который сможет Вас компетентно проконсультировать по данному вопросу.

Здравствуйте, напрямую поместить изображение в WorkBook.ActiveSheet из БД возможности нет. Вариант решения - сохранять файл изображения во временную папку, а затем, использовать его.

Показать все комментарии

Доброго времени суток!

Появилась задача отображать в карточке контакта его фото.
Смотрю в сторону поля загрузки файла и области изображения. Вопрос состоит в том, как по событию изменений данных в поле загрузки файла вставить это изображение в область и в базу? Ну и соответственно в при следующем открытии уже считывать его с базы?

Нравится

13 комментариев

Constantine, прикрепила во вложенном файле пример реализации.

"Бондарь Наталия" написал:Constantine, прикрепила во вложенном файле пример реализации.

Простите за глупый вопрос. А зачем в одном методе подряд 3 раза вызывать установку свойства:

controlImage.UsePrimaryImageColumn = false;
controlImage.UsePrimaryImageColumn = true;
controlImage.UsePrimaryImageColumn = false;

Одного раза вполне достаточно, чтобы свойство UsePrimaryImageColumn установилось в false.
Или я что-то неправильно понял???

"Бабуков Андрей Александрович" написал:
Бондарь Наталия пишет:

Constantine, прикрепила во вложенном файле пример реализации.

Простите за глупый вопрос. А зачем в одном методе подряд 3 раза вызывать установку свойства:

controlImage.UsePrimaryImageColumn = false;

controlImage.UsePrimaryImageColumn = true;

controlImage.UsePrimaryImageColumn = false;

Одного раза вполне достаточно, чтобы свойство UsePrimaryImageColumn установилось в false.

Или я что-то неправильно понял???

Когда-нибудь останется работа только для машин и IT'шников :)

меня тоже интересует этот момент:smile:

Constantine, Андрей,

установите единожды свойство UsePrimaryImageColumn в false.
Код писался давно, поэтому сейчас не могу сказать по какой причине 3 раза вызывается установка свойства.

К сожалению, с кодом оказались проблемы.

При первой загрузке файла - все отлично и прекрасно, но дальше начинаются неприятности....
Если загрузить новый файл - в базе происходит обновление, но файл отображается предыдущий.... Переоткрытие карточки не приносит никаких плодов. При этом, если зайти с другого браузера - файл подтягивается новый. Более того - очищаем поле с картинкой, файл продолжает отображаться....
Переоткрываем карточку - пусто, отлично! Загружаем третье фото - барабанная дробь.... видим самое первое изображение:smile:

По сему родились вопросы: как я понимаю файл висит где-то в кэше, каким образом его оттуда удалять при замене файла, либо вообще заставить туда не ложиться (в идеале); каким образом отображать свежезагруженное фото и соответственно очищать при удалении?

Заранее премного благодарен

Добрый день, Константин!

Если нужно очистить профиль в BPMonline, то это можно сделать в конфигурации:

Но судя по описанию, то профиль нужно очищать в браузере.

"Арсений Белецкий" написал:

Добрый день, Константин!

Если нужно очистить профиль в BPMonline, то это можно сделать в конфигурации:

Но судя по описанию, то профиль нужно очищать в браузере.

С уважением,

Белецкий Арсений

Группа компаний Terrasoft


Арсений, возможно я не совсем правильно разъяснил ситуацию. Проблема именно в том, что я создал поле Фото в карточке Контакта. Обработка отображения и загрузки файла выполнена по аналогии с инструкцией Наталии. Выше я описал поведение этого поля, когда клиент работает с системой. Вопрос в том, каким образом предотвратить такое неадекватное поведение?

Да и оба способа, указанные Вами, не помогли, как отображалась самая первая картинка, так и отображается, хотя в базе храниться уже совершенно другая.

Константин, попробуйте открыть карточку ContactEditPage в дизайнере страниц (в конфигурации), открыть ее процесс, и в событии ParentPageLoadCompleteAfterBaseScript

дописать предпоследней строчку кода InitializeContactPhoto();

В примере, который дала Наталья есть следующая строка

Page.AddScript(string.Format("{0}.setImage({1});", Page.ContactPhotoImage.ClientID, Json.Serialize(controlImage, new ControlImageJsonConverter())));

не понимаю Json-это namespace или класс JsonSerializer

Ольга, Json это формат обмена данными между клиентом и сервером (http://flexjson.sourceforge.net/).

просто компилятор ругается на эту строчку, я подключила Terrasoft.UI.WebControls.Utilities.Json.Converters, Newtonsoft.Json
всё равно пишет "Имя Json отсутствует в текущем контексте", вот и пытаюсь понять, где взять и что ещё подключить

Ольга, а Terrasoft.Common.Json подключен?

подключила, не ругается...спасибо

Показать все комментарии

Для того, чтобы добавить новую или изменить существую иконку к разделу , следует сделать следующее (на примере версии 3.4.0):

1. Запустить Terrasoft Administrator
2. Открыть сервис il_MainWorkspace

1

3. В левой части в дереве изображений можно добавить новое изображение либо заменить существующее:

1

4. Для загрузки нового изображения следует воспользоваться иконкой загрузки:

1

Изображения к разделу могут быть четырех типов:
• Hot – активная иконка раздела (при наведении курсора мышки)
• Normal – обычное отображение иконки
• Hot_16 – активная иконка раздела при выборе раздела
• Normal_16 - обычное отображение иконки при выборе раздела

1

Пример иконок для разного типа показан ниже (на примере раздела «Контрагенты»):

1

Стандартный размер иконки раздела – 39х39 пикселей, при выборе раздела – 16х16 пикселей.
Пример отображения иконки выбора раздела Вы можете увидеть при работе с мастером рабочих мест:

1

Нравится

Поделиться

5 комментариев

Добрый день!

Не совсем понятно, как добавить иконку для нового раздела. К примеру, скопировать иконку другого раздела. подскажите, пожалуйста.

Лена, подготовила для Вас инструкцию по добавлению иконки для раздела (во вложении).

Спасибо большое за инструкцию. Правда, не понятен вот этот пункт:

"Бондарь Наталия" написал:
Затем используя опцию «Открыть» панели инструментов данного элемента сервиса, добавить в Terrasoft созданное ранее изображение.

Не вижу опцию "Открыть", да и саму панель инструментов.

И рисунок обязательно новый создатвать или можно скопировать (не используюя граф. редакторы) рисунок другого раздела?

На скриншоте выделила опцию "Открыть":

/system/files/1_128.png

Чтобы скопировать рисунок другого раздела, необходимо:
- Сохранить изображение другого раздела в файл:
/system/files/2_70.png
- Затем создать новый элемент в il_Main и загрузить сохраненное изображение из предыдущего пункта.

Спасибо. Теперь, всё удалось.

Показать все комментарии

Здравствуйте, уважаемые коллеги!

Столкнулся с ситуацией: требуется вставить в ImageDataСontrol на карточке картинку из буфера обмена. Не важно, напрямую или через временный файл. Я испытал три различных способа, но все три - безуспешно:

http://community.terrasoft.ua/blogs/6286

Подскажите, пожалуйста, где я ошибся; возможно, кто-то уже решил подобную задачу. Версия 3.2.1.58

Нравится

3 комментария

Судя по Вашему блогу, данные в датасет записались. А если попробовать переприсвоить DataField для контрола картинки?

edtScreenShot.DataField = System.EmptyValue;
edtScreenShot.DataField = Dataset.DataFields('ScreenShot');

Идея интересная, только, конечно, не датафилд обратить в Null, а просто поле отключить-подключить. Вот так:

edtScreenShot.DataFieldName = '';
edtScreenShot.DataFieldName = 'ScreenShot';

Но толку никакого. Мне кажется, что картинка не отрисовывается не из-за отсутствия данных, а именно из-за того, что двоичный Stream не содержит правильного заголовка картинки. Контрол просто не знает, что от него ожидают. Сунули, мол, каких-то каракатиц, а к чему они - неизвестно.

По идее, все дело в том, как сохраняется в буфер обмена само изображение. Думаю, нужно ждать совета разработчиков ядра, которые бы объяснили происходящее с точки зрения контрола.

Показать все комментарии

Здравствуйте, уважаемые коллеги!

Столкнулся с ситуацией: требовалось вставить в ImageDataСontrol на карточке картинку из буфера обмена. К примеру, нажал пользователь PrintScreen, щёлкнул на карточке кнопку, картинка и вставилась. Казалось бы, чего проще... А не тут-то было!

Самый очевидный способ не сработал. Пишет в ответ: "Разрушительный сбой":

var Stream = System.CopyClipboardToStream();
edtScreenShot.DataField.SetValAsBlob(Stream);

Stream этот какой-то странный, ни свойств, ни методов, просто кусок двоичного кода. Я этот код увидел, когда сделал так:

System.StreamToMime(Stream);

На восемь мегабайт каракатиц. Но где наша не пропадала! Есть ведь путь посложнее, взять ImageList, и через Image прочитать картинку из Stream, сохранить в файл, а потом этот файл автоматически открыть методом поля типа Blob.

Написал так:

var Stream = System.CopyClipboardToStream();
var ImageList = Services.CreateItem('ImageList');  
var Image = ImageList.CreateImage();
Image.ImageType = 1;
Image.LoadFromStream(Stream);
Image.SaveToFile('c:\Temp.bmp');

Система всё это лихо выполнила, ни разу не кашлянула. Но файл получился нулевой длины. Так что вставлять в Blob после этой операции уже было нечего...

Наконец (верно от отчаяния) я решил подсунуть вместо этого таинственного Stream известный и понятный ADODB.Stream. Только как бы в него засунуть то, что в буфере обмена? Я написал такое:

var Stream = System.CopyClipboardToStream();
var Mime = System.StreamToMime(Stream);
var ADODBStream = new ActiveXObject('ADODB.Stream');
ADODBStream.Mode = 3;//Кстати, кто знает, что означают эти числа?
ADODBStream.Type = 1;//Расскажите, а то я просто скопировал из другого примера...
ADODBStream.Open();
System.MimeToStream(Mime, ADODBStream);
ADODBStream.SaveToFile('c:\Temp1.bmp');

Способ сработал, все весемь мегабайт каракатиц выгрузились в Temp1.bmp, только файл был не в формате BMP, а именно в виде строки Mime. Естественно, картинку прочитать невозможно.

Итак, у меня ничего не получилось. Но, может быть, я просто пошёл неправильным путём? Кто подскажет, вдруг эта задача уже решалась? Кто что знает о сохранении картинок из буфера обмена, либо об их вставке в Blob-поле? Использовал версию 3.2.1.58.

Нравится

Поделиться

2 комментария

"Будак Анатолий Васильевич" написал:Пишет в ответ: "Разрушительный сбой":

Анатолий, а вы уверены что контрол подключен к DataSet, в корректном состоянии?

Спасибо, Саша, что обратили моё внимание на этот момент! Действительно, здесь стоит посмотреть внимательно. Вот, что я выяснил. Если ставить в контроле по умолчанию ImageType = itBMP, то сообщение о разрушительном сбое пропадает. Его нет и при использовании itJPG (хотя скриншот явно не в виде jpg попадает в Stream). Сообщение о разрушительном сбое бывает только при itPNG. Однако вставки картинки всё равно не происходит, хотя сообщение об ошибке я убрал, принудительно устанавливая ему itBMP перед вставкой. Так что мы на правильном пути!

Датасет, по-видимому, подключен корректно. Рядом с кнопкой "Вставить из буфера" размещена кнопка "Вставить из файла". Там стоит такая конструкция для того же поля того же датасета:

edtScreenShot.DataField.LoadFromFile(FilePath);

Работает безупречно, картинка загружается.

Но ни в чём нельзя быть уверенным до конца. С моим-то склерозом :) Для эксперимента попробовал и такое обращение:

var Dataset = dlData.Dataset;
Dataset.DataFields('ScreenShot').LoadFromFile(FilePath);

Тоже отлично работает.

Ну, и чем чёрт не шутит:

var Dataset = dlData.Dataset;
var Stream = System.CopyClipboardToStream();
Dataset.DataFields('ScreenShot').SetValAsBlob(Stream);

Увы, хоть сообщения об ошибке нет, картинка не видна...

Однако самое поразительное - вот что! Хоть картинки в контроле и не видно, если сделать

Dataset.DataFields('ScreenShot').SaveToFile('c:\Test3.bmp');

то по указанному пути появится восьмимегабайтный файл, со структурой, похожей на bmp (куча каракатиц стройными рядами), но без характерного bmp-заголовка. Который, увы, ни одна графическая программа не считает bmp-файлом. Удивительно ещё и то, что запись сохраняется, и в blob двоичные данные попадают, это видно как в таблице, так и при открытии карточки (ощутимо замедленном из-за такого объёма картинки). Но саму картинку по-прежнему не видно.

Мне кажется, что добавив в Stream правильный заголовок bmp проблема бы решилась. Он явно идёт без него, хотя структура bmp-шная. Но как бы его добавить?

Показать все комментарии

Доброго дня! Підскажіть хто знає де розміщуються зображення завантажені в шаблон звіту через дизайнер звітів. І як отримати посилання, щоби дане зображення вставити наприклад в звіт побудованний в Word?

Нравится

6 комментариев

Добрый день, Юрий! Изображения хранятся в самом сервисе Fast Report. Для выгрузки изображения Вам необходимо в Террасофт Администраторе найти необходимый сервис, открыть его, найти необходимое изображение и выгрузить его в файл.

Алексей, а з об'єкта Services.GetNewItemByUSI('fr_DataGrid') можу я витягти даний файл?

Практически наверняка нет. А зачем вам в скрипте вытаскивать изображение из отчета? Проясните, пожалуйста, полную постановку задачи. Может ей можно решить другими методами.

Мабуть так. Потрібно логотип нашої компанії, який я вставив в шаблон звіту Fast Report, щоб вставлявся в звіт Word. Звіт Word створюється скриптом Террасофт. Я так зрозумів, що прийдеться створювати окремий сервіс il_ для зберігання логотипу?

Если документ Word создается из шаблона, то можно вставить изображение сразу в шаблон. Если документ полностью создается из скрипта тогда действительно надо создать сервис il_ и из него выбирать необходимое изображение.

Спасибо, Алексей

Показать все комментарии

Если при создании отчета Word перед Вами стоит задача вставить в этот отчет картинку (изображение), хранящееся на закладке "Файлы" менеджера деталей записи, могу Вам предложить один из вариантов решения.

1. Прежде всего хочу обратить Ваше внимание на то, что рисунок из закладки "Файлы" менеджера деталей не получится поместить куда-либо без предварительной выгрузки его на диск. Поэтому для этого сперва необходимо использовать стандартную функцию LoadFileFromDatabase (ID, FileName, IsTemporary, WithNativeFileName),которая описана в скрипте scr_FileUtils.
2. Далее в момент создания отчета необходимо вызывать объект Word.
В свою очередь объект Word содержит Selection, который позволяет выполнять многие операции в том числе вставку картинки. Пример его использования для вставки картинки следующий:

Selection.InlineShapes.AddPicture ('имя файла картинки с указанием пути', false, true).

'Имя файла картинки с указанием пути' Вы получите в результате отработки LoadFileFromDatabase.
В результате изображение поместится в начало отчета Word.

Для того, чтобы изображение помещалось не в начало документа Word, а в любое другое место, можем посоветовать следующее:
1. Вставить с текст шаблона MS Word метку, например >.
2. Затем в скрипте реализовать примерно следующее:

if (Selection.Find('>')){
//вставка в то самое место, где найдена метка
}

Желаю удачи!

С уважением,
Мельникова Екатерина

Нравится

Поделиться

6 комментариев

Большое спасибо!

Тот же механизм надо использовать, если надо вставить в отчет Word поле "Описание" (которое Blob)?

В случае, если надо вставить в отчет Word поле "Описание", тогда можно для выгрузки воспользоваться функцией:

function LoadFileFromDataset(FileName, Dataset, DataFieldName) {                 
            var BlobField = Dataset.DataFields.ItemsByName(DataFieldName);
            BlobField.SaveToFile(FileName);
            return FileName;
}

А

Selection.InlineShapes.AddPicture ('имя файла картинки с указанием пути', false, true)

должно работать в принципе без изменений.

Желаю удачи!

Добавление в код строки с Selection.Find('<>') вызывает ошибку выполнения Microsoft JScript: "Объект не поддерживает это свойство или метод". В чем может быть дело?

"Еременко Надежда Валерьевна" написал:

Добавление в код строки с Selection.Find('<>') вызывает ошибку выполнения Microsoft JScript: "Объект не поддерживает это свойство или метод". В чем может быть дело?


Добрый день!
Надежда, какую версию Terrasoft Вы используете?

версия XRM 3.3.
Решить проблему удалось с помощью следующего кода:

Selection.Find.Text = "<>";
 
if (Selection.Find.Execute())
{
       //вставка в то самое место, где найдена метка
}
Показать все комментарии