Наверное, многие в ДО сталкивались с такой проблемой - при изменении существующего документа данные в файлах (из шаблона документа) не обновляются данными документа. Для того, чтобы обновить данные в файле, приходится нажимать кнопку "Заполнить файл данными документа" для каждого файла:
В данной статье я хочу поделиться своим способом решения данной проблемы.
После записи на сервере я добавил свою процедуру, в которой проверяется, изменился ли документ, если есть изменения, тогда вызывается код для обновления данных файлов, созданных по шаблону:
&НаСервере
Процедура пп_ОбновитьДанныеФайлов()
Если ПолучитьФункциональнуюОпцию("ИспользоватьАвтозаполнениеФайлов") Тогда
Если Не Объект.Ссылка.Пустая() И Не НовыйДокумент
И Модифицированность Тогда
мРасширения = пп_ДоступныеРасширения();
Для Каждого СтрокаТЗ Из Файлы Цикл
Если СтрокаТЗ.Редактирует = ПользователиПустаяСсылка И
Не СтрокаТЗ.ПометкаУдаления И
мРасширения.Найти(СтрокаТЗ.Расширение) <> Неопределено И
СтрокаТЗ.СозданИзШаблона Тогда
#Если НЕ ВебКлиент Тогда
ДанныеВыполнения = АвтозаполнениеШаблоновФайловКлиентСервер.ЗаполнитьПоляФайлаДаннымиВладельца(
Ложь,
СтрокаТЗ.Ссылка,
Истина,
УникальныйИдентификатор,
Объект.Ссылка);
#Иначе
ДанныеВыполнения = ЗаполнитьФайлДаннымиДокументаСервер(СтрокаТЗ.Ссылка);
#КонецЕсли
Если Не ДанныеВыполнения.Результат Тогда
ВызватьИсключение(ДанныеВыполнения.Описание);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Изменение данных проверяю через свойство формы "Модифицированность" (в моем расширении //infostart.ru/public/1183187/ изменение данных выполняется по реквизитам объекта, если хотя бы 1 реквизит шапки или табличной части был изменен, то выполняется обновление файлов, которые были созданы по шаблону). Автозаполнение поддерживается только для определенных форматов, поэтому в условии нужно дополнительно проверить расширение файла.
Код функции с доступными расширениями:
&НаСервере
функция пп_ДоступныеРасширения()
мДоступныеРасширения = Новый Массив;
мДоступныеРасширения.Добавить("doc");
мДоступныеРасширения.Добавить("docx");
мДоступныеРасширения.Добавить("dot");
мДоступныеРасширения.Добавить("dotx");
мДоступныеРасширения.Добавить("txt");
мДоступныеРасширения.Добавить("html");
мДоступныеРасширения.Добавить("odt");
Возврат мДоступныеРасширения;
Конецфункции
Работоспособность этого кода проверялась на форме элемента справочника "ВнутренниеДокументы". Версия конфигурации 2.1.13.28.