Вход | Регистрация

1С:Предприятие ::

Метки:

1C и Word!!! Help

Я
   Alena
16.02.04 - 15:51
Надо из документа 1с открыть , к примеру, документ Word "заявление", где заранее есть некий текст и добавятся данные из 1с, к примеру, наименование клиента. Как это сделать?
 
  Рекламное место пустует
   GrayT
 
1 - 16.02.04 - 15:55
Оле. Лучше если этот некий текст будет в поле ввода - искать проще будет. Делал обратную задачу из 1С печатал договора в Ворд
   Alena
2 - 16.02.04 - 16:01
это не обратная задача! Это то что надо! Я наверное плохо объяснила...
Я делаю через СоздатьОбъект(Word.Application) (синтаксис забыла, программка дома осталась). Создаю документ ворд, где вставляю поле с именем, а из 1с в это поле пытаюсь передать значение. Не выходит!
   GrayT
 
3 - 16.02.04 - 16:36
В документе ДоговорПодряда - проц Печать();
        сзОЛЕ = СоздатьОбъект("СписокЗначений");
        сзОЛЕ.ДобавитьЗначение("Договор подряда.dot", "Word");//Файл шаблон, ОЛЕ сервер

        
        сзОЛЕ.ДобавитьЗначение(Формат(ДатаДок,"Д(0)ДДММММГГГГ"),                  "ДатаДок");
        сзОЛЕ.ДобавитьЗначение(НомерДок ,                                         "НомерДок");
        сзОЛЕ.ДобавитьЗначение(?(ПустоеЗначение(Контрагент.ПолнНаименование)=0,
                                                Контрагент.ПолнНаименование,
                                                Контрагент.Наименование),         "Контрагент");
        сзОЛЕ.ДобавитьЗначение(Контрагент.ВЛице ,                                 "ВЛице");
        сзОЛЕ.ДобавитьЗначение(Контрагент.НаОсновании,                            "НаОсновании");
        сзОЛЕ.ДобавитьЗначение(ТипизированноеСодержание.ПолнНаименование ,        "Содержание1");
        сзОЛЕ.ДобавитьЗначение(ПроизвольноеСодержание,                            "Содержание2");
        сзОЛЕ.ДобавитьЗначение(Формат(ДатаАкта,"Д(0)ДДММММГГГГ"),                 "ДатаАкта");
        сзОЛЕ.ДобавитьЗначение(глСуммаПрописью(СуммаДоговора)  ,                  "СуммаДоговора");
        текКонтрагент = ?(ПустоеЗначение(Контрагент.ПолнНаименование)=0,
                                                Контрагент.ПолнНаименование,
                                                Контрагент.Наименование);
        сзОЛЕ.ДобавитьЗначение(текКонтрагент,                                    "КонтрагентСАдресом");
        ОткрытьФормуМодально("Обработка.ОЛЕ", сзОЛЕ);

//Модальность вроде для того чтоб Ворд на верху остался


Обработка приОткрытии()
    Перем Закладка, ТектВывода, сз;
    СтатусВозврата(0);
    сз = Форма.Параметр;
    ФайлШаблон = ""; ОЛЕ_Объект = "";
    Если ТипЗначенияСтр(сз)<>"СписокЗначений" Тогда
        Сообщить("Для формирования документа передайте подготовленный список значений", "!!!"); Возврат;
    ИначеЕсли сз.РазмерСписка()=0 Тогда
        Сообщить("Для формирования документа передайте подготовленный список значений", "!!!"); Возврат;
    Иначе
        ФайлШаблон = сз.ПолучитьЗначение(1, ОЛЕ_Объект);
        
        Если ВРег(ОЛЕ_Объект) <> "WORD" Тогда
            Сообщить("OLE объект "+ОЛЕ_Объект+" не поддерживается", "!!!"); Возврат;
        КонецЕсли; 
        
        Если ФС.СуществуетФайл(КаталогИБ()+"\Шаблоны\" + ФайлШаблон) = 0 Тогда
            Сообщить("Нет файла - шаблона " + ФайлШаблон, "!!!"); Возврат;
        КонецЕсли
            
    КонецЕсли;

    OLE = СоздатьОбъект(ОЛЕ_Объект+".Application");
       OLE.Documents.Add(""""+КаталогИБ()+"\Шаблоны\" + ФайлШаблон + """");
    Для Индекс = 2 по сз.РазмерСписка() цикл
        ТекстВывода = сз.ПолучитьЗначение(Индекс, Закладка);
       //Если OLE.ActiveDocument.Bookmarks(СокрЛП(Закладка)).Exists()=0 Тогда  // Проверяем - существует ли закладка

       //    Сообщить("Не найдена закладка "+Закладка,"!!!" ); Продолжить;

       //КонецЕсли;

        Попытка
            OLE.ActiveDocument.Bookmarks(СокрЛП(Закладка)).Select(); //выделим выбранную закладку

            OLE.Selection.TypeText(СокрЛП(ТекстВывода));             // выведем на место выделения текст

        Исключение
            Сообщить("Не найдена закладка "+Закладка,"!!!" );
        КонецПопытки;    
    КонецЦикла;

    OLE.Visible=1; /// видимость - True

    OLE.ActiveDocument.Activate();/// активизировать!!!

    OLE="";/// ссылочку прибить

--------------------------

Договор подряда.dot - Шаблон Ворд документа, в котором вставлены поля (ДатаДок, контрагент, В лице и т.д.)
   Шершень
 
4 - 16.02.04 - 17:38
(3) Нельзя ли проще? Если я так понял, то (0) имеет в вордовом файле "рыбу" типа:

........................................................
ЗАЯВЛЕНИЕ

Я, <имярек>, обязуюсь приходить на работу вовремя и не прогуливать.

........................................................

и вместо <имярек> нужно подставить из 1С конкретное ФИО, чтобы получился документ. Если так, то рулит метод Find объекта Range, вызываемый с настройкой на замену текста. Подробности интересуют?
   Bzzzzz
 
5 - 16.02.04 - 17:44
(4) Да,интересуют
   Шершень
 
6 - 16.02.04 - 18:36
(5) В (3) апшипся маленько: Find - это объект. Применительно к рыбе в (3):

Процедура Сформировать()
    Word = СоздатьОбъект("Word.Application");
    Word.Visible = 0;
    Word.Documents.Open("D:\Fish.doc",,-1); //путь, есс-но, свой

    Fnd = Word.ActiveDocument.Range().Find;
    Fnd.ClearFormatting();
    Fnd.Forward = -1;
    Fnd.Execute("<имярек>",,,,,,,,,"Иванов И.И",2);//9 запятых!

    Word.Visible = -1;    
    Word.Activate();//док. готов - можно печатать

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

вместо <имярек> будет подставлено Иванов И.И
Так замещаются и другие шаблоны подстановки.
   shura
 
7 - 16.02.04 - 19:19
Полу ОФФ: А вот я как-то посмотрел на rtf-овский док в ФАР-е по Ф3 и подумал: а если его открывать в 1С как текст и там производить замену (средствами 1С)? И безо всяких Оль. И, наверное, быстрее. Единственное, надо вместо буковок русских писать их коды...
Давно хотел это попробовать, но все осталось в стадии мыслЕй.
   romix
8 - 16.02.04 - 20:46
В ворде есть такая шняга, как макрорекордер (Макросы - Записать). Я включаю этот макрорекордер, потом начинаю делать всякие вещи (например, искать слово "ИмяРек" поиском по Ctrl-F). Рекордер создает макрос, из которого можно подчерпнуть нужные способы, как работать с объектом. То же в Excel.
   GrayT
 
9 - 16.02.04 - 21:22
(6) - можно короче. Тока я рвал кусок из рабочей проги, обработка печатает пофигу по какому шаблону - только успевай шаблоны рисовать. Из конфы печатается с десяток разных документов. Плюс всякие там проверки (наличие "рыб", файлов и т.д) . И коментарии. Если все это викинуть, то получиться короче. А на счет Find - не селен я в VBA. Спасибо что научил.
(7)А с ртф-ом идея интересная - надо будет попробовать


Список тем форума
Рекламное место пустует   Рекламное место пустует
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс, 1996 г.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует