Добрый день!
Работаю в версии 7.8. В разделе "Продажи" есть вкладка "Продукты" внутри которой есть базовая деталь "Продукты в продаже". Цель: сделать базовую деталь "Продукты в продаже" с редактируемым реестром и добавить туда дополнительные поля.
Для этого:
- создал замещающий объект OpportunityProductInterest, куда добавил свои необходимые поля;
- создал замещающий клиентский модуль OpportunityProductPageV2, куда добавил свои поля;
- создал свою схема детали "Продукт в продаже" SuOpportunityProductDetailV2 (родительский объект Базовая схема детали с реестром ( NUI )), куда добавил следующий код:

define("SuOpportunityProductDetailV2", ["ConfigurationGrid", "ConfigurationGridGenerator",
   "ConfigurationGridUtilities"],
   function() {
   return {
      entitySchemaName: "OpportunityProductInterest",
      attributes: {
         "IsEditable": {
            dataValueType: Terrasoft.DataValueType.BOOLEAN,
            type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
            value: true
         }
      },
      details: {},
      diff: [
         {
            "operation": "merge",
            "name": "DataGrid",
            "values": {
               "className": "Terrasoft.ConfigurationGrid",
               "generator": "ConfigurationGridGenerator.generatePartial",
               "generateControlsConfig": {"bindTo": "generatActiveRowControlsConfig"},
               "changeRow": {"bindTo": "changeRow"},
               "unSelectRow": {"bindTo": "unSelectRow"},
               "onGridClick": {"bindTo": "onGridClick"},
               "activeRowActions": [
                  {
                     "className": "Terrasoft.Button",
                     "style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                     "tag": "save",
                     "markerValue": "save",
                     "imageConfig": {"bindTo": "Resources.Images.SaveIcon"}
                  },
                  {
                     "className": "Terrasoft.Button",
                     "style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                     "tag": "cancel",
                     "markerValue": "cancel",
                     "imageConfig": {"bindTo": "Resources.Images.CancelIcon"}
                  },
                  {
                     "className": "Terrasoft.Button",
                     "style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                     "tag": "remove",
                     "markerValue": "remove",
                     "imageConfig": {"bindTo": "Resources.Images.RemoveIcon"}
                  }
               ],
               "initActiveRowKeyMap": {"bindTo": "initActiveRowKeyMap"},
               "activeRowAction": {"bindTo": "onActiveRowAction"},
               "multiSelect": false
            }
         }
      ],
      mixins: {
         ConfigurationGridUtilites: "Terrasoft.ConfigurationGridUtilities"
      },
      methods: {
                addRecord: function() {
                                        var defValues = this.get("DefaultValues") || [];
                                        defValues.push({
                                                name: "Quantity",
                                                value: 1
                                        });
                                        defValues.push({
                                                name: "OfferDate",
                                                value: new Date()
                                        });
                                        this.set("DefaultValues", defValues);
                                        this.callParent(arguments);
                                },

                               
                                getFilterDefaultColumnName: function() {
                                        return "Product";
                                },

                                getGridDataColumns: function() {
                                        return {
                                                "Product.Name": {path:  "Product.Name"}
                                        };
                                }
      }
   };
});
;

- в OpportunityPageV2 переопределил базовую деталь

//Переопределение базовой детали "Продукт в продаже(OpportunityProduct)"
                        OpportunityProduct: {
                                "schemaName": "SuOpportunityProductDetailV2",
                                "entitySchemaName": "OpportunityProductInterest",
                                "filter": {
                                        "detailColumn": "Opportunity",
                                        "masterColumn": "Id"
                                }
                        }

В результате:
- поля добавились;
- имею ту же деталь, только вместо нередактируемых полей выводится строка с редактируемыми полями. То что мне и нужно, но когда я нажимаю на +, то не открывается карточка для добавления полей, а вместо этого добавляется строка с полями.
Хотелось бы сделать, чтобы октрывалась карточка, как это было в базовой детали. Возможно ли это?

Заранее благодарен.

Нравится

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

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

За функционал открытия новой страницы редактирования, при нажатии кнопки "+" отвечает метод addRecord из схемы "BaseGridDetailV2". Вам стоит смотреть в сторону переноса логики данного метода в схему детали "SuOpportunityProductDetailV2".

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

Коллеги,

подскажите, как в элементе бизнес-процесса (v7.4) скопировать продукты из продажи в счет.
У меня через Add Data получается задать значение только полю Product, а как задать поля количество, цена и т.п.? (cм. изображение)

Спасибо!

Нравится

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

Здравствуйте, Владимир!
Поскажите, пожалуйста, что это за сборка и какая основная локализация сборки?
Спасибо!

Здравствуйте, Владимир!

Считывайте Продукт в Продаже, из него - сам Продукт - а затем уже записывайте необходимые значение в Продукт в счете.

sales omnichannel Version 7.4.1.609 Eng

Хм, в version 7.4.0.2864 всё получается...
Видимо, проблема версии

Хм, а техподдержка упорно говорит, что это невозможно

Здравствуйте, Владимир.

Все действительно получается именно в Вашей версии - 7.4.0.2864 Sales Team ENU.

А в других - нет.

Причины выясняем в рамках обращения 0238582.

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

Доброе время суток, уважаемое сообщество!
При создании бизнес-процесса по продаже столкнулся со следующими сложностями...
Исходные данные: БП запускается из раздела «контрагенты», из открывающегося правой кнопкой меню "Действие" - "Запустить процесс". По БП создается продажа для данного клиента. После создания Продажи необходимо добавить в эту продажу продукты (Раздел "Продажи" - деталь "Продукты").

Что сделано мной:
1. Создано открытие окна Продажа;
2. Создано "Настраиваемое окно" Продукт в продаже (думаю, что ошибся).

При проверке БП, система создает продажу, а при добавлении продукта к продаже выдает сообщение "Запись удалена".

Сложности:

  1. Как осуществить добавление контрагента и основного контакта данного контрагента в карточку продажи путем подстановки значений того клиента, при выборе которого был запущен БП?
  2. Как добавить к данной продаже продукты ( по бизнес-процессу)

Нравится

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

Здравствуйте, Дмитрий

Как вы передаете ID продажи в элелемент Настриваемое окно ?
Мое предположение что сообщение "Запись удалена", возникает из за того что Настраиваемом окне не указан параметр диаграммы, связанный с ключевым полем

"Яворский Алексей" написал:Как вы передаете ID продажи в элелемент Настриваемое окно ?
Мое предположение что сообщение "Запись удалена", возникает из за того что Настраиваемом окне не указан параметр диаграммы, связанный с ключевым полем

Сдается мне, что в этом-то и вся проблема. С передачей параметров я не очень-то разобрался. Есть ли руководство по передачи параметров между объектами - инструкции, шедшие в комплекте с ПО недостаточны в этом вопросе?
Заранее благодарю.

Дмитрий ознакомтесь пожалуйста с параграфом 7.1.3. Параметры бизнес-процесса, страница 151, Terrasoft Administrator Руководство пользователя

Яворский Алексей
Эксперт 3-й линии поддержки

Алексей, спасибо! Хоть это и не 151 страница и не 7.1.3, но благодаря Вашему совету все нашел. Спасибо большое!

Возможно мы используем различные версии руководств я имел в виду руководство пользователя для Terrasoft CRM X25 + ServiceDesk (TSAdmin_UG_3.3.0).

Если будут вопросы обращайтесь.

в Бизнес-Процессе на текущий момент передается:

  • Контрагент
  • ID продажи, для добавления продукта

Но в окне выбора продукта "OfferingInOpportunityDetailEdit" после выбора продукта из справочника выдается следующее сообщение дебаггера - скрины прилагаю. И продукт в продаже остается без цены - ее выбрать не получается - поля, кроме названия и "Ипользуется" неактивны. Изменить можно, только открыв вручную это окно повторно.

на всякий случай ссылка на более высокое разрешение
http://savepic.net/1769425.jpg
http://savepic.ru/2889714.jpg

Здравствуйте Дмитрий
Выгрузите, пожалуйста, xml данного сервиса.
Проводились ли какие либо доработки действий БП ?

действия не изменял - все штатное

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

Да, Алексей, устроит. Только, если Вас не затруднит, подскажите, пожалуйста, как правильно реализовать этот "обходной путь".
Заранее благодарю

Алексей, я прошу прощения, но я все еще в ожидании ответа от Вас по вопросу реализации обходного пути. Прошу прощения, если тон сообщения покажется безапелляционным.
Заранее благодарю.

Простите за задержку.
Я вижу реализацию следующим образом.

1.Создаем елемент "Вопрос пользователю":

Далее раветвление в зависимости от ответа:
а) Привязать продукт (действие открыть окно, справочник продуктов)

б)
Создать продукт (создание записи, карточка продукта)

2.Привязываем продукт к продаже с помощь скрипта (действие скрипт в БП), делаем связь продажи и продукта через датасет ds_OfferingInOpportunity в нем есть 3 обязательных поля, собственно продажа (OpportunityID) продукт (OfferingID) + состояние (OpportunityStateID), в коде устанавливаем состояние в "Начальное"

Код скрипта:

var prodID = WFGetParamValue(ScriptItem.ParentItems.ParentDiagram, 'OfferingID');
var oppID = WFGetParamValue(ScriptItem.ParentItems.ParentDiagram, 'OpportunityID');
var Dataset = Services.GetSingleItemByUSI('ds_OfferingInOpportunity');
 
Dataset.Append();
Dataset('OpportunityID') = oppID;
Dataset('OfferingID') = prodID;
Dataset('OpportunityStateID') = '{2EA12943-490B-4E3B-A87E-2D5D58DE1DEA}'; // Начальное состояние
Dataset.Post();      	

Общий вид диаграммы

Общий вид скрипта к диаграмме:

//-----------------------------------------------------------------------------
// wd_acc_offering_opportScript
//-----------------------------------------------------------------------------
 
 
function Item4OnExecute(ScriptItem, IsComplete) {
var prodID = WFGetParamValue(ScriptItem.ParentItems.ParentDiagram, 'OfferingID');
var oppID = WFGetParamValue(ScriptItem.ParentItems.ParentDiagram, 'OpportunityID');
var Dataset = Services.GetSingleItemByUSI('ds_OfferingInOpportunity');
 
Dataset.Append();
Dataset('OpportunityID') = oppID;
Dataset('OfferingID') = prodID;
Dataset('OpportunityStateID') = '{2EA12943-490B-4E3B-A87E-2D5D58DE1DEA}'; // Начальное состояние
Dataset.Post();      	
}
 
function tstOfferCr(ScriptItem, IsComplete) {
var prodID = WFGetParamValue(ScriptItem.ParentItems.ParentDiagram, 'OfferingID');
var oppID = WFGetParamValue(ScriptItem.ParentItems.ParentDiagram, 'OpportunityID');
 
var Dataset = Services.GetSingleItemByUSI('ds_OfferingInOpportunity');
 
Dataset.Append();
Dataset('OpportunityID') = oppID;
Dataset('OfferingID') = prodID;
Dataset('OpportunityStateID') = '{2EA12943-490B-4E3B-A87E-2D5D58DE1DEA}'; // Начальное состояние
Dataset.Post();      		
}

Параметры диаграммы

Добавил xml сервисов в присоединенные файлы

Алексей, премного благодарен Вам!!!

Дмитрий, если будут какие либо вопросы, обращайтесь.
Реализовывал на Terrasoft XRM 3.3.2.150

Сервис отрабатывает нормально, но когда появляется окно с вопросом, "выскакивает" окно журнала ошибок " Процесс 'wd_OpportunityWF' не найден"

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

Здравствуйте.
Из данного Б-П использовала ветку Привязки продукта. Выбираю продукт из справочника и добавляю в созданный счет.

Продукт в счет добавляются, но при открытии окна справочника Продукты видна только колонка "Ответственный":

Выбор договоров корректно отображается... В чем может быть причина?

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

Сервисы Б-П во вложении.
Заранее благодарю.

Здравствуйте Татьяна,

Для открытия карточки редактирования продукта, предлагаю вам использовать действие Открыть окно, в котором выбирать карточку редактирования продукта, при чем связать ее с существующим параметром БП "Продукт"
Под Актом имеется в виду сущность Документ с типом "Акт приема/передачи" ?

В скрипте сохраняю ID созданного продукта в счете в параметр OfferingInInvoiceID, и пытаюсь программно открыть карточку Продукт в счете, но т.к. отдельной карточки нет, ссылаюсь на wnd_OfferingDetailEdit.
Видимо, еще какие-то атрибуты необходимо передавать?

function Item3OnExecute(ScriptItem, IsComplete) {
	var prodID = WFGetParamValue(ScriptItem.ParentItems.ParentDiagram, 'OfferingID');
	var invID = WFGetParamValue(ScriptItem.ParentItems.ParentDiagram, 'InvoiceID');
	var Dataset = Services.GetSingleItemByUSI('ds_OfferingInInvoice');
 
	Dataset.Append();
	Dataset('InvoiceID') = invID;
	Dataset('OfferingID') = prodID;
	WFSetParamValue(ScriptItem.ParentItems.ParentDiagram, 'OfferingInInvoiceID', Dataset('ID')); 	
Dataset.Post();      	
	var OffInInvID = WFGetParamValue(ScriptItem.ParentItems.ParentDiagram, 'OfferingInInvoiceID');
	var Attributes = GetNewDictionary();
        Attributes.Add('RecordID', OffInInvID);
        Attributes.Add('ShowModal', true);
        ShowEditWindowEx('wnd_OfferingDetailEdit', Attributes, null, null, true);
}

С помощью Открытия окна также открытие карточки "Продукт в Счете" не производится. Выбирала окно wnd_OfferingDetailEdit, и параметр, содержащий ID - OfferingInInvoiceID, который предварительно сохраняла в скрипте.

"Яворский Алексей" написал:Под Актом имеется в виду сущность Документ с типом "Акт приема/передачи" ?

Да

Проблема в вызове окна Продукт в продаже была в том, что в wnd_OfferingInOpportunityDetailEdit для ее открытия следует окну передать ID продукта в продаже, в моем скрипте scrBind мы его генерируем автоматически

Dataset.Append();
Dataset('OpportunityID') = oppID;
Dataset('OfferingID') = prodID;
Dataset('OpportunityStateID') = '{2EA12943-490B-4E3B-A87E-2D5D58DE1DEA}'; // Начальное состояние
Dataset.Post();   

для того что бы использовать wnd_OfferingInOpportunityDetailEdit следует сгенерировать ID в коде и записать его в параметр БП, для дальнейшей его передачи в элемент Открытие окна.
Создаем параметр DetailID

Далее в скрипте присваиваем ему значение

function Item4OnExecute(ScriptItem, IsComplete) {
var prodID = WFGetParamValue(ScriptItem.ParentItems.ParentDiagram, 'OfferingID');
var oppID = WFGetParamValue(ScriptItem.ParentItems.ParentDiagram, 'OpportunityID');
var Dataset = Services.GetSingleItemByUSI('ds_OfferingInOpportunity');
 
Dataset.Append();
var DetailID = Connector.GenGUID();
WFSetParamValue(ScriptItem.ParentItems.ParentDiagram, 'DetailID', DetailID);
Dataset('ID') = DetailID;
Dataset('OpportunityID') = oppID;
Dataset('OfferingID') = prodID;
Dataset('OpportunityStateID') = '{2EA12943-490B-4E3B-A87E-2D5D58DE1DEA}'; // Начальное состояние
Dataset.Post();      	
}

Указываем элементу "открытие окна" откуда брать ID записи

После чего можем использовать окно работы с деталью в БП.
Сервисы БП прикрепил к посту

"Мыреева Татьяна Николаевна" написал:Выбор договоров корректно отображается... В чем может быть причина?

Скорее всего проблема в правах доступа к записям, под каким пользователем проводятся доработки ?

"Мыреева Татьяна Николаевна" написал:Можно ли потом все продукты из Счета скопировать в Акт? Предполагаю, что с помощью скрипта.

Предлагаю вам использовать датасет ds_OfferingInDocument, на сколько я понимаю у вас есть ID документа, и ID продажи, следовательно, можно профильтровать в скрипте по ID продажи ds_OfferingInOpportunity и записать найденные записи в ds_OfferingInDocument. Если у вас возникнут проблемы с реализацией данной идеей просьба сообщить.

"Яворский Алексей" написал:
Скорее всего проблема в правах доступа к записям, под каким пользователем проводятся доработки ?

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

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

Может, это только у нас такая проблема? Terrasoft XRM 3.3.2.43

Для устранения проблемы необходимо выполнить следующие действия:
1.Открыть сервис wa_OpenWindowScript. Найти функцию function ExecuteSelectData(ActionItem, WorkflowAction, WorkflowItemID). В теле функции закомментировать строку var Window = GetSingleItemByCode('wnd_SelectData', 'OpenWindow'), вместо нее прописать следующую строку кода:

var Window = Services.GetNewItemByUSI('wnd_SelectData');
scr1

2.В этом же сервисе найти функцию function ExecuteOpenWindow(WindowType, ActionItem, WorkflowAction, WorkflowItemID). В теле функции закомментировать строку var Window = GetSingleItemByCode(ServiceInfo.USI, 'OpenWindow'), вместо нее прописать строку кода:

var Window = Services.GetNewItemByUSI(ServiceInfo.USI);
scr2

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

Спасибо, Алексей. Это решило проблему.

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