Добрый день.

Подскажите пожалуйста в процессе есть автогенирируема страница на ней кнопка 

"Далее" при нажатии которой процесс идет дальше. Если нажать на "Закрыть" , то процесс закрывается, но висит в системе как "Выполняющийся". Как сделать так что бы по кнопке закрыть процесс "Завершался".  Стрелка в завершние есть.

Добавлять новую кнопку отмена и вести данную стрелку в завершение не вариант.

Нравится

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

Евгений, добрый день!

Реализация самой страницы подразумевает такое поведение при закрытии страницы, и пользовательскими средствами данную логику не удастся изменить.

Для Вашей задачи целесообразней реализовать собственную Преднастроенную страницу с выводом необходимых кнопок и использовать её. Благо функционал преднастроенных расшиирится возможностью добавлять кнопки уже в 7.12, с возможностью удалить стандартную Назад.

Или же можно создать свой собственный элемент процесса, взяв за пример базовый, и не выводить на нем кнопку Назад \ изменить в нем метод onCloseCardButtonClick.

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

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

Всем привет!

На странице Активности, когда заходишь в запись, есть кнопка с флажком "добавить связанную активность". Мне нужно изменить логику работы создания новой активности на основании текущей.

Поэтому возник вопрос, можно ли переопределить действие этой кнопки?

Какой метод отвечает за обработку пунктов меню "задача", "звонок", "email".

Так же вопрос,  как можно скрыть данную кнопку с этой страницы?

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

Может есть какой-то обработчик отвечающий за видимость этой кнопки?

Нравится

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

Добрый вечер.

Кнопку можно изменить и скрыть. Например, убрать/скрыть кнопку можно так - в замещающей схеме в разделе diff написать 

{
	"operation": "remove",
	"name": "addActions"
}

Или же переопределить метод getQuickAddButtonVisible. Методы обработчики на пункты меню добавляются в методе initQuickAddMenuItems из миксина QuickAddMixin.

Для того что бы определить это я сделал следующее: открыл консоль разработчика (F12), на нужном элементе на странице нажал правую кнопку мыши, выбрал Inspect. У меня открылась вкладка Elements и выделилась строка с нужным элементом. После префикса «ActivityPageV2» я увидел название элемента «addActions». Далее в глобальном поиске(Ctrl-shift-f) я запустил поиск. Нашел ссылку на BasePageV2. Увидел diff данного «флажка», а также интересные методы «QuickAddMenuItems» и «getQuickAddButtonVisible». Нашел данные методы, поставил точки останова, перегрузил страницу, и далее с помощью клавиш F10 и F11 проследил цепочку вызовов.

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

Третий день сижу в платформе. Как в ней после замещения клиентского модуля, управлять видимостью кнопок - прятать/ показывать, показывать только админу и тп

 

Может что-то еще нужно замещять?

Есть нормальная методичка, крнига? 

Как вести разработку с отладкой?  (site-установка)

Когда нужен c#, когда достаточно на js и где эта граница?

Нравится

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

видимостью кнопок можно управлять через атрибуты(в diff кнопки забиндить параметр visibility на нужный атрибут) и потом в методах уже задавать атрибуту true или false

Сериков Асхат Кайратович,

Спасибо. Можно примеры, для кнопки "добавить" и как для кнопок. Вот кусок моего кода, отключил реакцию на кнопки в OnActiveRow а как их вообще убрать? Еще у меня есть кнопка на которую надо делать то для чего c# не нужен но надо как-то ViewModel расширить или что-то такое, вот как это все? diff: [{

                    "operation": "insert",

                    "name": "bnBackCall",

                    "parentName": "DataGrid",

                    "propertyName": "activeRowActions",

                    "index": 111,

                    "values": {

                        "className": "Terrasoft.Button",

                        "style": Terrasoft.controls.ButtonEnums.style.GREY,

                        "caption": "Позвонить",

                        "tag": "tagBnBackCall"

                    }

                }],

        methods: {

            init()

            {

                alert('init');    

                this.callParent(arguments);

            },

            onRender()

            {

                alert('render');    

                this.callParent(arguments);

            },

            onActiveRowAction: function(buttonTag, primaryColumnValue) {

                switch (buttonTag) {

                    case "edit":

                        alert('Нельзя открыть кандидата!');

                        break;

                    case "copy":

                        alert('Нельзя копировать кандидата!');

                        break;

                    case "delete":

                        alert('Нельзя удалить кандидата!');

                        break;

QArt,

Я бы вам посоветовал заглянуть в базовую схему секции, весь контроль там прописан, все что вам нужно оттуда понять какие атрибуты нужны вам, к примеру чтобы скрыть кнопку "Добавить", в init методе достаточно 

init: function() {
	this.callParent(arguments);
	this.set("IsAddRecordButtonVisible", false);
}

атрибут IsAddRecordButtonVisible я нашел как раз в базовой схеме раздела "BaseSectionV2" так как все остальные секции наследуются именно от этой схемы.



Для скрытия кнопок открытия, удаления  и тд точно так же задать нужное значение нужному атрибуту. Например для скрытия кнопки удалить:

 

init: function() {
	this.callParent(arguments);
	this.set("IsAddRecordButtonVisible", false);
    if(admin){ // Как понять что нынешний пользователь админ или нет думаю сами уже знаете
        this.set("canDeleteRecords", true)
    }
    else {
        this.set("canDeleteRecords", false)
    }
}

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

 

{
    "operation": "merge",
    "name": "DataGridActiveRowOpenAction" //Кнопка открытия записи
    "values": {
        "visible": {"bindTo": "YourAttribute"}
    }
},
//кнопка копирования -DataGridActiveRowCopyAction, действия те же самые

Следует обозначить YourAttribute в атрибутах как булевое значение и так же в методе init задавать ему нужное вам значение в нужном вам виде

QArt,

Я не совсем понял про расширение ViewModel можно немного больше деталей? или пример какой нибудь

Сериков Асхат Кайратович, Спасибо!, кроме кнопки добавить не заработало, но указка куда копать. Есть где-нибудь методичка нормальная? (не в SEO оформлена, чтобы как книга читать было удобно для тех кто видит впервые)

Подскажи еще плиз, начал лазить в BaseSectionV2. Добавил 

diff: [{

                    "operation": "insert",

                    "name": "bnBackCall",

                    "parentName": "DataGrid",

                    "propertyName": "activeRowActions",

                    "index": 111,

                    "values": {

                        "className": "Terrasoft.Button",

                        "style": Terrasoft.controls.ButtonEnums.style.GREY,

                        "caption": "Позвонить",

                        "tag": "tagBnBackCall"

                    },

                    {

                      "operation": "merge",

                      "name": "DataGridActiveRowOpenAction" //Кнопка открытия записи

                      "values": {

                        "visible": {"bindTo": "IsOpenVisible"}

                        }

                    },

                    {

                      "operation": "merge",

                      "name": "DataGridActiveRowCopyAction" //Кнопка открытия записи

                      "values": {

                        "visible": {"bindTo": "IsCopyVisible"}

                        }

                    },

                    {

                      "operation": "merge",

                      "name": "DataGridActiveRowDeleteAction" //Кнопка открытия записи

                      "values": {

                        "visible": {"bindTo": "IsDeleteVisible"}

                        }

                    },

                }],

        methods: {

            init: function() {

                this.callParent(arguments);

                this.set("IsAddRecordButtonVisible", false);

                this.set("canDeleteRecords", false);

                this.set("IsDeleteVisible", false);

                this.set("IsCopyVisible", false);

                this.set("IsOpenVisible", false);

            },

Кнопка "Добавить" пропала - Спасибо! Но она с главной части, а кнопки удалить, копировать и удалить остались тк они аяксом выходят при выборе ActiveRow. Вероятно их нужно удалять не (только в init) где? Хотя настроено чтобы их не было. Может что-то не так делаю и как определить текущий юзар админ или нет? По этому вопросу ничего лучше чем https://community.terrasoft.ru/articles/bpmonline-kak-opredelit-avlaets… не нашел, но пока не знаю как писать код на c# для платформы и делать так чтобы его можно было вызвать из js (на c# писать умею). Заранее спасибо!

 

QArt,

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



Про с#, не знаю как его используют другие, мы например используем его только в веб сервисах как замену бизнес процессам, все таки все плюшки шарпа можно реализовать там. К примеру вызвать веб сервис на клиенте, получить ответ от веб сервиса в виде json или чего то подобного и уже дальше отталкиваться от этого. Вот пример написания и вызова веб сервиса на академии 

https://academy.terrasoft.ru/documents/technic-sdk/7-11/kak-programmno-…



Понять администратор ли пользователь можно строчкой в init методе

this.getRoles(Terrasoft.core.enums.SysValue.CURRENT_USER.value, 
    function (result) {
        this.set("Roles", result); 
    }, 
this);

Тут выгружаются все роли пользователя в "Result", уже в коде можешь пройтись по нему в цикле посмотреть есть ли нужная тебе роль в объекте и делать дальше что по сценарию.

 



 

QArt,

Что касается кнопок, то я попробовал на секции ContactSectionV2(Секция контактов) и вот что получилось

define("ContactSectionV2", [], function() {
  return {
    entitySchemaName: "Contact",
    details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
    methods: {
      init: function() {
        this.callParent(arguments);
        this.set("IsAddRecordButtonVisible", false);
        this.set("IsButtonVisible", false); //Прячет кнопки
      },
 
      getSectionActions: function() {
        var actionMenuItems = this.callParent(arguments);
        actionMenuItems.addItem(this.getButtonMenuItem({
          Type: "Terrasoft.MenuSeparator",
          Caption: ""
        }));
        actionMenuItems.addItem(this.getButtonMenuItem({
          "Caption": "Скрыть/Показать",
          "Click": {bindTo: "showHide"},
          "Enabled": true
        }));
        return actionMenuItems;
      },
 
      showHide: function() {
        var visibleStatus = this.get("IsButtonVisible");
        window.console.log(visibleStatus);
        this.set("IsButtonVisible", !visibleStatus);
        window.console.log(!visibleStatus);
      }
    },
    attributes: {
      "IsButtonVisible": {
        "dataValueType": Terrasoft.DataValueType.BOOLEAN,
        "value": false
      }
    },
    diff: /**SCHEMA_DIFF*/[
      {
        "operation": "merge",
        "name": "DataGridActiveRowOpenAction", //Кнопка открытия записи
        "values": {
          "visible": {"bindTo": "IsButtonVisible"}
        }
      },
      {
        "operation": "merge",
        "name": "DataGridActiveRowCopyAction", //Кнопка открытия записи
        "values": {
          "visible": {"bindTo": "IsButtonVisible"}
        }
      },
      {
        "operation": "merge",
        "name": "DataGridActiveRowDeleteAction", //Кнопка открытия записи
        "values": {
          "visible": {"bindTo": "IsButtonVisible"}
        }
      }
    ]/**SCHEMA_DIFF*/
  };
});

Однако кнопки почему то скрываются только один раз и не хотят вновь показаться по нажатию на действие Показать/Скрыть которое в кнопке Действия, надеюсь это поможет разобраться как дальше 

Спросил у коллег поэтому поводу, говорят что эти кнопки добавляются куда то в buttonCollection и чтобы их скрыть/показать  надо их оттуда удалять, и при надобности обратно закидывать, а как именно я не знаю, так что вышеописанный вариант нерабочий но думаю хоть какую то информацию он дает.

Огромное спасибо! Ща начал пробовать вообще перестало работать, притом вернул экспорт из вчера и он даже не работает, чудеса какие-то ((

Привет, еще раз вопрос, и еще вопрос :) - в init написал:

init()

            {

                alert('init');    

                this.callParent(arguments);

                this.set("IsAddRecordButtonVisible", false);

                this.getRoles(Terrasoft.core.enums.SysValue.CURRENT_USER.value, 

                    function (result) {

                    this.set("Roles", result); 

                }, 

                this);

                alert(result);

            },

и вот что в отладке в хроме.консоле: (может надо в схему или куда-то что-то добавить и будет работать)

SxCandidateSection.js?hash=87519e0c9f0746dbb10b870134a8a93a:86 Uncaught TypeError: this.getRoles is not a function

    at init (SxCandidateSection.js?hash=87519e0c9f0746dbb10b870134a8a93a:86)

    at i.<anonymous> (BaseSchemaModuleV2.js?hash=87519e0c9f0746dbb10b870134a8a93a:184)

    at i.<anonymous> (BaseSchemaModuleV2.js?hash=87519e0c9f0746dbb10b870134a8a93a:142)

    at i.<anonymous> (SchemaBuilderV2.js?hash=87519e0c9f0746dbb10b870134a8a93a:715)

    at SchemaBuilderV2.js?hash=87519e0c9f0746dbb10b870134a8a93a:465

    at i.<anonymous> (ViewGeneratorV2.js?hash=87519e0c9f0746dbb10b870134a8a93a:2883)

    at ViewGeneratorV2.js?hash=87519e0c9f0746dbb10b870134a8a93a:381

    at Object.execCb (require.js:1693)

    at Module.check (require.js:881)

    at Module.enable (require.js:1173)

QArt,

Эм да, моя ошибка, забыл добавить сам метод,

getRoles: function (UserId, callback, scope) {
            var esq = Ext.create("Terrasoft.EntitySchemaQuery", { rootSchemaName: "SysUserInRole" });
            var filter = this.Terrasoft.createColumnFilterWithParameter(this.Terrasoft.ComparisonType.EQUAL, "SysUser", UserId);
            esq.filters.addItem(filter);
            esq.addColumn("SysRole.Id", "RoleId");
            esq.addColumn("[SysAdminUnit:Id:SysRole].Name", "Name");
            esq.getEntityCollection(function (response) {
                if (response &amp;&amp; response.success) {
                    var roles = [];
                    response.collection.each(function (item) {
                        roles.push({
                            Id: item.values.RoleId,
                            Name: item.values.Name
                        });
                    });
                    if (scope)
                        callback.call(scope, roles);
                    else
                        callback(roles);
                }
            }, this);
        }

 

Сериков Асхат Кайратович, 

Спасибо! Но что-то не так делаю, помоги плиз

//IsAdmin  

В Init написал      this.getRoles(Terrasoft.core.enums.SysValue.CURRENT_USER.value, 

        function (result) {

            this.set("gRoles", result); 

        }, 

        this);


В кнопке на ActiveRow написал 

var roles = this.get('gRoles');

                        var rolesAsString = '';

                        for (var i = 0; i < roles.length; i++)

                        {

                            var item = roles [i];

                          rolesAsString = rolesAsString + item[0] + ' => ' + item[1] + ' <+> ';

                        }

alert(rolesAsString);

выводит сплошные undefined притом пробовал в самом callback сделать alert(result) выдавал массив из трех элементов каждый из которых тоже массив из двух элементов, но в итоге каждое значение равно undefined

 

Что делать?

QArt,

Не могу точно сказать в чем причина, попробуй просто в ините когда получаешь роли прописать логи

this.getRoles(Terrasoft.core.enums.SysValue.CURRENT_USER.value, 
    function (result) {
        window.console.log(result);
        this.set("Roles", result); 
    }, 
this);

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



Можно еще поковырять в самой функции getRoles, посмотреть на каком этапе что выдает и где падает

Я кстати разобрался как манипулировать кнопками(скрыть/показать), еще требуется или уже сам разобрался?

Спасибо! У нас 7.1*** она возвращает массив из трех элементов, каждый элемент массива - массив из двух элементов и оба - undefined. Вероятно, из-за версии. Еще раз спасибо большое! Я еще вернусь с вопросами :)

Сериков Асхат Кайратович,

Привет, пиши как с кнопками, но у меня приемлемо работает то что ты писал до того. Можешь подсказать - https://community.terrasoft.ru/questions/obrabotka-v-onactiverowaction - мой новый вопрос, ... спасибо

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

Добрый день!

в рамках функционала производится отправка письма, в котором есть ссылка вида

http://ххх.ххх.ххх.хх:83/0/ViewModule.aspx#CardModuleV2/ICLRequestPage/…

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

нажимаем на ссылку второй раз. опять открывается окно авторизации. хотя я авторизовалась менее минуты назад.

нельзя ли сделать так, чтобы не приходилось авторизовываться при каждом нажатии на ссылку?

понятно, что есть некое время жизни и придется авторизовываться. но не ежеминутно же.

Нравится

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

Здравствуйте, Любовь!

Исходя из данного кейса, тяжело сразу ответить в чём заключается проблема.

Рекомендуем Вам обратиться с данным кейсом службу технической поддержки.

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

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

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

Можно вынести параметры агрегации по объекту (Курсы валют) на виджет, чтобы можно было менять тип валюты и дату за которую выбирать данные

Нравится

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

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

Если вы хотите изменять Сумму в зависимости от изменения Валюты и Курса, то можно добавить зависимость Суммы от  этих полей в attributes и добавить метод пересчёта Суммы.

Например:

    attributes: {

            "Сумма": {

                dependencies: [

                    {

                        columns: ["Валюта", "Курс"],

                        methodName: "название_метода"

                    }

                ]

            }

        }

Логику метода реализовать отдельно.

Demchenko Olha,

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

и это на панели итогов, пользователю нельзя менять сам Показатель (виджет)

Колодяжный Владислав Эдуардович,

Стандартными стредсвами такое нельзя сделать.

Можете попробовать изменить базовую логику и вид виджета "Показатель", добавив туда поля Валюта и Дата. И при изменении этих полей делать выборку из справочника курса на указанную дату.

Сама схема для виджета "Показатель" - IndicatorDesigner. В ней можете посмотреть как добавляются уже существующие поля и по аналогиии добавить свои.

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

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

Пока сделал следующее:

  1. создал отдельную схему под свою деталь;
  2. добавил ее на карточку нужной сущности;
  3. в методе loadGridData вполне могу вызывать свой сервис и заполнять данные;

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

Интересно мнение специалистов, о том как правильнее и проще реализовать мою задачу.

Нравится

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

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

Добрый день.

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

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

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

Есть деталь, назовём её - "Документы", со страницей редактирования.

Код обновления записи детали, со страницы редактирования:

onSaved: function() {
				this.callParent(arguments);
				if (buttonsResultYes) {
					this.updateMethod();
				}
				buttonsResultYes = null;
			},
updateMethod: function () {
				var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
					rootSchemaName: "ScDealDocuments"
				});
				esq.addColumn("Id");
				esq.addColumn("ScTopical");
				esq.filters.addItem(esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "ScTypeParticipant", this.get("ScTypeParticipant").value));
				esq.getEntityCollection(function(result) {
					if (result.success) {
						result.collection.collection.each(function (item){
							if (item.values.ScTopical) {
								var update = Ext.create("Terrasoft.UpdateQuery", {
									rootSchemaName: "ScDealDocuments"
								});
								update.filters.add("idFilter", update.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
									"Id", idTopicalPart));
								update.setParameterValue("ScTopical", false, Terrasoft.DataValueType.BOOLEAN);
								update.execute(function() {}, this);	
							}
						}, this);
					}
				}, this);	
			},

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

Попробовал вызвать этот код через sandbox.

код публикации сообщения со страницы редактирования:

onSaved: function() {
				this.callParent(arguments);
				if (buttonsResultYes) {
					this.sandbox.publish("UpdateGetGridDetail", {
						typeParticipant: this.get("ScTypeParticipant"),
						id: idTopicalPart
					}, ["updateIfTopical"]);
				}
				buttonsResultYes = null;
			},

код подписки: 

updateLoadedGridData:  function(response, callback, scope) {
    //здесь типа код изменения записей детали (код описан выше)
    this.reloadGridData();
    callback.call(scope, response);
}

но здесь опять же, подписка выполняется, данные изменяются, то реестр детали после сохранения не обновляется, только поле обновления страницы.

Можно ли как-то обновить деталь, чтобы после выполнения update, деталь так же обновлялась. 

З.Ы.: this.reloadGridData(); не помогает

Нравится

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

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

У всех деталей, которые наследуются по иерархии от BaseDetail должно быть сообщение "UpdateDetail"

Также попробуйте метод updateDetails на самой странице.

Есть еще также updateDetail в BaseGridDetail.

Попробуйте.

Золотарев Артем Андреевич,

спасибо, помог вызов метода this.updateDetail({realoadAll:true})

Коллеги, осторожно, не копируйте данное выражение, здесь опечатка в слове "reloadAll".

Должно быть так:

this.updateDetail({reloadAll:true});

 

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

Всем привет, столкнулся с проблемой

В лидах одна из колонок "Последний комментарий", это комментарий активностей в контексте карточки лида. В реесте все отображается, но -->

Расширенный фильтр:

Последний комментарий = заполненно

Не работает, выдает что ничего не найдено

Нравится

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

Здравствуйте, Роман!

Могли бы Вы, пожалуйста, прислать скриншот построения данного фильтра?

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

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

В ITIL есть понятие major incident, в продукте Service Enterprise не нашли аналогичных понятий и методов работы с такими инцидентами.

Поделитесь опытом, кто как решает и регистрирует такие инциденты ?

Заводить несколько обращений и потом решать каждое руками, с вставкой шаблона решения - идея не очень, хорошо если обращений пара-тройка штук, а если 100?)

И в данном случае связка с родительским обращением не дает эффекта.

Нравится

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

И в данном случае связка с родительским обращением не дает эффекта.

Дает, если написать процесс, который при изменении статуса родителя на "Решено" или "Закрыто" будет автоматом менять статус всем детям на "Решено" или "Закрыто", также можно и передать сам текст решения. Сам процесс можно будет запускать из кейса.

 

А раздел «Проблемы» — это не оно?

Проблема — это корневая причина одного или нескольких обращений (как возникающих, так и возможных). Например, проблемой может быть наличие частых поломок определенного узла изделия. Раздел ПРОБЛЕМЫ предназначен для обработки найденных проблем и планирования работ по их разрешению. Эффективное управление проблемами снижает влияние обращений на обслуживание и предотвращает их возникновение.

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

Зверев Александр,

 нет, проблема это причина массового инцидента. За идею спасибо!

Интересная мысль спасибо!

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

Добрый день!

В системе мы фиксируем состояние склада. В данный момент мы можем увидеть только актуальное состояние.

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

 

Нравится

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

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

Таким образом вы сможете видеть, кто когда что изменил. Ну например на складе остаток по товару был 100, сегодня 80, завтра будет 60. 

И вы эту динамику сможете посмотреть в отдельной детали в разделе.

 

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

Дата изменения, кол-во на складе. Ну и т.д. и заполнять данную деталь через БП стартом которого будет изменение раздела. 

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

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