При попытке автоматизировать управление файлами в 1С у многих разработчиков возникает задача изменения свойств, которые мы видим в окне «Свойства» -> «Подробно» в Windows. Часто для этих целей ошибочно пытаются использовать объект Shell.Application и его метод GetDetailsOf. Давайте разберемся, почему этот путь является тупиковым и какие инструменты действительно помогут решить задачу.
Важно понимать, что Shell.Application является средством отображения информации операционной системы. Метод GetDetailsOf предназначен исключительно для чтения метаданных, которые проводник Windows извлекает из файла. Он не обладает правами или функционалом для записи изменений в структуру файла. Попытки изменить эти свойства напрямую через данный объект не приведут к успеху.
Для работы с изображениями и их метаданными (например, EXIF-тегами) стандартным решением является библиотека WIA.ImageFile. Однако здесь есть важный нюанс: простое обращение к коллекции Properties через Value часто не дает результата из-за ограничений безопасности или формата записи.
Для корректного изменения данных необходимо использовать объект ImageProcess, который позволяет создать «фильтр» для обработки изображения. Рассмотрим, как это выглядит на практике:
// Пример логики изменения EXIF-свойства через WIA
ИмяФайла = "C:\Temp\IMG01.jpg";
Image = Новый COMОбъект("WIA.ImageFile");
ImageProcess = Новый COMОбъект("WIA.ImageProcess");
// Добавляем фильтр для обработки метаданных
ImageProcess.Filters.Add(ImageProcess.FilterInfos("Exif").FilterID);
ImageProcess.Filters(1).Properties("ID") = 271; // ID свойства (например, Manufacturer)
ImageProcess.Filters(1).Properties("Type") = 1002; // Тип строки
ImageProcess.Filters(1).Properties("Value") = "Новое значение";
Image.LoadFile(ИмяФайла);
Image = ImageProcess.Apply(Image);
Image.SaveFile(ИмяФайла);
Обратите внимание: использование ImageProcess фактически пересоздает объект изображения. При работе с этим методом важно учитывать:
WIA ожидает данные в формате, соответствующем типу свойства. Если возникают ошибки доступа, убедитесь, что тип данных (например, 1002 для строковых данных) указан верно.Если задача требует массового или сложного редактирования метаданных (XMP, IPTC, глубокие EXIF-теги), попытки реализации через COM-объекты могут быть слишком трудоемкими и нестабильными. Самым профессиональным подходом в таких случаях является использование специализированных консольных утилит, таких как ExifTool.
Проанализируем преимущества этого подхода:
ЗапуститьПриложение.Для вызова из 1С используйте конструкцию:
Команда = "exiftool.exe -Artist=""Имя Автора"" " + ПутьКФайлу;
ЗапуститьПриложение(Команда);
В исключительных случаях, когда ни WIA, ни внешние утилиты не подходят, можно использовать прямое чтение и запись двоичных данных через объекты ЧтениеДанных и ЗаписьДанных. Однако этот путь требует глубокого понимания спецификации форматов файлов (например, структуру сегментов JPEG/APP).
Мы настоятельно не рекомендуем этот метод, так как даже небольшая ошибка в смещении байтов при записи сделает файл нечитаемым. Этот подход оправдан только в высоконагруженных системах, где требуется минимальное время обработки каждого байта файла.
Подводя итог: для решения вашей задачи начните с проверки свойств через WIA.ImageFile. Если возникают ошибки или не удается записать нужное поле, используйте внешнюю утилиту командной строки — это сэкономит вам часы отладки и обеспечит стабильную работу кода в 1С.