1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Автоматический вывод групповой спецификации изделий с фильтром по размещению

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

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

Ответить

Автор темы
hakimrv
здесь недавно
здесь недавно
Сообщения: 3
Зарегистрирован: 28 янв 2019, 09:22
Имя: Равиль
Страна: Россия
город/регион: Казань
Благодарил (а): 4 раза
Поблагодарили: 2 раза

Автоматический вывод групповой спецификации изделий с фильтром по размещению

Сообщение hakimrv »

Возник вопрос, связанный с реализаций вывода маркировки в Excel (LABEL) c применением фильтра по месту установки.
В конкретном случае требуется вывести в Excel групповую спецификацию изделий при помощи PagesFilter или фильтра по размещению (19007) (без применения FILTERSCHEME). Прошу помочь с реализацией указанной функции.

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

using System;
using System.Windows.Forms;
using Eplan.EplApi.ApplicationFramework;
using Eplan.EplApi.DataModel;
using Eplan.EplApi.HEServices;

namespace Test.Action_test
{

    public class Action_Test : IEplAction
    {
        public bool OnRegister(ref string Name, ref int Ordinal)
        {
            Name = "FilterTest";
            Ordinal = 20;
            return true;
        }

        public bool Execute(ActionCallingContext oActionCallingContext)
        {
            Project prj;
            SelectionSet sel = new SelectionSet();
            prj = sel.GetCurrentProject(false);
            DMObjectsFinder objFinder = new DMObjectsFinder(prj);
            PagesFilter oPagesFilter = new PagesFilter();
            oPagesFilter.Name = @"+AS03";
            Page[] oPages = objFinder.GetPages(oPagesFilter);

            ActionCallingContext labelContext1 = new ActionCallingContext();
            labelContext1.AddParameter("CONFIGSCHEME", "Групповая спецификация изделий");
            labelContext1.AddParameter("FILTERSCHEME", "AS01");
            labelContext1.AddParameter("LANGUAGE", "ru_RU");
            labelContext1.AddParameter("DESTINATIONFILE", @"\\1192.168.2.122\Data\ПСБ_AS01.xlsx");
            labelContext1.AddParameter("USESELECTION", "1");
            new CommandLineInterpreter().Execute("label", labelContext1);

            ActionCallingContext labelContext2 = new ActionCallingContext();
            labelContext2.AddParameter("CONFIGSCHEME", "Групповая спецификация изделий");
            labelContext2.AddParameter("FILTERSCHEME", "AS02");
            labelContext2.AddParameter("LANGUAGE", "ru_RU");
            labelContext2.AddParameter("DESTINATIONFILE", @"\\192.168.2.122\Data\ПСБ_AS02.xlsx");
            labelContext2.AddParameter("USESELECTION", "1");
            new CommandLineInterpreter().Execute("label", labelContext2);
            return true;
        }

        public void GetActionProperties(ref ActionProperties actionProperties)
        {
        }
    }
}
Аватара пользователя

Barmaley4
знаток Eplan
знаток Eplan
Сообщения: 48
Зарегистрирован: 30 окт 2018, 09:17
Имя: Павел
Страна: РФ
город/регион: Москва
Благодарил (а): 2 раза
Поблагодарили: 48 раз

Автоматический вывод групповой спецификации изделий с фильтром по размещению

Сообщение Barmaley4 »

Если я правильно понял, то нужно сформировать на отдельное место установки свой перечень в файле excel.
Раз уж мы работаем через Eplan API , то лучше работать через класс Label

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

	    try
            {
                //Делаем инстанс проекта и инстанс маркировщика
                Project pr = new SelectionSet().Selection.First().Project;
                Eplan.EplApi.HEServices.Label LB1 = new Eplan.EplApi.HEServices.Label();

                //Получаем массив всех значимых мест устновок проекта
                string[] LocationNames = pr.Pages
                    .Where(p => p != null && p.PageType == DocumentTypeManager.DocumentType.Circuit)
                    .GroupBy(p => p.Properties.DESIGNATION_LOCATION.ToString(ISOCode.Language.L___))
                    .Select(g => g.Key)
                    .Distinct()
                    .Where(l => l.Length > 0)
                    .ToArray();

                //Имя желаемой конфигурации групповой спецификации в "экспорт маркировки" окна еплан
                //Не косячим с названием, иначе чудо не произойдёт :-)
                string lableConfigurationsScheme = "Моя лучшая схема маркировки";

                //Проходимся по всем установкам
                foreach (var L in LocationNames)
                {
                    //Создаём путь к файлу, в данном случае файл эксель с именем установки на рабочем столе пользователя
                    string XlsFileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), $"{L}_spec.xlsx");

                    //Выбираем только страницы текущей установки
                    StorableObject[] PagesOfLocation = pr.Pages.Where(p => p != null
                    && p.Properties.DESIGNATION_LOCATION.ToString(ISOCode.Language.L___) == L)
                        .ToArray();

                    //Выводим маркировку, обращаем внимания что в данной перегузке для массива сторабл объектов, нам не нужны фильтр и сортировка, достаточно только схемы
                    LB1.DoLabel(PagesOfLocation, lableConfigurationsScheme, null, null, "ru_RU", XlsFileName, 1, 1, false);
                }

                //На рабочем столе появляются файлы с перечнями по местам установки
            }
            catch (Exception ex)
            { ToLog($"Failure: {ex.Message}"); }
Последний раз редактировалось AGorskiy 12 ноя 2020, 21:27, всего редактировалось 1 раз.
Причина: Красиво

Автор темы
hakimrv
здесь недавно
здесь недавно
Сообщения: 3
Зарегистрирован: 28 янв 2019, 09:22
Имя: Равиль
Страна: Россия
город/регион: Казань
Благодарил (а): 4 раза
Поблагодарили: 2 раза

Автоматический вывод групповой спецификации изделий с фильтром по размещению

Сообщение hakimrv »

Доброго времени суток.
Спасибо за оперативный ответ и минутку юмора в коде) Данный код практически полностью закрыл все задачи.
Для тех, кому интересна данная функция прикладываю файлы с рабочим кодом.
Для начинающих пользователей обращаю внимание на то, что для корректной работы кода требуется верно указать название схемы конфигурации маркировки, а также на используемую схему применяемого фильтра.

P.S. Так как вопрос закрылся так быстро, позволю себе немного оффтопа:
Подскажите, пожалуйста, существует ли подробная offline литература (справочник) по Eplan API? Либо на минимально необходимую для начинающих литературу по программированию в C#?
AddInModule1.cs
AddInModule2.cs
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя

Barmaley4
знаток Eplan
знаток Eplan
Сообщения: 48
Зарегистрирован: 30 окт 2018, 09:17
Имя: Павел
Страна: РФ
город/регион: Москва
Благодарил (а): 2 раза
Поблагодарили: 48 раз

Автоматический вывод групповой спецификации изделий с фильтром по размещению

Сообщение Barmaley4 »

hakimrv писал(а): 12 ноя 2020, 22:54 Подскажите, пожалуйста, существует ли подробная offline литература (справочник) по Eplan API? Либо на минимально необходимую для начинающих литературу по программированию в C#?
По Eplan API на 90% будет достаточно онлайн справочника, это описания классов и несколько примеров
https://www.eplan.help/en-US/infoportal ... index.html
а так же номера и описания свойств
https://www.eplan.help/help/platform/2. ... o_main.htm

По шарпу можно использовать любую профильную литературу, их довольно много. Ну как пример Эндрю Стиллмен и Дженнифер Грин Изучаем C#, Хопкрофт и Уллман Структуры данных и аогоритмы, Кориевич Ч.А Создание приложений Windows, Р.Стивенс Алгоритмы, Н.Вирт Алгоритмы, П. и Х. Дейтел С для прогрмистов.
Но это конечно если есть много свободного времени, если такого нет, то рекомендую просто хорошо изучить методички с курсов онлайн школ, в них есть 99% информации достаточной для разработки - коротко и ясно. (сам школы не проходил, просто нравятся их методички, иногда быстро можно найти пункт который подзабыл)
В частности рекомендую скачать курсы (есть на трекерах) C# от geekbrains или от metanit, последний вообще помоймо бесплатно на сайте все методички содержит.

От себя могу рекомендовать хорошо изучить разделы шарпа: Регулярные выражения, лямбда выражения и Linq, может пригодиться применение асинхронных методов. Ну и накопление своего опыта и разработок конечно.
Последний раз редактировалось AGorskiy 13 ноя 2020, 10:52, всего редактировалось 1 раз.
Причина: полная цитата лишняя

Madwolf
знаток Eplan
знаток Eplan
Сообщения: 1455
Зарегистрирован: 17 окт 2012, 11:24
Имя: Виталий
Страна: Беларусь
город/регион: Минск
Благодарил (а): 60 раз
Поблагодарили: 181 раз

Автоматический вывод групповой спецификации изделий с фильтром по размещению

Сообщение Madwolf »

Название схемы в общем-то знать и не обязательно. Можно получить последнюю выбранную схему, либо же список имеющихся схем.

Для маркировки это будет следующие две строчки кода (третья это бонус):

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

SchemeSetting oSCHsetting = new SchemeSetting();
                oSCHsetting.Init("USER.Labelling.Config");
			
                folderPath = System.IO.Path.GetDirectoryName(oSCHsetting.GetStringSetting("File.Destination", 0));
Ответить

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