Редактирование вычисляемого атрибута в Вертикаль V4

Автор tur, 09.12.09, 12:01:08

« назад - далее »

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

tur

Добрый день!

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

Вячеслав

Добрый день!

Чисто "джедайское" решение: создайте обычный атрибут, куда Вы дописываете нужную информацию, создайте еще один вычисляемый атрибут, который будет склеивать первый вычисляемый и добавленный обычный.

Но это так, "на скору руку, собі на муку"...
Может быть и красивее решения есть.

tur

Добрый день, Вячеслав!

В принципе Вы ответили мне правильно, но есть одно "но".
Есть необходимость не только дописывать данные, а именно добавлять или убирать из вычисляемого атрибута некоторые данные. Это связано с тем, что необходимый мне атрибут отсутствует в справочнике МиС и его приходится собирать по частям из кусочков данных по материалу справочника МиС. А в самом справочнике необходимых данных для этого материала может и не быть по различным причинам.

Вячеслав


teplinskiy

Есть несколько вариантов работы...

Вариант 1:
1) Создаются простые атрибуты. Их столько сколько свойств нужно вернуть из МиС.
2) У каждого атрибута в поле "Справочник" прописывается инструкция к этому свойству.
3) Добавляется/Изменяется функция - function AfterConstruction(obj). В ней задаются значения атрибутов по умолчанию: obj.vrAttrByName("my_atr_1").vrValue = значение по умолчанию. В случае если свойство у материала из МиС отсутствует, значение по умолчанию останется.
4) Создаем вычисляемый атрибут. Определяем функфию в поле "По функции"
5) Создаем функцию. Возвращаем результат сложения всех значений атрибутов.

Вариант 2:
1) Создаются простые атрибуты. Их столько сколько свойств нужно вернуть из МиС.
2) У каждого атрибута в поле "Справочник" прописывается инструкция к этому свойству.
3) Создаем вычисляемый атрибут. Определяем функцию в поле "По функции"
4) Создаем функцию для вычисляемого атрибута. Проссматриваем значение каждого атрибута.
Формируем условные зависимости для этого значения. И в результат добавляем те или иные "кусочки" данных. Возвращаем результат.

Вариант 3:
Фантазия безгранична...

tur

 Добрый день, г-н teplinskiy!
Цитата: teplinskiy от 10.12.09, 09:51:57

Вариант 1:
1) Создаются простые атрибуты. Их столько сколько свойств нужно вернуть из МиС.
2) У каждого атрибута в поле "Справочник" прописывается инструкция к этому свойству.
3) Добавляется/Изменяется функция - function AfterConstruction(obj). В ней задаются значения атрибутов по умолчанию: obj.vrAttrByName("my_atr_1").vrValue = значение по умолчанию. В случае если свойство у материала из МиС отсутствует, значение по умолчанию останется.
4) Создаем вычисляемый атрибут. Определяем функфию в поле "По функции"
5) Создаем функцию. Возвращаем результат сложения всех значений атрибутов.


Я не большой знаток программирования, второй предложенный Вами вариант я сделал, но в соответствии с ГОСТ и СТП у меня получилось при добавлении листа (рисунок 6). то что нужно, но если меняется сортамент материала, там соответственно совсем другие технические параметры и соответственно часть полей - пустые (рисунок 7), вот откуда возникла необходимость редактирования атрибута. Если вставлять в поле атрибут "основной материал" то он выглядит следующим образом Лист Б-ПН-НО-4х1500х6000 ГОСТ 19903-74/20-ТВ1-М1-КИ...... (много "лишней" информации).
Буду очень благодарен за помощь в решении этой проблемы!

teplinskiy

10.12.09, 16:07:35 #6 Последнее редактирование: 10.12.09, 16:30:08 от teplinskiy
Цитата: tur от 10.12.09, 14:43:06
Я не большой знаток программирования, второй предложенный Вами вариант я сделал, но в соответствии с ГОСТ и СТП у меня получилось при добавлении листа (рисунок 6). то что нужно, но если меняется сортамент материала, там соответственно совсем другие технические параметры и соответственно часть полей - пустые (рисунок 7), вот откуда возникла необходимость редактирования атрибута.
Неточность в том, что вы собираете вычисляемый атрибут:
1) не проверяя значения входящих в его состав простых атрибутов
2) разделяя атрибуты символом "-", не зависимо от пункта 1)

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

  му_function = ""
  if obj.vrAttrByName("my_1_attr").vrValue <> "" then                ' проверка на пустоту
    му_function = му_function & "-" & obj.vrAttrByName("my_1_attr").vrValue
  end if
  ...
  ... 
  if obj.vrAttrByName("my_N_attr").vrValue <> "" then                ' проверка на пустоту
    му_function = му_function & "-" & obj.vrAttrByName("my_N_attr").vrValue
  end if

  if му_function <> "" then             ' проверка на пустоту
    му_function = Mid(му_function, 2, Len(му_function) - 1)      ' убираем первый знак "-"     
  end if

Здесь речь идет об строкового типа атрибутах и проверка может меняться в зависимости от типов

tur

Большое спасибо! Все получилось даже лучше чем я ожидал.