Автонумерация (Вертикаль)

Автор Dim, 19.05.21, 13:50:19

« предыдущая - следующая »

0 Пользователей и 1 гость просматривают эту тему.

Dim

Меню "Настройка" - "Автонумерация" на вертикале
Сделать кнопку, которую будет в текущий ТП копировать скрипт (не проблема создать кнопку, но проблема как вставить скрипт на VBS).
Можно ли программно заполнять (записать) в неё функцию (находится на форме "Автонумерация" - VBS).
Подскажите, пожалуйста, я сделал разными способами, в том числе через АПИ. Чет на получается.
Заранее спасибо.

tur

А что хотите получить?

Dim

200 пользователей бегать и вставить готовый скрипт, как то не правильно... Ведь Автонумерация не хранится на сервере. Мне проще создать кнопку и внутри прописать копированный скрипт (на сервере), затем объявим, чтоб другие пользователи нажали на эту кнопку и этот скрипт автоматически вставится в автонумерацию, где находится функция VBS.
См. на рисунке.
Помогите, плиз.


tur

Вертикаль хранит настройки в папке "C:\Program Files (x86)\ASCON\Vertical\Template", файлы detail.vtp; assembly.vtp и NewTTP.ttp.
Если у вас доменная структура, при старте Винды просто напишите скрипт, которым замените эти файлы на ваш шаблонный на всех машинах. Но это коснется только новых процессов, на старых, только ручками.
P.S. Я. например даже не нашел где хранится функция "num_generated".

Dim

Спасибо, tur.  :sun:
Проблема, в том что старых процессов очень-очень много. Им надо на всех машинах вставить нужный скрипт.  :(
Через АПИ возможно? Хотя в справочнике не мог найти, тк все смутно и сложные функции.
Сам не знаю, что дальше делать.
С уважением.

PS. Нашел что есть такая библиотека VtpUtilsOCX, провал через дельфи импортировать, есть там несколько функции, в том числе TNumberatorVbs, но увы, мне все не понятно. Короче, все сложные.

tur

Можно не использовать нумератор в ТП (атрибут "IndexOper") и написать атрибут свой через атрибуты и функции конфигуратора. В вашем случае атрибут "IndexOper", просто заменить своим атрибутом.
У нас, например "IndexOper" в чистом виде не используется, а это сборный параметр (скриншот).
Т.е. не выводите в карту данные нумератора, выводите свои данные.

P.S. Т.е. не обращаете внимание на встроенный нумератор.

Dim

К примеру, у меня есть собственный скрипт для ТП в Автонумерации (см. скрипт снизу).
Получается, Вы советуете этот скрипт вставить в конфигуратор, где находится атрибут "IndexOper" из группы "Oper", как правильно понимаю.
Если я не прав, то подскажите, пожалуйста, чуть поподробнее. с уважением.

function GetNumber(obj, prev_obj, numerator, num_generated)
  obj.vrAttrByName("ind").vrvalue="0"
  if prev_obj is nothing then obj.vrAttrByName("ind").vrvalue="005"
   ...
   ...
   ...
  GetNumber = prev_obj.vrAttrByName("ind").vrvalue+5
end function

tur

Создайте свой атрибут (или сразу как вычисляемый или свяжите его с другим вычисляемым), возможно атрибут "IndexOper" может работать некорректно. Везде вместо "IndexOper" используйте свой атрибут. В функции Showme, замените  "IndexOper" на свой атрибут, можно даже скрыть видимость "IndexOper" (только ни в коем случае не удаляйте его).
Как вы используете встроенный номер операции?
Если просто для вывода в карту ТП, то вам без разницы какой из атрибутов будет выводится. в карте исправите и все.

P.S. Если отказаться от IndexOper, то исправления нужно будет вносить, во всех используемых вами картах ТП.

tur

Наверное придется еще в "afterconstruction" добавить строку "  obj.vrAttrByName("ВАШ АТРИБУТ").vrValue = 5 'ВАШ АТРИБУТ по-умолчанию равен 5 - Чтобы нумерация всегда начиналась с 5

Да и в "afterfirstlink" и "diag_operation", придется строки дописывать и менять.

Нужно будет добавить строки
'Подписываемся на изменение атрибута
Eventer.AdviseOnChangeAttribute tsht_attr, obj.vrAttrByName("ВАШ АТРИБУТ"). чтобы нумерация пересчитывалась автоматически, при перемещении, удалении или добавлении операций.

P.S. Сексу будет много, может еще где-то что-то вылезти.

Dim

Примерно понятно. Решил использоваться атрибут "IndexOper", тестировать буду. Атрибут "IndexOper" - решил заменить тип атрибута на функцию.
prev_obj - чем можно заменить? какая функция для предыдущего пронумерованного объекта?

Цитата: tur от 21.05.21, 12:36:02Создайте свой атрибут (или сразу как вычисляемый или свяжите его с другим вычисляемым), возможно атрибут "IndexOper" может работать некорректно. Везде вместо "IndexOper" используйте свой атрибут. В функции Showme, замените  "IndexOper" на свой атрибут, можно даже скрыть видимость "IndexOper" (только ни в коем случае не удаляйте его).
Как вы используете встроенный номер операции?
Если просто для вывода в карту ТП, то вам без разницы какой из атрибутов будет выводится. в карте исправите и все.

P.S. Если отказаться от IndexOper, то исправления нужно будет вносить, во всех используемых вами картах ТП.


Dim

Спасибо. В понедельник попробую. С уважением.

Цитата: tur от 21.05.21, 12:54:52Наверное придется еще в "afterconstruction" добавить строку "  obj.vrAttrByName("ВАШ АТРИБУТ").vrValue = 5 'ВАШ АТРИБУТ по-умолчанию равен 5 - Чтобы нумерация всегда начиналась с 5

Да и в "afterfirstlink" и "diag_operation", придется строки дописывать и менять.

Нужно будет добавить строки
'Подписываемся на изменение атрибута
Eventer.AdviseOnChangeAttribute tsht_attr, obj.vrAttrByName("ВАШ АТРИБУТ"). чтобы нумерация пересчитывалась автоматически, при перемещении, удалении или добавлении операций.

P.S. Сексу будет много, может еще где-то что-то вылезти.

tur

Не трогайте IndexOper, создайте свой, хотя бы IndexOper_2. IndexOper может оказаться прописан где-то в коде и непонятно как поведет себя Вертикаль.