• Angular, как решить проблему с кодировкой при сохранение файла с запроса?

    Сталкивался с подобной проблемой, решение описал в ответе на свой же вопрос.
    https://qna.habr.com/q/582990
    Ответ написан
    Комментировать
  • СписокЗначений, поиск по значению если тип искомого значения составной?

    Попробую немного прояснить, если я вас правильно понял.

    Вам нужно именно вытащить совпадения. Для этого можно выгрузить колонку из ТЧ как массив, примерно так

    ТЧ.ВыгрузитьКолонку(ИмяКолонки);

    Затем передать этот массив параметром в запрос получающий все значений справочника. И уже там, в запросе используя условие "ВыбранныйВЗапросеСправочник.Ссылка В (&МассивИзТЧ)" отобрать только те что совпадают.
    Ответ написан
    Комментировать
  • Как сохранить .txt файл в Windows-1251 на JS?

    Kir_K
    @Kir_K Автор вопроса
    Дабы закрыть гештальт добавлю решение которое нашлось методом проб и ошибок. Может кому-то поможет избежать излишней траты времени на поиски как мне.

    Итак, итоговый код из того самого проекта:

    if (isIE) {
            var strResult = new TextEncoder('windows-1251', { NONSTANDARD_allowLegacyEncoding: true }).encode(txtData);
            safeSave('demirPayments.txt', strResult);
        } else {
            const encodedDataURL = windows1251.encodeURL(txtData);
    
            $('#LinkOnFile').attr('href', 'data:text/plain;charset=windows-1251,' + encodedDataURL);
            $('#LinkOnFile').find('span').trigger('click');
        };


    Т.е. используется 2 разных метода для IE и для прочих платформ. Для IE после конвертации строки в нужную нам кодировку через TextEncoder используем следующую процедуру для сохранения файла, где пакуем файл как бинарные данные функцией saveAs из библиотеки FileSaver.js:

    function safeSave(name, Data, PathLength) {//Data as array             
        // !Elem:LoadSaveDi
        var safeSaveLoad = 0;
        if (!PathLength) { PathLength = 100000; }
        var buffer = new ArrayBuffer(Data.length)
            , temp = new DataView(buffer)
            , n32 = Math.floor(Data.length / 4)
            , n16 = Math.floor((Data.length - n32 * 4) / 2)
            , n8 = Data.length - n32 * 4 - n16 * 2
            , Kkey = 0, K = -1
            , APath = splitPath(n32, PathLength)
            ;
        if (APath == '') { APath = [0] }
    
        var RunSasa = setInterval(function () {
            if (Kkey == 0) { Kkey = 1; K += 1; }
            for (var i = 0; i < APath[K]; i++) {
                temp.setUint32((i + K * PathLength) * 4, Data[(i + K * PathLength) * 4] * Math.pow(256, 3) + Data[(i + K * PathLength) * 4 + 1] * Math.pow(256, 2) + Data[(i + K * PathLength) * 4 + 2] * 256 + Data[(i + K * PathLength) * 4 + 3]);
            }
            Kkey = 0;
            safeSaveLoad = Math.round(1000 * (K + 1) / APath.length) / 1000;
            if (K + 1 == APath.length) {
                clearInterval(RunSasa);
                if (n16 != 0) { temp.setUint16(n32 * 4, Data[n32 * 4] * 256 + Data[n32 * 4 + 1]); }
                if (n8 != 0) { temp.setUint8(n32 * 4 + n16 * 2, Data[n32 * 4 + n16 * 2]); }
                saveAs(new Blob([buffer], { type: "binary" }), name);
            }
        }, 10);
    }


    Прочие браузеры работать по этой схеме отказались, как впрочем и по другим более менее тривиальным (список перепробованного не приведу, т.к. было это давно и возможно, что сейчас часть из них сработает на новых версиях браузерных движков).
    Однако тогда пришлось имитировать ссылку и клик по ней:

    $('#LinkOnFile').attr('href', 'data:text/plain;charset=windows-1251,' + encodedDataURL);
    $('#LinkOnFile').find('span').trigger('click');


    Только так удалось получить нужный формат файла.
    Ответ написан
    Комментировать