У клиентов при работе с ним 1С полностью вылетала. Здесь приведён скрипт изменения кодировки файла на PowerShell и способ изменения выгрузки в ЗиК 7.7.
Старые клиенты обратились с проблемой: не выгружается СЗВ-Стаж. При выгрузке процесс доходил до конца и в конце программа просто вылетала с ошибкой.
При детальном разборе выяснилось, что файл выгружается нормально в кодировке Windows-1251. Затем производится конвертация в кодировку UTF-8 при помощи COM-объекта ADODB.Stream. Вот самый конец функции ФайлСЗВ_СТАЖ() в модуле Отчет.ПодготовкаСведенийДляПФР2024:
АдоДБСтрим = 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 — прошу в комменты.
Ещё вчера на моём же компьютере ошибка воспроизводилась. Сегодня хотел скриншот ошибки сделать, но ADODB.Stream отработала успешно. Чудеса
(1) Могли бы взглянуть на последние темы форума и увидеть, что проблема решена
https://forum.infostart.ru/forum68/topic185589/
(2) Искал. Видимо, плохо, или как-то не так.