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

23.07.14

Задачи пользователя - Адаптация типовых решений

В дополнение к 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С v8.3 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    5684    14    5    

24

Логистика, склад и ТМЦ Адаптация типовых решений Пользователь Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Мы доработали УНФ, чтобы она автоматически отменяла старые резервы и не мешала эффективно продавать.

7200 руб.

02.08.2023    3933    12    0    

29

Адаптация типовых решений Программист Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Абонемент ($m)

Каждый из нас сталкивается с ситуацией, когда какой-нибудь менеджер показывает свой Excel и рассказывает, как он что-то из 1С копирует в него, снабжает пояснениями, выделяет цветом и т.д. и т.п. Заканчивается все просьбой сделать вот чтобы также было в 1С. И оказывается такой человек (почти с гарантией) либо лучшим продажником, либо каким-то важным, за все отвечающим, - на ком все держится.

2 стартмани

22.04.2024    5117    dimanich70    15    

21

БСП (Библиотека стандартных подсистем) Адаптация типовых решений Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    5601    dimanich70    9    

18
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. gull22 102 30.07.14 08:57 Сейчас в теме
Чует мое сердце, что и до Документооборота начальники доберутся. Плюс авансом за труды.
2. graser 10 30.07.14 14:00 Сейчас в теме
Дык вот у нас добрались, сейчас страдать приходится :), После "успешного" внедрения документаоборота, чует мое сердце будет переезд бухгалтерии на эту платформу
3. ivdic 31 28.10.14 14:28 Сейчас в теме
Хорошая задумка. но вот у нас возникает след. задача: Когда исполненный документ на бумаге (подписанный руководителем) возвращается делопроизводителю на регистрацию, она на основании входящего делает исходящий и сканирует в него бум. документ и регистрирует. Так вот как сделать чтобы в момент регистрации исходящего... "закрывался" автоматически связанный входящий (чтоб менял статус на исполнен) ?
4. graser 10 18.12.14 14:21 Сейчас в теме
дык все аналогично, только надо просмотреть связанные документы и нужному изменить статус.
Объект у Вас есть, а от него можно всю цепочку размотать :)
5. skteks 10.03.16 01:27 Сейчас в теме
Подскажите, при попытке добавить доверенный путь в разделе "Надежные расположения" к локальной папке TEMP 1С (C:\Users\USR1C...\AppData\Local\Temp) выскакивает ошибка
"указанный путь не является допустимым расположение либо ...."
И не дает добавить данный путь - а 1С не создает файлы - не может записать в эту папку.
6. graser 10 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 10.03.16 14:47 Сейчас в теме
оно по другому не заработает, т.к. в office выполняются макросы, попробуй "C:\Users\USR1C...\AppData\Local\" и галочку вложенные папки включить
9. skteks 10.03.16 18:08 Сейчас в теме
Сделал как Вы сказали (поставил галочку "включить вложенные папки") - не получилось. Все равно не пишет в папку Temp - не устанавливает ее доверенной.
10. graser 10 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 10 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
22. Svet_Serg 27.03.19 17:07 Сейчас в теме
(12) вот у меня вопрос такой)

Если документ уже зарегистрирован, эта обработка как себя поведёт?

У нас просто настроено так, что если документ "Служебная записка" создал руководитель, то он идёт на "Рассмотрение".
Если создал простой сотрудник, то - документ сначала на "Согласование", затем на "Рассмотрение".
Т.е. мне нужно будет настроить авторегистрацию на эти два процесса - 1. регистрация после согласования и 2. регистрация при старте задачи на рассмотрение.
23. CyberBob 4 28.03.19 09:48 Сейчас в теме
(22)Сделал таким образом: по процессу документ идет на регистрацию, я назвал задачу "Авторегистрация", направляется пользователю "Авторегистратор". По этим параметрам ловим событие и регистрируем документ допобработчиком. Все остальное рулится на этапе конфигурирования карты (шаблона) бизнес-процесса условиями. Т.е. в шаблоне БП ставим задачу "Авторегистрация" на нужное место. Проще всего условия вам нужные настроить при конфигурации шаблона БП с помощью блок-схемы, но можно и таблицей, там просто условия муторно прописывать.
Svet_Serg; +1 Ответить
24. Svet_Serg 28.03.19 09:53 Сейчас в теме
(23)
по процессу документ идет на регистрацию, я назвал задачу "Авторегистрация", направляется пользователю "Авторегистратор"


А пользователю при этом приходит задача "Ознакомиться с результатами регистрации"? Хотелось бы избежать этого :)
25. CyberBob 4 28.03.19 12:17 Сейчас в теме
(24)Задача ознакомления формируется, но автоматически исполняется, без вмешательства человека)) в том же обработчике авторегистрации.
               // выполнение задачи

ПараметрыВыполнения = Новый Структура;

ПараметрыВыполнения.Вставить("РезультатРегистрации", Перечисления.РезультатыРегистрации.Зарегистрировано);

ВыполнениеЗадачСервер.ВыполнитьЗадачуСПараметрами(Задача, ПараметрыВыполнения);
Svet_Serg; +1 Ответить
26. Svet_Serg 28.03.19 12:59 Сейчас в теме
(25) Спасибо, попробую такой вариант)
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 Сейчас в теме
Разобрался. Спасибо за обработчик.
18. eaglemw 20.12.16 13:20 Сейчас в теме
(15) а можно поделиться кодом?
16. evtushenkoav 29.08.16 16:50 Сейчас в теме
В РС "Произошедшие бизнес события" информация "Не удалось обработать". С чем связано?
17. evtushenkoav 30.08.16 13:41 Сейчас в теме
(16) evtushenkoav, В общем решил проблему так, скопировал текст обработчика во внешнюю обработку и в отладке посмотрел где ошибки возникают. Подправил. Все пошло.
VAAngelov; +1 Ответить
19. user827905 15.09.17 09:47 Сейчас в теме
Всем, привет.

Немножко доделал: регистрация происходит только после согласования генеральным директором, а так же регистрируется родительский документ в случае создания подзадачи.

P.S.Про автозаполнение не понял, у меня документ не заполнился. Может я не то ожидал.

// Поиск объекта
Задача = Событие.Источник;

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

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

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

        ЭтоОсновнойПредмет = Истина;        
 
        Пока ВыборкаПоВспомогательнымЗадачам.Следующий() Цикл 
		
            Объект = ВыборкаПоВспомогательнымЗадачам.Предмет.ПолучитьОбъект();
            ЭтоОсновнойПредмет = Ложь;
            Если  (СокрЛП(Объект.ВидДокумента) = "Заявка на закупку") Тогда
                Выполнять = Истина;
            КонецЕсли;
             
        КонецЦикла;

        Если ЭтоОсновнойПредмет Тогда

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

         КонецЕсли;

    КонецЕсли;
КонецЕсли;


Если Выполнять Тогда  
// Регистрация  
    Нумератор = Нумерация.ПолучитьНумераторДокумента(Объект);
    Если ЗначениеЗаполнено(Нумератор) Тогда // автоматическая нумерация
        ДатаРегистрации = ТекущаяДата();
        ТекущийПользователь = Пользователи.ТекущийПользователь();
                Объект.ДатаРегистрации = ДатаРегистрации;
                // сформируем текущий номер
                СтруктураПараметров = НумерацияКлиентСервер.ПолучитьПараметрыНумерации(Объект);
                Нумерация.СформироватьЧисловойНомерДокумента(СтруктураПараметров, Объект.ЧисловойНомер);
                ОписанияОшибок = Новый СписокЗначений;
                СтруктураПараметров = НумерацияКлиентСервер.ПолучитьПараметрыНумерации(Объект);
                Нумерация.СформироватьСтроковыйНомерДокумента(СтруктураПараметров, Объект.РегистрационныйНомер, ОписанияОшибок);
                Объект.Зарегистрировал = ТекущийПользователь;
                Объект.Записать();
                Делопроизводство.ЗаписатьСостояниеДокумента(
                    Объект.Ссылка, 
                    ДатаРегистрации, 
                    Перечисления.СостоянияДокументов.Зарегистрирован, 
                    ТекущийПользователь);
    КонецЕсли;    
КонецЕсли;
Показать
20. blandinko 03.04.18 11:55 Сейчас в теме
Скажите, кто-нибудь пробовал, с LibreOffice и соответственно файлами формата odt данная доп. обработка по автозаполнению файла должна работать?
У меня как-то не очень хочет... (у учетной записи 1с на сервере есть права администратора, уровень безопасности в Либре на сервере установлены в минимум, добавлен доверенный источник на путь C:\User\USR1C..\AppData\Local)
21. blandinko 03.04.18 13:43 Сейчас в теме
(20) Все работает, прошу пардона :)
27. luda33 25.08.22 16:48 Сейчас в теме
Произошла исключительная ситуация (Microsoft Word): Ошибка в Word.
{ОбщийМодуль.АвтозаполнениеШаблоновФайловКлиентСервер.Модуль(92)}:	Док = WordApp.Documents.Add(ПутьКФайлуНаДиске);
{ОбщийМодуль.АвтозаполнениеШаблоновФайловКлиентСервер.Модуль(279)}:			Возврат ЗаполнитьФайлMSWordПоАдресуФайла(Расширение, НастройкиЗамены, ПутьКФайлуНаДиске);
{ОбщийМодуль.АвтозаполнениеШаблоновФайловКлиентСервер.Модуль(1768)}:					ДвоичныеДанныеЗаполненногоФайла = ЗаполнитьФайлMSWordПоДвоичнымДанным(РасширениеФайла, МассивЗамен, ДвоичныеДанныеФайла);
{(96)}:            ДанныеВыполнения = АвтозаполнениеШаблоновФайловКлиентСервер.ЗаполнитьПоляФайлаДаннымиВладельца(
{ОбщийМодуль.БизнесСобытияВызовСервера.Модуль(367)}:	    	Выполнить(СтрокаТаблицы.ВыполняемыйКод);
{ОбщийМодуль.БизнесСобытияВызовСервера.Модуль(130)}:							ОбработатьСобытиеПользовательскаяОбработкаСобытий(Строка, 

по причине:
Произошла исключительная ситуация (Microsoft Word): Ошибка в Word..
Идентификатор записи: 413074d0-901c-4164-8a2c-87ad7ea3282b
Показать


что проверить? - права настроили на темп
28. luda33 11.09.22 10:35 Сейчас в теме
(27) поменяла на docx расширение и все взлетело
29. AlekSo 15 16.02.24 05:52 Сейчас в теме
Всё это конечно было давно, но может кто подскажет. Если утверждение идёт с подписанием электронной подписью. Можно ли как-то успеть вставить регистрацию и обновление файлов до наложения ЭП?
Оставьте свое сообщение