Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 мар 2024, 23:31

Работа с Word в 1С 8.2

Автор neek666, 21 дек 2015, 07:41

0 Пользователей и 1 гость просматривают эту тему.

neek666

Всем доброго времени суток. Простите, если такая тема уже существовала, искал, но не нашел. В принципе задача очень простая, если знать определенные функции работы с Word. Есть файл, формат *.doc. Необходимо его подрузить в 1С 8.2 произвести поиск определенных символов/слов и их последующую замену. Всё, больше ничего делать не надо. Перешурстил уже весь инет, все форумы, найти не могу. Везде пишут как открыть документ из шаблона и его заполнять. Но мне не надо его заполнять, он уже создан, и заполнен как надо. Необходимо только произвести поиск и замену определенных символов/слов. Подскажите пожалуйста, кто знает, или хотя бы скиньте ссылку где искать. Спасибо за понимание.

cska-fanat-kz

гуглите работу с макетом типа ActiveDocument.
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

neek666

да я уже замучился гуглить. Миллиарды пожалуй ссылок на различные форумы и сайты, где описаны приммеры работы с ШАБЛОНАМИ word через МАКЕТЫ. МНЕ ЭТОГО НЕ НАДО!!!! У меня уже есть готовый файл. Мне его надо подгрузить в 1С через функцию:

Файл = новый WordApplication(ПутьКФайлу,, -1);

И далее необходимо запустить некий цикл (как я полагаю) в котором файл будет перебираться ПОСИМВОЛЬНО, и некоторые символы будут меняться.

cska-fanat-kz

макет ActiveDocument как раз и применяется по тому принципу, который вам надо.
создаете макет этого типа и прицепляете к нему ваш готовый файл.
предварительно в нужные места расставляете (назовем это как) теги для последующей замены.

в коде...
Процедура ПечатьДоговорНаБанкет(ЗаказСсылка) Экспорт

Договор = Документы.фо_Заказ.ПолучитьМакет("ДоговорНаБанкет");
// Получить объект из макета.
MSWord = Договор.Получить();

//Параметры
ПараметрыМакета = Новый Структура("НомерДоговора,
   |ДатаДоговора,
   |Организация,
   |НазваниеКомпании,
   |СуммаНаЧеловека,
   |ПроцентОбслуживания,
   |ДатаБанкета,
   |ВремяНачалаБанкета,
   |ВремяОкончанияБанкета,
   |МестоПроведения,
   |КоличествоПерсон,
   |СуммаДепозита,
   |СверхОплата,
   |ДанныеПоУдостоверению,
   |ИИН_БИН,
   |ОрганизацияПолноеНаименование,
   |ОрганизацияАдрес,
   |ОрганизацияТелефон,
   |ОрганизацияФакс,
   |ОрганизацияРНН,
   |ОрганизацияБИН,
   |ОрганизацияНомерСчета,
   |ОрганизацияБанкБИК,
   |ОрганизацияБанкНаименование,
   |ОрганизацияДиректор");
   
ЗаполнитьЗначенияСвойств(ПараметрыМакета, ЗаказСсылка, "НомерДоговора,
    |ДатаДоговора,
    |Организация,
|СуммаДепозита, МестоПроведения");    
ПараметрыМакета.НазваниеКомпании = ЗаказСсылка.Контрагент.НаименованиеПолное;
ПараметрыМакета.СверхОплата = ЗаказСсылка.ОплатаДопЧас;
ПараметрыМакета.ДатаБанкета = Формат(ЗаказСсылка.Дата,"ДФ=dd.MM.yyyy");
ПараметрыМакета.ДатаДоговора = Формат(ЗаказСсылка.ДатаДоговора,"ДФ=dd.MM.yyyy");
ПараметрыМакета.ВремяНачалаБанкета = Формат(ЗаказСсылка.ДатаНачалаБрони,"ДФ=HH:mm");
ПараметрыМакета.ВремяОкончанияБанкета = Формат(ЗаказСсылка.ДатаОкончанияБрони,"ДФ=HH:mm");
ПараметрыМакета.КоличествоПерсон = ЗаказСсылка.КоличествоГостей;
ПараметрыМакета.СуммаНаЧеловека = ""+Строка(ЗаказСсылка.СуммаНаЧеловека)+" ("+фо_ФормированиеПечатныхФорм.КоличествоПрописью(ЗаказСсылка.СуммаНаЧеловека)+")";
ПараметрыМакета.ПроцентОбслуживания = ""+Строка(ЗаказСсылка.ПроцентОбслуживания)+" ("+фо_ФормированиеПечатныхФорм.КоличествоПрописью(ЗаказСсылка.ПроцентОбслуживания)+")";
ПараметрыМакета.ДанныеПоУдостоверению = ЗаказСсылка.Контрагент.ПаспортныеДанные;
ПараметрыМакета.ИИН_БИН = ЗаказСсылка.Контрагент.ИдентификационныйНомер;
ПараметрыМакета.ОрганизацияПолноеНаименование = ЗаказСсылка.Организация.НаименованиеПолное;
ПараметрыМакета.ОрганизацияАдрес = ЗаказСсылка.Организация.Адрес;
ПараметрыМакета.ОрганизацияТелефон = ЗаказСсылка.Организация.Телефон;
ПараметрыМакета.ОрганизацияФакс = ЗаказСсылка.Организация.Факс;
ПараметрыМакета.ОрганизацияРНН = ЗаказСсылка.Организация.РНН;
ПараметрыМакета.ОрганизацияБИН = ЗаказСсылка.Организация.ИдентификационныйНомер;
ПараметрыМакета.ОрганизацияНомерСчета = ЗаказСсылка.Организация.НомерСчета;
ПараметрыМакета.ОрганизацияБанкБИК = ЗаказСсылка.Организация.БанкБИК;
ПараметрыМакета.ОрганизацияБанкНаименование = ЗаказСсылка.Организация.БанкНаименование;
ПараметрыМакета.ОрганизацияДиректор = ЗаказСсылка.Организация.Директор;
   
Попытка
Документ = MSWord.Application.Documents(1);
Документ.Activate();
Для каждого Параметр Из ПараметрыМакета Цикл
Замена = Документ.Content.Find;
Замена.Execute("<"+Параметр.Ключ+">", Ложь, Истина, Ложь, , , Истина, , Ложь, "" + Строка(Параметр.Значение), 2);
КонецЦикла;
MSWord.Application.Visible = Истина;
MSWord.Activate();
Исключение
// Если произойдет ошибка, выводятся данные об ошибке, и объект закрывается.
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = ОписаниеОшибки();
Сообщение.Сообщить();

MSWord.Application.Quit();
КонецПопытки;

КонецПроцедуры
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

neek666

Цитата: cska-fanat-kz от 21 дек 2015, 08:19
макет ActiveDocument как раз и применяется по тому принципу, который вам надо.
создаете макет этого типа и прицепляете к нему ваш готовый файл.
предварительно в нужные места расставляете (назовем это как) теги для последующей замены.

в коде...
Процедура ПечатьДоговорНаБанкет(ЗаказСсылка) Экспорт

Договор = Документы.фо_Заказ.ПолучитьМакет("ДоговорНаБанкет");
// Получить объект из макета.
MSWord = Договор.Получить();

//Параметры
ПараметрыМакета = Новый Структура("НомерДоговора,
   |ДатаДоговора,
   |Организация,
   |НазваниеКомпании,
   |СуммаНаЧеловека,
   |ПроцентОбслуживания,
   |ДатаБанкета,
   |ВремяНачалаБанкета,
   |ВремяОкончанияБанкета,
   |МестоПроведения,
   |КоличествоПерсон,
   |СуммаДепозита,
   |СверхОплата,
   |ДанныеПоУдостоверению,
   |ИИН_БИН,
   |ОрганизацияПолноеНаименование,
   |ОрганизацияАдрес,
   |ОрганизацияТелефон,
   |ОрганизацияФакс,
   |ОрганизацияРНН,
   |ОрганизацияБИН,
   |ОрганизацияНомерСчета,
   |ОрганизацияБанкБИК,
   |ОрганизацияБанкНаименование,
   |ОрганизацияДиректор");
   
ЗаполнитьЗначенияСвойств(ПараметрыМакета, ЗаказСсылка, "НомерДоговора,
    |ДатаДоговора,
    |Организация,
|СуммаДепозита, МестоПроведения");    
ПараметрыМакета.НазваниеКомпании = ЗаказСсылка.Контрагент.НаименованиеПолное;
ПараметрыМакета.СверхОплата = ЗаказСсылка.ОплатаДопЧас;
ПараметрыМакета.ДатаБанкета = Формат(ЗаказСсылка.Дата,"ДФ=dd.MM.yyyy");
ПараметрыМакета.ДатаДоговора = Формат(ЗаказСсылка.ДатаДоговора,"ДФ=dd.MM.yyyy");
ПараметрыМакета.ВремяНачалаБанкета = Формат(ЗаказСсылка.ДатаНачалаБрони,"ДФ=HH:mm");
ПараметрыМакета.ВремяОкончанияБанкета = Формат(ЗаказСсылка.ДатаОкончанияБрони,"ДФ=HH:mm");
ПараметрыМакета.КоличествоПерсон = ЗаказСсылка.КоличествоГостей;
ПараметрыМакета.СуммаНаЧеловека = ""+Строка(ЗаказСсылка.СуммаНаЧеловека)+" ("+фо_ФормированиеПечатныхФорм.КоличествоПрописью(ЗаказСсылка.СуммаНаЧеловека)+")";
ПараметрыМакета.ПроцентОбслуживания = ""+Строка(ЗаказСсылка.ПроцентОбслуживания)+" ("+фо_ФормированиеПечатныхФорм.КоличествоПрописью(ЗаказСсылка.ПроцентОбслуживания)+")";
ПараметрыМакета.ДанныеПоУдостоверению = ЗаказСсылка.Контрагент.ПаспортныеДанные;
ПараметрыМакета.ИИН_БИН = ЗаказСсылка.Контрагент.ИдентификационныйНомер;
ПараметрыМакета.ОрганизацияПолноеНаименование = ЗаказСсылка.Организация.НаименованиеПолное;
ПараметрыМакета.ОрганизацияАдрес = ЗаказСсылка.Организация.Адрес;
ПараметрыМакета.ОрганизацияТелефон = ЗаказСсылка.Организация.Телефон;
ПараметрыМакета.ОрганизацияФакс = ЗаказСсылка.Организация.Факс;
ПараметрыМакета.ОрганизацияРНН = ЗаказСсылка.Организация.РНН;
ПараметрыМакета.ОрганизацияБИН = ЗаказСсылка.Организация.ИдентификационныйНомер;
ПараметрыМакета.ОрганизацияНомерСчета = ЗаказСсылка.Организация.НомерСчета;
ПараметрыМакета.ОрганизацияБанкБИК = ЗаказСсылка.Организация.БанкБИК;
ПараметрыМакета.ОрганизацияБанкНаименование = ЗаказСсылка.Организация.БанкНаименование;
ПараметрыМакета.ОрганизацияДиректор = ЗаказСсылка.Организация.Директор;
   
Попытка
Документ = MSWord.Application.Documents(1);
Документ.Activate();
Для каждого Параметр Из ПараметрыМакета Цикл
Замена = Документ.Content.Find;
Замена.Execute("<"+Параметр.Ключ+">", Ложь, Истина, Ложь, , , Истина, , Ложь, "" + Строка(Параметр.Значение), 2);
КонецЦикла;
MSWord.Application.Visible = Истина;
MSWord.Activate();
Исключение
// Если произойдет ошибка, выводятся данные об ошибке, и объект закрывается.
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = ОписаниеОшибки();
Сообщение.Сообщить();

MSWord.Application.Quit();
КонецПопытки;

КонецПроцедуры


Я видел уже этот код, он мне не подходит, по одной простой причине - этот код работает с шаблоном Word, заполняя его данными из 1С.

cska-fanat-kz

шаблон Ворда - это Dot-файл имеется ввиду?
мне чтобы понять, что мы на одном языке говорим.
обычный Doc-файл тоже вполне себе можно прицепить к макету ActiveDocument...

можно и конкретный файл открыть через ОЛЕ.
далее схема - та же.
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

vitasw

Цитата: neek666 от 21 дек 2015, 08:28этот код работает с шаблоном Word

Этот код работает с обычным файлом ворда doc, docx.

neek666

Проблему решил. Вот, Если кому пригодится, я не жадный:

  Документ = WordПриложение.Documents.Open(Файл_н,, -1);
   Документ.Activate();
   
   ДлинаТекста = СтрДлина(Документ.Content.Text);
   
   Для СчетчикЦикла = 1 по ДлинаТекста - 1 цикл
     Если Документ.Range(СчетчикЦикла, СчетчикЦикла + 1).Text = "а" тогда
       Состояние("завершено на " + Строка(СчетчикЦикла/ДлинаТекста*100) + "%");
       Документ.Range(СчетчикЦикла, СчетчикЦикла + 1).Text = "б"
     КонецЕсли;
   КонецЦикла;
   
   Документ.SaveAs(Файл_н + "(копия).doc");
   Документ.Close();

код перебирает текст из документа Word посимвольно, и меняет каждый символ "а" на символ "б".
Добавлено: 21 дек 2015, 12:55


Все очень просто и легко... именно это я и хотел здесь услышать, и не тратить на это 3 часа своего времени. Всем спасибо. Кстате... эти функции, а вернее их описание я нашел только тогда, когда "гуглил" не "работа с Word в 1С", а "работа с Word  в делфях". Я Х.З. почему, но в 1С интересуются работой с Word только с позиции создания документа по шаблонам на основе данных 1С. А мне необходима была работа с уже созданным файлом.

cska-fanat-kz

Цитата: neek666 от 21 дек 2015, 12:53Все очень просто и легко... именно это я и хотел здесь услышать, и не тратить на это 3 часа своего времени. Всем спасибо. Кстате... эти функции, а вернее их описание я нашел только тогда, когда "гуглил" не "работа с Word в 1С", а "работа с Word  в делфях". Я Х.З. почему, но в 1С интересуются работой с Word только с позиции создания документа по шаблонам на основе данных 1С. А мне необходима была работа с уже созданным файлом.

1) 90% задач по работе с вордом - поместить в документ ворда данные из 1С
2) совершенно естественно всех смутила "Необходимо его подрузить в 1С 8.2 произвести поиск определенных символов/слов и их последующую замену". скажите как еще должен на это реагировать среднестатистический 1Сник?
3) я бы погуглил дальше, как программно реализуется фунция Ворда "поиск и замена" - тогда бы не пришлось перебирать по-символьно.
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск