Обработчик позволяет без изменения конфигурации дополнить функционал по регистрации и автозаполнению файла по шаблону.
Может рассматриваться вообще как пример использования функционала бизнес-событий 1С:Документооборота.
1. Создаем дополнительный обработчик «Автоматическая регистрация при утверждении»
// Регистрация
Задача = Событие.Источник;
Выполнять = Ложь;
Если ТипЗнч(Задача.БизнесПроцесс) = Тип("БизнесПроцессСсылка.Утверждение") Тогда
Если Задача.БизнесПроцесс.РезультатУтверждения = Перечисления.РезультатыУтверждения.Утверждено Тогда
Если Задача.Предмет <> Неопределено Тогда
Объект = Задача.Предмет.ПолучитьОбъект();
Если ТипЗнч(Объект.Ссылка) = Тип("СправочникСсылка.ВнутренниеДокументы") Тогда
Если (СокрЛП(Объект.ВидДокумента) = "Служебная записка") ИЛИ
(СокрЛП(Объект.ВидДокумента) = "Служебная записка на оплату") Тогда
Нумератор = Нумерация.ПолучитьНумераторДокумента(Объект.ВидДокумента);
Если Не ЗначениеЗаполнено(Объект.РегистрационныйНомер) Тогда
Если ЗначениеЗаполнено(Нумератор) Тогда
//Атоматическая регистрация возможна
//еще не зарегистрирован
Выполнять = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если Выполнять Тогда
ТекущийПользователь = ОбщегоНазначения.ТекущийПользователь();
Объект.ДатаРегистрации = ТекущаяДатаСеанса();
// формируем числовой номер
СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("ВидДокумента", Объект.ВидДокумента);
СтруктураПараметров.Вставить("Организация", Объект.Организация);
СтруктураПараметров.Вставить("ДатаРегистрации", Объект.ДатаРегистрации);
СтруктураПараметров.Вставить("Ссылка", Объект.Ссылка);
Нумерация.СформироватьЧисловойНомерДокумента(СтруктураПараметров, Объект.ЧисловойНомер);
// формируем строковый номер
СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("ЧисловойНомер", Объект.ЧисловойНомер);
СтруктураПараметров.Вставить("ДатаРегистрации", Объект.ДатаРегистрации);
СтруктураПараметров.Вставить("ВидДокумента", Объект.ВидДокумента);
СтруктураПараметров.Вставить("Организация", Объект.Организация);
СтруктураПараметров.Вставить("НоменклатураДел", Объект.НоменклатураДел);
СтруктураПараметров.Вставить("ВопросДеятельности", Объект.ВопросДеятельности);
СтруктураПараметров.Вставить("Подразделение", Объект.Подразделение);
СтруктураПараметров.Вставить("Корреспондент", Объект.Корреспондент);
СтруктураПараметров.Вставить("Ссылка", Объект.Ссылка);
ОписанияОшибок = Новый СписокЗначений;
Нумерация.СформироватьСтроковыйНомерДокумента(СтруктураПараметров, Объект.РегистрационныйНомер, ОписанияОшибок);
Для Каждого ОписаниеОшибки Из ОписанияОшибок Цикл
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
ОписаниеОшибки.Представление,,
ОписаниеОшибки.Значение,
"Объект");
КонецЦикла;
Если ЗначениеЗаполнено(Объект.РегистрационныйНомер) Тогда // успешно сформирован номер
Объект.Зарегистрировал = ТекущийПользователь;
Иначе
//Объект.ДатаРегистрации = '00010101';
КонецЕсли;
Делопроизводство.ЗаписатьСостояниеДокумента(Задача.Предмет, ТекущаяДатаСеанса(), Перечисления.СостоянияДокументов.Зарегистрирован, ТекущийПользователь);
Объект.Записать();
// автозаполнение файлов
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Файлы.Ссылка
|ИЗ
| Справочник.Файлы КАК Файлы
|ГДЕ
| Файлы.ВладелецФайла = &ВладелецФайла
| И Файлы.ШаблонОснованиеДляСоздания <> ЗНАЧЕНИЕ(Справочник.Файлы.ПустаяСсылка)
| И Файлы.Редактирует = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)
| И НЕ Файлы.ПометкаУдаления";
Запрос.УстановитьПараметр("ВладелецФайла", Объект.Ссылка);
Результат = Запрос.Выполнить();
Если Не Результат.Пустой() Тогда
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ДанныеВыполнения = АвтозаполнениеШаблоновФайловКлиентСервер.ЗаполнитьПоляФайлаДаннымиВладельца(
Истина, Выборка.Ссылка, Истина);
КонецЦикла;
КонецЕсли;
КонецЕсли;
Дорабатываем код согласно используемым Вами документам.
2. На вкладке подписки добавляем новую подписку с видом события «Задача выполнена» и этим обработчиком.
3. Включаем обработчик и проверяем по справочнику Произошедшие бизнес-события, документам, отсутствию ошибок.
Фоновое задание «Обработка произошедших бизнес-событий» должна работать.
Работает на Документооборот 1.2.8.1 Корп. Думаю должно работать и на других версиях.
Регистрация работает, а вот с заполнение файлов беда. Релиз 1.3.1.5. При вызове функции АвтозаполнениеШаблоновФайловКлиентСервер.ЗаполнитьПоляФайлаДаннымиВладельца возникает ошибка:
{ОбщийМодуль.АвтозаполнениеШаблоновФайловКлиентСервер.Модуль(60)}: Ошибка при вызове метода контекста (Add)
Док = WordApp.Documents.Add(ПутьКФайлуНаДиске);
по причине:
Произошла исключительная ситуация (Microsoft Word): Недостаточно памяти. Немедленно сохраните документ.
Насколько я понимаю проблема в том что нет доступа к каталогу ПутьКФайлуНаДиск, по факту C:UsersUSR1CV82AppDataLocalTempv8_923E_1a2.doc. Копал по настройкам DCOM, но пока бесполезно.
(1) dpagon,
Надо посмотреть права к папке с файлом и еще уточнить где работает автозаполнение файла (за константа отвечающая за это). Хотя сам 1.3.1.5. пока не обновлялся.
(1) dpagon, как решили?
Спасибо за
Не знал как достучаться до объекта.
А вот процедуру регистрации документа взял с конфигурации:
Показать
А в документообороте есть автоматическая регистрация при создании внутреннего документа?
(5) luda33,
По-умолчанию нет, эта статья как раз и показывает как это реализовать. Хотя я столкнулся с проблемами. Например, пользователь записывает внутренний документ и продолжает его редактирование. При этом через минуту происходит автоматическая регистрация и пользователь уже не может сохранить изменения которые он вносил.
(6) uri1978, как так получается?
у нас тоже — пользователи не регистрируют ничего, им это не надо — а доки оказываются зарегистрированными
как так не знаю
уже отключили запрет менять документы после регистрации
а сейчас возникла необходимость регистрировать при создании документа, — что бы номер сразу при заполнении попадал в файл (из шаблона)
видимо придется воспользоваться этим обработчиком, только не при утверждении
(6) uri1978,
Регистрация происходит отдельным обработчиком с записью документа, а в этот момент документ оказывается открытым и данные на форме не соответствуют записанным и естественно документ не сохраняется.
Мое применение как раз и было нацелено, что регистрация происходит когда изменения уже не нужны.
(7) luda33,
Посмотрите изменение состояний документа. Там есть информация о том кто и когда зарегистрировал.
Регистрация при создании документа — скорее всего без изменения конфигурации не получится.
(8)
У меня внутренний документ, который должен быть зарегистрирован, не проходит бизнес процессов. Т.е. по нему нет утверждений или согласований. Соответственно я его могу регистрировать только при записи. И по этой причине и происходит «коллизия».
на 8.3 не работает, затыкается вот здесь Объект = Задача.Предмет.ПолучитьОбъект();
У задачи предмет описан как Список
Ошибка — 3. Включаем обработчик и проверяем по справочнику Произошедшие бизнес-события.
Надо — 3. Включаем обработчик и проверяем по регистру сведений Произошедшие бизнес-события
Ребят подскажите, когда происходит автозаполнение файла? Вроде как все настроил, проверил. Все заполняется. Когда ввожу новый документ, автозаполнение не срабатывает в файле. В файле выходят служебные теги при просмотре.
(12)Автоматом, должно заполняться при записи документа. Можно ручками ткнуть на автозаполняемый файл правой кнопкой и выбрать «заполнить файл данными документа».
1с:Документооборот 2.1 КОРП
Привет! Кто нибудь знает как зарезервировать номер для договора,без регистрации документа? Например, есть договор который еще не подписан и не отработан, не оплачен и т.д., но клиент просит номер договора, а его соответственно еще нет.
Идея такая делаем «Волшебную кнопку» нажимаем — резервируем номер сохраняем документ, при этом нумерация договоров продолжается со следующего номера. А этот документ доступен для редактирования. Как можно реализовать по другому, есть идеи?
Ну и моя идея реализуема вообще?