Обработчик автоматической регистрации документа 1С:Документооборот после утверждения и автозаполнения файла по шаблону

29.05.13

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

Дополнительный обрабочик для 1С:Документооборот, позволяющий выполнять автоматическую регистрацию внутреннего документа после его утверждения и автоматическое заполнение прикрепленного шаблонного файла.

Скачать файлы

Наименование Файл Версия Размер
Автоматическая регистрация при утверждении
.txt 6,57Kb
24
.txt 6,57Kb 24 Скачать

Обработчик позволяет без изменения конфигурации дополнить функционал по регистрации и автозаполнению файла по шаблону.

Может рассматриваться вообще как пример использования функционала бизнес-событий 1С:Документооборота.

1. Создаем дополнительный обработчик "Автоматическая регистрация при утверждении"

// Регистрация
Задача = Событие.Источник;

Выполнять = Ложь;

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

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



Дорабатываем код согласно используемым Вами документам.

 

2. На вкладке подписки добавляем новую подписку с видом события "Задача выполнена" и этим обработчиком.

3. Включаем обработчик и проверяем по справочнику Произошедшие бизнес-события, документам, отсутствию ошибок.

Фоновое задание "Обработка произошедших бизнес-событий" должна работать.

 

Работает на Документооборот 1.2.8.1 Корп. Думаю должно работать и на других версиях.

См. также

Табличная часть в доп. реквизитах и формирование таблиц в шаблоне docx для 1С:ДО 3.0

Адаптация типовых решений Платформа 1С v8.3 1С:Документооборот Россия Платные (руб)

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

29400 руб.

29.06.2023    4452    9    4    

18

Расширение для 1С:УНФ. Автоматическое снятие резервов в Заказах покупателей

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

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

7200 руб.

02.08.2023    2952    4    0    

19

Создать на основании - своя кнопка (БСП). Проблема двух подменю Создать на основании

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

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

01.03.2024    1282    dimanich70    6    

13

Доработка отчета "Связанные документы" (структура подчиненности) для вывода объектов из любого расширения

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

Доработка типового отчета "Связанные документы" позволяет просто и быстро расширять состав объектов для построения структуры подчиненности документов, используя объекты основной конфигурации и любых расширений.

1 стартмани

27.10.2023    1994    13    avmartynov    10    

43

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

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

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2071    21    progmaster    7    

3
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. dpagon 7 12.09.13 16:51 Сейчас в теме
Регистрация работает, а вот с заполнение файлов беда. Релиз 1.3.1.5. При вызове функции АвтозаполнениеШаблоновФайловКлиентСервер.ЗаполнитьПоляФайлаДаннымиВладельца возникает ошибка:
{ОбщийМодуль.АвтозаполнениеШаблоновФайловКлиентСервер.Модуль(60)}: Ошибка при вызове метода контекста (Add)
Док = WordApp.Documents.Add(ПутьКФайлуНаДиске);
по причине:
Произошла исключительная ситуация (Microsoft Word): Недостаточно памяти. Немедленно сохраните документ.
Насколько я понимаю проблема в том что нет доступа к каталогу ПутьКФайлуНаДиск, по факту C:\Users\USR1CV82\AppData\Local\Temp\v8_923E_1a2.doc. Копал по настройкам DCOM, но пока бесполезно.
2. Killgur 54 29.09.13 21:36 Сейчас в теме
(1) dpagon,
Надо посмотреть права к папке с файлом и еще уточнить где работает автозаполнение файла (за константа отвечающая за это). Хотя сам 1.3.1.5. пока не обновлялся.
16. Dorn2007 29.07.20 15:05 Сейчас в теме
(2) как исправить под 8.3?
3. Olga_K_ 29.10.13 07:09 Сейчас в теме
4. uri1978 137 22.11.13 11:58 Сейчас в теме
Спасибо за
Задача = Событие.Источник;
Не знал как достучаться до объекта.

А вот процедуру регистрации документа взял с конфигурации:
Если Выполнять Тогда    
			
			Нумератор = Нумерация.ПолучитьНумераторДокумента(ДокументОбъект);
			
			Если ЗначениеЗаполнено(Нумератор) Тогда // автоматическая нумерация
				
				ДатаРегистрации = ТекущаяДата();
				ТекущийПользователь = ОбщегоНазначения.ТекущийПользователь();
				
				ДокументОбъект.ДатаРегистрации = ДатаРегистрации;
				
				// сформируем текущий номер
				СтруктураПараметров = НумерацияКлиентСервер.ПолучитьПараметрыНумерации(ДокументОбъект);
				Нумерация.СформироватьЧисловойНомерДокумента(СтруктураПараметров, ДокументОбъект.ЧисловойНомер);
				
				ОписанияОшибок = Новый СписокЗначений;
				СтруктураПараметров = НумерацияКлиентСервер.ПолучитьПараметрыНумерации(ДокументОбъект);
				Нумерация.СформироватьСтроковыйНомерДокумента(СтруктураПараметров, ДокументОбъект.РегистрационныйНомер, ОписанияОшибок);
				
				ДокументОбъект.Зарегистрировал = ТекущийПользователь;
				ДокументОбъект.Записать();
				
				Делопроизводство.ЗаписатьСостояниеДокумента(
					ДокументОбъект.Ссылка, 
					ДатаРегистрации, 
					Перечисления.СостоянияДокументов.Зарегистрирован, 
					ТекущийПользователь);
					
			КонецЕсли;	
			
		КонецЕсли;
Показать
5. luda33 04.12.13 15:23 Сейчас в теме
А в документообороте есть автоматическая регистрация при создании внутреннего документа?
6. uri1978 137 04.12.13 16:10 Сейчас в теме
(5) luda33,
По-умолчанию нет, эта статья как раз и показывает как это реализовать. Хотя я столкнулся с проблемами. Например, пользователь записывает внутренний документ и продолжает его редактирование. При этом через минуту происходит автоматическая регистрация и пользователь уже не может сохранить изменения которые он вносил.
7. luda33 04.12.13 19:46 Сейчас в теме
(6) uri1978, как так получается?
у нас тоже - пользователи не регистрируют ничего, им это не надо - а доки оказываются зарегистрированными
как так не знаю
уже отключили запрет менять документы после регистрации

а сейчас возникла необходимость регистрировать при создании документа, - что бы номер сразу при заполнении попадал в файл (из шаблона)
видимо придется воспользоваться этим обработчиком, только не при утверждении
8. Killgur 54 06.12.13 00:20 Сейчас в теме
(6) uri1978,
Регистрация происходит отдельным обработчиком с записью документа, а в этот момент документ оказывается открытым и данные на форме не соответствуют записанным и естественно документ не сохраняется.
Мое применение как раз и было нацелено, что регистрация происходит когда изменения уже не нужны.

(7) luda33,
Посмотрите изменение состояний документа. Там есть информация о том кто и когда зарегистрировал.
Регистрация при создании документа - скорее всего без изменения конфигурации не получится.
9. uri1978 137 06.12.13 12:33 Сейчас в теме
(8)
У меня внутренний документ, который должен быть зарегистрирован, не проходит бизнес процессов. Т.е. по нему нет утверждений или согласований. Соответственно я его могу регистрировать только при записи. И по этой причине и происходит "коллизия".
10. graser 10 22.07.14 12:15 Сейчас в теме
на 8.3 не работает, затыкается вот здесь Объект = Задача.Предмет.ПолучитьОбъект();
У задачи предмет описан как Список
15. Dorn2007 29.07.20 14:43 Сейчас в теме
(10) как тогда выходить из ситуации?
11. lavdeenko 40 02.03.18 13:01 Сейчас в теме
Ошибка - 3. Включаем обработчик и проверяем по справочнику Произошедшие бизнес-события.
Надо - 3. Включаем обработчик и проверяем по регистру сведений Произошедшие бизнес-события
12. Kontakt 109 10.07.18 11:05 Сейчас в теме
Ребят подскажите, когда происходит автозаполнение файла? Вроде как все настроил, проверил. Все заполняется. Когда ввожу новый документ, автозаполнение не срабатывает в файле. В файле выходят служебные теги при просмотре.
13. CyberBob 4 11.07.18 05:07 Сейчас в теме
(12)Автоматом, должно заполняться при записи документа. Можно ручками ткнуть на автозаполняемый файл правой кнопкой и выбрать "заполнить файл данными документа".
14. user780057 06.11.19 12:10 Сейчас в теме
1с:Документооборот 2.1 КОРП
Привет! Кто нибудь знает как зарезервировать номер для договора,без регистрации документа? Например, есть договор который еще не подписан и не отработан, не оплачен и т.д., но клиент просит номер договора, а его соответственно еще нет.
Идея такая делаем "Волшебную кнопку" нажимаем - резервируем номер сохраняем документ, при этом нумерация договоров продолжается со следующего номера. А этот документ доступен для редактирования. Как можно реализовать по другому, есть идеи?
Ну и моя идея реализуема вообще?
17. rullin 70 05.08.20 14:33 Сейчас в теме
Как по мне ситуация "Дно", 1с как всегда на "высоте". В заполнении шаблона есть реквизит "регистрационный номер", шаблон заполняется при записи документа, а регистрация делается уже позже, значит это в принципе никогда не сработает. Господи они вообще тестируют что пишут....
18. DrZombi 286 14.07.22 16:06 Сейчас в теме
Спасибо за примерчик, пришлось немного подправить, но это мелочи :)
19. bymer 07.09.22 15:44 Сейчас в теме
// Автоматическая регистрация при создании внутреннего документа

ВнутреннийДокумент = Событие.Источник;

Выполнять = Ложь;

Если ДокументооборотПраваДоступа.ЕстьПравоРегистрации(ВнутреннийДокумент)
И ЗначениеЗаполнено(ВнутреннийДокумент) Тогда
ВнутреннийДокументОбъект = ВнутреннийДокумент.ПолучитьОбъект();

Если ТипЗнч(ВнутреннийДокумент.Ссылка) = Тип("СправочникСсылка.ВнутренниеДокументы") Тогда
Если СокрЛП(ВнутреннийДокумент.ВидДокумента) = "Ваш документ" Тогда

Нумератор = Нумерация.ПолучитьНумераторДокумента(ВнутреннийДокумент);

Если Не ЗначениеЗаполнено(ВнутреннийДокумент.РегистрационныйНомер) Тогда
Если ЗначениеЗаполнено(Нумератор) Тогда
//Атоматическая регистрация возможна
//еще не зарегистрирован
Выполнять = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;

Если Выполнять Тогда
ВнутреннийДокумент.ДатаРегистрации = ТекущаяДатаСеанса();

// сформируем текущий номер
СтруктураПараметров = НумерацияКлиентСервер.ПолучитьПараметрыНумерации(ВнутреннийДокумент);
Нумерация.СформироватьЧисловойНомерДокумента(СтруктураПараметров, ВнутреннийДокумент.ЧисловойНомер);

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

ВнутреннийДокументОбъект.Зарегистрировал = ПользователиКлиентСервер.ТекущийПользователь();
ВнутреннийДокументОбъект.Записать();

Делопроизводство.ЗаписатьСостояниеДокумента(
ВнутреннийДокумент.Ссылка,
ТекущаяДатаСеанса(),
Перечисления.СостоянияДокументов.Зарегистрирован,
ПользователиКлиентСервер.ТекущийПользователь());
КонецЕсли;
20. user1764765 13.03.24 07:38 Сейчас в теме
Добрый день, подскажите возможна ли реализация данной настройки в версии 1С ДО редакция 2.1 (2.1.30.4)?
21. Killgur 54 18.03.24 22:32 Сейчас в теме
(20) Нет, давно уже не поддерживаю разработку
Оставьте свое сообщение