8.х 1C + Word в чем проблема?:(

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем AugustBlack, 9 янв 2011.

  1. TopicStarter Overlay
    AugustBlack
    Offline

    AugustBlack Опытный в 1С

    Регистрация:
    9 янв 2011
    Сообщения:
    89
    Симпатии:
    0
    Баллы:
    26
    Есть задача экспортировать данные с 1С в Word. К примеру открыть шаблон с приказом и вставить данные заместо проставленных {DOCVARIABLE} в нем.
    Я создал, загрузил word макет в 1C. Проставил в макете поле которое нужно заменить.
    Код:
    Извещение = ПолучитьМакет("Макет");
    //получить объект из макета. 
    MSWord = Извещение.Получить();
    
    Попытка
    Извещение = MSWord.Application.Documents(1);
    Извещение.Activate();
    //определим имена 
    ПримДата = "12.07.2010";
    //получить объект, который будем использовать для поиска и замены. 
    Замена = Извещение.Content.Find;
    Замена.Execute("[ДатаПриказа]", Ложь, Истина, Ложь, , , Истина, , Ложь, ПримДата);
    MSWord.Application.Visible = Истина;
    MSWord.Activate();
    Исключение
    //если ошибка 
    Сообщить(ОписаниеОшибки());
    MSWord.Application.Quit();
    КонецПопытки;
    
    
    Открывается Word, без замененных данных т.е поле {DOCVARIABLE Дата Приказа \* MERGEFORMAT} не заменилось на 12.07.2010. Я не понимаю в чем трабл, делал по примеру что есть тут.. Помогите!:(
  2. cska-fanat-kz
    Offline

    cska-fanat-kz

    Регистрация:
    8 янв 2011
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    Создал документ вставил в любом месте строку [ДатаПриказа]
    Прицепил к макету типа ActiveDocument этот файл
    Скопировал\Вставил в событие нажатия на кнопку весь ваш код без каких либо изменений...

    Открылся Ворд и в нем вместо [ДатаПриказа] написало 12.07.2010...
  3. Наташа
    Offline

    Наташа Опытный в 1С

    Регистрация:
    14 авг 2010
    Сообщения:
    1.442
    Симпатии:
    2
    Баллы:
    29
    Эта процедура заменяет текст "[ДатаПриказа]" на то, что вы в нее передаете, т.е. на значение переменной ПримДата. Если в шаблоне нет такого текста, то замены происходить не будет.
    И что такое {DOCVARIABLE Дата Приказа \* MERGEFORMAT}? %)
  4. TopicStarter Overlay
    AugustBlack
    Offline

    AugustBlack Опытный в 1С

    Регистрация:
    9 янв 2011
    Сообщения:
    89
    Симпатии:
    0
    Баллы:
    26
    Спасиб, не так понял тот пример,подумал синтакс такой. Я создал поле ДатаПриказа а в коде [ДатаПриказа] вот и не меняло.
    Сейчас у меня все заменило но выводить вместе с {DOCVARIABLE
    http://imglink.ru/show-image.php?id=059611...25f08e5382652c3
    Наташа это когда я поле создаю в worde так пишет полностью формат поля {DOCVAR...и т.д:( мб с отображением полей в worde что не так,гденить галка не стоит там к примеру..
    Ps word 2010 1C 8.1
  5. cska-fanat-kz
    Offline

    cska-fanat-kz

    Регистрация:
    8 янв 2011
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    Да. Тоже хотел это спросить... ;)

    Такие извращения очень нужны?
  6. TopicStarter Overlay
    AugustBlack
    Offline

    AugustBlack Опытный в 1С

    Регистрация:
    9 янв 2011
    Сообщения:
    89
    Симпатии:
    0
    Баллы:
    26
    cska-fanat-kz отображения полей? действительно извращения..
    но выгрузить в word очень нужно, ибо много рисовать шаблонов в 1с придется( да и в тз написано
    Ps. cska-fanat-kz в каком офисе(2003,2007,2010?) вы тестили мой код если не секрет, а то переустановлю если что:(
  7. Наташа
    Offline

    Наташа Опытный в 1С

    Регистрация:
    14 авг 2010
    Сообщения:
    1.442
    Симпатии:
    2
    Баллы:
    29
    Что-то мне кажется, что вы в самом шаблоне перемудрили. Не надо там никаких специальных вещей делать, просто обычный текст пишите.
    "Текст текст текст, а дата приказа была [ДатаПриказа], ляляля".
    Потом просто для всех кусков текста, которые нужно заменить, вызываете процедуру Замена.Execute(). Квадратные скобки там вобще только для удобства, чтобы было видно, что будет заменяться. В моем тексте можно и "ляляля" заменить на что-то :)
  8. TopicStarter Overlay
    AugustBlack
    Offline

    AugustBlack Опытный в 1С

    Регистрация:
    9 янв 2011
    Сообщения:
    89
    Симпатии:
    0
    Баллы:
    26
    Наташа уу) Спасиба, перемудрил действительно!!!
    вчера читал http://kb.mista.ru/article.php?id=452 там через поля делали замену и я сюда в макет их, запутался и перепутал все *crazy*. Терь все работает)
  9. cska-fanat-kz
    Offline

    cska-fanat-kz

    Регистрация:
    8 янв 2011
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    Учитывая последний пост Наташи - сработает в любой версии ;)
  10. TopicStarter Overlay
    AugustBlack
    Offline

    AugustBlack Опытный в 1С

    Регистрация:
    9 янв 2011
    Сообщения:
    89
    Симпатии:
    0
    Баллы:
    26
    Еще вопрос, как передать в переменные данные текущего документа? Создал кнопку на форме документа, написал в ней это:
    Код:
     
    Процедура Кнопка1Нажатие(Элемент)
    Извещение = ПолучитьМакет("МакетИзвещениеОНач");
    //получить объект из макета.  
    MSWord = Извещение.Получить();
    
    Попытка
    Извещение = MSWord.Application.Documents(1);
    Извещение.Activate();
    //определим имена  
    Запрос = Новый Запрос();
    Запрос.Текст =  "ВЫБРАТЬ
    |    ИзвещениеОНачале.Номер КАК Номер,
    |    ИзвещениеОНачале.Дата КАК Дата
    |ИЗ
    |    Документ.ИзвещениеОНачале КАК ИзвещениеОНачале
    |ИТОГИ ПО
    |    Номер,
    |    Дата";
    
    РезультатЗапроса = Запрос.Выполнить();
    
    Выборка = РезультатЗапроса.Выбрать();
    
    Пока Выборка.Cледующий() Цикл               
    Номер = Выборка.Номер;
    Дата = Выборка.Дата;
    //протестить 
    
    Сообщить("Номер:" + Номер);
    Сообщить("Дата:" + Дата);
    КонецЦикла;
    
    
    //получить объект, который будем использовать для поиска и замены.  
    Замена = Извещение.Content.Find;
    Замена.Execute("[Номер]", Ложь, Истина, Ложь, , , Истина, , Ложь, Номер);
    Замена.Execute("[Дата]", Ложь, Истина, Ложь, , , Истина, , Ложь, Дата);
    
    MSWord.Application.Visible = Истина;
    MSWord.Activate();
    Исключение
    //если ошибка  
    Сообщить(ОписаниеОшибки());
    MSWord.Application.Quit();
    КонецПопытки;
    
    КонецПроцедуры
    
    
    
    
    
    
    но выводит ошибку: {Документ.ИзвещениеОНачале.Форма.ФормаДокумента(25)}: Метод объекта не обнаружен (Cледующий) :D Так ли вообще я вообще передаю данные в переменные или по другому как-то делают... :angry:
  11. cska-fanat-kz
    Offline

    cska-fanat-kz

    Регистрация:
    8 янв 2011
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1

    Набрал у себя подобный запрос - все в порядке...
    Такую же ошибку выдало только в одном случае - если в слове "Следующий" первая буква - английская Си ;)
  12. TopicStarter Overlay
    AugustBlack
    Offline

    AugustBlack Опытный в 1С

    Регистрация:
    9 янв 2011
    Сообщения:
    89
    Симпатии:
    0
    Баллы:
    26
    cska-fanat-kz Спасиб!) действительно буква C!!! Жесть,как глупо аж стыдно(( я нет чтобы перепечатать блин!!!!!!!! :angry: Еще раз спс, работает!!!:)
  13. TopicStarter Overlay
    AugustBlack
    Offline

    AugustBlack Опытный в 1С

    Регистрация:
    9 янв 2011
    Сообщения:
    89
    Симпатии:
    0
    Баллы:
    26
    Извините снова я. :D Не пойму как передать данные текущего документа в запросе. Какой параметр использовать условии запроса?:( что-нить вроде "ВЫБРАТЬ
    | ИзвещениеОНачале.Номер
    |ИЗ
    | Документ.ИзвещениеОНачале КАК ИзвещениеОНачале
    |ГДЕ
    | ИзвещениеОНачале.Номер = &текущийдокумент"
    как это работает :angry: =(
    или с помощью ООП там что-нить ТекущийДокумент.Номер :D :D
  14. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    Не номер, а ссылка
  15. TopicStarter Overlay
    AugustBlack
    Offline

    AugustBlack Опытный в 1С

    Регистрация:
    9 янв 2011
    Сообщения:
    89
    Симпатии:
    0
    Баллы:
    26
    понял спс =)
    Код:
     ВЗапрос = Новый Запрос("ВЫБРАТЬ
    |	ИзвещениеОНачале.Номер Номер
    |ИЗ
    |	Документ.ИзвещениеОНачале КАК ИзвещениеОНачале ГДЕ  ИзвещениеОНачале.Ссылка=&ТекущийДокумент");
    
    
    
    ВЗапрос.УстановитьПараметр("ТекущийДокумент",Ссылка);						
    РезультатЗапроса = ВЗапрос.Выполнить();
    

Поделиться этой страницей