При переходе с онлайн-работы на использование распределенных информационных баз (РИБ) пользователи часто сталкиваются с проблемой: файлы (картинки, документы), вынесенные в Тома хранения файлов (ТХФ), перестают отображаться в подчиненных узлах. В некоторых случаях система выдает пугающее сообщение: "Файл помечен на удаление и очищен как ненужный". Разберемся, как работает этот механизм в конфигурациях на базе БСП (например, 1С:УНФ), и как правильно организовать передачу данных.
Вопреки распространенному заблуждению, файлы, хранящиеся вне информационной базы (в томах на диске), вполне успешно участвуют в стандартном обмене РИБ. Рассмотрим подробнее, как это происходит на программном уровне. В Библиотеке стандартных подсистем (БСП) за этот процесс отвечает специализированный модуль РаботаСФайламиСлужебный, код которого можно дополнительно проверить на наличие ошибок.
Проанализируем последовательность действий системы при обмене, используя справочник по методам БСП:
ПриОтправкеФайлаСообщениеОбмена. Система обращается к физическому файлу в томе, считывает его и помещает в виде двоичных данных в само сообщение обмена (XML-файл).ПриПолученииФайла. Программа извлекает двоичные данные из сообщения и сохраняет их в локальный том, путь к которому прописан в базе приемника.Таким образом, физического доступа подчиненного узла к серверу главного узла не требуется — данные "путешествуют" внутри файла обмена. Как альтернативу стандартному РИБ можно рассмотреть обмены через брокеры.
Если в РИБ картинки не отображаются, выясним причину, проверив следующие настройки:
Файлы, ВерсииФайлов и ТомаХраненияФайлов. Если регистрация для этих объектов отключена, информация о новых файлах не попадет в пакет обмена.Ситуация, когда пользователь видит сообщение об очистке файла, часто связана с рассинхронизацией справочников. Рассмотрим ситуацию: запись о версии файла в подчиненный узел пришла, а само "тело" файла по какой-то причине (обрыв связи, превышение размера) не загрузилось. База видит ссылку на файл в справочнике ВерсииФайлов, но не находит его в томе.
Также это случается при конфликте GUID. Если вы создали "новый" том вручную в подчиненном узле вместо того, чтобы дождаться его миграции из главного узла, идентификаторы объектов не совпадут. Система будет пытаться сопоставить файл с томом, которого физически не существует в данной базе.
Разберем по шагам предложенный в обсуждении вариант с ручным копированием папок на каждый компьютер.
Если вы хотите избежать передачи гигабайт данных через файлы обмена (особенно при слабом интернете), можно поступить следующим образом:
C:\1C_Files).ТомаХраненияФайлов укажите именно этот путь.Важно: Чтобы этот способ работал стабильно на разных ОС или при разных путях, рекомендуется использовать логические диски (команда subst) или сетевые UNC-пути, которые будут выглядеть одинаково для всех узлов сети.
Проанализируем перспективное решение с использованием S3-совместимых хранилищ (Minio, AWS, Яндекс.Облако). Это идеальный вариант для РИБ, так как:
Однако помните, что для работы с S3 в подчиненных узлах потребуется стабильный интернет, что может не подходить для условий, описанных автором темы.
Если автоматический обмен не работает, рекомендуем посмотреть на реализацию обработчиков в модуле РаботаСФайламиСлужебный. Вы можете установить точку останова в следующих местах, чтобы проследить путь файла:
// В главном узле при выгрузке:
Процедура ПриОтправкеФайлаСообщениеОбмена(ФайлСсылка, СообщениеОбмена) Экспорт
// Здесь можно проверить, попадает ли двоичное тело файла в XML
КонецПроцедуры
// В подчиненном узле при загрузке:
Процедура ПриПолученииФайла(ФайлСсылка, ДанныеФайла, СообщениеОбмена) Экспорт
// Здесь проверяется корректность записи файла в локальную папку тома
КонецПроцедуры
Подводя итог: для успешной работы ТХФ в РИБ необходимо обеспечить идентичность справочника ТомаХраненияФайлов (синхронизация по GUID), проверить лимиты объема передаваемых данных в настройках БСП и убедиться в наличии прав доступа к локальным папкам на каждой торговой точке.