Как организовать хранение сканов документов на сервере и открывать их из 1С?

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

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

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

Вариант 1. Прямой запуск просмотрщика через ЗапуститьПриложение

Рассмотрим самый простой и быстрый способ решения задачи. Если файлы документов сканируются в определенную сетевую папку или на диск сервера терминалов, в документ 1С (например, РеализацияТоваровУслуг) можно добавить строковый реквизит, в котором будет храниться полный путь к файлу скана.

Для открытия документа стандартной программой просмотра изображений Windows используем метод ЗапуститьПриложение. Посмотрим на пример кода обработчика нажатия кнопки:


Процедура КнопкаОткрытьСканНажатие(Кнопка)
    
    Если ПустаяСтрока(ЭтотОбъект.ПутьКФайлуСкана) Тогда
        Предупреждение("Файл скана не прикреплен к документу!");
        Возврат;
    КонецЕсли;
    
    // Запуск стандартного средства просмотра через проводник
    КомандаЗапуска = "explorer """ + ЭтотОбъект.ПутьКФайлуСкана + """";
    ЗапуститьПриложение(КомандаЗапуска);
    
КонецПроцедуры

Разберем особенности этого метода:

  1. Команда explorer вызывает зарегистрированное в операционной системе Windows приложение по умолчанию для данного типа файлов (JPG, PNG, PDF).
  2. Путь к файлу обязательно обрамляется дополнительными кавычками на случай, если в каталогах или имени файла присутствуют пробелы.

Вариант 2. Привязка сканов по уникальному идентификатору (УИД)

Хранить полный путь в реквизите документа не всегда удобно: пользователи могут ошибиться при вводе, переименовать файл или случайно перезаписать данные. Более надежным решением является генерация уникального имени файла на основе УникальныйИдентификатор ссылки документа.

Проанализируем алгоритм работы:

  1. Определяем единый базовый каталог для хранения архива (например, настраиваемый в константе).
  2. Имя файла формируется программно: ИмяФайла = Строка(Ссылка.УникальныйИдентификатор()) + ".jpg".
  3. При нажатии кнопки программа автоматически ищет файл в каталоге по полученному имени, исключая необходимость хранить путь в реквизитах.

Посмотрим на пример процедуры открытия с проверкой наличия файла:


Процедура ОткрытьСканПоИдентификатору(СсылкаНаДокумент)
    
    КаталогХранения = "E:\ScansArchive\";
    ИмяФайла = КаталогХранения + Строка(СсылкаНаДокумент.УникальныйИдентификатор()) + ".jpg";
    
    // Проверяем физическое наличие файла на диске
    ФайлНаДиске = Новый Файл(ИмяФайла);
    Если ФайлНаДиске.Существует() Тогда
        ЗапуститьПриложение("explorer """ + ИмяФайла + """");
    Иначе
        Предупреждение("Скан-копия документа не найдена в хранилище!");
    КонецЕсли;
    
КонецПроцедуры

Подводные камни и архитектурные ограничения

При реализации собственного файлового хранилища важно учитывать неочевидные технические проблемы:

  1. Ограничения файловой системы: Размещение десятков тысяч сканов в одной общей папке со временем вызовет замедление работы файловой системы NTFS. Рекомендуется программно раскладывать файлы по структуре подпапок (например, по годам, месяцам или первым символам GUID).
  2. Контроль ссылочной целостности: Если документ в 1С удаляется, файл на диске останется «сиротой». Для решения этой проблемы в модуле объекта документа в событии ПередУдалением следует реализовать удаление привязанного файла с диска.
  3. Изменение проведенных документов: Если документ был отсканирован и проведен, а затем отредактирован, скан перестает быть актуальным. Рекомендуется предусмотреть контроль версий либо запрещать редактирование документов, к которым уже привязана скан-копия.
  4. Разделение прав доступа ОС: Учетная запись службы сервера 1С (usr1cv8) и учетные записи пользователей терминалов/клиентов должны иметь одинаковый уровень доступа на чтение/запись к целевой сетевой папке.
  5. Резервное копирование: Регулярный бэкап базы данных средствами СУБД не включает в себя файлы на внешнем диске. Необходимо настраивать синхронное резервное копирование каталога со сканами и базы 1С во избежание потери данных при восстановлении.

Вариант 3. Использование библиотеки БСП (Тома хранения файлов)

Если конфигурация разработана на базе Библиотеки Стандартных Подсистем (БСП), нет необходимости создавать механизм с нуля. В БСП встроен механизм «Присоединенные файлы» с поддержкой хранения на томах на диске.

Преимущества типового механизма:

  1. Хранение вне базы: Файлы автоматически размещаются в сетевых каталогах (томах), не раздувая размер информационной базы.
  2. Автоматическая структура: БСП самостоятельно распределяет файлы по каталогам, предотвращая переполнение папок.
  3. Безопасность и хэширование: Автоматический расчет контрольных сумм MD5/SHA для предотвращения дублирования и повреждения файлов.
  4. Кроссплатформенность: Корректная работа через веб-клиент, Linux и мобильные платформы с передачей файлов через ДвоичныеДанные и временное хранилище без прямого доступа к диску на клиенте.

Вариант 4. Интеграция со специализированными решениями

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

  1. Связка с «1С:Документооборот»: Файлы и сканы регистрируются в специализированной базе, а в учетной конфигурации (1С:Бухгалтерия, 1С:ERP) отображаются через веб-сервисы или бесшовную интеграцию.
  2. Специализированные модули потокового сканирования: Программы для автоматического распознавания штрихкодов со сканов, которые автоматически прикрепляют отсканированные файлы к нужным проведенным документам базы.
← На главную