Показать сообщение отдельно
  #4 (permalink)  
Старый 02.09.2020, 15:44
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,745

Функцию cynteka проще переписать используя async/await


//Функция формирования импорт-файла для БСПБ
async function cynteka({dateFrom, dateTo, payerId, acceptor}) {
    const params = [
        dateFrom ? 'creationDateFrom=' + dateFrom : '',
        dateTo ? 'creationDateTo=' + dateTo : '',
        payerId ? 'payer=' + payerId : '',
        acceptor ? 'acceptor=' + acceptor : '',
        'pageSize=1'
    ].join('&');
 
    let respBuffer = ''; //Буфер для вывода результата на экран
 
    let url = 'https://***/api/v1/offers?' + params;
 
    let count;
 
    let filename = 'public/import-bspb.xlsx';
 
    //Создаем пустой эксель и заполняем шапку
    let xlsx = [
        "№ пп",
        "Несрочный платеж",
        "Сумма",
        "ИНН получателя",
        "Наименование получателя",
        "Р/сч получателя",
        "БИК банка получателя",
        "Код вида дохода",
        "Назначение платежа",
    ];
    workbook.addWorksheet('Лист 1').addRow(xlsx);
 
    //Запрашиваем количество счетов
    let response = await fetch(url, options);
    let data =  await response.json();
    count = data.totalCount;
 
    respBuffer += 'Обработаных счетов: ' + count + '<br>';
     
    //Цикл обработки счетов   
    while (count){
        let nds;
 
        let response = await fetch(url + '&page=' + count, options)
        let data =  await response.json()
        let offers = data.offers[0];
     
        if (offers.vat != 0){
            let vat = offers.vat * 100 +"%";
            let vatAmount = (((offers.totalAmount / (1 + offers.vat) ) - offers.totalAmount) * -1).toFixed(2);
            nds = `В том числе НДС ${vat} ${vatAmount} руб.`;
        }else{
            nds = "НДС не облагается";
        };
 
        try {
            xlsx = [
                offers.id,
                "нет",
                (offers.totalAmount).toFixed(2),
                offers.supplier.inn,
                offers.supplier.shortName,
                offers.destinationAccount.currentAccount,
                offers.destinationAccount.bik,
                ,
                `Счет ${offers.producerOfferNumber} от ${moment(offers.producerOfferDate).format("DD-MM-YYYY")} ${nds}`,
            ];
            workbook.getWorksheet('Лист 1').addRow(xlsx); //Добавлем обработанную строку в эксель
        } catch (err) {
            respBuffer += `Счет №${offers.id}: Ошибка обработки <input type="button" class="button13" value="Открыть в Синтека" onclick="window.open('https://***/core/offers/${offers.id}/report')">` + '<br>';
        };
         
        count--;
         
    };
 
    workbook.xlsx.writeFile(filename); //Сохраняем эксель файл
 
    respBuffer += `Импорт-файл для БСПБ готов:` + '<br>';
    respBuffer += `<button onclick="document.location='/import-bspb.xlsx'">Скачать</button> <button onclick="document.location='/'">Назад</button>`;
 
    return respBuffer;
};


Вызывать ее
let rspb = await cynteka({...})
или
cynteka({...}).then ((rspb) => {...})
Ответить с цитированием