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

25.10.20

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

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

Файлы

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

Наименование Скачано Купить файл
(только для физ. лиц)
ВнешнееХранениеФайлов
.cfe 26,12Kb
11 2 150 руб. Купить

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

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

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

Вводные

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

 

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

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

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

 

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

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

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

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

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

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

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

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

 

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

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

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

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

 

Итог

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

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

 

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

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

См. также

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

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

22.07.2025    3555    ktb    17    

30

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

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

14.07.2025    884    bborisko    0    

8

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

В данной публикации рассматривается пример реализации скрипта, который автоматизирует получение ветки из GIT репозитория и обновление конфигурации, если разработка проекта ведется в EDT.

11.06.2025    2101    AlexF1    4    

7

DevOps и автоматизация разработки Групповая разработка (Git, хранилище) EDT Программист 1С v8.3 Бесплатно (free)

В процессе использования 1С:EDT и репозитория Git для обновлений релизов доработанных конфигураций появилась необходимость в регулярной загрузке конфигураций от вендора 1С в Git-репозиторий. Описанное в статье решение позволяет автоматизировать эту операцию и может быть полезным специалистам, занимающимися обновлениями с использованием 1C:EDT+Git

21.05.2025    3377    vladimir_iclsoft    3    

20

Групповая разработка (Git, хранилище) Обновление 1С Программист 1С v8.3 Россия Бесплатно (free)

Внедряем проверку новых версий прямо в расширение. Оповещайте о новых версиях и показывайте пользователям список изменений. Для разработчиков, которые хотят сэкономить время и повысить лояльность клиентов!

05.02.2025    5015    Nonik    10    

18

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

Когда в хранилище одновременно разрабатывают несколько команд, сортировка сделанного и несделанного при формировании релиза и проведение code review по задачам превращаются в непроходимый квест. В таких случаях нужен бранчинг. Расскажем об опыте перехода на новую схему хранения кода для ИТ-департамента.

23.09.2024    9430    kraynev-navi    3    

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

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

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

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

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


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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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