• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

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

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

С уважением,
Команда Ascon

Транслятор BOM_out

Автор rain, 07.12.15, 11:39:48

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

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

rain

Здравствуйте, коллеги!
мне нужен совет по поводу лоцмана. сейчас правлю трансляторы после предыдущего программиста (скажу сразу, что я не программист, а конструктор, но приходится заниматься такими вещами). дело вот в чем.
выходной транслятор спецификации. В компасе конструктор создает прочее изделие, добавляет в этот раздел изделие из МиС (они допиливали справочник, добавляли туда свои изделия). и когда я в лоцмане получаю информацию из спецификации, в трансляторе проверяется условие, что изделие находится в разделе Прочие изделия и является Материалом по КД. Если это условие выполняется, то в лоцмане в дереве этот объект отображается как Прочее изделие. Суть в том, что если допустим какой-то диод из спецификации есть в базе лоцмана (в составе другого изделия) в виде прочего изделия, то он добавляется в дерево нового проекта как Прочее (т.е. так, как нам и нужно). если же его нет в лоцмане, то вообще ничего не добавляется. Я так понял, суть в том, что если указанное выше условие выполняется, то в трансляторе нужно прописать создание прочего изделия. А я пока не могу точно понять, как создавать объект. прочитал в инете по этому поводу, пишут "Set Объектная_переменная = CreateObject("Библиотека.Класс")". Можете объяснить, что писать в этом случае?
на данный момент код выглядит так:

     stType = GetPropValueOrEmpty(cmObject, C_TYPE)
     stBOM_Section = GetPropValueOrEmpty(cmObject, C_KG_BOMSECTION)

     if AnsiSameText(stType, C_KG_MATERIAL_KD) _
     and (stBOM_Section = "Прочие изделия") then
         Set stType = CreateObject(C_KG_OTHER)
         SetPropValue cmObject, C_KG_BOMSECTION, C_KG_SPC_SECTION_NAME_OTHER
     End if

но при этом новых объектов в лоцмане не создается

Danila

1. Начнем с того, права в конфигураторе Лоцмана у этого человека на создание нового прочего есть? Именно право на создание!

2. Никакой ошибки при создании не выдается? нет прав и т.д.?

3. Просто происходит выгрузка, но без этого элемента?

4. Еще есть важный момент - в списке модели присутствует вообще этот элемент или нет?..
Это в режиме выгрузки необходимо визуализировать представление модели.

4. Создавать новый вроде как не обязательно. Необходимо подготовить выходной тип объекта.
Вроде как это делается внутри функции
Function fTransForLoodsman(Model)

Например, так SetPropValue cmObject, C_TYPE, C_KG_OTHER

5. Если не заменять - он же же должен создаться как Материал, правильно понимаю?
А нам только надо поменять его свойство - Тип объекта, все верно?
Пробовали без этого кода настроить так, чтоб выгружался как Материал?


rain

1) да, права есть, т.к. этот человек - я сам (пока что)
2) ошибок не выдает
3) просто втихую выгружает, нужный элемент не выгружает.
4) см. рисунки: в списке модели есть Транзистор, а в дерево лоцмана он не выгружается.
т.е. ситуация такая: там два элемента Диод и Транзистор. Диод есть в базе лоцмана как прочее изделие, Транзистора там нет. В результате Диод выгружается, а Транзистор - нет.
5) создавать новый объект - это уже мои домысли и догадки. в начале пробовал, чтобы создавался Материал и изменялся на тип Прочее, но ничего не происходит.

Danila

1. Есть рисунки - в студию их. Увидеть модель - было бы шикарно)

2. Если есть возможность дать bom_out - будет еще лучше.

3. Если вставить Материал в раздел Материалы и Прочее в раздел Прочих - выгрузится?

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



rain

меня смущает вот эта строчка в коде:
    if AnsiSameText(stType, C_KG_MATERIAL_KD) _
    and (stBOM_Section = "Прочие изделия") then
         SetPropValue cmObject, C_TYPE, C_KG_OTHER
         SetPropValue cmObject, C_KG_BOMSECTION, C_KG_SPC_SECTION_NAME_OTHER

правильно ли я задаю условие, Если тип объекта - Материал по КД и если эта запись находится в разделе спецификации Прочие изделия, то следует заменить тип Материал на тип Прочее изделие?
потому что если проверять только условие if AnsiSameText(stType, C_KG_MATERIAL_KD), то любой материал без проблем заменяется на прочее. мне же нужно дополнительное условие, учитывающее, в каком разделе спецификации (в компасе) находится этот самый материал

забыл рисунки приложить

rain

Из комплектов тоже ничего не выгружается

rain

приложил транслятор. мое условие проверяется на 193 строчке

Danila

#7
Можно вставить MsgBox для отладки и посмотреть, куда и с какими значениями попадает ваш алгоритм.

Например, так

Set cmObject = model.Objs(i) ' текущий объект модели
stName = Trim(GetPropValueOrEmpty(cmObject, "NAME"))
'setPropValue cmObject, "NAME", stName

stType = Trim(GetPropValueOrEmpty(cmObject, "TYPE"))
'setPropValue cmObject, "TYPE", stType

stProduct = Trim(GetPropValueOrEmpty(cmObject, "PRODUCT"))
'setPropValue cmObject, "PRODUCT", stProduct

stDesignation = Trim(GetPropValueOrEmpty(cmObject, "DESIGNATION"))
'setPropValue cmObject, "DESIGNATION", stDesignation

stSection = Trim(GetPropValueOrEmpty(cmObject, "BOMSECTION")) 'Чтение информации о разделе спецификации
'setPropValue cmObject, "BOMSECTION", stSection 'Запись информации о разделе спецификации

MsgBox  "stName: "   + stName + "; stType: " +  stType + "; stProduct: " +  stProduct + "; stDesignation: " +  stDesignation + "; stSection: " +  stSection

rain

вставлять нужно именно в таком формате, ничего менять не нужно?
в какое место кода лучше это вставить?

Danila

#9
Может, как-то так двигаться?

     ' Здесь проверяется условие, о котором я писал на форуме
     stType = GetPropValueOrEmpty(cmObject, C_TYPE)
     stBOM_Section = GetPropValueOrEmpty(cmObject, C_KG_BOMSECTION)

    'Здесь можно разместить отладку, ее можно использовать скорее только в формате MSgBox, например, как ниже.
    'Так мы увидим что и в каком виде попадает в обработку,  какие значения у переменных
     MsgBox stProduct + " " + stDesignation + " " +  stType + " " + stBOM_Section

     if AnsiSameText(stType, C_KG_MATERIAL_KD) _
     and (stBOM_Section = "Прочие изделия") Then
         SetPropValue cmObject, C_TYPE, C_KG_OTHER
       
         'Может и здесь проверить, попадает ли сюда? MsgBox в помощь
         stType = GetPropValueOrEmpty(cmObject, C_TYPE) 'Получим заново значение типа
         MsgBox "Однако, меняем тип и теперь он " + stType

         'Не очень понял зачем менять раздел, он не имеет значения в данном случае, можно закомментировать пока
         'SetPropValue cmObject, C_KG_BOMSECTION, C_KG_SPC_SECTION_NAME_OTHER
     End if

rain

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

Danila

#11
Тогда надо проверить раздел, где может удаляться объект или его связь.

'----------------------------------------------------------------------
    '          //  10. Вырезать из модели документы, не имеющие файлов
    '----------------------------------------------------------------------
    ' Если это документ по признаку или типу


    if AnsiSameText(GetPropValueOrEmpty(cmObject, "DOCUMENT"), "TRUE") or _
       AnsiSameText(GetPropValueOrEmpty(cmObject, "TYPE"), "2DDRW") or _
       AnsiSameText(GetPropValueOrEmpty(cmObject, "TYPE"), "3DDRW") or _
       AnsiSameText(GetPropValueOrEmpty(cmObject, "TYPE"), "2DASM") or _
       AnsiSameText(GetPropValueOrEmpty(cmObject, "TYPE"), "BOM") or _
       AnsiSameText(GetPropValueOrEmpty(cmObject, "TYPE"), "3DASM") then
       if not AnsiSameText(GetPropValueOrEmpty(cmObject, "BOMSECTION"), "Документация") then
         boFileFound = false
         For j = 0 to cmObject.LinkCount-1                 ' по всем связям
            stLinkName = GetPropValueOrEmpty(cmObject.Links(j), C_TYpe)'  берем связь
            if AnsiSameText(stLinkName, "Document-File link") then
               boFileFound = true ' есть файл
               Exit For
            end if
         Next
         ' удаляем
         if not boFileFound then
            cmobject.Delete
         end if
       end if
    end if


rain

закаментил пункт 10, без него работает все так же, т.е. дело не в нем  :(

Danila

#13
1. А в этот MsgBox попадает?
MsgBox "Однако, меняем тип и теперь он " + stType

2. Если вообще убрать смену типа - отработает?

3. Давайте спецификацию сюда.
Может, какие-то поля другие.

4. При смене типа - надо бы еще проверить, что все поля DESIGNATION, NAME, PRODUCT заполнены


' Здесь проверяется условие, о котором я писал на форуме
     stType = GetPropValueOrEmpty(cmObject, C_TYPE)
     stBOM_Section = GetPropValueOrEmpty(cmObject, C_KG_BOMSECTION)
 
    [b] 'Прочитаем все поля, какие-то из них могут у вас быть критичными при заполнении, я не знаю, как у вас настроено в конфигураторе
      stName = Trim(GetPropValueOrEmpty(cmObject, "NAME"))
      stProduct = Trim(GetPropValueOrEmpty(cmObject, "PRODUCT"))
      stDesignation = Trim(GetPropValueOrEmpty(cmObject, "DESIGNATION"))[/b]
[b]
    'Посмотрим какие поля не пустые, а какие пустые
    MsgBox  "stName: "   + stName + "; stType: " +  stType + "; stProduct: " +  stProduct + "; stDesignation: " +  stDesignation + "; stSection: " +  stSection
[/b]
     if AnsiSameText(stType, C_KG_MATERIAL_KD) _
     and (stBOM_Section = "Прочие изделия") Then
         SetPropValue cmObject, C_TYPE, C_KG_OTHER
       
         'Может и здесь проверить, попадает ли сюда? MsgBox в помощь
         stType = GetPropValueOrEmpty(cmObject, C_TYPE) 'Получим заново значение типа
         MsgBox "Однако, меняем тип и теперь он " + stType

         [b]'Добавим заполнение пустых полей, возможно идет анализ на их наличие, заполним их полем PRODUCT, если конечно, оно не пустое
         setPropValue cmObject, "NAME", stProduct
         setPropValue cmObject, "DESIGNATION", stProduct [/b]

         'Не очень понял зачем менять раздел, он не имеет значения в данном случае, можно закомментировать пока
         'SetPropValue cmObject, C_KG_BOMSECTION, C_KG_SPC_SECTION_NAME_OTHER
     End if


rain

1. А в этот MsgBox попадает?
MsgBox "Однако, меняем тип и теперь он " + stType - нет, этого сообщения не вылетает

2. если убрать смену типа, то нужные объекты даже в Материалы не выгружаются

3. прикрепляю спецификацию

Danila

1.
Цитировать1. А в этот MsgBox попадает?
MsgBox "Однако, меняем тип и теперь он " + stType - нет, этого сообщения не вылетает

Значит и тип не меняется)

2. И судя по MsgBox - все прочие,а не материалы по КД. Действительно, они не попадут внутрь)

3. А можно сохранить  spw в более ранней версии? У меня компас старенький, а вьюер всю необходимую инфу не даст)
У меня если что компас 11)

rain

прикрепил спецификацию в более ранней версии

Danila

Действительно проблема в заполнении данных в спецификации:

Не хватает данных на транзисторе.

Поэтому его выгрузка игнорирует.

rain

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

Danila

1. Вы же не из Лоцмана вставляете компоненты, а из МиС?
Это поле заполняется оттуда. Ему должно быть соответствие в справочнике. В Лоцман эти данные уже просто импортируются из справочника.

2. Надо смотреть, правильно ли заведены эти компоненты в МиС.

3. Но в вашем случае это вообще Прочие фактически. Но значит, для прочих должны быть настроены в конфигураторе для Прочего изделия в свойствах правильным образом связи с Бизнес-объектом: Справочником МиС.

4. Можно попробовать вручную в Лоцмане создать новое Прочее изделие и выбрать из справочника МиС этот компонент - получится ли создать?