...

Получение листа согласования и работа с ним

Тема в разделе "Примеры сценариев", создана пользователем sobolev, 9 фев 2022.

  1. sobolev

    sobolev Техническая поддержка

    Вводная: Можно реализовать текущий сценарий на форме просмотра документа.

    Код:
    
    // Инициализируем текстовую переменную
    ViewContext.data.str='';
    // Загружаем в переменную текущий открытый документ
        
    ViewContext.data.doka await Application.search().where(i=>i.__id.like(Context.data.__id)).first();
    // Получаем листы согласования
        
    const ApprovalLists await ViewContext.data.doka!.docflow().getApprovalLists();
    // Берем последний лист
        
    const LastListRespondentsApprovalLists[0].respondents;
    //Перебираем согласующих
        
    for (let resp of LastListRespondents)
        {
    // Загружаем по ID пользователя
            
    let RespName = (await System.users.search().where(i=>i.__id.like(resp.id)).first())!.data.__name;
    // Получаем комментарий
            
    let RespComm resp.comment;
            
    let RespStatus;
    // Получаем статус в локализации
      
    switch(resp.status)
            {
      case 
    "approved":
        
    RespStatus 'Согласовано';
        break;
      case 
    "rejected"
        
    RespStatus 'Отказано'
        
    break;
            }
    // Формируем итоговую строчку
            
    ViewContext.data.str=ViewContext.data.str +  RespName' - 'RespStatus ' - 'RespComm'\n';
        }


    где
    doka - переменная с приложением типа “Документ”
    str - переменная типа “Строка” с типом “Текст”
    Вид реализации:
  2. snfedulov

    snfedulov Новичок

    Добрый день!
    В процессе перебора согласующих выяснилось, что они перебираются в случайном, а не в хронологическом порядке.
    Уточните пожалуйста, является ли свойство .ts согласующего временем согласования/отказа?
    Из документации (https://tssdk.elma365.com/ru/interfaces/_08_docflow_.respondent.html) не совсем понятно, что значит дата последнего обновления:
    ts: TDatetime
    Дата последнего обновления.
    Последнее редактирование: 7 апр 2023
  3. sobolev

    sobolev Техническая поддержка

    Добрый день!

    ts должен быть равен дате вынесения решения пользователем (временем согласования/отказа).
  4. s.matveychuk

    s.matveychuk Новичок

    Добрый день! Помогите, пожалуйста, советом, как реализовать решение.
    В нашей компании утверждена типовая форма листа согласования. Необходимо в Elma365 реализовать печатную форму листа согласования в соответствии с утвержденным в компании шаблоном. Навскидку, пока вижу два варианта решения: переделать штатный процесс экспорта листа согласования в файл, т.е. поправить сам шаблон выгрузки листа согласования в файл, добавить необходимые/недостающие поля(свойства).
    [​IMG]
    Вторым вариантом видится не трогать штатный процесс экспорта листа согласования в файл, а дополнительным сценарием осуществлять генерацию отдельного файла листа согласования по шаблону, в котором заполнять необходимые поля(свойства).
    Подскажите, возможна ли реализация первого варианта? Если да, то где можно найти и поправить шаблон выгрузки листа согласования в файл?

    Если всё уже придумано до нас, ткните, пожалуйста, где подсмотреть)
  5. anton.alexandrov

    anton.alexandrov Участник

    Попробуйте отсортировать:
    Код:
    
    async function ApprovalListCheck(): Promise<void> {
        const 
    ApprovalLists await Context.data.ваш_элемент_приложения?.docflow().getApprovalLists()
        if(
    ApprovalLists) {
            const 
    sortedListsBaseList[] = ApprovalLists.sort((ab) => {
                const 
    = new Date(a.__createdAt.asDate())
                const 
    = new Date(b.__createdAt.asDate())
                return 
    c.getTime() - d.getTime()
            })

            
    Context.data.logs ''

            
    sortedLists.forEach(el => {
                const 
    respsRespondent[] = el.respondents.sort((ab) => {
                    const 
    = new Date(a.ts.asDate())
                    const 
    = new Date(b.ts.asDate())
                    return 
    c.getTime() - d.getTime()
                })
                
    resps.forEach(=> {
                    
    Context.data.logs += `${r.ts.format('DD-MM-YYYY h:mm:ss')} - ${r.status.toString()}\r\n`
                })
            })
        }
    }
    Последнее редактирование: 23 ноя 2023