среда, 11 июля 2018 г.

Спецификация. Начало.

«Твоя спецификация - место преступления»

Дружочки-пирожочки, вот мы плавненько подошли к самой волнующей теме. 


Сегодня мы рассмотрим тот самый шаблон, к которому можно предъявить. Каталоги сделали, миникаталоги сделали, даже уже и модель сделали - пришло время выводить. Я уже показывал то, что получается на конечном этапе, сегодня разберем подробнее. Обсудим каждое поле, которое видно и не видно на спецификации. Да, может растянем это удовольствие на 2 дня, а то и на 3. Да, можно было сделать все намного проще, но никто же не подсказал (ай-яй-яй). Если вы знаете как упростить то или иное поле, а также есть какие-то предложения по доработке - жду в комментариях, во всех соцсетях, где есть темы о P3D.  И мы начинаем КВН RCP3D!


На рамке не буду заострять внимание, скажу лишь то, что боковой кусок штампа сделал подложкой, т.к. было лень его рисовать:) Cross-Band-Box отлично подойдет для основных полей рамки, но я об этом понял позже, поэтому у меня граница выполнена в стиле "line осень-весна". 

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

Долго думал о нумерации. Сортировать по полю Mark, которое содержит макрос нумерации, не получалось, т.к. цифры были, скажем так, непонятные. К тому же, в файле может быть разный набор деталей и постоянной нумерацией тут не обойтись (имелось ввиду, если сразу поставить "2. Фитинги", "3. Арматура" и не будет арматуры, то будет картина следующего характера: "2. Фитинги", "4. Крепеж"). На помощь пришла скакалка... или смекалка. 


Начну издалека. В наборе \ запросе элементов есть такое понятие как ACP_ClassOrder.


Если опустить все научные объяснения данного феномена, это системное поле, которое присваивает цифру, если можно так сказать, каждому типу элементов, которые попадают в запрос на спецификацию. Т.е. у каждого типа элемента появляется порядковый номер, который соответствует позиции в запросе. По этому полю частенько сортируют и оно висит первым в списке сортировки. И именно оно подтолкнуло меня на создание нового поля в проекте. Им стало поле "Specif". Со стандартным полем было бы много мороки, а может и не получилось бы, поэтому я сделал ему аналог и расставил для каждого типа. Зная каждую циферку, они ж мне как родные, появилась формула и первое поле на сортировку по типам: 


(Iif ( ( [Equipment_Specif] == 5 ), '1',
Iif ( ( [Equipment_Specif] == 14 ), '1',
Iif(([Specif] == 1), '2' ,
Iif([Инженерные элементы_ContentIsoSymbolDefinition] == 'TYPE=BEND,SKEY=PBBW','2',
(Iif ( ( [Specif] == 2 ), '5',
(Iif ( ( [Specif] == 3 ), '6',
Iif ( ( [Fasteners_Specif] == 4 ), '7',
Iif ( ( [Specif] == 7 ), '8',
Iif ( ( [Equipment_Specif] == 7 ), '8',
Iif ( ( [Fasteners_Specif] == 7 ), '8',
Iif ( ( [Specif] == 6 ), '8',
Iif ( ( [Equipment_Specif] == 6 ), '8',
Iif ( ( [Fasteners_Specif] == 6 ), '8',
Iif ( ( [Инженерные элементы_Стандарт] == 'ASTM D5685 ' Or [Инженерные элементы_Стандарт] == 'ASTM D4024 ' ), '4',
Iif( ( [Инженерные элементы_Код материала] == 'ASTM' ), '4' , '3' ) ) ) ) ) )))))))))))))


Как видно из формулы, для каждого типа элементов поле разное, но смысл не меняется. Это как поле "Вес" для деталей и оборудования. То, что необходимо "выделять" как общий тип в спецификации, вы нумеруете, а потом присваиваете ему порядковый номер, тем самым объясняете программе порядок вывода. На манипуляции с полем "Стандарт" не обращайте внимания, это исправление косяков:) Помимо разделения оборудования, труб, арматуры, крепежа, спецификация делится на фитинги и детали трубопроводов (зарубежные и наши детали). За это и отвечает последняя строка формулы. Также, выделено значение "8" под прочие детали. Теперь остается добавить это вычислимое поле в сортировки и мы получаем некую последовательность при выводе типов.

Когда есть понимание, как и в какой последовательности выводить, можно приступать и к украшениям. Поле [Position_Z_conclude] перекочевало ко мне из начальных работ этого блога, я не стал ничего менять, т.к. на результат это не влияет. В него я записал следующее:

(Iif ( ( [Equipment_Specif] ==  5 ),[Mark2]+'. Оборудование', 
Iif ( ( [Equipment_Specif] ==  14 ),[Mark2]+'. Оборудование', 
Iif(([Specif]  ==  1), [Mark2]+'. Трубопроводы'   ,  
(Iif ( ( [Specif]  ==  2 ), [Mark2]+'. Арматура', 
(Iif ( ( [Specif]  ==  3 ), [Mark2]+'. Опоры',
Iif ( ( [Fasteners_Specif]  ==  4 ), [Mark2]+'. Крепеж', 
Iif ( ( [Specif] ==  7 ), 'Прочее', 
Iif ( ( [Equipment_Specif] ==  7 ), 'Прочее', 
Iif ( ( [Fasteners_Specif] ==  7 ), 'Прочее', 
Iif ( ( [Specif] ==  6 ), 'Прочее', 
Iif ( ( [Equipment_Specif] ==  6 ), 'Прочее', 
Iif ( ( [Fasteners_Specif] ==  6 ), 'Прочее', 
Iif( ( [Инженерные элементы_Код материала]  ==  'ASTM' Or  [Инженерные элементы_Стандарт] == 'ASTM D4024 ' ), [Mark2]+'. Фитинги' , [Mark2]+'. Детали трубопровода' ) ) )  ) ) )))))))))))

Как видите, эта именно та сортировка, о которой писал выше. Сначала идет оборудование, потом трубопроводы, детали трубопроводы или фитинги (или и то, и то, или что-то одно), арматура, опоры, крепеж и закрывает парад некое "прочее". Рядом с текстом, который взят в одинарные кавычки, можно заметить поле [Mark2]. Нет, это не костюм из ЖЧ, это еще одно поле с макросом на маркировку. Первое использовать нельзя, т.к. оно отвечает за маркировку деталей, поэтому я решил сделать еще одно со своим порядком. Если кто не помнит этот скрипт:

int RowCount2=1;
private void Mark2_GetValue(object sender, DevExpress.XtraReports.UI.GetValueEventArgs e) {
e.Value = RowCount2;
RowCount2++;

С этим разобрались, остались немного. Поле [Семейство] содержит в себе [Инженерные элементы_Полное описание (семейство)]. Т.к. там записано название документа, по которому выполнен тот или иной элемент, в любой момент можно поменять, если кто-то допустил ошибку или кого-то не устраивает такая запись. Примером из жизни может послужить данная запись в поле :
(Iif ( ( [Инженерные элементы_Полное описание (семейство)] ==  'Опоры под фланец' ),'Опоры под фланец для труб FRP', 

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

[SpecificationNamePosition] отвечает за запись элементов. Т.к. информация в каталогах раскидана на разные поля, запись формируется путем сложения нескольких полей. Чаще всего, выглядит это так: 

[Инженерные элементы_Краткое описание]+ '   '+  [Инженерные элементы_Код элемента]

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

На этом все, в следующий раз познакомлю с сортировкой всего этого добра. По-прежнему принимаю вопросы и обоснованную критику:) 

До скорых встреч!

6 комментариев:

  1. Скажите, а есть возможность где то скачать файл .rcf последней редакции с учетом того что вы здесь изложили?

    ОтветитьУдалить
  2. А можно ли объединить трубы и линейные компонент трубы под общий тип в спецификации с одним порядковым номером?

    ОтветитьУдалить
  3. Добрый день,
    Скажите, а есть возможность где то скачать файл .rcf последней редакции с учетом того что вы здесь изложили?

    ОтветитьУдалить
    Ответы
    1. Добрый, не думаю, что остался где-то нормальный вариант:)

      Удалить
  4. Добрый день,
    Можно не полностью нормальный вариант, хотелось посмотреть сам принцип, как вы это делали.

    ОтветитьУдалить