У продукта есть деталь "Характеристики", где может быть некий набор значений. 

Задача: Найти все продукты с точно таким же набором характеристик через бизнес-процесс. 

Нравится

3 комментария
Лучший ответ

Евгений, попробуйте реализовать задачу с помощью обработки коллекций (элемент БП "Читать данные") и зацикливания процесса (так как количество обрабатываемых продуктов может быть велико, - чтение более 5000 записей может повлиять на производительность системы.).

 

https://academy.terrasoft.ru/docs/user/biznes_processy/spravka_po_eleme…

 

https://academy.terrasoft.ru/docs/user/biznes_processy/ispolzovanie_ele…

 

Но скорее всего более простым и гибким вариантом будет реализация через элемент процесса "Задание-сценарий":

 

https://academy.terrasoft.ru/docs/user/biznes_processy/spravka_po_eleme…

Что сделать с продуктами в итогу, просто найти и вывести ? Или посчитать количество?

Евгений, попробуйте реализовать задачу с помощью обработки коллекций (элемент БП "Читать данные") и зацикливания процесса (так как количество обрабатываемых продуктов может быть велико, - чтение более 5000 записей может повлиять на производительность системы.).

 

https://academy.terrasoft.ru/docs/user/biznes_processy/spravka_po_eleme…

 

https://academy.terrasoft.ru/docs/user/biznes_processy/ispolzovanie_ele…

 

Но скорее всего более простым и гибким вариантом будет реализация через элемент процесса "Задание-сценарий":

 

https://academy.terrasoft.ru/docs/user/biznes_processy/spravka_po_eleme…

"В любой непонятной ситуации используйте VIEW" или хранимую процедуру, которая соберёт любые данные в SQL

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

Коллеги, добрый день.

Подскажите, пожалуйста, существует ли какое-нибудь описание как можно добавить деталь "Продукты в Новая сущность>"?

Я сейчас пробую добавить такую деталь в Проекты, даже нашёл в пакете Project Объект ProjectProduct, но детали "Продукт в Проекте" нет. А если я её создаю на базе объекта ProjectProduct, то при попытке сохранить простую связь Проект - Продукт ловлю ошибку типа "Неизвестная колонка PriceListId". Нашёл, что эта ошибка идёт из "Базового вхождения продукта", но вот побороть её не получилось...

Возможно даже существует деталь, в которой базовые операции уже выполняются (подгрузка цены из раздела Продукта, расчёт суммы, учёт валют и т.п.).

Нравится

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

Здравствуйте!

Проблема в том, что поле PriceList добавляется в пакете ProductCatalogue, от которого не наследуется пакет Project, в котором создан объект ProjectProduct.

Решение: заместить объект ProjectProduct в пакете Custom. В результате колонка PriceList будет подтянута.

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

Возникла необходимость в такой детали.
В качестве детали "Счета в которых встречается продукт" Подошла деталь OpportunityProductDetailV2,
При штатном связывании отображает список продаж и даже позволяет "провалиться" в продажу по ссылке. (возможно не лучшее решение, но для решения задачи подходит).
А вот со списком заказов, в которых продукт встречается, штатные детали не подходят.
Просьба подсказать, есть ли готовое решение, или, если нет, указать кошерный путь к решению..

Нравится

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

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

Логика VIEW гораздо больше подаётся пониманию, к тому же её можно одновременно использовать в коде JS, в БП и в печатных формах.

Путь интересный.. а он возможен on-Demand? :) SqlExecutor позволяет создавать view?
На данный момент я разглядываю логику аналогичной детали с продажами, и пытаюсь понять ее логику, чтобы воспроизвести.. Но там как-то все нелинейно.. Подумаю насчет view.

"Шестаков Алексей Владимирович" написал:Путь интересный.. а он возможен on-Demand?

в bpm'online есть SQL-сценарии, которые позволяют в том числе создавать VIEW

Спасибо, такой вариант устраивает.

"Шестаков Алексей Владимирович" написал:SqlExecutor позволяет создавать view?

Он все позволяет, хоть drop :cool:

"Александр Кудряшов" написал:

Он все позволяет, хоть drop


А вот это уже настораживает :)

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

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

Нравится

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

Здравствуйте!

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

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

Добрый день!

Максим, идея с файлами и примечаниями интересная, возьму на заметку.

Алексей, дело в том, что в базе (в таблице SysImage) картинки хранятся в несжатом виде, т.к. попадают туда при интеграции из другой системы средствами sql через OPENROWSET. Возможно ли это как-то использовать?

Александр, добрый день!

Идея Максима, как мне кажется, наиболее подходит для решения Вашей задачи, т.к. по сути это базовый функционал и картинка открывается в исходном несжатом виде.

Андрей, я его реализовал, по умолчанию картинка скачивается по клику. Настраивать каждый браузер на открытие - тоже не очень удобно.
Подобную реализацию не одобрили, т.к. часто нужно видеть именно картинку, которую можно рассмотреть.
Так что если есть еще какие-то идеи, буду благодарен за подсказки.

Добрый день!
Александр, есть еще 2 варианта:
1. Реализовать свою логику при клике на изображение открывать его в модальном окне. В конфигурации есть примері использования. Метод ModalBox.show() вернет контейнер, в который вы сможете отрендерить нужный вам контент.
2. Взять готовые плагины, например у jQuery, и реализовать его использование.

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

Добрый день!
Да, возможно. Метод show() вернет вам контейнер, а дальше можете делать с ним что угодно. Пример:

var container = ModalBox.show({
	width: "200px",
	height: "100px"
});
var imageHtml = '<image src="http://localhost/bpmonlineSales770/0/img/entity/hash/SysImage/Data/dc0d78a5-18ce-4cbb-9afa-2d7d0143f4a6"/>';
Ext.DomHelper.insertHtml("afterBegin", container.dom, imageHtml);

Здесь выводится фото какого-то контакта

Спасибо, то, что нужно!

Спасибо, то, что нужно!

А как его можно корректно отмасштабировать, вне зависимости от исходных размеров?

style="max-height:100%;max-width: 100%"

Явное указание стилей проблему не решило. По ширине фото вписывается, а по высоте обрезается. Также не удалось отцентровать фото при масштабировании по ширине.

Здравствуйте, Александр!

Пример реализации Вы можете найти в продукте Real Estate на детали "Галерея" раздела "Объекты".

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

bpm'online sales enterprise версия 7.6.0.
В данной версии при добавлении нового товара можно ли добавить тип продукта? Допустим у меня интернет магазин и в продаже из типовых продуктов имеются крупная, мелкая бытовая техника и т.д. А в в списке имеется только антивирусы и продукты связанные только с компьютерным обеспечением. Есть ли возможность добавить туда продукты другого типа?

Нравится

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

Дмитрий, вы можете изменить и добавить новые типы продуктов в соответствующем справочнике Типы продуктов.
Ознакомиться детально как наполнять справочники по ссылке http://academy.terrasoft.ru/documents/?product=enterprise&ver=7.6.0.
Думаю, Вам будет интересно узнать про каталог продуктов, который доступен в пакете bpm'online sales omnichannel http://academy.terrasoft.ru/documents/?product=omnichannel&ver=7.6.0 или http://academy.terrasoft.ru/courses/?cc=30

Приятной работы:smile:

"Ладыгина Алёна" написал:

Весьма благодарен

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

bpm'online sales enterprise версия 7.6.0.
В данной версии при добавлении нового товара можно ли добавить тип продукта? Допустим у меня интернет магазин и в продаже из типовых продуктов имеются крупная, мелкая бытовая техника и т.д. А в в списке имеется только антивирусы и продукты связанные только с компьютерным обеспечением. Есть ли возможность добавить туда продукты другого типа?

Нравится

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

Дмитрий, подробный ответ с ссылками по данному вопросу предоставлен в посте http://www.community.terrasoft.ru/forum/topic/12590#comment-53498

"Адасюк Валерий Викторович" написал:
<

Благодарю

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

В карточке продукта есть закладка "Движение по складу" и у меня она не работает.
Я закрыла периоды, выбираю наиболее активный из всех и продукт, который точно был отгружён\куплен в тот же период.
Вопрос как наконец увидеть этот график?(

Нравится

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

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

Здравствуйте, Наталия!

Посмотрите, пожалуйста, условия отображения той или иной линии графика в соответствии с данными в Вашей системе.

Информация описана в разделе 3.5.2 на с.191-192:
http://tsrdp.tscrm.com/support/downloads/manuals/TS_XRMDistribution_UG_…

Все условия выполнены, но ничего нет.
Есть только линия минимальных запасов.

Здравствуйте, Наталия.

Есть предположение, что в Вашей версии допущена ошибка.

Попробуйте сделать резервную копию сервиса Offerings\Details\Analytic\sq_OfferingAnalytic из конфигурации, а затем поверх него загрузить обновленный сервис из архива во вложении.

Сообщите, пожалуйста, результат.

sq_offeringanalytic.zip

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

BPM 7.3.0.745

При замещение объекта "Продукт в продаже" возникает ошибка:
Ошибка сохранения: Имя "OpportunityProductInterest" объекта "Продукт в продаже" превышает 22 символов

Error image

Возможно ли заместить этот объект?

Нравится

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

Добрый день, Тарас!
Можно снять ограничение на имя схемы. Для этого нужно изменить значение параметра maxEntitySchemaNameLength в файле web.config загрузчика, то есть в корневом каталоге сайта:

<general connectionStringName="db" securityEngineType="Terrasoft.DB.MSSql.MSSqlSecurityEngine, Terrasoft.DB.MSSql" executorType="Terrasoft.DB.MSSql.MSSqlExecutor, Terrasoft.DB.MSSql" engineType="Terrasoft.DB.MSSql.MSSqlEngine, Terrasoft.DB.MSSql" metaEngineType="Terrasoft.DB.MSSql.MSSqlMetaEngine, Terrasoft.DB.MSSql" metaScriptType="Terrasoft.DB.MSSql.MSSqlMetaScript, Terrasoft.DB.MSSql" typeConverterType="Terrasoft.DB.MSSql.MSSqlTypeConverter, Terrasoft.DB.MSSql" binaryPackageSize="1048576" currentSchemaName="dbo" enableSqlLog="false" useOrderNullsPosition="false" maxEntitySchemaNameLength=100/>

Спасибо за ответ!

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

Предлагаю один из вариантов решения поставленной задачи.

1. В ds_InvoiceScript добавить функцию:

function ChangeCurrencyID(InvoiceID, CurrencyID) {
  if (IsEmptyValue(InvoiceID) || IsEmptyValue(CurrencyID)) {
   return;
   }
  if (!Assigned(InvoiceScript.OffDataset)) {
   InvoiceScript.OffDataset =
   Services.GetNewItemByUSI('ds_OfferingInInvoice');
   }
 var Dataset = InvoiceScript.OffDataset;
  Dataset.DisableEvents();
  ApplyDatasetFilter(Dataset, 'InvoiceID', InvoiceID, true);
  Dataset.Open();
 while (!Dataset.IsEOF) {
   Dataset.Edit();
   Dataset.Values('CurrencyID') = CurrencyID;
   Dataset.Post();
   Dataset.GotoNext();
  }
ApplyDatasetFilter(Dataset, 'InvoiceID', InvoiceID, false);
Dataset.Close();
}

2. В обработчике события OnDatasetAfterPost счета вставить вызов функции:
ChangeCurrencyID(Dataset.Values('ID'), Dataset.Values('CurrencyID'));

3. Сохранить все внесенные изменения. Перезапустить приложение и протестировать работоспособность системы.

Желаю удачи!

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

Нравится

Поделиться

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

Судя по функции, она делает только замену валюты в продуктах счета. А пересчет где делается?

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

Здравствуйте!!
в террасофте реализована следующая функциональность:
1. В разделе Продукты есть вкладка Цены, на которой можно указать оптовую и розничную цену (в деньгах)
2. В разделе Контрагенты есть вкладка Типы цен, на которой можно указать оптовую и розничную цену в датах
3. В раздел Счета добавить новый счет и указать дату, которая бы попадала в какой либо из промежутков дат, указанных в разделе Контрагенты. Затем создать на вкладке счетов Продукты новую запись. В результате в атрибут Цена карточки Продукты по счету автоматически подставляется тот тип цены из раздела Продукты, дата которого указана в карточке счета...

Мне нужно реализовать тоже только для раздела Документ. Подскажите какие скрипты и функции смотреть, где это реализовано для счета.

С уважением, Гашникова Екатерина

Нравится

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

Добрый день!

Спасибо за Ваш вопрос.

Для того, чтобы реализовать запрашиваемую Вами функциональность Вам необходимо сделать изменения в скрипте scr_OfferingUtils в функции SetValuesByPriceType по аналогии c реализацией для раздела Счета.
В разделе Счета данная функциональность реализована в функции DataChange, которая вызывается на событие SelfOnDatasetDataChange для ds_OfferingInInvoiceScript.

В функции SetValuesByPriceType реализована функциональность работы с ценами для разделов Счета, Проекты, а именно работа с ценами на закладке Продукты Менеджера деталей соответствующего раздела.

Будем рады ответить на все Ваши вопросы.

Terrasoft Support Team

так поняла, что за вставку цен в продукт по счету отвечает функция SetValuesByPriceType внутри scr_OfferingUtils.
для решения своей задачи попробовала заменить везде в этой функции InvoiceID на DocumentID.
получилось следующее:
function SetValuesByPriceType(Dataset, ScriptObject) {
if (ScriptObject.WorkspaceFieldName == 'DocumentID') {
if (!Assigned(scr_OfferingUtils.AccountIDDocument)) {
var DocumentID = Dataset.Values('DocumentID');
scr_OfferingUtils.AccountIDDocument = GetDocumentParameterByDocumentID(
DocumentID,'AccountID');//CustomerID
scr_OfferingUtils.CurrenDateDocument = GetDocumentParameterByDocumentID(
DocumentID,'Date');
}
var AccountID = scr_OfferingUtils.AccountIDDocument;
var CurrentDate = scr_OfferingUtils.CurrenDateDocument;
} else if (ScriptObject.WorkspaceFieldName == 'OpportunityID') {
if (!Assigned(scr_OfferingUtils.AccountIDOpportunity)) {
var OpportunityID = Dataset.Values('OpportunityID');
scr_OfferingUtils.AccountIDOpportunity = GetOpportunityParameterByOpportunityID(
OpportunityID,'CustomerID');
scr_OfferingUtils.CurrenDateOpportunity = GetOpportunityParameterByOpportunityID(
OpportunityID,'StartDate');
}
var AccountID = scr_OfferingUtils.AccountIDOpportunity;
var CurrentDate = scr_OfferingUtils.CurrenDateOpportunity;
} else
return false;
var PriceCategoryID = GetPriceTypeOfferingByAccountID(AccountID, CurrentDate);
if (!IsEmptyValue(PriceCategoryID)) {
var ResultArray = GetOfferingPriceByPriceCategoryID(PriceCategoryID,
Dataset.Values('OfferingID'));
if (!IsEmptyValue(ResultArray)) {
SetOfferingValues(Dataset, ResultArray, ScriptObject);
return true;
}
}
var ResultArray = GetOfferingPriceByMainPrice(Dataset.Values('OfferingID'));
if (!IsEmptyValue(ResultArray)) {
SetOfferingValues(Dataset, ResultArray, ScriptObject);
return true;
}
return false;
}

Открываю раздел Документы, добавляю новый продукт, выбираю дату из любого промежутка, заданного в разделе Контрагенты на закладке Типы цен. Захожу на закладку Продукты по документам, добавляю новую карточку и при выборе продукта выдается ошибка 'Ошибка выполнения метода 'SelfOnDatasetDataChange'. Предполагается наличие объекта'

Скажите по правильному ли я пошла пути и если да, то как исправить ошибку?

Гашникова Екатерина

Добрый день.

Для того, чтобы реализовать требуемую функциональность Вам необходимо в scr_OfferingUtils добавить функцию

function GetDocumentParameterByDocumentID(DocumentID, Parameter) {
 
            var DocumentDataset = GetSingleItemByCode('ds_Document', 'scr_OfferingUtils');
 
            EnableDatasetFilters(DocumentDataset, false);
 
            ApplyDatasetIDFilter(DocumentDataset, DocumentID, true);
 
            DocumentDataset.Open();
 
            var Result = null;
 
            if (!IsDatasetEmpty(DocumentDataset)) {
 
                        Result = DocumentDataset.Values(Parameter);
 
            }
 
            DocumentDataset.Close();
 
            return Result;
 
}

Откорректировать функцию SetValuesByPriceType в скрипте scr_OfferingUtils необходимо таким образом

function SetValuesByPriceType(Dataset, ScriptObject) {
 
            if (ScriptObject.WorkspaceFieldName == 'InvoiceID') {
 
                        if (!Assigned(scr_OfferingUtils.AccountIDInvoice)) {
 
                                   var InvoiceID = Dataset.Values('InvoiceID');
 
                                   scr_OfferingUtils.AccountIDInvoice = GetInvoiceParameterByInvoiceID(
 
                                               InvoiceID,'CustomerID');
 
                                   scr_OfferingUtils.CurrenDateInvoice = GetInvoiceParameterByInvoiceID(
 
                                               InvoiceID,'InvoiceDate');
 
                        }
 
                        var AccountID = scr_OfferingUtils.AccountIDInvoice;
 
                        var CurrentDate = scr_OfferingUtils.CurrenDateInvoice;
 
            } else if (ScriptObject.WorkspaceFieldName == 'OpportunityID') {
 
                        if (!Assigned(scr_OfferingUtils.AccountIDOpportunity)) {
 
                                   var OpportunityID = Dataset.Values('OpportunityID');
 
                                   scr_OfferingUtils.AccountIDOpportunity = GetOpportunityParameterByOpportunityID(
 
                                               OpportunityID,'CustomerID');
 
                                   scr_OfferingUtils.CurrenDateOpportunity = GetOpportunityParameterByOpportunityID(
 
                                               OpportunityID,'StartDate');
 
                        }
 
                        var AccountID = scr_OfferingUtils.AccountIDOpportunity;
 
                        var CurrentDate = scr_OfferingUtils.CurrenDateOpportunity;
 
            } else if (ScriptObject.WorkspaceFieldName == 'DocumentID') {
 
                        if (!Assigned(scr_OfferingUtils.AccountIDDocument)) {
 
                                   var DocumentID = Dataset.Values('DocumentID');
 
                                   scr_OfferingUtils.AccountIDDocument = GetDocumentParameterByDocumentID(
 
                                               DocumentID,'AccountID');
 
                                   scr_OfferingUtils.CurrenDateDocument = GetDocumentParameterByDocumentID(
 
                                               DocumentID,'Date');
 
                        }
 
                        var AccountID = scr_OfferingUtils.AccountIDDocument;
 
                        var CurrentDate = scr_OfferingUtils.CurrenDateDocument;
 
            } else
 
                        return false;
 
            var PriceCategoryID = GetPriceTypeOfferingByAccountID(AccountID, CurrentDate);
 
            if (!IsEmptyValue(PriceCategoryID))        {
 
                        var ResultArray = GetOfferingPriceByPriceCategoryID(PriceCategoryID,
 
                                   Dataset.Values('OfferingID'));
 
                        if (!IsEmptyValue(ResultArray)) {
 
                                   SetOfferingValues(Dataset, ResultArray, ScriptObject);
 
                                   return true;
 
                        }
 
            }
 
            var ResultArray = GetOfferingPriceByMainPrice(Dataset.Values('OfferingID'));
 
            if (!IsEmptyValue(ResultArray)) {
 
                        SetOfferingValues(Dataset, ResultArray, ScriptObject);
 
                        return true;
 
            }
 
            return false;
 
}

Terrasoft Support Team

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