Обнаружил сегодня ошибку - Табличный документ при записи (интерактивно или программно) в формате XLSX на некоторых сочетаниях ОС+Платформы формирует невалидный файл, который не будет нормально открываться на старых версиях OpenOffice/LibreOffice (проверено на 3.4.0, которых достаточно много у клиентов), но самое главное - неверно показывается во почтовых вложениях на мобильных телефонах (Iphone) и в предпросмотрах вложений Gmail. Наверняка будут проблемы и в скриптах типа PHP-XLSX.
Ошибка заключается в неправильном регистре наименования одного из xml файлов внутри xlsx. Файл должен называться "sharedStrings.xml", а 1С сохраняет его как "SharedStrings.xml", из-за чего становятся недоступными ссылки вида
PartName="/xl/sharedStrings.xml" в файле [Content_Types].xml
Target="sharedStrings.xml"/> в файле workbook.xml.rels
Соответственно воспроизвести ошибку просто - Файл - Новый Табличный документ - Сохранить как - xlsx - полученный файл распаковать, зайти в подкаталог xl и сразу будет видно как сохранило - "sharedStrings.xml" или "SharedStrings.xml"
При этом ошибка воспроизводится не на всех платформах и версиях ОС, вот проверенные варианты:
Windows 10 Pro x64, 8.3.10.2505 x64 - ошибки нет, тот же компьютер после установки 8.3.10.2580 x86 - ошибки нет
Windows Server 2012 R2 Standard x64, 8.3.10.2561 x86 - ошибка есть
Windows Server 2008 R2 Enterprise x64, 8.3.10.2505 x86 - ошибка есть
Ubuntu 14.04.05 LTS x64, 8.3.9.1850 x64 - ошибка есть
Windows 7 Pro x86, 8.3.8.2088 x86 - ошибка есть
В v8@1c.ru отослал, но у меня там несколько раз отклоняли баг-репорты под предлогами неуказания рег. номеров и прочей не относящейся к багу информации, так что не факт что не получу ответ вида "Сообщение не принято к рассмотрению и ссылка на него в дальнейшем не возможна". Поэтому публикую тут чтобы по поиску люди могли найти проблему.
Примерный код исправления ошибки (ИмяФайла - полный путь к файлу XLSX):
//ИмяФайла - полный путь к файлу XLSX
ИмяПапки = КаталогВременныхФайлов()+"zip"+Формат(ТекущаяДата(),"ДФ=yyyyMMdd_hhmm");
СоздатьКаталог(ИмяПапки);
Архив = Новый ЧтениеZipФайла(ИмяФайла);
Архив.ИзвлечьВсе(ИмяПапки);
Архив.Закрыть();
УдалитьФайлы(ИмяФайла);
//корректировка ошибки 1С SharedStrings.xml
ФОшибки = Новый Файл(ИмяПапки+"\xl\SharedStrings.xml");
Если ФОшибки.Существует() Тогда
ПереместитьФайл(ИмяПапки+"\xl\SharedStrings.xml",ИмяПапки+"\xl\sharedStrings.xml");
КонецЕсли;
Архив = Новый ЗаписьZipФайла(ИмяФайла);
Архив.Добавить(ИмяПапки+"\*.*",РежимСохраненияПутейZIP.СохранятьОтносительныеПути,РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);
Архив.Записать();
УдалитьФайлы(ИмяПапки);
P.S. Пришел ответ от 1С:
Данная проблема исправлена начиная с версии 8.3.10.1515, для режимов совместимости 8.3.10 и выше - имя xml-компонента общих строк формируется с маленькой буквы: sharedStrings.xml В режиме совместимости с 8.3.9 остается старое поведение - имя xml-компонента общих строк формируется с большой буквы: SharedStrings.xml