...

Выбор исполнителя, согласующего на основании свойства документа

Тема в разделе "Разработчикам", создана пользователем AKramarenko, 17 апр 2020.

  1. AKramarenko

    AKramarenko New Member

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

    Соответственно теперь встала такая задача - в этапах процесса ответственных за этап указывать отталкиваясь от того, что указано в "Мои юрлица". Как в сценарии обратиться к документу и получить это свойство в переменную, а затем указать на этапах ответственных (как правило это должность какого-либо элемента в структурном подразделении)
     
  2. pushkarev

    pushkarev Active Member

    Я бы рекомендовал сделать следующим образом:
    1. Создать отдельный справочник, в котором будет указываться юр. лицо (из справочника "Мои юрлица"), добавить свойство "ответственный" (или несколько разных свойств если у вас несколько участников процесса и каждый отвечает за свою задачу). Поле ответственный может быть либо типа пользователь, либо тип элемент орг.структуры, в зависимости от того как для вас будет удобнее. Можно добавлять эти свойства прямо в справочник "Мои юрлица", но на практике обычно удобнее отдельный справочник со своими правами доступа к нему.
    2. В процессе (или процессах) использовать динамическую зону ответственности в задачах, где исполнитель должен зависеть от выбранного юрлица. В элме есть 2 разновидности динамических зон ответственности: по предварительному выбору и определяется сценарием, в первом случае вам нужно на карте процесса перед входом в эту зону ответственности разместить сценарий, в котором будет произведено определение ответственного пользователя, а во втором, этот сценарий нужно будет указать прямо в настройках зоны ответственности. Задачи нужно будет размещать в этой (или этих) зоне ответственности.
    3. В сценарии нужно будет в зависимости от выбранного в документе юр. лица найти в справочнике соответствующую запись и получить из нее ответственного и записать его в переменную контекста, связанную с соответствующей зоной ответственности. Если в справочнике будете использовать элемент орг. структуры, то тут же в сценарии нужно будет получить конкретного пользователя, который занимает эту должность и потом только присваивать его контекстной переменной.
     
  3. AKramarenko

    AKramarenko New Member

    Спасибо. В общем ясно - учить C#. Разбираться в объектной модели элмы. Может есть здесь на форуме, кто может пару несложных скриптов дла элмы создать по ТЗ за оплату?
     
  4. AKramarenko

    AKramarenko New Member

    Попытался сам написать скрипт. Но воткнулся в ошибку.
    Код:
    public virtual void Deloproizvoditelj(Context context)
            {
                var orgitemFilter = InterfaceActivator.Create<Filter>();
                    orgitemFilter.Query = "Name LIKE ’Делопроизводитель’";
                    var ortItemDepartment = OrganizationItemManager.Instance.Find(orgitemFilter, null).FirstOrDefault();
                    var OurCompany = context.LegalEntityCompany.Name;
                    if (OurCompany == "ООО Картель")
                {
                    //получение пользователей, занимающих определённую должность
                    var userList = UserManager.Instance.GetUsersByDepartament(ortItemDepartment);
                    //запись полученных пользователей в переменную контекста
                    foreach (var user in userList)
                    {
                        context.Registrator.Add((User)user);
                    }
                }
            }
    Ошибка:
    Сообщение Строка Колонка
    11 'EleWise.ELMA.Security.Models.User' does not contain a definition for 'Add' and no extension method 'Add' accepting a first argument of type 'EleWise.ELMA.Security.Models.User' could be found (are you missing a using directive or an assembly reference?) 206 26


    Что я делаю не так?
     
  5. AKramarenko

    AKramarenko New Member

    Как понял причина в типе объекта пользователь.registrator (1 к 1) Если бы это был список то все заработало бы....но список нельзя использовать как переменную, определяющую исполнителя в зоне ответственности.
    Как можно записать значение из 1 ко многим в переменную 1 к 1?
     
  6. AKramarenko

    AKramarenko New Member

    В общем пока что сделал так:


    public virtual void Deloproizvoditelj(Context context)
    {
    var orgitemFilter = InterfaceActivator.Create<Filter>();
    orgitemFilter.Query = "Name LIKE ’Делопроизводитель’";

    var ortItemDepartment = OrganizationItemManager.Instance.Find(orgitemFilter, null).FirstOrDefault();
    var OurCompany = context.LegalEntityCompany.Name;
    var Buh = context.LegalEntityCompany.elmBuh.User;
    if (OurCompany == "ООО Картель")

    context.Registrator = Buh;
    }

    Buh - берется из свойста нашего юрлица
    OurCompany - получаю какую организацию при запуске процесса выбрал пользователь с нашей стороны
    Ну и далее уже ветвление -тут все ясно. Просто, немного топорно но пока что вроде как устраивает
     
  7. AKramarenko

    AKramarenko New Member

    Даже упросит, убрал лишнее:
    public virtual void Deloproizvoditelj (Context context)
    {
    var Secretar = context.LegalEntityCompany.elmDeloproizvoditelj.User;
    context.Registrator = Secretar;
    }



    Но теперь вопрос - как из документа получить список согласующих для листа согласования из заранее заполненного свойства элемента Мои юрлица
     
  8. pushkarev

    pushkarev Active Member

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

Поделиться: