Команда ПреобразоватьВDOCX, с вызовом процедуры ПреобразоватьВDOCXНаСервере. Реквизит Файл, с типом СправочникСсылка.Файлы
&НаСервере
Процедура ПреобразоватьВDOCXНаСервере()
ДанныеФайла = РаботаСФайламиВызовСервера.ДанныеФайлаДляСохранения(Файл);
Если ДанныеФайла.Расширение = "doc" Тогда
ДвоичныеДанныеФайла = РаботаСФайламиВызовСервера.ПолучитьХранилищеФайлаИзИнформационнойБазы(ДанныеФайла.СсылкаТекущейВерсии).Получить();
ПутьКСтаромуФайлу = ПолучитьИмяВременногоФайла("doc");
ДвоичныеДанныеФайла.Записать(ПутьКСтаромуФайлу);
ПутьКНовомуФайлу = ПолучитьИмяВременногоФайла("docx");
СисИнфо = Новый СистемнаяИнформация;
Если СисИнфо.ТипПлатформы = ТипПлатформы.Windows_x86 ИЛИ СисИнфо.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда
Попытка
WordApp = Новый COMОбъект("Word.Application");
Исключение
ВызватьИсключение(НСтр("ru = 'Ошибка работы с приложением MS Word. Необходимо проверить правильность установки приложения.'"));
Возврат;
КонецПопытки;
Иначе
Сообщить(НСтр("ru = 'Преобразование в docx файла MS Word возможна только в Windows. Обратитесь к администратору.'"));
Возврат;
КонецЕсли;
Попытка
WordApp.WordBasic.DisableAutoMacros(1);
WordApp.Visible = false;
Док = WordApp.Documents.Add(ПутьКСтаромуФайлу);
Если WordApp.Documents.Count = 0 Тогда
ВызватьИсключение "Не удалось открыть временный файл";
КонецЕсли;
Док = WordApp.Documents(1);
wdFormatDocumentDefault = 16;
UseISO19005_1 = Истина;
Док.SaveAs2(ПутьКНовомуФайлу, wdFormatDocumentDefault);
СведенияОФайле = РаботаСФайламиКлиентСервер.СведенияОФайле("ФайлСВерсией", Новый Файл(ПутьКНовомуФайлу));
СведенияОФайле.ИмяБезРасширения = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ДанныеФайла.ПолноеНаименование,"");
СведенияОФайле.Автор = ДанныеФайла.АвторТекущейВерсии;
СведенияОФайле.НоваяВерсияАвтор = ДанныеФайла.АвторТекущейВерсии;
СведенияОФайле.АдресВременногоХранилищаФайла = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ПутьКНовомуФайлу));
Версия = РаботаСФайламиВызовСервера.СоздатьВерсию(Файл, СведенияОФайле);
РаботаСФайламиВызовСервера.ОбновитьВерсиюВФайле(Файл, Версия, СведенияОФайле.АдресВременногоХранилищаТекста,,, Ложь);
обФайл = Файл.ПолучитьОбъект();
обФайл.ТекущаяВерсияРасширение = Версия.Расширение;
обФайл.Записать();
WordApp.Quit(0);
WordApp = Неопределено;
Исключение
WordApp.Quit(0);
WordApp = Неопределено;
КонецПопытки;
ИначеЕсли ДанныеФайла.Расширение = "docx" Тогда
Сообщить("Файл уже в расширении DOCX");
КонецЕсли;
КонецПроцедуры
Протестировано на 1С:Документооборот КОРП, редакция 3.0 (3.0.15.41), платформа 8.3.25.1560, БСП 3.1.9.277.
При открытии обработки встречает 3 элемента - поле выбора файла, кнопка "Преобразовать в DOCX" и "Закрыть".
Краткая инструкция по обработке (можно обойтись и без ее скачивания, процедура выше):
1. В поле Файл выбрать элемент справочника Файлы
2. Нажать на "Преобразовать в DOCX"
В результате - для выбранного файла будет создана новая версия в формате docx, новая двоичка появится в регистре, реквизит "ТекущаяВерсияРасширение" поменяется на docx.
Если файл уже в этом расширении - появится сообщение "Файл уже в расширении DOCX". Если файл в расширении, отличном от doc и docx, - ничего не произойдет.
Проверено на следующих конфигурациях и релизах:
- Документооборот КОРП, редакция 3.0, релизы 3.0.15.41
Вступайте в нашу телеграмм-группу Инфостарт