Внешняя печатная форма в формате WORD на примере ЗУП 3, работает в файловом и клиент-серверном вариантах


Пример внешней печатной формы для вывода отчета в MS WORD из конфигурации ЗУП 3, работает как в файловом, так и в клиент-серверном варианте работы 1С.

В обработке реализован пример печати в word из конфигурации ЗУП 3. Печатается макет «Лист ознакомления работников» из документа «Прием на работу». 

Макет реализован с помощью ActiveDocument, его можно редактировать непосредственно в конфигураторе с помощью интерфейса word.

Код сделан максимально простым, комментарии присутствуют.

Для работы отчета в клиент-серверном варианте работы, необходимо наличие установленного MS WORD на сервере 1С

8 Comments

  1. DMak

    {ВнешняяОбработка.ЛистОзнакомленияВWORD.Форма.Форма.Форма(12)}: Ошибка при вызове метода контекста (ПолучитьCOMОбъект): Ошибка получения объекта COM: -2147221005(0x800401F3): Недопустимая строка с указанием класса

    Платформа 8.3.8.1933

    Reply
  2. flyDrag

    (1) DMak,

    проверил на 8.3.8.2027, Зарплата и управление персоналом, редакция 3.1 (3.1.1.61), и Word 2007 у меня работает,

    Для работы отчета у Вас должен быть установлен Word

    Reply
  3. Amras

    ЗУП КОРП 3.1.1.95 (клиент-серверный):

    {ВнешняяОбработка.ЛистОзнакомленияВWORD.Форма.Форма.Форма(12)}: Ошибка при вызове метода контекста (ПолучитьCOMОбъект): Ошибка получения объекта COM: -2147221005(0x800401F3): Недопустимая строка с указанием класса

    В локальной базе все и норм, а в клиент-серверном варианте ошибка.

    Ошибка возникает в момент получения МакетВорд:

    &НаКлиенте
    Процедура Печать()
    …
    Попытка
    ШаблонВорд = ПолучитьCOMОбъект(МакетВорд); //инициализируем COM-объект, на сервере д.б. установлен word
    …
    

    Тестирование с правами доступа на сервере, лучше сохранять во временный каталог (к нему обычно права у пользователей есть):

    &НаКлиенте
    Процедура Печать()
    
    //задаем имя сохранения на диск
    КлючУникальности = Новый УникальныйИдентификатор;
    Каталог = РабочийКаталогДанныхПользователя()+КлючУникальности+»ListOZ.doc»; // Стоит заменить на временный (но проблему это не решит до конца) — КаталогВременныхФайлов()
    

    Суть проблемы кроется в следующем:

    1. Создается путь к файлу на диске C:\r

    2. Файл сохраняется на сервере

    3. Локальный компьютер не может получить данный файл с сервера

    4. Ошибка

    Предположу, что передавать файл с сервера на клиент лучше через хранилище (но какой-то долгий путь выходит, пусть даже всего 5-8 строк кода добавится).

    Reply
  4. Amras

    Предвижу вопрос про Word на сервере 🙂 Нормальные (или очень злые) админы, никакое ПО кроме серверного на файловый сервер не ставят. От силы могут разрешить Word Viewer от MS установить. Но он не спасет положение. А вот через передачу посредством временного хранилища все заработало. Пока не тестировал на терминальном сервере, для удаленных пользователей, но как минутка появится проверю и там.

    Reply
  5. flyDrag

    (4) Amras, обработка выложенная здесь работает и на локальной базе и на клиент-серверной, но только на сервере, по поводу работы на терминальном сервере или по сети я менял обработку с передачей файла с клиента сервер:

    до строчки

    Попытка
    Шаблон = ПолучитьCOMОбъект(Каталог); //инициализируем COM-объект

    вставлял следующий код:

    КлючУникальности = Новый УникальныйИдентификатор;
    Каталог = «E:ReportsToWord»+КлючУникальности+»ListOZ.doc»;   //этот путь хранится на сервере
    Макет = ПолучитьМакет(Каталог);
    Адрес=ПолучитьФайл(Каталог);
    Каталог = РабочийКаталогДанныхПользователя()+КлючУникальности+»ListOZ.doc»;
    Описание=Новый ОписаниеПередаваемогоФайла(Каталог,Адрес);
    МассивОписаний=Новый Массив;
    МассивОписаний.Добавить(Описание);
    ПолучитьФайлы(МассивОписаний,,,Ложь);
    Попытка
    Шаблон = ПолучитьCOMОбъект(Каталог); //инициализируем COM-объект
    Исключение  …и далее по коду
    
    где  ПолучитьФайл(Каталог);,см код ниже
    
    Функция ПолучитьФайл(Каталог)
    Двоичное=Новый ДвоичныеДанные(Каталог);
    Адрес=ПоместитьВоВременноеХранилище(Двоичное,ЭтаФорма.УникальныйИдентификатор);
    Возврат Адрес
    КонецФункции
    

    Показать

    (наличие установленного на сервере ворда обязательно)

    Если есть другие варианты просьба поделитесь пожалуйста

    Reply
  6. Amras
    Reply
  7. Butuff

    (5) у меня такая же ошибка при получении СОМ объекта — {Форма.Форма.Форма(12)}: Ошибка при вызове метода контекста (ПолучитьCOMОбъект): Ошибка получения объекта COM: -2147221005(0x800401F3): Недопустимая строка с указанием класса

    Платформа — 8.3.7.2008

    ЗУП — 3.0.25.144

    и странный механизм печати внешнего макета — открытие формы обработки и оттуда печать, раньше ведь все было в модуле обработки и сразу выводилось на печать… это я так понял и связано с тем что СОМ объект не доступен на сервере, но тут еще какая то проблема с указанием класса, не подскажете как с ней бороться?

    Reply
  8. mrm1212

    Столкнулся с проблемой, механизм работает через вставка замена в ворд, но пока документ ворд активный, как только какая-то программа перехватывает активность, в моем случае скайп, вываливается ошибка! =) ни кто не сталкивался???пытаюсь разобраться..пока решений не нашел..

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *