На форуме обязательно:
  1. Заполнить свой профиль НА РУССКОМ ЯЗЫКЕ КИРИЛЛИЦЕЙ. См. Правила, п.2.d.
  2. Не писать свой вопрос в первую попавшуюся тему, а вместо этого создать свою. См. Правила, п.3.a.

Рекламу мы не размещаем ни на каких условиях.

API. Вывести обозначения и свойства изделий всех устройств проекта в Excel

Сценарии / Модули API

Модератор: специалисты по Eplan

Закрыто

Автор темы
limbir
здесь недавно
здесь недавно
Сообщения: 36
Зарегистрирован: 12 фев 2014, 07:13
Имя: Сергей
Благодарил (а): 1 раз

API. Вывести обозначения и свойства изделий всех устройств проекта в Excel

Сообщение limbir » 28 мар 2014, 10:35

Всем привет!
Стоит задача получения спецификации в Excel с помощью API.
Пока что у меня получается вывести список ОУ устройств проекта.
Вот код действия:

Код: Выделить всё

public class Action01 : IEplAction
{
    public bool Execute(ActionCallingContext ctx)
    {
        Project prj = null;
        ProjectManager prjMngr = new ProjectManager();
        prj = prjMngr.CurrentProject;
        DMObjectsFinder fndr = new DMObjectsFinder(prj);
        Function[] arrTest01 = fndr.GetFunctions(null);
        prj = null;
        Microsoft.Office.Interop.Excel.Application oExcel = new Microsoft.Office.Interop.Excel.Application();
        oExcel.Visible = true;
        Microsoft.Office.Interop.Excel.Workbooks iWorkBooks = oExcel.Workbooks;
        Microsoft.Office.Interop.Excel.Workbook iWorkBook = iWorkBooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
        Microsoft.Office.Interop.Excel.Worksheet iSheet = (Microsoft.Office.Interop.Excel.Worksheet)oExcel.ActiveSheet;
        int j=1;
        foreach (var test01 in arrTest01)
        {
            iSheet.Cells[j, 1] = test01.VisibleName;
    //      iSheet.Cells[j, 5] = test01.Properties.FUNC_ARTICLE_DESCR2;
            j++;
        }
        return true;
}
Пытался вытянуть из базы свойства изделия через test01.Properties.FUNC_ARTICLE_DESCR2, но EPLAN выдаёт сообщение:
"Отсутствующий параметр не имеет значения по умолчанию. Имя параметра: parameters".

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

Аватара пользователя

aranea
знаток Eplan
знаток Eplan
Сообщения: 791
Зарегистрирован: 21 сен 2012, 21:45
Имя: Воробьев Александр
Благодарил (а): 7 раз
Поблагодарили: 71 раз
Контактная информация:

Re: Скрипты и API

Сообщение aranea » 28 мар 2014, 10:41

приветствую!

если сходу, то лучше foreach (Function test01 in arrTest01)
и возможно обращаться к ArticleReference этой функции test01 (Ссылка на изделие)
перед чтением свойств проверять не пустое ли оно (IsEmpty)
еще проверяйте является ли функция главной
присвоены ли ей изделия (foreach по всем ArticleReference)

чем Отчеты - Маркировка не устраивает? =)
Изображение


Автор темы
limbir
здесь недавно
здесь недавно
Сообщения: 36
Зарегистрирован: 12 фев 2014, 07:13
Имя: Сергей
Благодарил (а): 1 раз

Re: Скрипты и API

Сообщение limbir » 28 мар 2014, 12:03

Замена var на Function результата не дала.
При проверке на пустоту свойства обнаружил, что надо бы указывать индекс изделия, т.е. вернее будет запись
iSheet.Cells[j, 5] = test01.Properties.FUNC_ARTICLE_DESCR2[1];
Ну а проверку реализовал так:

Код: Выделить всё

if (test01.Properties.FUNC_ARTICLE_DESCR2[1].IsEmpty == true)
                {
                    MessageBox.Show("Пустое свойство");
                    return true;
                }
                else
                {
                    MessageBox.Show("Не пустое свойство");
                    iSheet.Cells[j, 1] = test01.Properties.FUNC_ARTICLE_DESCR2[1];
                }
Получил что свойство не пустое, и всё то же сообщение: "Отсутствующий параметр не имеет значения по умолчанию. Имя параметра: parameters".
При обращении к ссылке на изделие
iSheet.Cells[j, 2] = test01.ArticleReference.Properties.ARTICLE_DESCR2[1];
компилятор выдаёт ошибку:
Error 5: The property or indexer 'Eplan.EplApi.DataModel.Function.ArticleReference' cannot be used in this context because it lacks the get accessor.

Маркировкой пользуюсь, но здесь задача больше на получение умений и знаний в API)

Аватара пользователя

aranea
знаток Eplan
знаток Eplan
Сообщения: 791
Зарегистрирован: 21 сен 2012, 21:45
Имя: Воробьев Александр
Благодарил (а): 7 раз
Поблагодарили: 71 раз
Контактная информация:

Re: Скрипты и API

Сообщение aranea » 28 мар 2014, 12:15

ну учиться так учиться =)
читать хэлп, изучать объектную модель, обращать внимание на подсказки в VisualStudio

Код: Выделить всё

foreach (Function oFunc in arrTest01)
    {
    // выводим свойства oFunc, например oFunc.Name

    foreach (ArticleReference oArtRef in oFunc.ArticleReferences)
        {
        // выводим свойства oArtRef
        }
    }
Изображение


Автор темы
limbir
здесь недавно
здесь недавно
Сообщения: 36
Зарегистрирован: 12 фев 2014, 07:13
Имя: Сергей
Благодарил (а): 1 раз

Re: Скрипты и API

Сообщение limbir » 28 мар 2014, 13:32

Нашёл ошибку, забыл перевести значение в строковое: ToString().
Александр, большое спасибо за помощь! Использование вложенного цикла по ссылкам получается проще и логичней.
Вот такой код получился по вытаскиванию параметра "Изделие. Обозначение 2" из базы:

Код: Выделить всё

public class Action01 : IEplAction
{
    public bool Execute(ActionCallingContext ctx)
    {
        Project prj = null;
        ProjectManager prjMngr = new ProjectManager();
        prj = prjMngr.CurrentProject;
        DMObjectsFinder fndr = new DMObjectsFinder(prj);
        Function[] arrTest01 = fndr.GetFunctions(null);
        prj = null;
        Microsoft.Office.Interop.Excel.Application oExcel = new Microsoft.Office.Interop.Excel.Application();
        oExcel.Visible = true;
        Microsoft.Office.Interop.Excel.Workbooks iWorkBooks = oExcel.Workbooks;
        Microsoft.Office.Interop.Excel.Workbook iWorkBook = iWorkBooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
        Microsoft.Office.Interop.Excel.Worksheet iSheet = (Microsoft.Office.Interop.Excel.Worksheet)oExcel.ActiveSheet;
        int j=1;
        foreach (var test01 in arrTest01)
        {
                foreach (ArticleReference oArtRef in oFunc.ArticleReferences)
                {
                    iSheet.Cells[j, 1] = oArtRef.Properties.ARTICLE_DESCR2.ToString();
                    j++;
                }
        }
        return true;
}
Пока на сегодня результатом доволен) Получаются строчки такого вида:
??_??@Выключатель-разъединитель 3p 80A;
??_??@Наборная клемма с пружинной фиксацией двухуровневая, 2,5мм²;
Смущает только "??_??@" вначале каждой строки, но это отбросить не сложно.

Аватара пользователя

Madwolf
знаток Eplan
знаток Eplan
Сообщения: 1138
Зарегистрирован: 17 окт 2012, 10:24
Имя: Виталий
Благодарил (а): 32 раза
Поблагодарили: 95 раз

Re: Скрипты и API

Сообщение Madwolf » 31 мар 2014, 09:55

oArtRef.Properties.ARTICLE_DESCR2 это MultiLangString, поэтому лучше пользоваться методом GetAsString() или GetString(). Язык в параметре укажите по умолчанию.


Автор темы
limbir
здесь недавно
здесь недавно
Сообщения: 36
Зарегистрирован: 12 фев 2014, 07:13
Имя: Сергей
Благодарил (а): 1 раз

Re: Скрипты и API

Сообщение limbir » 04 апр 2014, 07:24

madwolf_by
спасибо за совет!

Аватара пользователя

Madwolf
знаток Eplan
знаток Eplan
Сообщения: 1138
Зарегистрирован: 17 окт 2012, 10:24
Имя: Виталий
Благодарил (а): 32 раза
Поблагодарили: 95 раз

Re: Скрипты и API

Сообщение Madwolf » 04 апр 2014, 08:15

Я использовал следующим образом: GetString(ISOCode.Language.L___)

Закрыто

Вернуться в «Eplan API»