Рассмотрим задачу интеграции файловой системы с учетной системой 1С. Часто возникает бизнес-потребность, когда сотрудники предпочитают работать с файлами напрямую через проводник Windows, размещая документы в заранее подготовленных папках. Нам необходимо, чтобы 1С автоматически «подхватывала» эти файлы и прикрепляла их к нужным объектам базы данных.
Основная сложность заключается в том, что файловая система сама по себе не знает о структуре 1С. Когда файл попадает в папку, система не отправляет сигнал о том, к какому объекту он относится. Мы разберем подходы к решению этой задачи, от простого перебора до использования регистров сведений.
Рассмотрим подход, основанный на использовании логики формирования путей. Если структура папок жестко завязана на вид объекта, мы можем использовать прямую функцию, которая по ссылке на объект определяет путь к его папке.
Для начала, проанализируем пример кода, который определяет путь на основе вида объекта:
Если Объект.Вид = \"А\" Тогда
Путь = \"\\AR\";
ИначеЕсли Объект.Вид = \"Б\" Тогда
Путь = \"\\BP\";
ИначеЕсли Объект.Вид = \"X\" Тогда
Путь = \"\\NK\";
ИначеЕсли Объект.Вид = \"N\" Тогда
Путь = \"\\UU\";
КонецЕсли;
Когда у нас есть новый файл в папке, мы можем перебрать все объекты системы, для каждого из них вычислить «целевой» путь и сравнить его с фактическим расположением файла. Если пути совпадают — значит, файл принадлежит этому объекту.
Несмотря на то, что перебор всех объектов допустим при небольших объемах данных, для повышения производительности лучше использовать РегистрСведений. Создадим регистр с измерениями Объект и ПутьКПапке. Это позволит нам:
При добавлении нового объекта в систему или изменении его реквизитов мы будем обновлять запись в регистре. В регламентном задании, которое сканирует папки, мы просто сделаем Запрос к нашему регистру, чтобы получить соответствие, вместо вызова тяжелых функций генерации пути для каждой итерации.
Часто программисты пытаются написать функцию, которая из строки пути \\AR\\file.txt извлекает имя объекта. Однако такой подход ведет к дублированию кода и сложностям в поддержке. Если логика формирования пути изменится, вам придется править два места: и прямую, и обратную функцию. Мы же предлагаем использовать единую прямую функцию, результаты которой кэшируются в РегистрСведений.
Разберем несколько критически важных моментов при реализации данной задачи:
Справочник.ПрисоединенныеФайлы.COM-соединение или HTTP-сервисы 1С при создании файла).Используя этот алгоритм, вы получите гибкую систему, которая автоматически связывает файловое хранилище с учетной системой, не требуя от пользователей выполнения лишних действий внутри интерфейса программы.