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

29.05.13

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Автоматическая регистрация при утверждении
.txt 6,57Kb
24
24 Скачать (1 SM) Купить за 1 850 руб.

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

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

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

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

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

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

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



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

 

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

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

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

 

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

См. также

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

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

7200 руб.

02.08.2023    4209    15    1    

33

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

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

29400 руб.

29.06.2023    6044    14    5    

24

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

Расширение позволяет вывести в табличном документе факсимиле печати и подписей и/или вывести произвольную картинку из прикреплённых файлов организации для 1С УТ 11.5, КА 2.5, ERP 2.5, УНФ 3, Розница 3. Вывод факсимиле возможен в табличные документы УПД, УКД, Счёт-фактура, ТОРГ-12 и другие. Возможно настроить вывод для любых типовых макетов (Акт сверки, М-15, ТТН), для этого потребуется отредактировать макет и разместить на нём картинки с установленными именами. Редактирование осуществляется через типовой механизм в пользовательском интерфейсе.

3000 руб.

07.02.2023    6745    73    10    

30

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

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

2 стартмани

22.04.2024    5286    dimanich70    15    

22

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

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

01.03.2024    7038    dimanich70    9    

18

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

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

1 стартмани

27.10.2023    3596    29    TempTablesManager    14    

53
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. dpagon 8 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 55 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 55 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 42 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 301 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 55 18.03.24 22:32 Сейчас в теме
(20) Нет, давно уже не поддерживаю разработку
Оставьте свое сообщение