From 0f9427abe84843b21e51be3ba26700773de13be3 Mon Sep 17 00:00:00 2001 From: Dmitry Date: Thu, 5 May 2022 15:03:24 +0300 Subject: [PATCH] =?UTF-8?q?=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=82=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D1=87=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D0=B7=20phoenixbsl?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Word2MXL/Ext/ObjectModule.bsl | 22 ++-- Word2MXL/Forms/Форма/Ext/Form/Module.bsl | 151 +++++++++++------------ 2 files changed, 86 insertions(+), 87 deletions(-) diff --git a/Word2MXL/Ext/ObjectModule.bsl b/Word2MXL/Ext/ObjectModule.bsl index 2d72767..1ba6883 100644 --- a/Word2MXL/Ext/ObjectModule.bsl +++ b/Word2MXL/Ext/ObjectModule.bsl @@ -4,7 +4,7 @@ комДокумент = Неопределено; Попытка // Для пересчётов использовать комВорд.CentimetersToPoints(ЧислоСМ) и комВорд.PointsToCentimeters(ЧислоПунктов) - //рСантиметр=6.25; // в средних символах шрифта (при необходимости пересчитывать по рДиапазон.CharacterWidth - ширина символов, константа WdCharacterWidth + // рСантиметр=6.25; // в средних символах шрифта (при необходимости пересчитывать по рДиапазон.CharacterWidth - ширина символов, константа WdCharacterWidth //рШиринаСтраницы=75; // эмпирически, довести до ума с учётом //сообщить("стран ширина "+стран.PageWidth+", высота "+стран.PageHeight); // в пунктах, работает // Типовые настройки документа Ворд: @@ -26,7 +26,7 @@ КонецЕсли; рШиринаСтраницыВорда = Окр(комВорд.PointsToCentimeters(комСтраница.PageWidth), 2); рВысотаСтраницыВорда = Окр(комВорд.PointsToCentimeters(комСтраница.PageHeight), 2); - Если НЕ ((20 <= рШиринаСтраницыВорда и рШиринаСтраницыВорда <= 22) и (28 <= рВысотаСтраницыВорда и рВысотаСтраницыВорда <= 30)) Тогда + Если НЕ ((20 <= рШиринаСтраницыВорда И рШиринаСтраницыВорда <= 22) И (28 <= рВысотаСтраницыВорда И рВысотаСтраницыВорда <= 30)) Тогда Сообщить("Текущая версия не обрабатывает размеры страницы, отличающиеся от А4!"); ЗакрытьДокумент(комДокумент); // без сохранения ЗакрытьВорд(комВорд); @@ -49,7 +49,7 @@ Для каждого рПараграфСписка Из рСписок.ListParagraphs Цикл рФорматСписка = рПараграфСписка.Range.ListFormat; рТипСписка = рФорматСписка.ListType; // WdListType - Если рТипСписка = 0 или рТипСписка = 2 или рТипСписка = 6 Тогда + Если рТипСписка = 0 ИЛИ рТипСписка = 2 ИЛИ рТипСписка = 6 Тогда // ненумерованные и bullet игнорируем Иначе // заниматься иерархией с проверкой погружения (рФорматСписка.ListLevelNumber) не будем, нам достаточно проверить так: @@ -122,8 +122,8 @@ комТаблица = Неопределено; Для каждого знч Из мКомТаблиц Цикл - Если знч.Начало <= рНачалоДиапазона и рНачалоДиапазона <= знч.Конец - и знч.Начало <= рКонецДиапазона и рКонецДиапазона <= знч.Конец + Если знч.Начало <= рНачалоДиапазона И рНачалоДиапазона <= знч.Конец + И знч.Начало <= рКонецДиапазона И рКонецДиапазона <= знч.Конец Тогда // можно было бы рДиапазон.InRange(комТаблица.Range), но оно медленнее комТаблица = знч.Таблица; Прервать; КонецЕсли; @@ -151,7 +151,7 @@ стрк = стрк + 1; Иначе - Если не рИдётТаблица Тогда // выводим таблицу, а далее пропускаем все входящие в неё диапазоны, и идём до её конца + Если НЕ рИдётТаблица Тогда // выводим таблицу, а далее пропускаем все входящие в неё диапазоны, и идём до её конца ВывестиТаблицу(комВорд, комТаблица, т, стрк, рСантиметр); КонецЕсли; рИдётТаблица = Истина; @@ -244,7 +244,7 @@ Процедура ВывестиТаблицу(комВорд, комТаблица, табДокумент, текСтрока, рСантиметр = 6.25) - //рСантиметр=6.25; + // рСантиметр=6.25; рСимвол7 = Символ(7); квоСтрок = комТаблица.Rows.Count; @@ -264,7 +264,7 @@ рОбластьЯчейки = табДокумент.Область(текСтрока, стлб, текСтрока, стлб + квоЯчеекМхл - 1); рОбластьЯчейки.Объединить(); - Если комЯчейка.FitText или комЯчейка.WordWrap Тогда // пока так + Если комЯчейка.FitText ИЛИ комЯчейка.WordWrap Тогда // пока так рОбластьЯчейки.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить; Иначе рОбластьЯчейки.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Авто; @@ -281,14 +281,14 @@ рОбластьЯчейки.Шрифт = ПостроитьШрифт(ВыборШрифта(рДиапазонЯчейки)); // на практике удобнее оставлять автовысоту, но иногда может понадобиться: - //рОбластьЯчейки.АвтоВысотаСтроки=Ложь; + // рОбластьЯчейки.АвтоВысотаСтроки=Ложь; //рОбластьЯчейки.ВысотаСтроки=рСантиметр*Окр(комВорд.PointsToCentimeters(комЯчейка.Height),0,РежимОкругления.Окр15как20); рОбластьЯчейки.ГоризонтальноеПоложение = ПолучитьВыравнивание(рДиапазонЯчейки.ParagraphFormat.Alignment); // отступ - в пунктах, при необходимости требуется пересчёт! - //Если рОбластьЯчейки.ГоризонтальноеПоложение=ГоризонтальноеПоложение.Лево Тогда + // Если рОбластьЯчейки.ГоризонтальноеПоложение=ГоризонтальноеПоложение.Лево Тогда // рОбластьЯчейки.Отступ=комЯчейка.LeftPadding; - //ИначеЕсли рОбластьЯчейки.ГоризонтальноеПоложение=ГоризонтальноеПоложение.Право Тогда + // ИначеЕсли рОбластьЯчейки.ГоризонтальноеПоложение=ГоризонтальноеПоложение.Право Тогда // рОбластьЯчейки.Отступ=комЯчейка.RightPadding; //КонецЕсли; diff --git a/Word2MXL/Forms/Форма/Ext/Form/Module.bsl b/Word2MXL/Forms/Форма/Ext/Form/Module.bsl index ef0b9bb..96ed8f9 100644 --- a/Word2MXL/Forms/Форма/Ext/Form/Module.bsl +++ b/Word2MXL/Forms/Форма/Ext/Form/Module.bsl @@ -1,93 +1,92 @@ - -&НаКлиенте +&НаКлиенте Асинх Процедура Конвертировать(Команда) - Диалог = Новый ПараметрыДиалогаПомещенияФайлов; - Диалог.Заголовок = "Выберите документ"; - Диалог.МножественныйВыбор = Ложь; - Диалог.Фильтр = "Документы (*.doc,*.docx,*.rtf)|*.doc;*.docx;*.rtf|Все файлы|*.*"; - - Прогресс = 0; - Элементы.ГруппаПрогресс.Видимость = Истина; - Элементы.Прогресс.Видимость = Истина; - Состояние = "Передача файла"; - Оповещение_ОХодеВыполнения = Новый ОписаниеОповещения("ПомещениеФайла_ОповещенияОХодеВыполнения", ЭтаФорма, Неопределено); - ОписаниеФайла = Ждать ПоместитьФайлНаСерверАсинх(Оповещение_ОХодеВыполнения,,,Диалог, ЭтаФорма.УникальныйИдентификатор); - - Элементы.Прогресс.Видимость = Ложь; - Прогресс = 0; - - Если Неопределено = ОписаниеФайла Тогда - Элементы.ГруппаПрогресс.Видимость = Ложь; - Возврат; - КонецЕсли; - - Состояние = "Конвертация"; - ОбновитьОтображениеДанных(Элементы.Состояние); - КонвертироватьНаСервере(ОписаниеФайла.Адрес, ОписаниеФайла.СсылкаНаФайл.Расширение); - Элементы.ГруппаПрогресс.Видимость = Ложь; - Элементы.ГруппаРезультат.Видимость = Истина; + Диалог = Новый ПараметрыДиалогаПомещенияФайлов; + Диалог.Заголовок = "Выберите документ"; + Диалог.МножественныйВыбор = Ложь; + Диалог.Фильтр = "Документы (*.doc,*.docx,*.rtf)|*.doc;*.docx;*.rtf|Все файлы|*.*"; + + Прогресс = 0; + Элементы.ГруппаПрогресс.Видимость = Истина; + Элементы.Прогресс.Видимость = Истина; + Состояние = "Передача файла"; + Оповещение_ОХодеВыполнения = Новый ОписаниеОповещения("ПомещениеФайла_ОповещенияОХодеВыполнения", ЭтаФорма, Неопределено); + ОписаниеФайла = Ждать ПоместитьФайлНаСерверАсинх(Оповещение_ОХодеВыполнения, , , Диалог, ЭтаФорма.УникальныйИдентификатор); + + Элементы.Прогресс.Видимость = Ложь; + Прогресс = 0; + + Если Неопределено = ОписаниеФайла Тогда + Элементы.ГруппаПрогресс.Видимость = Ложь; + Возврат; + КонецЕсли; + + Состояние = "Конвертация"; + ОбновитьОтображениеДанных(Элементы.Состояние); + КонвертироватьНаСервере(ОписаниеФайла.Адрес, ОписаниеФайла.СсылкаНаФайл.Расширение); + Элементы.ГруппаПрогресс.Видимость = Ложь; + Элементы.ГруппаРезультат.Видимость = Истина; КонецПроцедуры &НаКлиенте Процедура ПомещениеФайла_ОповещенияОХодеВыполнения(ПомещаемыйФайл, Помещено, ОтказОтПомещенияФайла, ДополнительныеПараметры) Экспорт - Прогресс = Помещено; + Прогресс = Помещено; КонецПроцедуры &НаКлиентеНаСервереБезКонтекста Процедура ПопыткаУдалитьФайлы(Файлы) - Если Неопределено = Файлы Тогда - Возврат; - КонецЕсли; - - Попытка - УдалитьФайлы(Файлы); - Исключение - КонецПопытки; - - Файлы = Неопределено; + Если Неопределено = Файлы Тогда + Возврат; + КонецЕсли; + + Попытка + УдалитьФайлы(Файлы); + Исключение + КонецПопытки; + + Файлы = Неопределено; КонецПроцедуры &НаСервере Процедура КонвертироватьНаСервере(Знач Адрес, Знач Расширение) - Обработка = РеквизитФормыВЗначение("Объект"); - - РезультатКонвертации = Неопределено; - - ВремФайл = ПолучитьИмяВременногоФайла(Расширение); - Данные = ПолучитьИзВременногоХранилища(Адрес); - Данные.Записать(ВремФайл); - Данные = Неопределено; - ИмяФайла = ВремФайл; - - Попытка - РезультатКонвертации = Обработка.ВывестиДокументВордВМоксель(ИмяФайла); - Исключение - Ошибка = ОписаниеОшибки(); - Причина = ИнформацияОбОшибке(); - - ПопыткаУдалитьФайлы(ВремФайл); - Если ЭтоАдресВременногоХранилища(Адрес) Тогда - УдалитьИзВременногоХранилища(Адрес); - Адрес = Неопределено; - КонецЕсли; - - ВызватьИсключение ("Ошибка конвертации в mxl",КатегорияОшибки.ОшибкаВнешнегоИсточникаДанных,"500",Ошибка,Причина); - КонецПопытки; - - ПопыткаУдалитьФайлы(ВремФайл); - Если ЭтоАдресВременногоХранилища(Адрес) Тогда - УдалитьИзВременногоХранилища(Адрес); - Адрес = Неопределено; - КонецЕсли; - - Если Не Неопределено = РезультатКонвертации Тогда - ДокументРезультат = РезультатКонвертации; - КонецЕсли; - + Обработка = РеквизитФормыВЗначение("Объект"); + + РезультатКонвертации = Неопределено; + + ВремФайл = ПолучитьИмяВременногоФайла(Расширение); + Данные = ПолучитьИзВременногоХранилища(Адрес); + Данные.Записать(ВремФайл); + Данные = Неопределено; + ИмяФайла = ВремФайл; + + Попытка + РезультатКонвертации = Обработка.ВывестиДокументВордВМоксель(ИмяФайла); + Исключение + Ошибка = ОписаниеОшибки(); + Причина = ИнформацияОбОшибке(); + + ПопыткаУдалитьФайлы(ВремФайл); + Если ЭтоАдресВременногоХранилища(Адрес) Тогда + УдалитьИзВременногоХранилища(Адрес); + Адрес = Неопределено; + КонецЕсли; + + ВызватьИсключение("Ошибка конвертации в mxl", КатегорияОшибки.ОшибкаВнешнегоИсточникаДанных, "500", Ошибка, Причина); + КонецПопытки; + + ПопыткаУдалитьФайлы(ВремФайл); + Если ЭтоАдресВременногоХранилища(Адрес) Тогда + УдалитьИзВременногоХранилища(Адрес); + Адрес = Неопределено; + КонецЕсли; + + Если Не Неопределено = РезультатКонвертации Тогда + ДокументРезультат = РезультатКонвертации; + КонецЕсли; + КонецПроцедуры &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Элементы.ГруппаПрогресс.Видимость = Ложь; - Элементы.ГруппаРезультат.Видимость = Ложь; -КонецПроцедуры + Элементы.ГруппаПрогресс.Видимость = Ложь; + Элементы.ГруппаРезультат.Видимость = Ложь; +КонецПроцедуры \ No newline at end of file