Автоматическое обновление файлов данными владельца в документообороте

Обновление данных файлов, созданных по шаблону в ДО 2.1.13.

Наверное, многие в ДО сталкивались с такой проблемой — при изменении существующего документа данные в файлах (из шаблона документа) не обновляются данными документа. Для того, чтобы обновить данные в файле, приходится нажимать кнопку "Заполнить файл данными документа" для каждого файла:

В данной статье я хочу поделиться своим способом решения данной проблемы. 

После записи на сервере я добавил свою процедуру, в которой проверяется, изменился ли документ, если есть изменения, тогда вызывается код для обновления данных файлов, созданных по шаблону:

&НаСервере
Процедура пп_ОбновитьДанныеФайлов()

Если ПолучитьФункциональнуюОпцию("ИспользоватьАвтозаполнениеФайлов") Тогда

Если Не Объект.Ссылка.Пустая() И Не НовыйДокумент
И Модифицированность Тогда

мРасширения = пп_ДоступныеРасширения();

Для Каждого СтрокаТЗ Из Файлы Цикл

Если СтрокаТЗ.Редактирует = ПользователиПустаяСсылка И
Не СтрокаТЗ.ПометкаУдаления И
мРасширения.Найти(СтрокаТЗ.Расширение) <> Неопределено И
СтрокаТЗ.СозданИзШаблона Тогда

#Если НЕ ВебКлиент Тогда
ДанныеВыполнения = АвтозаполнениеШаблоновФайловКлиентСервер.ЗаполнитьПоляФайлаДаннымиВладельца(
Ложь,
СтрокаТЗ.Ссылка,
Истина,
УникальныйИдентификатор,
Объект.Ссылка);
#Иначе
ДанныеВыполнения = ЗаполнитьФайлДаннымиДокументаСервер(СтрокаТЗ.Ссылка);
#КонецЕсли

Если Не ДанныеВыполнения.Результат Тогда
ВызватьИсключение(ДанныеВыполнения.Описание);
КонецЕсли;

КонецЕсли;

КонецЦикла;

КонецЕсли;

КонецЕсли;

КонецПроцедуры

Изменение данных проверяю через свойство формы "Модифицированность". Автозаполнение поддерживается только для определенных форматов, поэтому в условии нужно дополнительно проверить расширение файла. 

Код функции с доступными расширениями:

&НаСервере
функция пп_ДоступныеРасширения()

мДоступныеРасширения = Новый Массив;

мДоступныеРасширения.Добавить("doc");
мДоступныеРасширения.Добавить("docx");
мДоступныеРасширения.Добавить("dot");
мДоступныеРасширения.Добавить("dotx");
мДоступныеРасширения.Добавить("txt");
мДоступныеРасширения.Добавить("html");
мДоступныеРасширения.Добавить("odt");

Возврат мДоступныеРасширения;

Конецфункции

Работоспособность этого кода проверялась на форме элемента справочника "ВнутренниеДокументы". Версия конфигурации 2.1.13.28.

4 Comments

  1. lev1nson

    Круто! Спасибо!

    Reply
  2. ImHunter

    (0) А почему не через бизнес-события?

    У меня есть предположения. Но хотелось бы получить ответ Автора.

    Reply
  3. pavelpribytkin96

    (2) Произошедшие бизнес-события обрабатываются регламентым заданием. Пользователи хотят сразу после изменения документа работать с обновленным файлом. Плюс в бизнес-событии будет труднее определить был ли модифицирован документ для того, чтобы не обновлять все файлы.

    Reply
  4. ImHunter

    (3) Ага, спасибо. Все, как я и предполагал.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *