gifts2017

Авторегистрация документа с заполнением файла по шаблону для 1с 8.3

Опубликовал Сергей Грачев (graser) в раздел Программирование - Практика программирования

В дополнение к http://infostart.ru/public/188902/#comm (Обработчик автоматической регистрации документа 1С:Документооборот после утверждения и автозаполнения файла по шаблону)
Переписал указанный в статье обработчик под платформу 8.3. Все работает.

Создаем Доп.обработчик для события "Задача выполнена" с текстом
// Поиск объекта
Задача = Событие.Источник;

Выполнять = Ложь;
Если ТипЗнч(Задача.БизнесПроцесс) = Тип("БизнесПроцессСсылка.Утверждение") Тогда
   

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


Если Выполнять Тогда 
// Регистрация 
    Нумератор = Нумерация.ПолучитьНумераторДокумента(Объект);
    Если ЗначениеЗаполнено(Нумератор) Тогда // автоматическая нумерация
        ДатаРегистрации = ТекущаяДата();
        ТекущийПользователь = Пользователи.ТекущийПользователь();
                Объект.ДатаРегистрации = ДатаРегистрации;
                // сформируем текущий номер
                СтруктураПараметров = НумерацияКлиентСервер.ПолучитьПараметрыНумерации(Объект);
                Нумерация.СформироватьЧисловойНомерДокумента(СтруктураПараметров, Объект.ЧисловойНомер);
                ОписанияОшибок = Новый СписокЗначений;
                СтруктураПараметров = НумерацияКлиентСервер.ПолучитьПараметрыНумерации(Объект);
                Нумерация.СформироватьСтроковыйНомерДокумента(СтруктураПараметров, Объект.РегистрационныйНомер, ОписанияОшибок);
                Объект.Зарегистрировал = ТекущийПользователь;
                Объект.Записать();
                Делопроизводство.ЗаписатьСостояниеДокумента(
                    Объект.Ссылка,
                    ДатаРегистрации,
                    Перечисления.СостоянияДокументов.Зарегистрирован,
                    ТекущийПользователь);
    КонецЕсли;   

    // автозаполнение файлов
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Файлы.Ссылка
        |ИЗ
        |    Справочник.Файлы КАК Файлы
        |ГДЕ
        |    Файлы.ВладелецФайла = &ВладелецФайла
        |    И Файлы.ПометкаУдаления = ЛОЖЬ";
    Запрос.УстановитьПараметр("ВладелецФайла", Объект.Ссылка);
    Результат = Запрос.Выполнить();
    Если Не Результат.Пустой() Тогда
    Выборка = Запрос.Выполнить().Выбрать();
        Пока Выборка.Следующий() Цикл
                Файло = Выборка.Ссылка;
                ДанныеВыполнения = АвтозаполнениеШаблоновФайловКлиентСервер.ЗаполнитьПоляФайлаДаннымиВладельца(Истина,    Файло, Истина);
        КонецЦикла;
    КонецЕсли;
КонецЕсли;

2. Если используется клиент-серверный вариант, проводим донастройку.
2.1 Пользователю USR1C* даем права локального админа
2.2 Если используется MSOffice 2007 и старше, то в параметрах на вкладке "Центр управления безопасностью" обязательно добавляем доверенный путь в разделе "Надежные расположения" к локальной папке TEMP 1С (C:\Users\USR1C...\AppData\Local\Temp)
2.3 ОБЯЗАТЕЛЬНО используем в качестве шаблонов файлы одной версии с MSOffice стоящим на сервере (если на сервере 2007 то *.docx, если 2003 то *.doc)
3. Фоновое задание "Обработка произошедших бизне-событий" должна работать.

Проверено и функционирует на версии 1С:Предприятие 8.3 (8.3.4.496) со стандартной конфигурацией Документооборот 8 КОРП, редакция 1.4 (1.4.1.10)

См. также

Подписаться Добавить вознаграждение
Комментарии
1. юрий гулидов (gull22) 30.07.14 08:57
Чует мое сердце, что и до Документооборота начальники доберутся. Плюс авансом за труды.
2. Сергей Грачев (graser) 30.07.14 14:00
Дык вот у нас добрались, сейчас страдать приходится :), После "успешного" внедрения документаоборота, чует мое сердце будет переезд бухгалтерии на эту платформу
3. ivdic (ivdic) 28.10.14 14:28
Хорошая задумка. но вот у нас возникает след. задача: Когда исполненный документ на бумаге (подписанный руководителем) возвращается делопроизводителю на регистрацию, она на основании входящего делает исходящий и сканирует в него бум. документ и регистрирует. Так вот как сделать чтобы в момент регистрации исходящего... "закрывался" автоматически связанный входящий (чтоб менял статус на исполнен) ?
4. Сергей Грачев (graser) 18.12.14 14:21
дык все аналогично, только надо просмотреть связанные документы и нужному изменить статус.
Объект у Вас есть, а от него можно всю цепочку размотать :)
5. Сергей Меняйлов (skteks) 10.03.16 01:27
Подскажите, при попытке добавить доверенный путь в разделе "Надежные расположения" к локальной папке TEMP 1С (C:\Users\USR1C...\AppData\Local\Temp) выскакивает ошибка
"указанный путь не является допустимым расположение либо ...."
И не дает добавить данный путь - а 1С не создает файлы - не может записать в эту папку.
6. Сергей Грачев (graser) 10.03.16 08:06
(5) skteks, добавлять надо на сервере, эта донастройка для клиент-серверного варианта. А по ошибке, скорее всего у пользователя, под которым проводите операцию, нет прав на доступ к данному каталогу. Попробуйте настройть office залогинившись под пользователем USR1C...
7. Сергей Меняйлов (skteks) 10.03.16 10:15
Дело не в правах, права дал полные - админские (на сервере для юзера USR1C8), дело в в том, что Word не дает добавить папку "C:\Users\USR1C...\AppData\Local\Temp" в надежные расположения! И по политикам безопасности это правильно - ведь туда может писаться все, что угодно, она ведь указывается как временная в Windows. Пробовал и залогонившись под USR1C... Тоже самое - ругается. Как можно обойти эту проблему? Иначе не работает автозаполнение шаблонов
8. Сергей Грачев (graser) 10.03.16 14:47
оно по другому не заработает, т.к. в office выполняются макросы, попробуй "C:\Users\USR1C...\AppData\Local\" и галочку вложенные папки включить
9. Сергей Меняйлов (skteks) 10.03.16 18:08
Сделал как Вы сказали (поставил галочку "включить вложенные папки") - не получилось. Все равно не пишет в папку Temp - не устанавливает ее доверенной.
10. Сергей Грачев (graser) 11.03.16 07:19
попробуй выбрать не папку Temp а выше уровнем
т.е. полный путь "C:\Users\USR1C...\AppData\Local\", ну и на серваке обязательно разрешение макросов и ActiveX без запросов
Только что проверил, у меня на серваке стоит 2007 офис, и никаких проблем с добавлением как папки Temp, так и других
Почитай на технете мелкомягких, может чего с политиками
Ссыль
11. Сергей Меняйлов (skteks) 14.03.16 12:16
Сделал все как Вы говорили - все равно вылезает ошибка - вот в этом месте - не пишет файл в эту папку
(СтарыйПутьКФАйлу = C:\Users\USR1CV8\AppData\Local\TEMP\имя_файла)

//заполняет поля и строки в файле MSWord формата 2007+
Функция ЗаполнитьФайлMSWordВXML(ДвоичныеДанныеФайла, ТекущаяВерсияРасширение, МассивДанныхДляАвтоЗамен, ЗаменятьПространствоИмен = Истина) Экспорт

СтарыйПутьКФайлу = ПолучитьИмяВременногоФайла(ТекущаяВерсияРасширение);
ДвоичныеДанныеФайла.Записать(СтарыйПутьКФайлу);
НовыйПутьКФайлу = ПолучитьИмяВременногоФайла(ТекущаяВерсияРасширение);

Макросы включил, ActiveX тоже. Папку указал C:\Users\USR1CV8\AppData\Local\
(галочку отметил - "включая вложенные папки)

Можно ли временную папку переопределить только для 1С? У меня тогда и для Word-a меняется (пробовал сделать C:\Temp)
Пробовал уже на двух серваках совершенно разных:
на одном Windows server 2008, Office 2010, 1C Документооборот 2.0.16.1 Платформа 8.3.8.1479

На другом
Windows 7, Office 2015, 1C Документооборот 2.0.16.1 Платформа 8.3.8.147912345

Как только меняю для пользователя USR1CV8... темповую папку (можно в ПанельУправления-Система-Дополнительные Параметры Системы-Дополнительно-Переменные среды) так сразу и Word не разрешает ее добавить в надежные хранилища по соображениям безопасности. Получается только конфу править - путь переопределять вручную?




12. Сергей Грачев (graser) 14.03.16 16:18
Видимо надо рыть реестр, судя по всему проблема в политиках безопасности, если сам говоришь, что как только переопределяешь папку Temp, то Офис ее перестает воспринимать как надежную.
Посмотрел реестр у себя, так вот, для пользователя в качестве папки TEMP в реестре прописан C:\Users\USR1CV8\AppData\Local\Temp.
Единственное отличие, которое нашел, это то что надежное расположение для офиса задано в профиле локального администратора сервера
т.е. у пользователя ServerName / Administrator
А у юзера USR1CV82 никаких папок не задано, и еще, для пользователя Administrator папка Temp изменена на C:\temp
т.е. расклад такой
Пользователь USR1CV82
все настройки путей по умолчанию
Пользователь Administrator
Переменная Temp& TMP C:\Temp\
Надежные издатели C:\User\USR1CV82\AppData\Local
13. Сергей Меняйлов (skteks) 23.03.16 16:59
Добрый день. Разобрался с проблемой - вопрос решился обновлением на конфигурацию 2.0.17.1. И больше ничего не нужно - автозаполнение работает, файлы обновляются.
14. Сергей Иванов (sz99) 27.04.16 09:06
Доброго времени суток.
Решил воспользоваться вашим обработчиком.
В РС "Произошедшие бизнес события" информация "Не удалось обработать".
Что может быть?
Код доработал под свои документы. Сам не программист.
15. Сергей Иванов (sz99) 27.04.16 10:08
Разобрался. Спасибо за обработчик.
16. Александр Евтушенко (evtushenkoav) 29.08.16 16:50
В РС "Произошедшие бизнес события" информация "Не удалось обработать". С чем связано?
17. Александр Евтушенко (evtushenkoav) 30.08.16 13:41
(16) evtushenkoav, В общем решил проблему так, скопировал текст обработчика во внешнюю обработку и в отладке посмотрел где ошибки возникают. Подправил. Все пошло.