Меняем кодировку файла на UTF-8 (для СЗВ-СТАЖ)

Публикация № 778263

Программирование - Инструментарий

utf-8 СЗВ стаж

0
В ЗиК 7.7 при выгрузке СЗВ-СТАЖ для перевода кодировки файла в UTF-8 используется COM-объект ADODB.Stream. У клиентов при работе с ним 1С полностью вылетала. Здесь приведён скрипт изменения кодировки файла на PowerShell и способ изменения выгрузки в ЗиК 7.7.

Старые клиенты обратились с проблемой: не выгружается СЗВ-Стаж. При выгрузке процесс доходил до конца и в конце программа просто вылетала с ошибкой.

При детальном разборе выяснилось, что файл выгружается нормально в кодировке Windows-1251. Затем производится конвертация в кодировку UTF-8 при помощи COM-объекта ADODB.Stream. Вот самый конец функции ФайлСЗВ_СТАЖ() в модуле Отчет.ПодготовкаСведенийДляПФР2017:

АдоДБСтрим = CreateObject("Adodb.Stream");
АдоДБСтрим.Charset="windows-1251";
АдоДБСтрим.Type = 2;
АдоДБСтрим.Mode= 3;
АдоДБСтрим.Open();
АдоДБСтрим.LoadFromFile(ПолноеИмяФайла);
ТекстАдоДБСтрим = АдоДБСтрим.ReadText();
АдоДБСтрим.Close();
АдоДБСтрим.Charset = "utf-8";
АдоДБСтрим.Open();
АдоДБСтрим.WriteText(ТекстАдоДБСтрим);
АдоДБСтрим.SaveToFile(ПолноеИмяФайла, 2);
АдоДБСтрим.Close();

На этом коде программа просто вылетала. Принял решение заменить это на запуск скрипта PowerShell. В PS изменение кодировки можно сделать так:

$WithBOM = $false
$enc1251 = [System.Text.Encoding]::GetEncoding(1251)
$encUTF8 = New-Object System.Text.UTF8Encoding($WithBOM)

$reader = New-Object -TypeName System.IO.StreamReader -ArgumentList $Source,$enc1251
$writer = New-Object -TypeName System.IO.StreamWriter -ArgumentList $Destination,$encUTF8

while ($true) {
    $line = $reader.ReadLine()
    if ($line -eq $null) {
        break
    }
    $writer.WriteLine($line)
}
$reader.Close()
$writer.Close()

Написал скрипт, положил его в папку, прописанную в Path, добавил код вызова в 1С вместо указанного выше кода:

ЗапуститьПриложение("powershell.exe -ExecutionPolicy Bypass ""& ChangeEncoding.ps1 '" + ПолноеИмяФайла + "'""");

и всё заработало, клиент доволен.

У клиента Windows 7. PowerShell не обновлял, думаю, что древний, так что требования в этом смысле минимальные.

P. S. Если кто в курсе, почему может возникать такая ошибка при использовании ADODB.Stream — прошу в комменты.

0

Скачать файлы

Наименование Файл Версия Размер
ChangeEncoding
.ps1 1,14Kb
01.02.18
4
.ps1 1.0 1,14Kb 4 Скачать

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Рейтинг
2. jack19 148 01.02.18 12:30 Сейчас в теме
(1) Могли бы взглянуть на последние темы форума и увидеть, что проблема решена
https://forum.infostart.ru/forum68/topic185589/
1. sashocq 191 01.02.18 10:12 Сейчас в теме
Ещё вчера на моём же компьютере ошибка воспроизводилась. Сегодня хотел скриншот ошибки сделать, но ADODB.Stream отработала успешно. Чудеса
3. sashocq 191 01.02.18 17:37 Сейчас в теме
(2) Искал. Видимо, плохо, или как-то не так.
Оставьте свое сообщение