Группа: Пользователи
Сообщений: 18
Спасибо сказали: 1 раз
Рейтинг: 0
День добрый. есть проблема. 1с 8.2.18. Необходимо организовать печать договоров в doc файлы. Т.к. формы и логотипы договоров могут меняться, то в зависимости от ситуации из папки на сервере подтягивается нужный doc-файл и в него вставляются необходимые значения путем замены текста.
на тонком клиенте все работает на УРА: открывается нужный doc-файл, редактируется, через хранилище перебрасывается на клиент. на web-клиенте - проблемы начинаются при попытке изменить текст
WordApplication = Новый COMОбъект("WORD.Application");
приведенный код при запуске с режиме web-клиента выдает следующие ошибки: "Значение не является значением объектного типа (Bookmarks)" "Значение не является значением объектного типа (Content)"
Группа: Пользователи
Сообщений: 18
Спасибо сказали: 1 раз
Рейтинг: 0
можно здесь по-подробнее? 1) на клиенте подключаю ПодключитьРасширениеРаботыСФайлами() 2) с клиента вызываю сервер для обработки находящегося на сервере файла 3) получаю обработанный файл на клиент через хранилище
так???
тоже лажа... на клиенте (модуль команды) подключаю ПодключитьРасширениеРаботыСФайлами() из модуля команды вызываю менеджер документа, в котором происходят все танцы
День добрый. есть проблема. 1с 8.2.18. Необходимо организовать печать договоров в doc файлы. Т.к. формы и логотипы договоров могут меняться, то в зависимости от ситуации из папки на сервере подтягивается нужный doc-файл и в него вставляются необходимые значения путем замены текста. на тонком клиенте все работает на УРА: открывается нужный doc-файл, редактируется, через хранилище перебрасывается на клиент. на web-клиенте - проблемы начинаются при попытке изменить текст в чем проблема и как ее решить/обойти?
А не пробовали заполнять документы данными, используя закладки в шаблоне? Это вроде как стандартный метод для заполнения форм договоров и др.
Группа: Пользователи
Сообщений: 18
Спасибо сказали: 1 раз
Рейтинг: 0
пробовать-то пробовал. проблема в том, что ошибка выскакивает при вызове Context, Find, bookmarks... причем только с web-клиентом. в тонком - без проблем. или я не в курсе еще про какой-то метод с закладками? (уже никаких идей просто нету)
Вот текст из рабочей базы Access для заполнения шаблона Word:
'проверка наличия закладки в шаблоне Word Private Function TrueBookmark(ByVal BookmarkName As String, ByVal wa As Word.Document) As Boolean Dim i As Integer For i = 1 To wa.Bookmarks.Count If wa.Bookmarks(i).Name = BookmarkName Then TrueBookmark = True Exit For End If Next i End Function
'Вставка текста Private Sub SelectionText(ByVal SelTxt As Selection, ByVal StrTxt As String, ByVal Bld As Byte, ByVal Otstup As Boolean, Optional ByVal OtstAbsac As Boolean = False) With SelTxt If Otstup = True Then .ParagraphFormat.LeftIndent = 12 Else .ParagraphFormat.LeftIndent = 0 End If Select Case Bld Case 1 .Font.Bold = True Case 0 .Font.Bold = False End Select If OtstAbsac = True Then .ParagraphFormat.SpaceAfter = 3 Else .ParagraphFormat.SpaceAfter = 0 End If .TypeText StrTxt End With End Sub
Private Sub ЗаполнитьЗакладку(ByVal SelTxt As Selection, ByVal ИмяЗакладки As String, ByVal StrTxt As String) With SelTxt If TrueBookmark(ИмяЗакладки, .Document) Then .GoTo What:=wdGoToBookmark, Name:=ИмяЗакладки 'Перейти на закладку Call SelectionText(SelTxt, StrTxt, 2, False) 'Вставить текст End If End With End Sub
'функция выгрузки в Word значений полей запроса через закладки в шаблоне Function funOutputWordQuery(strPathDot As String, strPathWord As String) As Boolean On Error GoTo Err_ Dim rst As DAO.Recordset Dim i As Long Dim DlgUser As Integer Dim app As Word.Application Dim Msg, ДатаДоговора
' Сохраним данные из формы в таблицу If Me.Dirty Then DoCmd.RunCommand acCmdSaveRecord Debug.Print Me.[ПолноеФИОКлиента] 'Чтобы удостовериться, что стоим на нужной записи If Err.Number <> 0 Then Msg = "Error # " & Str(Err.Number) & " was generated by " _ & Err.Source & Chr(13) & Err.Description MsgBox Msg, , "Error", Err.HelpFile, Err.HelpContext Exit Function End If End If
' Проверим наличие шаблона If Dir(strPathDot) = "" Then Msg = "Файл шаблона " & strPathDot & " не найден!" Msg = MsgBox(Msg, vbInformation + vbOKOnly) funOutputWordQuery = False Exit Function End If
'проверяем наличие сформированного ранее документа If Dir(strPathWord) <> "" Then 'если нашелся документ по заданому в strPathWord полному пути (вместе с именем) DlgUser = MsgBox("Документ с таким именем ранее уже был создан. Заменить его?", vbYesNo, "admin") If DlgUser = vbNo Then 'если пользователь выбрал Нет - то открываем прежний вариант документа Set app = CreateObject("Word.Application") 'создаем объект Word, чтобы можно было работать с его методами и свойствами With app .Visible = True 'запускаем приложение Word .Documents.Open strPathWord 'открываем документ (по пути в переменной strPathWord) End With Set app = Nothing 'уничтожаем переменную funOutputWordQuery = True 'ставим флаг успешного выполнения функции GoTo Exit_ End If End If ' Новый документ, или перезаписываем имеющийся Set app = New Word.Application 'делаем ссылку на объект Word для создания нового документа app.Visible = True 'запускаем приложение Word app.Documents.Add strPathDot 'присоединяем к объекту Word шаблон по заданному пути With app.ActiveWindow.Selection 'делаем ссылку на активный документ - в данном случае тот что формируется ' Set rst = CurrentDb.OpenRecordset("qryOutWord", dbOpenSnapshot) 'открываем запрос на чтение Set rst = Me.RecordsetClone If rst.RecordCount > 0 Then 'если в запросе есть хоть одна строка ' Сначала заполним закладки, имя которых отличается от имен полей ДатаДоговора = rst.Fields("Дата") ДатаДоговора = Format(ДатаДоговора, "dd mmmm yyyy г.") Call ЗаполнитьЗакладку(app.ActiveWindow.Selection, "ДатаДоговора", Nz(ДатаДоговора, "______________")) Call ЗаполнитьЗакладку(app.ActiveWindow.Selection, "ПолноеФИОКлиента1", Nz(rst.Fields("ПолноеФИОКЛиента"), "______________")) For i = 0 To rst.Fields.Count - 1 'создаем цикл перебора столбцов запроса If TrueBookmark(rst.Fields(i).Name, .Document) Then .GoTo What:=wdGoToBookmark, Name:=rst.Fields(i).Name 'Перейти на закладку Call SelectionText(app.ActiveWindow.Selection, Nz(rst.Fields(i), "______________"), 2, False) 'Вставить текст End If Next i rst.Close 'закрываем рекордсет - при этом автоматически уничтожается и переменная rst End If 'Чистим незаполненные закладки With .Bookmarks For i = .Count To 1 Step -1 'если имя Bookmark совпадает с его содержимым If .Item(i).Name = .Item(i).Range.Text Then 'Удаляем содержимое (вместе с ним удаляется и сама Bookmark) .Item(i).Range.Text = "" End If Next i End With app.ActiveDocument.SaveAs strPathWord 'сохраняем созданный документ по заданному пути strPathWord End With Set app = Nothing 'уничтожаем переменную funOutputWordQuery = True 'ставим флаг успешного выполнения функции Exit_: Exit Function Err_: funOutputWordQuery = False Err.Clear app.Quit Resume Exit_ End Function
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0
Цитата(jo_1010 @ 17.07.13, 17:25)
на клиенте (модуль команды) подключаю ПодключитьРасширениеРаботыСФайлами() из модуля команды вызываю менеджер документа, в котором происходят все танцы
У вас в модуле команды должен быть вызов функции модуля менеджера которая вернет адрес хранилища, затем его и открывайте. Все так, и не работает?
Личные бесплатные консультации не даю, для этого есть форум!
Группа: Пользователи
Сообщений: 18
Спасибо сказали: 1 раз
Рейтинг: 0
в модуле команды на клиенте вызов сервера в модуле команда на сервере - вызов менеджера документа в менеджере документа на сервере - вызов СОМ
веб-клиент дает ошибку.
пробовал все тоже из модуля формы дока - результат тот же... пробовал разные браузеры.
в нете практически не встречал сбоев, аналогичных моему. (кроме 2010 г, когда 1с обещала до конца года поправить свой web-клиент) но сейчас уже 2013... то-ли таким извратом никто не страдает, то ли я чего-то не понимаю...
может есть какие варианты заполнять doc-файл на клиенте?
П.С. для Гугл Хром УстановитьРасширениеРаботыСФайлами() ругается.
Группа: Пользователи
Сообщений: 1
Спасибо сказали: 0 раз
Рейтинг: 0
Цитата(jo_1010 @ 17.07.13, 13:58)
День добрый. есть проблема. 1с 8.2.18. Необходимо организовать печать договоров в doc файлы. Т.к. формы и логотипы договоров могут меняться, то в зависимости от ситуации из папки на сервере подтягивается нужный doc-файл и в него вставляются необходимые значения путем замены текста.
на тонком клиенте все работает на УРА: открывается нужный doc-файл, редактируется, через хранилище перебрасывается на клиент. на web-клиенте - проблемы начинаются при попытке изменить текст
WordApplication = Новый COMОбъект("WORD.Application");
приведенный код при запуске с режиме web-клиента выдает следующие ошибки: "Значение не является значением объектного типа (Bookmarks)" "Значение не является значением объектного типа (Content)"
в чем проблема и как ее решить/обойти?
Столкнулся с такой же проблемой, хотелось бы узнать. Как Вы решил ее?
Группа: Пользователи
Сообщений: 18
Спасибо сказали: 1 раз
Рейтинг: 0
Цитата(khitry @ 13.05.14, 14:23)
Столкнулся с такой же проблемой, хотелось бы узнать. Как Вы решил ее?
Если честно, то пока искал решение - ТЗ сменилось. Поэтому, по причине нехватки времени, этот вопрос так и не решал... НО! Читал, что в 8.3 улучшена работа с СОМ в Веб-интерфейсе... будет время - поиграюсь
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!