При автоматизации бизнес-процессов часто возникает необходимость прикреплять различные файлы (текстовые документы, изображения, аудиозаписи) к элементам справочников, например, к «Организациям» или «Контрагентам». Если вы разрабатываете собственную конфигурацию на платформе 1С 8.3 с использованием управляемых форм, перед вами встает задача выбора оптимального способа хранения и работы с такими файлами. Рассмотрим различные подходы, их преимущества и недостатки, а также разберем, как использовать типовое решение от 1С – Библиотеку стандартных подсистем (БСП).
Изначально у разработчиков может возникнуть идея хранить файлы непосредственно в табличной части справочника, используя реквизит типа ХранилищеЗначения. Такой подход кажется простым, но на практике приводит к серьезным проблемам с производительностью и масштабируемостью.
Рассмотрим подробнее недостатки такого метода:
ХранилищеЗначения становится неудобной. Придется добавлять множество других реквизитов, что еще больше утяжелит объект и затруднит разработку отчетов.Поэтому мы настоятельно рекомендуем избегать прямого хранения файлов в табличных частях основных справочников.
Для реализации функционала работы с файлами в 1С 8.3 существует стандартное и наиболее рекомендуемое решение – это подсистема «Работа с файлами» из Библиотеки стандартных подсистем (БСП). БСП – это набор готовых к интеграции блоков кода и объектов метаданных, разработанных фирмой "1С" для ускорения разработки и обеспечения унификации механизмов в конфигурациях.
Внедрение БСП при разработке конфигурации дает множество преимуществ:
В БСП файлы хранятся не напрямую в справочнике-владельце, что является ключевым для обеспечения производительности. Вместо этого используется следующая архитектура:
ХранилищеЗначения внутри этого же справочника «ПрисоединенныеФайлы» (для небольших файлов). Это позволяет сохранять файлы непосредственно в базе данных.Таким образом, БСП разделяет метаданные файла от его содержимого, что является основой для эффективной работы с большими объемами данных и позволяет гибко управлять местом их хранения.
Рассмотрим шаги, которые необходимо выполнить для интеграции подсистемы «Работа с файлами» в вашу самописную конфигурацию. Этот процесс требует внимательности и понимания структуры БСП.
Получите актуальную версию БСП с официального портала 1С:Обновление программ. БСП поставляется в виде шаблонов, которые устанавливаются на компьютер. После установки вы найдете ее в списке баз 1С (обычно под именем "Библиотека стандартных подсистем") или в каталоге шаблонов 1С.
Запустите информационную базу БСП в режиме предприятия. В ней найдите и откройте обработку ПервоеВнедрениеБСП.epf (она также находится в каталоге шаблонов БСП). В этой обработке выберите необходимые подсистемы. Для функционала работы с файлами вам понадобятся как минимум:
Базовая функциональностьПользователиРабота с файламиОбновление версии ИБ (рекомендуется для корректного обновления конфигурации в будущем)Сохраните выбранные настройки в XML-файл. Этот файл будет использоваться при последующем объединении конфигураций.
Откройте конфигуратор вашей самописной базы данных. Выполните команду меню "Конфигурация" -> "Сравнить, объединить с конфигурацией из файла...". В качестве файла для объединения выберите файл 1Cv8.cf, который находится в каталоге установки БСП (например, C:\Users\...\AppData\Roaming\1C\1CE\tmplts\1c\bsp\3_1_4_122\ExtFiles\1Cv8.cf, путь может отличаться в зависимости от версии и ОС). В окне сравнения/объединения согласитесь на постановку конфигурации на поддержку. Затем используйте кнопку "Действия" -> "Загрузить настройки из файла" и загрузите ранее сохраненный XML-файл настроек подсистем. Это позволит вам объединить только необходимые объекты БСП, минимизируя размер конфигурации.
После объединения найдите общий модуль ОбновлениеИнформационнойБазыБСП. Скопируйте его и переименуйте, добавив префикс вашей конфигурации (например, МояКонфигурация_ОбновлениеИнформационнойБазы). В новом модуле следует очистить содержимое некоторых процедур (если они не требуются для специфики вашей конфигурации) и добавить описание вашей конфигурации, а также установить ссылку на него в свойствах конфигурации.
Для того чтобы подсистема "Работа с файлами" "знала", к каким объектам вашей конфигурации можно прикреплять файлы, необходимо расширить состав предопределенных типов БСП. Найдите в конфигураторе следующие определяемые типы:
ВладелецПрисоединенныхФайлов (это составной тип, который содержит ссылки на объекты, являющиеся владельцами файлов)ВладелецПрисоединенныхФайловОбъект (это составной тип, который содержит сами объекты-владельцы файлов)Добавьте в их состав тип ссылки на ваш справочник "Организации" (например, СправочникСсылка.Организации для ВладелецПрисоединенныхФайлов и СправочникОбъект.Организации для ВладелецПрисоединенныхФайловОбъект). Это действие связывает ваш справочник с механизмом БСП.
Откройте форму элемента вашего справочника "Организации" (или любого другого справочника, к которому вы хотите прикреплять файлы). Нам потребуется добавить элементы управления и код для вызова функционала БСП. Как правило, это делается в процедуре ПриСозданииНаСервере формы объекта. Добавьте следующий код:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// СтандартныеПодсистемы.РаботаСФайлами
ПараметрыГиперссылки = РаботаСФайлами.ГиперссылкаФайлов();
РаботаСФайлами.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыГиперссылки);
// Конец СтандартныеПодсистемы.РаботаСФайлами
КонецПроцедуры
Этот код инициализирует подсистему "Работа с файлами" для текущего объекта и размещает на форме необходимую гиперссылку "Присоединенные файлы". При нажатии на нее будет открываться стандартная форма для работы с файлами, предоставляемая БСП.
Пользователям, которые будут работать с прикрепленными файлами, необходимо предоставить соответствующие права доступа. Включите им следующие роли (или их аналоги, если вы используете собственные профили доступа):
Базовые права БСП – эти права являются обязательными для корректной работы большинства подсистем БСП.Работа с файлами – обычно это роли типа ДобавлениеИзменениеФайлов, ПросмотрФайлов, УдалениеФайлов и т.д.ПрисоединенныеФайлы и связанный с ним регистр сведений ДвоичныеДанныеФайлов.Часто при первом внедрении БСП в самописную конфигурацию возникает ошибка «Попытка получения неинициализированного значения параметра сеанса», особенно для ПараметрыСеанса.ТекущийПользователь. Эта ошибка указывает на то, что подсистема "Пользователи" из БСП не смогла корректно определить текущего пользователя, поскольку в вашей конфигурации отсутствует или неправильно реализована его инициализация.
Чтобы решить эту проблему, выполните следующие действия:
Откройте модуль сеанса вашей конфигурации. Для этого в конфигураторе кликните ПКМ по корню конфигурации, выберите "Свойства" и перейдите на вкладку "Модули", затем откройте "Модуль сеанса". Убедимся, что в этом модуле есть процедура, которая выполняется при старте сеанса (обычно ПриНачалеСеанса()) и инициализирует параметр сеанса ТекущийПользователь.
Если логики инициализации нет, ее необходимо добавить. Типовая реализация БСП предполагает, что при начале сеанса определяется пользователь информационной базы (тот, под которым вошли в программу), и на его основе находится соответствующий элемент справочника Пользователи, который затем присваивается ПараметрыСеанса.ТекущийПользователь. Примерный код в модуле сеанса:
// В начале сеанса
Процедура ПриНачалеСеанса()
// Этот код может отличаться в зависимости от вашей архитектуры БСП,
// но общая идея — установить ПараметрыСеанса.ТекущийПользователь.
// Попытаемся получить ссылку на пользователя ИБ.
// Обычно используется стандартная функция БСП.
Если Не ЗначениеЗаполнено(ПараметрыСеанса.ТекущийПользователь) Тогда
ПараметрыСеанса.ТекущийПользователь = Пользователи.ПолучитьТекущегоПользователя();
КонецЕсли;
// Также необходимо инициализировать другие параметры сеанса БСП,
// например, ПараметрыСеанса.УстановкаПараметровСеансаВыполнена.
Если ПараметрыСеанса.УстановкаПараметровСеансаВыполнена = Ложь Тогда
Подсистемы.УстановитьПараметрыСеанса();
КонецЕсли;
КонецПроцедуры
Убедитесь, что функция Пользователи.ПолучитьТекущегоПользователя() (или ее аналог в вашей конфигурации) корректно возвращает ссылку на элемент справочника Пользователи. Эта функция обычно находится в общих модулях подсистемы "Пользователи" БСП.
Убедимся, что в вашей конфигурации есть справочник с именем Пользователи, соответствующий требованиям БСП, и он содержит актуальных пользователей вашей системы. БСП активно использует этот справочник для управления правами и персонализации.
Если функционал БСП кажется слишком избыточным для вашей конкретной задачи, и вы уверены, что не будете работать с большим объемом файлов или большим количеством пользователей (например, до 10 человек в базе и не "жирные" файлы), вы можете рассмотреть более простые, хотя и менее масштабируемые, варианты.
Вместо того чтобы встраивать файл в табличную часть основного справочника, мы можем создать отдельный вспомогательный справочник для файлов:
Создайте новый справочник с именем, например, ПрисоединенныеФайлыСамописный. В нем будут следующие реквизиты:
Владелец (тип: СправочникСсылка.Организации или составной тип, если владельцев может быть несколько) – ссылка на элемент вашего основного справочника, к которому привязан файл.ИмяФайла (тип: Строка) – для хранения имени файла с расширением.Расширение (тип: Строка) – для хранения расширения файла.Размер (тип: Число) – для хранения размера файла в байтах.ДвоичныеДанные (тип: ХранилищеЗначения) – для хранения самого файла в бинарном виде.ДатаСоздания, Автор (опционально, для дополнительной информации о файле).На форме элемента справочника "Организации" добавьте кнопку или гиперссылку, которая будет открывать форму списка вашего нового справочника ПрисоединенныеФайлыСамописный, отфильтрованного по текущему владельцу. На этой форме или через отдельные команды реализуйте функционал:
ДиалогВыбораФайла для выбора файла на диске, затем считывайте его содержимое в объект ДвоичныеДанные и сохраняйте в реквизит ДвоичныеДанные нового элемента справочника ПрисоединенныеФайлыСамописный.ДвоичныеДанные из ХранилищаЗначения, сохраняйте их во временный файл на диске пользователя и открывайте его средствами операционной системы.Этот подход позволяет избежать раздувания основного справочника, но по-прежнему хранит все файлы в самой базе данных, что не оптимально для больших объемов. Функционал версионирования, хранения в томах и комплексного управления файлами придется реализовывать самостоятельно, что значительно сложнее и требует больших усилий по поддержке.
Ваша задача по прикреплению записей звонков с метаданными (кто звонил, сотрудник, комментарий, дата звонка) требует более структурированного подхода, чем просто прикрепление файла. Независимо от того, используете ли вы БСП или свою реализацию, рекомендуем следующую структуру:
Создайте специализированный справочник или документ, например, ЗаписиЗвонков. Этот объект будет служить для хранения всех необходимых метаданных, специфичных для каждого звонка:
Организация (тип: СправочникСсылка.Организации) – ссылка на организацию, к которой относится звонок.ДатаЗвонка (тип: Дата) – дата и время совершения звонка.КтоЗвонил (тип: Строка или СправочникСсылка.КонтактныеЛица) – имя или ссылка на контактное лицо, которое совершило звонок.Сотрудник (тип: СправочникСсылка.Пользователи или СправочникСсылка.Сотрудники) – сотрудник вашей организации, который общался по звонку.Комментарий (тип: Строка, неограниченной длины) – текстовый комментарий к звонку.В этот же справочник (или документ) ЗаписиЗвонков добавьте реквизит для хранения файла записи разговора:
ФайлЗаписи типа СправочникСсылка.ПрисоединенныеФайлы. Тогда запись звонка будет ссылаться на элемент справочника файлов БСП, а сами двоичные данные будут храниться в соответствии с настройками БСП (в базе или в томах).ДвоичныеДанныеЗаписи типа ХранилищеЗначения.Для автоматической загрузки записей звонков и их метаданных, как правило, требуется интеграция с АТС (автоматической телефонной станцией) или IP-телефонией. Многие АТС предоставляют API для доступа к записям разговоров и связанным данным, которые можно использовать для автоматического создания объектов ЗаписиЗвонков в 1С. Существуют также облачные сервисы распознавания речи (например, "1С:Распознавание речи"), которые могут преобразовывать аудиозаписи в текст и интегрироваться с 1С для еще более глубокого анализа.
Использование отдельного справочника для записей звонков позволит вам удобно работать с этими данными, строить отчеты, не перегружая основной справочник "Организации" и обеспечивая гибкость в работе с аудиофайлами и их атрибутами.
Мы рассмотрели различные подходы к прикреплению файлов в 1С 8.3 на управляемых формах. Мы выяснили, что хранение файлов непосредственно в табличных частях основных справочников является неэффективным и приводит к проблемам с производительностью и масштабируемостью. Наиболее правильным и масштабируемым решением является использование подсистемы «Работа с файлами» из Библиотеки стандартных подсистем (БСП).
Мы разобрали по шагам процесс внедрения БСП, включая решение распространенной ошибки с инициализацией параметра сеанса, и изучили ее механизм хранения файлов в отдельных объектах и томах. Для специфических задач, таких как хранение записей звонков с дополнительными атрибутами, мы рекомендуем создавать отдельные специализированные справочники, которые будут ссылаться на сами файлы, хранящиеся по правилам БСП или собственной, хорошо продуманной реализации. Такой подход обеспечивает чистоту архитектуры, высокую производительность и гибкость системы.
Не забывайте, что качественная архитектура с использованием типовых решений, таких как БСП, упрощает не только первоначальную разработку, но и дальнейшую поддержку и развитие вашей информационной системы, делая ее более надежной и легкой в сопровождении.