
Платформа «1С:Предприятие» де-факто является стандартом в части ПО для управления процессами и работы с данными для многих компании. Но «стоковых» интеграций, с которыми компании начинают свой путь, не всегда достаточно. Например, со временем бизнес может начать упираться в возможности используемого хранилища и сталкиваться с необходимостью настройки новых интеграций.
В этой статье расскажем, как компания «ЦЛР ГРУПП» перестраивала работу «1С:Управление торговлей» с локального дискового хранилища на S3: с чего мы начинали, зачем понадобилась миграция, как ее реализовали и что мы получили в результате.
Немного контекста
«ЦЛР ГРУПП» — международная транспортно-логистическая группа компаний, специализирующаяся на решении логистических задач для отечественных и китайских автопроизводителей, импортеров и дистрибьюторов автомобилей и спецтехники.
В состав комплекса услуг ЦЛР ГРУПП входят:
-
автомобильное, Ж/Д и портовое экспедирование,
-
перемещение грузового автотранспорта своим ходом,
-
3PL/4PL оператор для автопроизводителей,
-
таможенное оформление транспортных средств,
-
хранение автомобильной техники в разных регионах РФ.
Компания оказывает комплексные логистические услуги и экспедирование грузов и автотранспорта по территории РФ, стран СНГ и Китая.
В качестве основного инструмента для документооборота, управления заказами, учета перевозимой и хранимой техники, а также для ведения финансовой деятельности мы используем «1С:Управление торговлей». И в каждом из этих направлений ежедневно генерируется большой объем неструктурированных данных: от скан-копий накладных и фотографий техники до актов приема-передачи.
Для работы со всеми файлами «1С» мы изначально применяли локальное хранилище. Но с ростом объемов данных и усложнением бизнес-процессов мы столкнулись с необходимостью замены локального хранилища. Причин было несколько.
-
Ограниченная масштабируемость. Локальное хранилище требует четкой организации данных в виде фиксированных блоков. Когда количество файлов достигло миллионов, производительность системы начала снижаться. При этом масштабировать локальное хранилище сложно, долго и дорого, поэтому не всегда рационально.
-
Отсутствие четкой структуры. В локальном хранилище сложно выстроить иерархию и структуру хранения. В результате поиск нужных файлов среди хаотично размещенных документов часто затруднялся — нередко на поиск нужной информации уходило много времени, из-за чего простаивали другие процессы.
-
Дорогая поддержка. Поддержка и обслуживание локального хранилища требовали постоянных инвестиций в оборудование и лицензии, а также наличия команды специалистов для его настройки и мониторинга. Затраты на инфраструктуру росли быстрее, чем доходы компании.
-
Риски потери данных. Несмотря на регулярное резервное копирование, существовала вероятность потери данных из-за аппаратных сбоев или человеческих ошибок. А восстановление данных из локального хранилища могло занять дни, что было неприемлемо.
От блоков к другим решениям
При поиске нового типа хранилища нам было важно, чтобы новая система хранения могла справляться с динамично увеличивающимся объемом данных и позволяла удобно работать с ними. Более того, в приоритете были хранилища, которые можно развернуть быстро и без больших капитальных инвестиций.
После сравнения вариантов мы остановились на объектном хранилище S3 — облачной системе, где данные хранятся в виде объектов.
Преимущества S3 стали для нас определяющими. Так, объектные хранилища:
-
легко и практически без ограничений масштабируются;
-
хранят метаданные к каждому объекту, что упрощает их поиск;
-
подходят для хранения неструктурированных данных;
-
позволяют автоматизировать управление данными: при загрузке или удалении объектов могут запускаться автоматические процедуры;
-
обеспечивают высокий уровень надежности хранения за счет георепликации данных;
-
экономичны за счет развертывания хранилища в облаке с оплатой по модели Pay-as-you-go (только за фактически использованные ресурсы).
В качестве платформы для развертывания S3-хранилища под свою инсталляцию «1С:Управление торговлей» мы выбрали VK Cloud с сервисом Object Storage.
Учим «1С:Предприятие» работать с S3: пошаговая реализация на примере нашего кейса
Найти подходящее под запросы хранилище и даже выбрать платформу — половина дела. Далее нам предстояло научить «1С:Управление торговлей» работать с объектным хранилищем.
Для работы с S3 есть несколько инструментов: консольные клиенты, файловые менеджеры и SDK для разных языков программирования. Нюанс в том, что для «1С» готовых решений нет. Но «1С» «из коробки» поддерживает выполнение HTTP-запросов, то есть, используя механизм подписанных (pre-signed) ссылок, можно реализовать поддержку разных сценариев взаимодействия с S3 — например, возможность скачивания, загрузки и удаления объектов.
Соответственно, столкнувшись с задачей переключения «1С» на S3, нам надо было либо изобретать свой велосипед, либо изучать опыт других команд, которые уже прошли похожий путь (важно понимать, что при работе с «1С» многие компании со временем упираются в возможности своих хранилищ).
Решением для нас стали наработки, доступные на GitHub, а именно расширение и инструкция по подключению S3 к конфигурации «1С:Документооборот».
Она сводится к простым шагам:
-
В «1С» открывается раздел «Настройка и администрирование», выбирается «Настройка программы», далее — «Работа с файлами».
-
Далее выбирается пункт «Хранить файлы в томах на диске», затем — «Тома хранения файлов».
-
В разделе «Группа по умолчанию» прописывается новый элемент (например, «Облако S3») и все данные для него (название, тип, адрес, имя префикса и другие по списку).
Для переноса файлов из текущей БД в S3:
-
В «1С» открывается «Настройка и администрирование», выбирается «Настройка программы», потом — «Работа с файлами».
-
Далее открывается «Тома хранения файлов».
-
Следом выбирается «Перенос в тома», указывается количество файлов для переноса. Готово.
Но расширение S3_SSL и инструкция к нему разработаны для конфигурации «1С:Документооборот», а мы используем конфигурацию «1С:Управление торговлей». Интерфейсы работы с файлами в инструментах различаются. Вместе с тем это нам не помешало — принцип настройки остался неизменным.
Примечание: Реализации и способы интеграции S3 у разных облачных провайдеров могут различаться. Поэтому любые манипуляции с «1С» и хранилищем лучше выстраивать на основе документации конкретного вендора. Например, все настройки подключения S3 к «1С» мы выполняли с учетом не только инструкции к упомянутому расширению, но и официальной документации VK Cloud к объектному хранилищу Object Storage.
За основу мы взяли два общих модуля:
-
s3_API;
-
s3_КоннекторHTTP.

Дальше мы подготовили справочник «Тома Хранения Файлов» — добавили реквизиты, присутствующие в готовом расширении конфигурации, и изменили форму элемента справочника для настройки доступа к хранилищу S3.


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

В каждом из модулей мы определили процедуры и функции, описывающие операции над файлами (добавление, изменение, удаление).
Следующий шаг — мы заменили часть кода, которая отвечает за преобразование файла в двоичные данные. Пример представлен ниже:
&ИзменениеИКонтроль ("ПоместитьДвоичныеДанныеВХранилище") Функция s3_ПоместитьДвоичныеДанныеВХранилище (Том, ПутьКФайлу, УникальныйИдентификатор) ПолныйПуть = ПолныйПутьТома (Том) + ПутьКФайлу; УникальныйИдентификатор = УникальныйИдентификатор; #Удаление ДвоичныеДанные = Новый ДвоичныеДанные (ПолныйПуть); #КонецУдаления #Вставка ДвоичныеДанные = s3_API.ПолучитьДвоичныеДанныеФайла (Том, ПолныйПуть); #КонецВставки Возврат Новый ХранилищеЗначения (ДвоичныеДанные); КонецФункции
Затем мы последовательно изменили механизмы подготовки файлов и добавления или удаления на/из S3:
Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске И НЕ Том.Пустая() Тогда ПолныйПуть = ПолныйПутьТома (Том) + ПутьКФайлу; #Удаление УдалитьФайлВТоме (ПолныйПуть); #КонецУдаления #Вставка Если s3_АРI.ЭтоТипХранилища_ОбъектноеS3 (Том) Тогда s3_АРI.УдалитьФайлСТома (Том, ПолныйПуть); Иначе УдалитьФайлВТоме (Полныйпуть); КонецЕсли; #КонецВставки КонецЕсли;
#Вставка Если пЭтоТипХранилища_ОбъектноеS3 тогда ПутьДня = Формат (Дата, "ДФ=ггггЕММдд"); ПутьДня = s3_API.ДобавитьКонечныйРазделительПутиS3 (ПутьДня); ВТДопПараметры = Новый Структура (); ВТДопПараметры.Вставить ("СсылкаНаТом", СсылкаНаТом); ВТДопПараметры.Вставить ("ПутьДня", ПутьДня); ВТДопПараметры.Вставить ("ПутьКТому", ПутьКТому); ВТДопПараметры.Вставить ("ВерсияСсылка", Справочники.ВерсииФайлов.ПустаяСсылка()); ВТДопПараметры.Вставить ("Расширение", Расширение); ВтДопПараметры.Вставить ("НомерВерсии", НомерВерсии); ИмяФайлаСПутем = s3_API.ПолучитьУникальноеИмяСПутем (ВТДопПараметры); ПолноеИмяФайлаСПутем = ПутьКТому + ИмяФайлаСПутем; s3_API.ДобавитьФайлНаДискS3 (СсылкаНаТом, ДвоичныеДанныеИлиПуть, ПолноеИмяФайлаСПутем); ПутьКФайлуВТоме = ИмяФайлаСПутем; Иначе ПутьДня = Формат(Дата, "ДФ=ггггЕММдд") + ПолучитьРазделительПути (); ПутьКТому = ПутьКТому + ПутьДня; ИмяФайлаСПутем = РаботаСФайламиСлужебныйКлиентСервер.ПолучитьУникальноеИмяСПутем (ПутьКТому, ИмяФайла) ; ПолноеИмяФайлаСПутем = ПутьКТому + ИмяФайлаСПутем; Если ТипЗнч (ДвоичныеДанныеИлиПуть) = Тип ("ДвоичныеДанные") Тогда ДвоичныеДанныеИлиПуть.Записать (ПолноеИмяФайлаСПутем); Иначе // Считаем, что иначе это путь к файлу на диске. КопироватьФайл (ДвоичныеДнныеИлиПуть, ПолноеИмяфайлаСПутем); КонецЕсли; // Установка времени изменения файла таким, как оно стоит в текущей версии. ФайлНаДиске = Новый Файл (ПолноеИмяФайлаСПутем); ФайлНаДиске.УстановитьУниверсальноеВремяИзменения (ВремяИзмененияУниверсальное); ФайлНаДиске.УстановитьТолькоЧтение (Истина); КонецЕсли; #КонецВставки #Удаление Возврат Новый Структура ("Том,ПутьКФайлу", СсылкаНаТом, ПутьДня + ИмяФайлаСПутем); #КонецУдаления #Вставка Возврат ? (пЭтоТипХранилища_ОбъектноеSз, Новый Структура ("Том,ПутьКФайлу", СсылкаНаТом, ИмяФайлаСПутем), Новый Структура ("Том,ПутьКФайлу", СсылкаНаТом, ПутьДня + ИмяФайлаСПутем) ); #КонецВставки
Таким образом мы пришли к ситуации, когда путь к папке на сервере «1С» (то есть том хранения файлов) — это ссылка на хранилище S3. Далее происходит:
-
получение полного пути до места хранения файла;
-
аутентификация;
|Функция ДанныеАутентификации (СсылкаНаТом) Экспорт Аутентификация = Новый Структура; Аутентификация.Вставить ("Тип", "АWS4-НМАС-SНА256"); Аутентификация.Вставить ("ИдентификаторКлючаДоступа", СсылкаНаТом.s3_ИдентификаторКлючаДоступа); Аутентификация.Вставить ("СекретныйКлюч", СсылкаНаТом.s=3_СекретныйКлюч); Аутентификация.Вставить ("Регион", СсылкаНаТом.s3_Регион); Аутентификация.Вставить ("Сервис", "s3"); Возврат Аутентификация; КонецФункции
-
передача двоичных данных файла на S3.
Аутентификация = ДанныеАутентификации (СсылкаНаТом); Заголовки = Новый Соответствие; ДополнительныеПараметры = Новый Структура; ДополнительныеПараметры.Вставить ("Заголовки", Заголовки); ДополнительныеПараметры.Вставить ("Аутентификация", Аутентификация); ДополнительныеПараметры.Вставить ("Таймаут", 300); Ответ = s3_КоннекторНТТР.Put (ПолныйПуть, ДвоичныеДанные, ДополнительныеПараметры);
Получение данных для просмотра или изменения файла в «1С» происходит в обратной последовательности: в ИБ уже известен том хранения (ссылка на S3), полный путь до файла, а также его имя и расширение. На основании этого происходит получение двоичных данных файла уже из S3 и преобразование его к типу файла с указанным расширением и человекопонятным для чтения.
Результаты и выводы
Наша компания, как и многие на российском рынке, фактически зависит от конфигураций «1С» — без них контроль над процессами и документацией рискует скатиться к хаосу. При этом нам важны стабильность и производительность системы, которые во многом завязаны на возможностях используемого хранилища.
Наш кейс не уникален. К необходимости интеграции сторонних хранилищ, часто именно S3, со временем приходит много компаний, работающих с разными конфигурациями «1С». Вместе с тем наш опыт показывает, что перестроить «1С» на работу с S3 не просто возможно, но и довольно легко: для этого нам оказалось достаточно инструкции на GitHub, документации VK Cloud к сервису Object Storage и небольшой команды.
ссылка на оригинал статьи https://habr.com/ru/articles/892824/
Добавить комментарий