Добрый день!

 

Есть проблема с импортом записей из Excel. При импорте не заполняется номер обращения, который автозаполняется при добавлении записей. Маска и текущий номер.

 

Реализация автозаполнения сделана на серверной стороне посредством событийного слоя, триггер - после добавления записи. 

 

Требуется ли переработка импорта из Excel, чтобы происходило автозаполнение с изменением системной настройки текущего номера или есть какие-то обходные решения?

Нравится

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

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

Выполняем нумерацию собственного объекта (сметы).

Создали настройку, в которой хранится маска номера и текущий номер последнего созданного объекта (последний номер нужен еще для других целей).

Объект создается из другого через бизнес-процесс и при его создании необходимо не просто считать  настройку (текущий номер объекта), но и добавить к значению системной настройке единицу.

Подскажите пжлст можно ли это сделать через БП... городить код не хочется).

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

Нравится

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

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

Terrasoft.Core.Configuration.SysSettings.SetDefValue(userConnection, "SettingName", value);

Для текущего пользователя устанавливается так:

Terrasoft.Core.Configuration.SysSettings.SetValue(userConnection, "SettingName", value);

Для конкретного пользователя или группы:

Terrasoft.Core.Configuration.SysSettings.SetDefValue(userConnection, sysAdminUnitId, "SettingName", value);

Во 2-м и 3-м случаях настройка должна быть персональной, иначе словите исключение.

Добрый день!

Можно считать настройку с текущим номером, дальше через элемент "формула" получить этот номер и добавить к нему 1. А дальше номер можно передавать в элементы добавить данные или изменить данные, в зависимости от ситуации. 

Евгений Манько,

Евгений,  а каким элементом процесса записать полученный рассчитаный номер обратно в системную настройку?  Через "изменить объект"? или есть более простой способ?). Спасибо!

Есть готовый элемент GenerateSequenseNumberUserTask, предназначенный именно для этого. Вот разные примеры нумерации.

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

Александр, спасибо! Да, это элемент для нумерации.  Нам нужно не просто пронумеровать объект, а этот получившийся через формулу номер, записать в системную настройку.номевернуть 

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

Terrasoft.Core.Configuration.SysSettings.SetDefValue(userConnection, "SettingName", value);

Для текущего пользователя устанавливается так:

Terrasoft.Core.Configuration.SysSettings.SetValue(userConnection, "SettingName", value);

Для конкретного пользователя или группы:

Terrasoft.Core.Configuration.SysSettings.SetDefValue(userConnection, sysAdminUnitId, "SettingName", value);

Во 2-м и 3-м случаях настройка должна быть персональной, иначе словите исключение.

Бершеда Д. Н. Спасибо!!!)

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

 

Попытался вот так:

var userConnection = context.UserConnection;

String IDToken = Get<String>("IDToken"); 

Terrasoft.Core.Configuration.SysSettings.SetDefValue(userConnection, "System ID Token", IDToken);

return true;

 

Никакой ошибки не дает, компилируется, но при выполнении процесса этот скрипттаск не отрабатывает - процесс на нем и останавливается.

 

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

 

Версия платформы - текущая. Пробую на триальном 14-дневном сайте.

Добрый день.

Скорее всего вы передаете неправильный код системной настройки.

Пример рабочего скрипт-таска:

string settingCode = "SystemIdToken"; // код системной настройки
string settingValue = "Test2"; // новое значение
Terrasoft.Core.Configuration.SysSettings.SetDefValue(UserConnection, settingCode, settingValue);
return true;

Результат:

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

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

Пытался сделать автонумерацию для объекта Листинг, как описано здесь (на стороне клиента), но ничего не срабатывает (все работает как обычно и ничего не меняется).
После добавления указанного кода из статьи появилось сообщение об ошибке JavaScript, код добавил только вот здесь

Замещающая страница и объект (экспорт) во вложении

Помогите разобраться, не пойму что не так?
Заранее благодарен!

Нравится

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

Павел, а Вас не смущает, что Вы используете SDK для версии 7.9?

Для версии 7.7 - https://academy.terrasoft.ru/documents/technic-sdk/7-7-0/kak-dobavit-av…

"Мотков Илья" написал:Павел, а Вас не смущает, что Вы используете SDK для версии 7.9?

Спасибо! :)

Илья, когда я обновлюсь до версии 7.9, то все, что сделано для версии 7.7 придется переделывать?

Павел, в 7.7 автонумерацию нужно было добавлять на стороне клиента И сервера, в 7.9 же она добавлется ИЛИ на клиенте, ИЛИ на сервере. То есть Вам просто нужно будет либо удалить событийный подпроцесс из объекта, либо код из замещающей клиентской схемы. Обязательно оставьте хотя бы одно.)

"Мотков Илья" написал:

Павел, в 7.7 автонумерацию нужно было добавлять на стороне клиента И сервера, в 7.9 же она добавлется ИЛИ на клиенте, ИЛИ на сервере. То есть Вам просто нужно будет либо удалить событийный подпроцесс из объекта, либо код из замещающей клиентской схемы. Обязательно оставьте хотя бы одно.)

Спасибо! Буду разбираться

Попробовал все сделать как для версии 7.7.

Возникли ошибки после публикации объекта Listing, в котором создавал процесс обработки события Перед добавлением записи http://prntscr.com/f0fmpo

Вроде все сделал как описано, создал системные переменные, поле UsrCode для объекта, куда должно записываться значение номера. Сначала сделал его цифровым (Integer), вышла ошибка после публикации объекта. Потом все переделал, сделав его строкой (String), но все равно ошибка (в скрине выше).

Что я не так делаю, подскажите? Схемы во вложении

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

Следует типизировать значение колонки в условном потоке - в условии указать значение “string.IsNullOrEmpty(Entity.GetTypedColumnValue("Code"))”
(вместо “string.IsNullOrEmpty(Entity.GetTypedColumnValue("Code"))”)

"Зарицкий Олег" написал:Следует типизировать значение колонки в условном потоке - в условии указать значение “string.IsNullOrEmpty(Entity.GetTypedColumnValue("Code"))”
(вместо “string.IsNullOrEmpty(Entity.GetTypedColumnValue("Code"))”)("Code"))

Олег, Вы указали одинаковые строки

см. вложение
gettypedcolumnvalue.txt

"Зарицкий Олег" написал:

см. вложение
gettypedcolumnvalue.txt

Спасибо, Олег! Все заработало!

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

Здравствуйте, подскажите, пожалуйста, реально ли реализовать автонумерацию строк в детали, к примеру “контакт в группе” с учетом удаленных записей и т.д.?

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

Нравится

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

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

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

Добрый день, Мария!

Подскажите, по статье ниже добавляли автонумерацию?
https://academy.terrasoft.ua/documents/technic-sdk/7-9/primer-ispolzova…

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

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

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

Это не самая корректная реализация. Правильнее присваивать номер счета после сохранения записи

спасибо :smile:

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

Можно сделать автонумерацию поля без создания бизнес процесса?
То есть определенной функцией на клиентском коде js

Нравится

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

Приветствую, Александр!

Пример описан в SDK:

http://academy.terrasoft.ru/documents/docs/technic/SDK/7.7.0/CreateAuto…

Логику необходимо прописывать как в процессе объекта, так и на клиентской части.

При создании действий объекта для автонумерации возникла проблема при работе с бизнес процессом.
При перетаскивании условного элемента в бизнес процесс кажется такой exception

Добрый день!

Задачу можно решить - перед добавлением нового элемента найти в структуре процесса элемент с названием ExclusiveGateway1 и изменить его название, например на “ ExclusiveGateway”.

"Зарицкий Олег Васильевич" написал:Задачу можно решить - перед добавлением нового элемента найти в структуре процесса элемент с названием ExclusiveGateway1 и изменить его название, например на “ ExclusiveGateway”.

Кстати при замещении базовых объектов во эта "Not a bug, but feature" реально раздражает, так как сопровождается свалом редактирования. Может в 7.99 версии можно будет обработчик такой ошибки сделать нормальный - с сообщением предупреждением?

В версии 7.8 будет исправлено.

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