Добрый день

Создаю контрагента в BPM из внешней системы

Формирую запрос в джейсоне на этот УРЛ

http://vng/0/ServiceModel/EntityDataService.svc/AccountCollection/

{

    "Name": "ВЕЛЕС ООО",

    "Type": {

        "__metadata": {

            "uri": "AccountTypeCollection(guid'03A75490-53E6-DF11-971B-001D60E938C6')"

        }

    },

    "Region": {

        "__metadata": {

            "uri": "RegionCollection(guid'4F485B54-54E6-DF11-971B-001D60E938C6')"

        }

    },

    "Phone": "8-932-546-3245",

    "UsrENN": "9718001737",

    "UsrKPPStroka": "771801001"

}

Но при этом сервер возвращает, что поля тип контрагента и регион не заполнены и не создает новую запись

Получается, что конструкция для полей Type и Region, которые являются полями со ссылками на справочник, не отрабатывает.

Как необходимо тогда заполнять подобного типа поля??

Нравится

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

Если вы знаете идентификаторы, которые нужно передавать, то так:

{
    "Name": "ВЕЛЕС ООО",
    "TypeId": "03A75490-53E6-DF11-971B-001D60E938C6",
    "RegionId": "4F485B54-54E6-DF11-971B-001D60E938C6",
    "Phone": "8-932-546-3245",
    "UsrENN": "9718001737",
    "UsrKPPStroka": "771801001"
}

 

Спасибо, получилось

оказывается все проще, чем я думал.

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

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

Например в случае с регионом, отыскать его по наименованию и результат поиска прописать в ссылке на регион в контрагенте, но оформить эту конструкцию одним запросом?

На академии по OData есть только это https://academy.terrasoft.ua/documents/technic-sdk/7-11/protokol-odata

Плюс, можно попробовать посмотреть официальную документацию по OData http://www.odata.org/documentation/

А вот сделать вложенный запрос не получится. Нужно будет делать два отдельных запроса.

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

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

Есть базовые роли только чтение?

Почему без ролей есть возможность редактирования информации?

Есть еще видео кроме того которое в академии указано?

Нравится

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

Юрий, добрый день!

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

Вот ссылка, на академию и на видео, где подробно описано как это сделать.

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

Коллеги, привет!

Есть кто на клауде? У всех прод недоступен сегодня в разгар рабочего дня или это наша индивидуальная проблема?

Уже 2 часа лежит, при этом ТП не говорит ни что случилось, ни когда починят. Обращение со статусом Critical.

Нравится

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

Работает. Проверил у нескольких клиентов. 

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

Владимир,

нам тоже починили. Ждём от тех.поддержки информации что это было.

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

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

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

Добрый день. Следую инструкции https://academy.terrasoft.ru/documents/technic-sdk/7-11/dobavlenie-instrumentalnoy-paneli-deystviy При добавлении панели действий на страницу получаю ошибку 

Изображение удалено.

В чем может быть проблема?

Нравится

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

А зачем создавать себе сложности? Создайте кейс для раздела и ActionDashboard будет добавлен автоматически.

Здравствуйте, Максим!

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

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

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

Коллеги, как запретить добавлять новые города пользователям (в том числе и System adminsitator'ам) через такую прекрасную функциональность, как Создать в Lookup?

Это относится не только к городам, просто, как самый яркий пример.Изображение удалено.



Если честно, пользователи жмут, не думая. Потом чистить надоедает.

 

Нравится

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

Добрый день, Владимир!

Данная логика настраивается на уровне системной операции с кодом "CanManageLookups". На детали "Доступ к операции" удалить те пользователи или роли, у которых нужно забрать права на данную функциональность. После этого не будет появляется кнопка «Создать» в самом поле страницы, если такой записи еще нет в справочнике. Минусом данного варианта является тот момент, что у пользователей не будет доступа к разделу "Справочники", так как это взаимосвязанный функционал. 

в LookupQuickAddMixin закомментировать или изменить строчку:

config.objects[Terrasoft.GUID_EMPTY] = this.getNewListItemConfig(config.filterValue);

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

upd. меня опередили) в принципе совет сверху тоже подойдет, ибо там же в init стоит проверка 

RightUtilities.checkCanExecuteOperation({
	operation: "CanManageLookups"
}

 

Варфоломеев Данила,

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

Борис Леонов пишет:

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

Resources. это вкратце.

Подробнее: замещаем схему (модуля). копируем туда подчистую код. 

1) отсутствует вкладка less. надо модуль сохранить, перезайти заново и только тогда она появится

2) локализ. строки - они есть, но их нет. В буквальном смысле. Приходится перед всеми строками ставить точку, сохранять, потом убирать точки и пересохранять

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

4) все messages нужно перевбивать. руками. good luck have fun

мб что-то ещё. уже не помню)

Варфоломеев Данила,

очень сильно вкратце :)

Борис Леонов пишет:

очень сильно вкратце :)

 расписал) ух как горит пятая точка - проблемы не могут исправить 2 год как

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

Данная логика настраивается на уровне системной операции с кодом "CanManageLookups"

У меня ощущение, что на города это не действует. Кроме того, эта логика останется на Контрагенты, Контакты и другие Lookup-поля, которые ссылаются не на Справочники, а на Разделы 

Варфоломеев Данила,

ценная инфо, спасибо!

это не всегда происходит, случайным образом?

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

Борис Леонов,

Всегда, при замещении модуля. при замещении простых page и section(к примеру) всё отлично.

Варфоломеев Данила,

еще раз спасибо за информацию!

Радикальный вариант — пустым INSTEAD OF INSERT триггером на таблице городов. Или такой же логикой на уровне БП при добавлении записей в этой таблице.

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

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

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

Как это лучше реализовать?

И можно ли ждать изменения Активности, которая не была создана?

Нравится

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

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

Если я правильно понял Вашу задачу, достаточно реализовать логику, как показано на скриншоте.

http://prntscr.com/ilxavr

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

Логвин Андрей Витальевич,

да, почти так и пришлось сделать. Жаль что элементы "И" нельзя умно связать, чтобы выход одного соответствовал входу другого, тогда "огород" по размерам стал бы сильно меньше.

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

Регулярно вываливается вот такая ошибка

Изображение удалено.

Все бы ничего, все работает дальше, но если она вывалится при компиляции, то комп затягивается на очень долгое время, кто стыкался с данным явлением?

Нравится

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

:DDD 

Добро пожаловать в bpm) У нас такая же фигня была, когда я смастерил громадный БП. Т.е БП компилировался без ошибок, я его запускаю и всё крашится/вылетает IIS. Как оказалось - баг платформы, который пофиксили в 11.3.

На вашем месте я бы отследил шаги, которые приводят к данной проблеме, и обратился в поддержку(ну а вдруг там опять какой-то косяк в dll-ке).

 

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

Для анализа вопроса направьте в поддержку логи приложения (C:\Windows\Temp\BPMonline\Site_ID) и логи windows (c текстом ошибки, пример на скриншоте)

 

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

Здравствуйте, коллеги.



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



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

Заранее спасибо!

Нравится

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

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

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

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

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

Задача заключается в следующем. Есть карточка счета/договора/и т.д. В карточке заполнено какое-либо справочное поле. Так вот, необходимо в зависимости от этого справочного поля отображать разный список печатных форм.

Было выяснено, что список доступных для печати форм формируется в методе initCardPrintForms в миксине ["PrintReportUtilities"]

Соответственно, я этот метод переопределил.

Добавив туда после вызова метода 

this.preparePrintFormsMenuCollection(printFormsMenuCollection);

Вызов своего метода для скрытия формы:

this.hidePrintFormsMenuItem(printFormsMenuCollection);

В этом методе планировалось построчно проверять название (или id) отчета и в зависимости от этого скрывать конкретную форму из списка.

Планировалось использовать что-то типа такой конструкции:

hidePrintFormsMenuItem: function(printForms) {

    printForms.eachKey(function(key, item) {

      var formName = item.get("Caption");

        switch (ЗНАЧЕНИЕ_СПРАВОЧНИКА) {

        case value1:

        if (formName!="Отчет1") item.set("Visible", false);

        break;

        case value2:

        if (formName!="Отчет2") item.set("Visible", false);

        break;

        }    

    }, this);

},

Собственно вопрос в том, как получить значение нужного мне поля (справочника) в контексте текущего метода? А может есть готовое решение и не нужно изобретать велосипед? 

Нравится

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

Хотел воспользоваться this.get("СПРАВОЧНИК").displayValue, но при первичной инициализации такого параметра еще нет. Вопрос остается открытым, как получить значение параметра с карточки раздела во время формирования списка печатных форм?

Добрый день, Павел!

Во-первых, нужно переопределить метод initCardPrintForms, в котором после вызова this.callParent(arguments) нужно забиндиться на видимость печатных форм. Сделать это можно так:

//получаем коллекцию всех печатных форм
var printMenuItems = this.get(this.moduleCardPrintFormsCollectionName);
printFormsMenuCollection.each(function(item) {
  item.set("Visible", {bindTo: "getPrintMenuItemVisible"});
}, this);

А уже в самом методе getPrintMenuItemVisible описать логику и возвращать true - для тех, которые отображать и false, для которых не отображать.

getPrintMenuItemVisible: function(reportId) {
  //логика и возврат true/false
}

Чтобы взять нужное вам поле и чтобы оно было инициализировано следует вызвать метод initCardPrintForms в самом конце onEntityInitialized (то есть после this.callParent(arguments)). 

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

Золотарев Артем Андреевич, спасибо за ответ. Смысл понятен, но появились проблемы. Если следовать вашему совету, и переопределить метод initCardPrintForms таким способом

  initCardPrintForms: function(callback, scope) {
                this.callParent(arguments);
                //получаем коллекцию всех печатных форм
                var printMenuItems = this.get(this.moduleCardPrintFormsCollectionName);
                printFormsMenuCollection.each(function(item) {
                    debugger;
                    item.set("Visible", {bindTo: "getPrintMenuItemVisible"});
                }, this); 
            },

то this.get(this.moduleCardPrintFormsCollectionName); возвращает undefined

И как я понимаю, в следующей строке, где происходит перебор коллекции нужно обращаться к printMenuItems, а не к printFormsMenuCollection?

Попробуйте вызывать initCardPrintForms в конце onEntityInitialized, тогда коллекция должна подтянуться.

Да, нужно обращаться к printMenuItems, опечатался

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

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

сгенерировать меню печати повторно можно вызвав

this.getCardPrintButtonVisible()

У меня все равно не получилось добиться результата.

Если попытаться загрузить коллекцию печатных форм через 

this.get(this.moduleCardPrintFormsCollectionName);

в методе initCardPrintForms после this.callParent(arguments), то коллекция не подгружается.

Если скопировать код метода initCardPrintForms и изменить видимость элементов непосредственно в printFormsMenuCollection, то во время второго вызова initCardPrintForms (когда уже прошла инициализация onEntityInitialized), новое меню не формируется и в консоль падает ошибка Uncaught TypeError: callback.call is not a function. Это на строке callback.call(scope || this); в методе initCardPrintForms.

Попробуй тогда использовать просто переопределенные методы либо initCardPrintForms, либо getCardPrintButtonVisible, там по идее уже должны быть доступны поля объекта.

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

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

Как реализовать само окно и его вызов по нажатии на кнопку?

 Изображение удалено.

Нравится

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

Владислав, вы можете реализовать его используя ModalBox. Посмотрите каким образом реализован ModalBox и его использование (на примере lookupPage)

Суть простая. ModalBox возвращает вам контейнер, в который вы загрузите требуемый модуль.

Что-то типа этого:

var modal_box_container = ModalBox.show();
sandbox.loadModule("MyModule", {
    renderTo: modal_box_container
})

 

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