Основным функционалом, которым мы пользовались являлась печать договоров и коммерческих предложений из 1С в Word.
В crm это было реализована таким образом: создавался макет договора в формате doc – docx, и сохранялся на диске. Затем в коде получали этот договор, сохраняли на диске под другим именем и уже в этой копии заменялся текст на необходимый. Например, чтобы вставить в макет номер договора у нас нужно было вставить в этот макет текст вида {Номер}. Обязанности по замене в crm выполняла функция CRM_ЗаменитьШаблонВВордеНаТекст, в которую передавался объект Word. Код этой функции зашит в ключ защиты, что и вызывало такие проблемы.
Предлагаю аналог функции «CRM_ЗаменитьШаблонВВордеНаТекст», выполняемый без ключа защиты
////////////////////////////////////////////////////////////////////////////////
//
// Функция ЗаменитьШаблонВВордеНаТекст
//
// Описание:
// Ищет, заданный текст в Word Документе. Если текст найден возвращает Истина.
// Также, если передавать Параметр везде, то и выполняет замену найденного текста
// Параметры (название, тип, дифференцированное значение)
// Ворд - comobject Word,
// ТекстНайти - тип Строка, текст для поиска в документе
// ТекстЗаменить - тип Строка, текст, на который будет заменятся ТекстНайти,
// Везде - тип Булево (Если не передается, принимает значение Неопределено),
// указывает где следует производить замену
// ОСНОВНЫЕ ПАРАМЕТРЫ ПЕРЕДАВАЕМЫЕ В ОБЪЕКТ FIND
// УчитыватьРегистр - Тип Булево.
// ИскатьЦелоеСлово - Тип Булево.
// ИспользоватьДопЗнаки - Тип Булево.
// ИскатьКакЗвучит - Тип Булево.
// Возвращаемое значение: Истина ИЛИ Ложь
Функция ЗаменитьШаблонВВордеНаТекст(Ворд, Знач ТекстНайти, ОбластьПоиска = Неопределено, Знач ТекстЗаменить = "", Везде = Неопределено,
УчитыватьРегистр = Ложь, ИскатьЦелоеСлово = Истина, ИспользоватьДопЗнаки = Ложь, ИскатьКакЗвучит = Ложь)
//Колво раз, сколько нужно заменять текст в документе
Если Везде = Неопределено Тогда
Колво = 0; //ни разу
ИначеЕсли Везде Тогда
Колво = 2;//Все
Иначе
Колво = 1;//1 раз
КонецЕсли;
Если ОбластьПоиска = Неопределено Тогда
ОбластьПоиска = Ворд.ActiveDocument.Content;
КонецЕсли;
//Если Текст больше 255 знаков,
//то вводим его методом печати, а не вставкой
Если СтрДлина(ТекстЗаменить) > 255 И Колво > 0 Тогда
ОбластьПоиска.Select();
ОбластьПоиска = Ворд.Selection;
Find = ОбластьПоиска.Find;
Найден = Ложь;
Попытка
Пока Find.Execute(ТекстНайти, УчитыватьРегистр, ИскатьЦелоеСлово, ИспользоватьДопЗнаки, ИскатьКакЗвучит) Цикл
//Печатаем текст замены, если найден
Ворд.Selection.TypeText(ТекстЗаменить);
Найден = Истина;
Если Колво = 1 Тогда
Прервать
КонецЕсли;
КонецЦикла;
Возврат Найден;
Исключение
Возврат Ложь;
КонецПопытки;
Иначе
Если Колво = 1 Тогда
ОбластьПоиска.Select();
ОбластьПоиска = Ворд.Selection;
КонецЕсли;
Find = ОбластьПоиска.Find;
//Убираем форматирование, чтобы оно не влияло на поиск
Find.ClearFormatting();
//Параметры объекта Find
//1 - ТекстПоиска, тип Строка - по умолчанию "", можно использовать для поиска специальные символы:
// "^p" - для поиска параграфов, "^t" - сиволы табуляции
//2- УчитыватьРегистр, тип Булево - по умолчанию Ложь
//3 - ИскатьЦелоеСлово, тип Булево - по умолчанию Истина
//4 - ИспользоватьДопЗнаки - использует подстановочные знаки - по умолчанию Ложь
//5 - ИскатьКакЗвучит - Ищет слова похожие по звучанию - по умолчанию Ложь
//6 - НаправлениеВперед - Указывет направаление поиска вперед - по умолчанию Ложь
//9 - ИскатьФорматирование - Указывает необходимо ли искать по форматированию - по умолчанию Ложь
//10 - ТекстЗаменить - Текст для замены
//11 - Колво - указыавет, сколько раз произоводить замену: 2 - во всем документе, 1 - только первый найденный, 0 - нигде
Попытка
Возврат Find.Execute(ТекстНайти,УчитыватьРегистр,ИскатьЦелоеСлово,ИспользоватьДопЗнаки, ИскатьКакЗвучит,,,,,ТекстЗаменить,Колво)
Исключение
Возврат Ложь;
КонецПопытки;
КонецЕсли;
КонецФункции
P.S. Пишите свои замечания по улучшению кода
Мои работы:
Общее
Перенос данных XML с Анализом и выборочной загрузкой.
Универсальный редактор таблиц и движения документа (LITE) (Обычная Форма)
Универсальный редактор таблиц и движения документа (PRO) (Обычная Форма)
Универсальный редактор Таблиц и Движений документов (Управляемая форма)
Запуск 1С под другим пользователем без пароля.
Управление торговлей 11
Установка цен в УТ11. Произвольный запрос к данным ИБ
ЗУП 2.5
Скрываем неиспользуемые виды расчета
Комплексная И УПП
Форма работы с сотрудниками, как из зуп 2.5