Как реализовать загрузку, редактирование и хранение файлов в справочнике 1С?

Программист 1С v8.3 (Управляемые формы)
← На главную

При разработке прикладных решений на платформе 1С часто возникает задача прикрепления внешних файлов (документов Word, таблиц Excel, сканов PDF) к объектам базы данных. В данной статье мы подробно разберем, как реализовать функционал по загрузке, хранению и редактированию файлов, проанализируем различные подходы к архитектуре хранения и выясним, как автоматизировать работу с внешними офисными приложениями.

Анализ задачи: создание интерфейса для работы с файлами

Рассмотрим стандартную ситуацию: в форме справочника (например, «Сотрудники» или «Контрагенты») необходимо добавить таблицу, в которую пользователи смогут добавлять файлы. Нам потребуется табличная часть или Таблица Значений (ТЗ) на форме со следующими колонками:

Разберем основные действия, которые должен выполнять интерфейс: добавление нового файла, открытие для просмотра, переход в режим редактирования и удаление. Особое внимание уделим требованию автоматического сохранения изменений в 1С после закрытия Word-файла.

Вариант 1: Использование БСП (Библиотеки стандартных подсистем)

Проанализируем наиболее профессиональный и быстрый путь — использование готовой подсистемы «Присоединенные файлы» из состава БСП. Это решение избавляет программиста от необходимости «изобретать велосипед» и писать сотни строк кода для обработки исключений.

Преимущества использования БСП:

  1. Готовый интерфейс: вы получаете стандартные кнопки «Добавить», «Извлечь», «Редактировать» и «Просмотреть».
  2. Автоматизация офисных приложений: система сама умеет открывать нужные приложения по расширению файла.
  3. Версионность: БСП поддерживает хранение нескольких версий одного и того же файла.
  4. Полнотекстовый поиск: возможность искать по содержимому прикрепленных документов.

Для внедрения этого функционала необходимо создать справочник [ИмяВашегоОбъекта]ПрисоединенныеФайлы и включить его в состав подсистемы. Если же вы решили писать свой функционал с нуля, рассмотрим технические детали реализации ниже.

Вариант 2: Самостоятельная реализация загрузки и хранения

Выясним, как реализовать добавление файла программно. Нам потребуется использовать диалог выбора файла. Рассмотрим пример кода для кнопки «Добавить»:


// На клиенте
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = "Выберите файл для загрузки";
Диалог.МножественныйВыбор = Ложь;

Если Диалог.Выбрать() Тогда
    ВыбранныйФайл = Диалог.ВыбранныеФайлы[0];
    ОписаниеФайла = Новый Файл(ВыбранныйФайл);
    ИмяФайла = ОписаниеФайла.Имя;
    
    // Передаем данные на сервер для сохранения в базу или на диск
    ДанныеФайла = Новый ДвоичныеДанные(ВыбранныйФайл);
    СохранитьФайлВСистеме(ДанныеФайла, ИмяФайла);
КонецЕсли;

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

Выбор стратегии хранения: База данных против Томов

Рассмотрим два основных подхода к хранению файлов, которые упоминались в обсуждении:

  1. Хранение в информационной базе: Файлы записываются в реквизит с типом ХранилищеЗначения.

    Плюсы: простота реализации, файлы всегда попадают в бэкап вместе с базой.

    Минусы: база данных стремительно растет в объеме. Это приводит к замедлению работы SQL-сервера и увеличению времени на обслуживание базы.

  2. Хранение в томах (на диске): В базе хранится только путь к файлу, а сам файл лежит в сетевой папке.

    Плюсы: база остается «легкой», производительность не падает.

    Минусы: необходимо настраивать права доступа к сетевой папке для пользователя, под которым запущен сервер 1С, и отдельно заботиться о бэкапе этих папок.

Важное замечание: Если вы используете сетевой путь, используйте относительные пути или настройки томов. Это позволит избежать проблем при переносе системы на другой сервер. Как было отмечено в обсуждении, папка должна быть расшарена, чтобы все пользователи (через сервер 1С) имели к ней доступ.

Реализация редактирования «как в Word»

Разберем по шагам логику редактирования, когда при нажатии кнопки открывается Word, а после сохранения изменения попадают обратно в 1С:

Шаг 1: Выгрузка во временную папку. При нажатии «Редактировать» программа должна получить ДвоичныеДанные из хранилища и записать их во временный каталог пользователя с помощью метода ДанныеФайла.Записать(ПутьКФайлу);.

Шаг 2: Блокировка файла. В справочнике файлов необходимо установить флаг ЗанятРедактированием и указать имя текущего пользователя. Это предотвратит ситуацию, когда два человека одновременно правят один документ.

Шаг 3: Запуск приложения. Используйте команду ЗапуститьПриложение(ПутьКФайлу);. Для более глубокой интеграции можно использовать COM-объекты (Word.Application), но это сложнее в поддержке.

Шаг 4: Ожидание закрытия и возврат данных. Проанализируем ситуацию завершения работы. 1С может отслеживать состояние файла. После того как пользователь закрыл Word, система должна сравнить дату модификации локального файла или дождаться команды пользователя «Завершить редактирование». После этого локальный файл снова считывается в ДвоичныеДанные и записывается в базу/том, а флаг блокировки снимается.

Многоуровневое согласование файлов

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

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

Такой подход гарантирует сохранность данных и исключает подмену документов после их согласования руководством.

Безопасность и работа в разных клиентах

Важно учитывать, что методы работы с файлами различаются для Тонкого клиента и Веб-клиента. В современных версиях 1С (8.3.15+) крайне рекомендуется использовать асинхронные методы (НачатьПомещениеФайлаНаСервер), чтобы избежать зависания интерфейса при передаче тяжелых документов. Также не забывайте очищать временные папки пользователей после завершения сеанса работы, чтобы конфиденциальные файлы (характеристики сотрудников, баллы) не оставались на жестких дисках локальных компьютеров.

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

← На главную