Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2, свеженьких 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Сбои при редактировании Word-файла через web-клиент , невозможно вызвать команду Word (VBA)          
jo_1010 Подменю пользователя
сообщение 17.07.13, 9:58
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 18
Спасибо сказали: 1 раз
Рейтинг: 0

День добрый. есть проблема.
1с 8.2.18. Необходимо организовать печать договоров в doc файлы. Т.к. формы и логотипы договоров могут меняться, то в зависимости от ситуации из папки на сервере подтягивается нужный doc-файл и в него вставляются необходимые значения путем замены текста.

на тонком клиенте все работает на УРА: открывается нужный doc-файл, редактируется, через хранилище перебрасывается на клиент.
на web-клиенте - проблемы начинаются при попытке изменить текст
    
    WordApplication = Новый COMОбъект("WORD.Application");

    ИмяФайла = "D:\11111.doc";
    НовыйДокумент = WordApplication.Documents.Open(ИмяФайла);

    //вставляем данные в док. путем поиска-замены

    ЗаменаКонтента = НовыйДокумент.Content.Find;
    ЗаменаКонтента.Execute("ДатаРасчета",Ложь,Истина,Ложь,,,Истина,,Ложь,Строка(Док.ДатаРасчета));

    //вставляем данные в док. по закладкам

    НовыйДокумент.Bookmarks("ФИО_Покуп").Range.Text = Строка(Док.Покупатель);


приведенный код при запуске с режиме web-клиента выдает следующие ошибки:
"Значение не является значением объектного типа (Bookmarks)"
"Значение не является значением объектного типа (Content)"

в чем проблема и как ее решить/обойти?

jo_1010 Подменю пользователя
сообщение 17.07.13, 13:22
Сообщение #2

Общительный
**
Группа: Пользователи
Сообщений: 18
Спасибо сказали: 1 раз
Рейтинг: 0

вопрос не верно сформулирован, или никто не сталкивался???

logist Подменю пользователя
сообщение 17.07.13, 13:55
Сообщение #3

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Цитата(jo_1010 @ 17.07.13, 10:58) *
в чем проблема

Проблема в єтом:
НовыйДокумент = WordApplication.Documents.Open(ИмяФайла);

Файл как минимум не открывается.


Signature
Личные бесплатные консультации не даю, для этого есть форум!

jo_1010 Подменю пользователя
сообщение 17.07.13, 16:01
Сообщение #4

Общительный
**
Группа: Пользователи
Сообщений: 18
Спасибо сказали: 1 раз
Рейтинг: 0

Цитата(logist @ 17.07.13, 14:55) *
Проблема в єтом:
НовыйДокумент = WordApplication.Documents.Open(ИмяФайла);

Файл как минимум не открывается.


якорь мне в .... пазуху!!! а ведь в этом что-то есть!!! а почему же тонкий так четко файл находит?

logist Подменю пользователя
сообщение 17.07.13, 16:06
Сообщение #5

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Если ПодключитьРасширениеРаботыСФайлами() Тогда
// ОК
Иначе
// Работа с файлами в вэб-клиенте будет невозможна.
КонецЕсли;


Signature
Личные бесплатные консультации не даю, для этого есть форум!

jo_1010 Подменю пользователя
сообщение 17.07.13, 16:25
Сообщение #6

Общительный
**
Группа: Пользователи
Сообщений: 18
Спасибо сказали: 1 раз
Рейтинг: 0

можно здесь по-подробнее?
1) на клиенте подключаю ПодключитьРасширениеРаботыСФайлами()
2) с клиента вызываю сервер для обработки находящегося на сервере файла
3) получаю обработанный файл на клиент через хранилище

так???

тоже лажа...
на клиенте (модуль команды) подключаю ПодключитьРасширениеРаботыСФайлами()
из модуля команды вызываю менеджер документа, в котором происходят все танцы

получаю ошибку...


vadim007 Подменю пользователя
сообщение 19.07.13, 11:59
Сообщение #7

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1298
Из: Донецк
Спасибо сказали: 208 раз
Рейтинг: 0

Цитата(jo_1010 @ 17.07.13, 10:58) *
День добрый. есть проблема.
1с 8.2.18. Необходимо организовать печать договоров в doc файлы. Т.к. формы и логотипы договоров могут меняться, то в зависимости от ситуации из папки на сервере подтягивается нужный doc-файл и в него вставляются необходимые значения путем замены текста.
на тонком клиенте все работает на УРА: открывается нужный doc-файл, редактируется, через хранилище перебрасывается на клиент.
на web-клиенте - проблемы начинаются при попытке изменить текст
в чем проблема и как ее решить/обойти?

А не пробовали заполнять документы данными, используя закладки в шаблоне? Это вроде как стандартный метод для заполнения форм договоров и др.

jo_1010 Подменю пользователя
сообщение 19.07.13, 14:07
Сообщение #8

Общительный
**
Группа: Пользователи
Сообщений: 18
Спасибо сказали: 1 раз
Рейтинг: 0

пробовать-то пробовал. проблема в том, что ошибка выскакивает при вызове Context, Find, bookmarks... причем только с web-клиентом. в тонком - без проблем.
или я не в курсе еще про какой-то метод с закладками? (уже никаких идей просто нету)

vadim007 Подменю пользователя
сообщение 20.07.13, 8:03
Сообщение #9

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1298
Из: Донецк
Спасибо сказали: 208 раз
Рейтинг: 0

Вот текст из рабочей базы 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

logist Подменю пользователя
сообщение 20.07.13, 17:41
Сообщение #10

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Цитата(jo_1010 @ 17.07.13, 17:25) *
на клиенте (модуль команды) подключаю ПодключитьРасширениеРаботыСФайлами()
из модуля команды вызываю менеджер документа, в котором происходят все танцы

У вас в модуле команды должен быть вызов функции модуля менеджера которая вернет адрес хранилища, затем его и открывайте. Все так, и не работает?


Signature
Личные бесплатные консультации не даю, для этого есть форум!

jo_1010 Подменю пользователя
сообщение 22.07.13, 9:44
Сообщение #11

Общительный
**
Группа: Пользователи
Сообщений: 18
Спасибо сказали: 1 раз
Рейтинг: 0


в модуле команды на клиенте вызов сервера
в модуле команда на сервере - вызов менеджера документа
в менеджере документа на сервере - вызов СОМ

веб-клиент дает ошибку.

пробовал все тоже из модуля формы дока - результат тот же...
пробовал разные браузеры.

в нете практически не встречал сбоев, аналогичных моему. (кроме 2010 г, когда 1с обещала до конца года поправить свой web-клиент)
но сейчас уже 2013... то-ли таким извратом никто не страдает, то ли я чего-то не понимаю...


может есть какие варианты заполнять doc-файл на клиенте?

П.С. для Гугл Хром УстановитьРасширениеРаботыСФайлами() ругается.


khitry Подменю пользователя
сообщение 13.05.14, 13:23
Сообщение #12

Молчаливый
*
Группа: Пользователи
Сообщений: 1
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(jo_1010 @ 17.07.13, 13:58) *
День добрый. есть проблема.
1с 8.2.18. Необходимо организовать печать договоров в doc файлы. Т.к. формы и логотипы договоров могут меняться, то в зависимости от ситуации из папки на сервере подтягивается нужный doc-файл и в него вставляются необходимые значения путем замены текста.

на тонком клиенте все работает на УРА: открывается нужный doc-файл, редактируется, через хранилище перебрасывается на клиент.
на web-клиенте - проблемы начинаются при попытке изменить текст
    
    WordApplication = Новый COMОбъект("WORD.Application");

    ИмяФайла = "D:\11111.doc";
    НовыйДокумент = WordApplication.Documents.Open(ИмяФайла);

    //вставляем данные в док. путем поиска-замены

    ЗаменаКонтента = НовыйДокумент.Content.Find;
    ЗаменаКонтента.Execute("ДатаРасчета",Ложь,Истина,Ложь,,,Истина,,Ложь,Строка(Док.ДатаРасчета));

    //вставляем данные в док. по закладкам

    НовыйДокумент.Bookmarks("ФИО_Покуп").Range.Text = Строка(Док.Покупатель);


приведенный код при запуске с режиме web-клиента выдает следующие ошибки:
"Значение не является значением объектного типа (Bookmarks)"
"Значение не является значением объектного типа (Content)"

в чем проблема и как ее решить/обойти?


Столкнулся с такой же проблемой, хотелось бы узнать. Как Вы решил ее?

jo_1010 Подменю пользователя
сообщение 27.06.14, 9:05
Сообщение #13

Общительный
**
Группа: Пользователи
Сообщений: 18
Спасибо сказали: 1 раз
Рейтинг: 0

Цитата(khitry @ 13.05.14, 14:23) *
Столкнулся с такой же проблемой, хотелось бы узнать. Как Вы решил ее?


Если честно, то пока искал решение - ТЗ сменилось. Поэтому, по причине нехватки времени, этот вопрос так и не решал...
НО! Читал, что в 8.3 улучшена работа с СОМ в Веб-интерфейсе... будет время - поиграюсь

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 18.04.24, 17:49
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!