Зовнішня друкована форма, що відкриває документ в Apache Open Office для керованих додатків
User Rating: 5 / 5
Раніше ми з Вами розбирали питання створення зовнішньої друкованої форми у керованому додатку, пізніше ми зробили, щоб зовнішня друкована форма відкривала документ у Microsof Word. Єдиним мінусом MS Word є його платність, тому іноді для економії коштів користувачам дістається Open Office. Природно для таких користувачів старий код не працюватиме, т.к. не зможе створити COM об'єкт, який відкриває документ.
Тому сьогодні ми створимо із Вами зовнішню друкарську форму, яка вміє працювати з Apace Open Office. Шаблон доведеться трохи переробити, т.к. DocVariables в Open Office немає. Для визначення "замінних" частин тексту будемо використовуватиметод пошуку та заміни, описаний раніше.
Перше, що потрібно зробити для нашого уроку, це встановити Apache Open Office 4.
Тепер відкриваємо OpenOffice Writer та створюємо шаблон. Як і раніше робитимемо печатку трудового договору для довідника співробітники. Сам шаблон я роблю примітивним:

Зберігаємо наш шаблон. Я рекомендую зберігати його у форматі doc, щоб зберегти сумісність із MS Word, т.к. ми не знаємо, що користувач буде робити з нашим документом далі. Можливо, його збережуть і перешлють комусь, у кого стоїть MS Office.

Шаблон готовий, тепер йдемо в 1С Конфігуратор та створюємо зовнішню обробку.
Модуль обробки наводити не буду, він такий самий, як і для MS Office. Нам треба організувати виклик клієнтського методу без відкриття форми. Тобто. процедура друку розташовуватиметься в модулі форми.
Як і раніше, створюємо макет з двійковими даними і суемо туди наш макет, створений в Open Office.
Тепер створюємо основну форму обробки та йдемо в її модуль.
Створимо серверну процедуру отримання даних:
Тепер, як і раніше, створимо процедуру отримання макета:
Перш ніж писати процедуру друку, напишемо просту функцію, яка перетворює шлях до файлу в URL. Проблема в тому, що через крос платформність Open Office не працює з Windows каталогами.
// Функція перетворює Windows ім'я файлу в URL OpenOffice Функція ПеретворитиВURL(Ім'яФайлу) Повернення "file:///" + СтрЗамінити(Ім'яФайлу, "\", "/"); КінецьФункції
Поки нічого нового ми не робили, а тепер процедура друку, в ній буде все інакше:)
Scr = Новий COMОб'єкт ("MSScriptControl.ScriptControl"); Scr.Language="javascript"; Scr.Eval("Args=new Array()"); Args = Scr.Eval("Args"); Scr.AddObject("ServiceManager", ServiceManager);
Макет = ОтриматиМакетСервер(); тимчасовийШлях = КаталогТимчасовихФайлів(); ім'яТимчасовогоФайлу = тимчасовийШлях + "dog.doc"; Макет.Записати(ім'яТимчасовогоФайлу);
// Відкриємо шаблон Текстовийпроцесор = Desktop.LoadComponentFromURL(ПеретворитиВURL(ім'яТимчасовогоФайлу), "_blank", 0, Args); //Об'єкт, який робить пошук і заміну рядків Replace = ТекстовийПроцесор.CreateReplaceDescriptor(); Replace.SearchString = "%НомерДоговіру%"; Replace.ReplaceString = СокрЛП(Дані.Табельний); ТекстовийПроцесор.ReplaceAll(Replace); Replace.SearchString = "%Організація%"; Replace.ReplaceString = СокрЛП(Дані.ОргКртако); ТекстовийПроцесор.ReplaceAll(Replace); Replace.SearchString = "%ДатаСкладання%"; Replace.ReplaceString = Формат(Дані.Дата,"ДФ=dd.MM.yyyy"); ТекстовийПроцесор.ReplaceAll(Replace); Replace.SearchString = "%ПІБ%"; Replace.ReplaceString = СокрЛП(Дані.ПІБ); ТекстовийПроцесор.ReplaceAll(Replace); Replace.SearchString = "%ОрганізаціяПовн%"; Replace.ReplaceString =СокрЛП(Дані.ОргДовго); ТекстовийПроцесор.ReplaceAll(Replace); КінецьЯкщо; КінецьЦиклу; КінецьПроцедури
Replace - змінна, в якій лежить об'єкт, що вміє шукати та замінювати рядки в документі. Власне з її допомогою ми і замінюємо кракозябри/теги на потрібні рядки.
Власне все, дякую за увагу.
У вкладенні робочий зразок, що прикріплюється і до ЗУП 3.0 та до Бухгалтерії 3.0