Хранение файлов томов БСП в хранилище с OpenStack API

25.10.20

Разработка - Групповая разработка (Git, хранилище)

В статье опишу вариант реализации хранения файлов в томах с использованием хранилища OpenStack API на примере облачного хранилища Selectel.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
ВнешнееХранениеФайлов
.cfe 26,12Kb
12 3 000 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

Вводные

  • Конфигурация 1С на БСП 3.1.2
  • Нужно хранить файлы во внешнем хранилище (не в сетевой папке)

 

Вариант реализации

Для хранения можно использовать

Выбрал OpenStack в реализации selectel.ru (ссылка на документацию), уже есть хранилище и опыт работы с сервисом, относительно простая аутентификация. Технически можно написать корректоры к остальным вариантам.

 

Реализовал в виде расширения.

Добавил перечисление "внеш_хф_ТипыХранилищ"

В спр. ТомаХраненияФайлов

  • добавил реквизит внеш_хф_ТипХранилища (внеш_хф_ТипыХранилищ)
  • добавил реквизиты аутентификации в сервисе selectel
  • доработал форму элемента для ввода данных аутентификации

Основная работа с файлами томов реализована в "РаботаСФайламиВТомахСлужебный", в нем изменил

  • ДобавитьФайл()
  • ДанныеФайла()
  • ОбновитьФайл()
  • УдалитьДанныеФайла()
  • СкопироватьФайл()
  • ПереименоватьФайл()
  • Сделал рефакторинг для переиспользования кода

Реализация БСП подразумевает работу сервера с сетевыми папками томов без ограничений, поэтому часть функционала упрощено, для примера процедура УдалитьФайл(ПутьКФайлу), без указания тома, это усложняет доработку. При операциях копирования/перемещения нет проверки на наличие файла с именем файла назначения.

Функции обращения к сервису вынес в общий модуль "внеш_хф_SelectelSwiftAPI"

 

Протестировал

  • Добавление файла
  • Чтение добавленного файла
  • Изменение файла
  • Переименование файла

Ссылка на исходный код.

Разработка в состоянии "alpha", предложения и замечания рассматриваю, по возможности оперативно решаю.

 

Итог

Файлы в томах можно хранить во внешнем хранилище, за счет этого решается

  • вопрос хранения вне базы при отсутствии сетевой папки (облачные сервисы)
  • вопрос переноса файлов между узлами РИБ

 

Благодарю за внимание.

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Групповая разработка (Git, хранилище) EDT Программист 1С:Предприятие 8 Россия Бесплатно (free)

Синхронизируйте свой проект EDT с хранилищем конфигурации так же легко, как в git клиенте. По кнопке Pull в проект EDT подтягиваются изменения из хранилища, по кнопке Push ваш коммит из git репозитория проекта EDT улетает в хранилище конфигурации.

09.07.2026    2451    DmitryShehovtsev    9    

22

Архивирование (backup) Групповая разработка (Git, хранилище) Системный администратор Программист Бесплатно (free)

Как дать возможность каждому разработчику 1С вести разработку, тестирование и оптимизацию на собственной полноразмерной копии базы и при этом не тратить миллиарды рублей и тысячи часов на развертывание тестового окружения, а так же экономить дисковое пространство? Расскажем о том, как с помощью инструмента Database Lab получать полноразмерные копии базы 1C на СУБД PostgreSQL за считанные секунды (даже в случае использования многотерабайтных баз).

15.12.2025    10920    nasonkin    18    

31

Инструменты администратора БД Групповая разработка (Git, хранилище) Обновление 1С Системный администратор Программист 1С:Предприятие 8 1С:Комплексная автоматизация 2.х 1С:Библиотека стандартных подсистем Абонемент ($m)

Обработка, объединяющая в себе использование инструментов БСП по администрированию кластера серверов и запуска скриптов для автоматического обновления конфигурации из хранилища.

4 стартмани

17.11.2025    3003    14    KovrovtsevAS    0    

12

Групповая разработка (Git, хранилище) Бесплатно (free)

Проектная разработка в 1С живет в условиях жестких дедлайнов, меняющихся команд и нестабильных CI/CD. В статье показываем, как быстро и без лишних затрат внедрить Git на ERP-проектах, продать идею себе и команде и избежать типичных подводных камней. Разберем ветвление, подходы к командной работе, интеграцию с таск-трекерами и особенности тяжелых конфигураций.

04.09.2025    22070    bozo    42    

12

EDT Групповая разработка (Git, хранилище) Программист 1С:Предприятие 8 Бесплатно (free)

Плагин, расширяющий функциональность EDT, предоставляя возможность работы с хранилищем конфигурации 1С без использования 1С:ГитКонвертер.

04.08.2025    15345    ZigRinat85    54    

53

DevOps и автоматизация разработки Групповая разработка (Git, хранилище) Программист 1С:Предприятие 8 1С:Библиотека стандартных подсистем Абонемент ($m)

Позволяет проектировать и выполнять сценарии, состоящие из команд 1С, Git и CMD, а также решать конфликты слияния напрямую из 1С с помощью KDiff3. Предустановлен набор команд для автоматизации сборки CFE-файлов.

1 стартмани

29.07.2025    5793    9    gorsheninsn    6    

29
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. davdykin 25 11.08.20 09:30 Сейчас в теме
Мне кажется вы в публикации упустили самый главный вопрос - вопрос производительности... насколько по времени будет отличаться сетевая папка и это хранилище при загрузке/выгрузки 10-20 файлов, хотя бы примерно? Просто без этой информации, как мне кажется, понять полезная эта штука или нет - невозможно.
2. malikov_pro 1356 11.08.20 11:55 Сейчас в теме
(2) Отчасти Вы правы, если использовать внешние сервисы, то есть задержка до сервиса, тема разобрана в https://habr.com/ru/post/348542/, но хранилище можно развернуть и локально, пример.

Тема по поводу производительности локальных сервисов разбиралась в комментариях к моей статье https://infostart.ru/public/68079/.

Эта статья больше как посыл что можно доработать механизм БСП, доделать условие и обращение к FTP просто, к S3 чуть сложнее из за аутентификации.
3. kosmo0 113 14.08.20 04:18 Сейчас в теме
И сразу же продумываем что делать если вдруг интернет отвалится. Для начала - сможет ли конфигурация в принципе работать?

Элементарно узнаем сколько денег потеряет бизнес если вдруг будет отключение.

А вариантов прекращения работы уйма - неполадки у провайдера, неполадки на линии связи (банальные поломки, штормовой ветер и дождь в городе при котором что-то заливает, а кабеля рвет, экскаваторщик который начал копать не там), отключение интернета на уровне страны и города (из свежего - Минск, из глобального - противостояние с США), действия не затрагивающие напрямую вашу организацию (война с телеграмом при которой отключалось масса непричастных ресурсов), да и тупо маршрутизатор в конторе сдох.
Это как с архивированием данных - бэкапы обязательно делают те, кто терял данные (ибо знает сколько жизни отнимается при восстановлении). А есть счастливчики которые не теряли данные. Если вы из категории последних - то можно и не засорять голову чем попало. :)
4. malikov_pro 1356 14.08.20 10:24 Сейчас в теме
(3) "И сразу же продумываем что делать если вдруг интернет отвалится" - Это вопрос системного администрирования, сделайте резервный канал. "Если вы из категории последних" - опыта системного администрирования хватает. Если нужно хранить данные локально то разверните FTP, OpenStack локально и пользуйтесь.


Реальный кейс: база с 20к картинок (чертежи) хостится на Рарус-облаке, размер картинок более 2 ГБ. У раруса на тарифе стандарт размер диска 2ГБ и увеличить объем невозможно, хранить относительно рядом (датацентры МСК СПБ) вполне нормально.
5. kosmo0 113 20.08.20 11:17 Сейчас в теме
(4) Опыт это знание сотен граблей которые могут вылезти в самый неподходящий момент.
В теории проведение документа это пара десятков строк в которых данные переносятся в регистры, на практике - это еще сотня строк на проверку корректность и полноту данных перед проведением.

Резервный канал спасет от проблем на облаке на котором вы храните картинки? (а проблемы возникают у всех, даже у интернет-гигантов).

И как-то не последовало ответа - будет ли работать конфигурация если вдруг доступа к картинкам в облаке не будет? Или пользователей будет элементарно вышибать при открытии справочника Номенклатура? (а в худшем случае будет вышибать при открытии любого документа в котором есть реквизиты с типом справочник.номенклатура).

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

Программист как пожарник - чем меньше он нужен окружающим, значит тем лучше работает (в подавляющем большинстве случаев). Хотя с другой стороны - весь в мыле спас ситуацию и все его хвалят (хотя, возможно, ранее именно этот программист элементарно не поставил три строки ПОПЫТКА-ИСКЛЮЧЕНИЕ-КОНЕЦПОПЫТКИ).
6. malikov_pro 1356 20.08.20 13:10 Сейчас в теме
(5)
Если вопрос резервного копирования, то описал решение через rclone https://infostart.ru/1c/articles/1183106/
Если вопрос доступности, то в текущей модели хранения нет хранений копий в разных местах в рамках одного хранилища. При реализации возникает вопрос о консистентности данных и приоритетности получения. Сейчас реализую работу с GDrive, будет выступать как доп хранилище для формирования документов DOC по шаблонам, в локальном будет хранится PDF. В планах написать реализацию к FTP и решать вопрос переноса файлов между хранилищами, дублирования и.т.д.


"будет ли работать конфигурация если вдруг доступа к картинкам в облаке не будет?" - да, исключения по отсутствию файла реализованы в БСП еще с 2.4 на сколько помню. Для проверки попробуйте отключить сетевую папку.
Продолжение к вопросу о доступности, по идее нужно разделять хранение на горячее и холодное, файлы которые часто используются добавлять в кеш (в текущей реализации РС "ДвоичныеДанныеФайлов"), малоиспользуемые удалять из кеша.

"Программист как пожарник" - нужно понимать что есть психологическая модель "геройства", а есть продуманная архитектура приложения.

Если есть идеи по реализации - пишите, продумаем совместно, возможно дойдет до реализации. Вариант использовать issue и PR на GitHub.
7. kosmo0 113 31.08.20 16:56 Сейчас в теме
(6) У меня нет желания ткнуть в код пальцем и крикнуть типа - "вот дурак". Иногда бывают ситуации когда проще потратить 5 минут чтобы ПОТОМ не тратить несколько часов (или даже дней) на устранение проблем. Если вдруг я буду реализовывать нечто подобное, то я предусмотрю защиту от ситуации "пропажи" связи с местом хранения. Как это реализовано у вас или других программистов мне в принципе все равно (не я буду, в случае чего, разгребать).

Есть такое понятие - "цена ошибки". То есть каковы будут потери (в том числе денежные) от ошибки. И при одной и той же ошибке в одной организации понесут тысячи или миллионы рублей ущерба, а в другой организации не заметят - это не работает, ладно займусь другим.

Если в вашей организации цена ошибки не существенна - ну и хорошо. Но, вполне возможно, вашу разработку захотят использовать в организации где цена ошибки будет дорого стоить. Пусть эти программисты хотя бы держат в голове ситуацию "отсутствие связи с хранилищем".

зы. не думайте что в жизни все предсказуемо - раньше ковида с сидением по домам пару месяцев тоже не было.
8. malikov_pro 1356 31.08.20 17:36 Сейчас в теме
(7) В статье написано "Разработка в состоянии "alpha", по делу напишите, как видите безопасное хранение. Из трех абзацев "нытье" про потенциальные потери. Выше писал что решение подбирается под ситуацию и решается комплексно, 1С является только клиентом к системе хранения.

Если есть кейс для обдумывания варианта решения - пишите, разберем. Если знаете как организовать хранилище опишите или напишите ссылку на статью с нормальной организацией хранения. Можете добавить по делу в код - PR в GitHub.

Статью про rclone написал после решения вопроса с бекапами у клиента, до этого теневые копии windows использовались. Статья про nginx сформировалась после решения вопроса с публикацией телефонии.

"вполне возможно, вашу разработку захотят использовать в организации где цена ошибки будет дорого стоить" - бездумное копирование кода проблема копирующего, поставляется AS IS.
9. kosmo0 113 18.09.20 17:39 Сейчас в теме
(8) Человека несколько постов тыкают в потенциальную серьезную проблему - нет, это нытье. У нас это не случалось, поэтому проблема надумана. (корновируса нет, его придумали - потому что я не болел).

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

за сим прощаюсь - можно завести лошадь в реку по шею, но невозможно заставить ее пить.
10. malikov_pro 1356 18.09.20 20:53 Сейчас в теме
(9) Разработка является прототипом, вы "тыкаете" на требования предъявляемые к решению используемому в продакте. Если нужно решение для конечного использования - заказываете за деньги.
В моих планах было обкатать у клиента прототип и дополнить публикацию, проект не состоялся.
Для отправки сообщения требуется регистрация/авторизация