Основные возможности работы с файлами в типовой конфигурации на БСП

07.09.22

Разработка - Механизмы типовых конфигураций

В данной статье предлагаю рассмотреть типовые методы работы с файлами для конфигураций, в основе которых лежит библиотека стандартных подсистем.

 

Введение

Всем привет! Идея написания очередной статьи - это как возникшая необходимость решения одной небольшой задачки - написать  обмен-перенос бинарных данных из одной старой конфигурации в другую современную типовую. Чтобы сократить время разработки, я решил использовать стандартный функционал работы с файлами подсистемы "Работа с файлами" - Библиотеки стандартных подсистем (БСП). Поэтому, возникло желание рассмотреть основные возможности БСП в плане работы с файлами здесь на портале.

Для разработки примеров будем использовать платформу 1С:Предприятия 8.3.21.1484 и новую "тестовую" БСП - 3.1.8.45. Отмечу, что данная версия библиотеки стандартных подсистем является версией для ознакомления (на момент написания статьи - начало сентября 2022 г). Хотя, подсистема работы с файлами существует давно.

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

Отмечу, что тема достаточно заезженная и, я бы сказал, что простая, но я попробую подытожить и создать очередную "выжимку" полезного функционала в данном материале:

 

Самые "ходовые" и "типовые" возможности подсистемы работы с файлами - ДобавитьФайл(), ДобавитьФайлы() и ДобавитьФайлСДиска()

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

 
 Добавить файл

 

// работаем стандартным методом через ОписаниеОповещения

&НаКлиенте
Процедура ДобавитьФайл(Команда)
	
	ОбработчикРезультата = Новый ОписаниеОповещения("ПослеВыбораФайла", ЭтотОбъект);
	
	ПараметрыДобавления = Новый Структура("МаксимальныйРазмер,ФильтрДиалогаВыбора,НеОткрыватьКарточку");
	
	ПараметрыДобавления.МаксимальныйРазмер = 0;    // без учета размера
	ПараметрыДобавления.ФильтрДиалогаВыбора = "Excel файлы(*.xls;*.xlsx)|*.xls;*.xlsx";
	ПараметрыДобавления.НеОткрыватьКарточку = Истина;
	
	РежимСоздания = 2;
	
	РаботаСФайламиКлиент.ДобавитьФайл(ОбработчикРезультата,ЭтаФорма.Номенклатура,ЭтотОбъект.ЭтаФорма,РежимСоздания,ПараметрыДобавления);
	
КонецПроцедуры

&НаСервере
Процедура ПослеВыбораФайла(Результат, ДополнительныеПараметры) Экспорт
	
	//Результат 
	//* ТекстОшибки  - строка
	//* ФайлДобавлен - булево
	//* ФайлСсылка   - присоединенныефайлы
	
КонецПроцедуры	

 

 

Выполнение данного примера - приводит к таком результату:

 

Рис.1 Результат правильного добавления файла (прикрепления) через диалог пользователя "ДобавитьФайл".

 

Далее, добавим несколько файлов сразу вот таким кодом:

 
 Добавить файлы

 

&НаКлиенте
Процедура ДобавитьФайлы(Команда)
	
	ОбработчикРезультата 	= Новый ОписаниеОповещения("ПослеВыбораФайлов", ЭтотОбъект);
	Фильтр 					= "Картинки (*.jpg;*.jpeg)|*.jpg;*.jpeg";

	РаботаСФайламиКлиент.ДобавитьФайлы(ЭтаФорма.Номенклатура, ЭтаФорма.УникальныйИдентификатор, Фильтр, ,ОбработчикРезультата)

КонецПроцедуры

&НаСервере
Процедура ПослеВыбораФайлов(Результат, ДополнительныеПараметры) Экспорт
	
	//Результат - Массив - ссылки на добавленные файлы. Если файлы не были добавлены, пустой массив
	
КонецПроцедуры

 

 

В форме выбора нужно отметить несколько файлов:

 

Рис.2 Массовый выбор файлов для загрузки в конфигурацию

 

Данные методы автоматически правильно по-типовому добавляют выбранные файлы в "субсправочник" присоединенных файлов. В примерах приведен справочник "Номенклатуры".

 

Если я хочу автоматом загружать файлы (например по расписанию и определенного места) - такая возможность загрузки файла без "диалога выбора", делается вот этим кодом - функцией ДобавитьФайлСДиска():

 
 ДобавитьФайлСДиска()

 

// прикрепить файл без диалога выбора

&НаКлиенте
Процедура ДобавитьФайлБезДиалога(Команда)
	
	ДобавитьФайлБезДиалогаПоПути();
		
КонецПроцедуры

&НаСервере
Процедура ДобавитьФайлБезДиалогаПоПути()
	
	// Если передаете файл с клиента на сервер - используйте хранилище
	
	АА =  РаботаСФайлами.ДобавитьФайлСДиска(ЭтаФорма.Номенклатура,"c:\Bases2022\Sep2022\pack.xml");
	
	Сообщить(АА);  // ссылка на файл
	
КонецПроцедуры	

 

 

Достаточно знать эти три метода, чтобы сохранить выбранные файлы (любого) формата в конфигурации. Далее, перейдем к разделу получения базовой информации о загруженных файлах.

 

Функции получения данных файлов - ДвочныеДанныеФайла() и ДанныеФайла()

После того, как мы добавили файлы в конфигурацию, можем получить информацию о них. Для этого воспользуемся встроенными функциями подсистемы ДвочныеДанныеФайла() и ДанныеФайла(). Пример кода представлен ниже:

 

 
 ДвоичныеДанныеФайла()

 

	ДанныеФайлаДв = РаботаСФайлами.ДвоичныеДанныеФайла(ЭтаФорма.ПрисоединенныеФайлыНоменклатура, Ложь);
	ДанныеФайлаДв.Записать("c:\Bases2022\Sep2022\1.jpeg");

 

Здесь, получаем двоичные данные файла и сохраняем их на диск методом "Записать" в качестве файла - получается картинка. Можно и не сохранять на диск - а добавить в любой реквизит.

 

Функция этой подсистемы - ДанныеФайла() возвращает мне вот такую структуру описания прикрепленного файла в базе:

 

Рис.3 Структура возврата описания прикрепленного файла. Данная структура позволяет получить достаточную информацию о загруженном файле.

 

Код примера использования ДанныеФайла() вот такой:

 
 ДанныеФайла()

 

&НаСервере
Процедура ПолучитьДанныеСервером()
	
	//Конструктор параметров файла
	ПараметрыДанныхФайла = РаботаСФайламиКлиентСервер.ПараметрыДанныхФайла();
 	
	СтруктураВозврата = РаботаСФайлами.ДанныеФайла(ЭтаФорма.ПрисоединенныеФайлыНоменклатура, ПараметрыДанныхФайла);
		
КонецПроцедуры	

 

 

Где, "ПараметрыДанныхФайлов()" - это типовой конструктор параметров данных файла из БСП:

 
 Функция-конструктор ПараметрыДанныхФайла()

 

Функция ПараметрыДанныхФайла() Экспорт
	
	ПараметрыДанных = Новый Структура;
	ПараметрыДанных.Вставить("ДляРедактирования",              Ложь);
	ПараметрыДанных.Вставить("ИдентификаторФормы",             Неопределено);
	ПараметрыДанных.Вставить("ВызыватьИсключение",             Истина);
	ПараметрыДанных.Вставить("ПолучатьСсылкуНаДвоичныеДанные", Истина);
	Возврат ПараметрыДанных;
	
КонецФункции

 

 

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

 

Базовый функционал - "Открытие файлов" и "Сохранить как".

Рассмотрим также подобный базовый функционал - как "открытие" и "сохранение файла". Для этого я воспользуюсь типовой процедурой для клиента открытия файла. Код открытия вот такой:

 
 ОткрытьФайл()

 


&НаКлиенте
Процедура ОткрытьФайл1(Команда)
	
	ДанныеФайла = ПолучимДанныеФайла();
	РаботаСФайламиКлиент.ОткрытьФайл(ДанныеФайла, Истина);

КонецПроцедуры

&НаСервере
Функция ПолучимДанныеФайла()
	
	ПараметрыДанныхФайла = РаботаСФайламиКлиентСервер.ПараметрыДанныхФайла();	
	
	Возврат РаботаСФайлами.ДанныеФайла(ЭтаФорма.ПрисоединенныеФайлыНоменклатура,ПараметрыДанныхФайла);
	
КонецФункции

 

 

Результат выполнения данного кода будет вот такой (здесь я открываю загруженный текстовый файл  readme.txt в форме для редактирования) - могу сохранить изменения (здесь я намекаю на использование внешних шаблонов документов).

 

Рис.4. Результат использования процедуры "ОткрытьФайл" на клиенте. Открыт текстовый файл. Картинка будет открыта в соответствующем приложении клиента.

 

Также приведу небольшой код функционала "Сохранить как" выглядит вот так:

 
 СохранитьФайлКак

 

Процедура СохранитьФайл()
	
	ОбработчикСохранения = Новый ОписаниеОповещения("ПослеВыбораФайла", ЭтотОбъект);
		
	ПараметрыДанныхФайла = РаботаСФайламиКлиентСервер.ПараметрыДанныхФайла();

	РаботаСФайлами.СохранитьФайлКак(ПараметрыДанныхФайла, ОбработчикСохранения);

КонецПроцедуры


&НаСервере
Процедура ПослеСохраненияФайла(ПутьКФайлу, ДополнительныеПараметры) Экспорт
	
	// ПутьКФайлу  - строка
	
КонецПроцедуры	

 

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

 

Итак, я привел несколько "пару-тройку" рабочих примеров использования возможностей типовой подсистемы "Работа с файлами" библиотеки стандартных подсистем. Среди них:

- Добавление файлов в базу (в режиме диалога или без него);

- Получение информации о файле или о файлах из базы (бинарные данные или данные файла);

- Получение (открытие) самого файла, сохраненного в базе;

- Сохранение файла на диск, используя "Сохранить как";

 

Уверен, что на первом этапе разработки под БСП - вам этого хватит. Примеры в статье все рабочие. У кого есть желание получить код примеров (одна обработка) - может написать мне в личный профиль этого ресурса. Переходим к заключению и сделаем выводы.

 

Заключение и выводы

Как я написал ранее, этот материал затрагивает основной базовый типовой функционал конфигураций, на этот раз, - подсистемы  "Работы с файлами". Приведены простые практические примеры использования основных функций и процедур данной подсистемы - добавление файлов, открытие файлов и получение информации о файле. В 90% случаев необходимо использовать именно эти методы для потребностей решения задачи. Статья дает понимание как сделать это "по стандарту", не изобретая очередной велосипед. Еще раз повторю фразу - взял и используй в любой конфигурации, в основе которой лежит БСП.

Уверен, что этот материал будет вам интересен и полезен на практике - новичкам для "поднятия уровня программирования", продвинутым - как "шпаргалка" - всего в голове не уместить, к сожалению.

Изучение  использования описываемое подсистемы "работы с файлами" оставляю на вашу фантазию и усмотрение. Отмечу, что я затронул, наверное, процентов 5 или 7 от ее возможностей.

 

Также, обратите ваше внимание на мои статьи по применению на практике готового функционала библиотеки стандартных подсистем.

 

Одни из наиболее актуальных из них:

Оценка производительности с помощью БСП

Печать макета MS Word в любом документе с помощью БСП

Базовые принципы работы с регламентными заданиями подсистем БСП

Ну и в заключении статьи напишу:

Для тех, кого интересуют мои статьи по стандартам программирования, а также мои разработки (платные и бесплатные), - всегда вы можете связаться со мой через личку этого профиля, а так же мой телеграмм-канал. Любая поддержка будет приветствоваться и повлечет более интересные и сложные, а главное - необходимые материалы для вашей профессиональной деятельности на портале. Готов к любому взаимовыгодному профессиональному сотрудничеству.

работа с файлами конфигурация бсп стандартные подсистемы бинарные файлы

См. также

СКД Механизмы типовых конфигураций Запросы Программист Платформа 1С v8.3 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Россия Бесплатно (free)

Работая с типовыми отчетами в конфигурациях «Зарплата и управление персоналом, редакция 3», «Зарплата и кадры государственного учреждения, редакция 3» и подобных, в схемах компоновки данных можно встретить конструкции запросов, которые обращаются к некоторым виртуальным таблицам.

20.08.2024    1947    PROSTO-1C    0    

18

Механизмы типовых конфигураций Программист Платформа 1С v8.3 1С:Комплексная автоматизация 2.х Россия Бесплатно (free)

Эта ошибка была обнаружена мной в типовой конфигурации 1С:Комплексная автоматизация 2 (2.5.16.115), БСП версия 3.1.9.302. Возникает она после того, как вы добавляете в расширение бизнес-процесс или задачу, выполняете обновление идентификаторов метаданных расширений, но ошибка при записи любого элемента справочника "Профили групп доступа" всё равно остаётся.

01.07.2024    1983    Vidz    0    

11

Механизмы типовых конфигураций Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

Очень часто в написании кода требуется обращаться к предопределённым значениям. Если идёт обращение к типовым предопределённым значениям, то проблем не возникает.

24.06.2024    1198    olja-ljaaa    0    

3

Механизмы типовых конфигураций Ценообразование, анализ цен Программист Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Россия Абонемент ($m)

Продолжение темы вынесения кусков повторно-используемого кода в запрос. В прошлый раз мы сделали это с вычислением пользовательских формул. Здесь замахнулись на формулы, задаваемые пользователем запросами.

1 стартмани

11.04.2024    1156    tango    5    

3

Механизмы типовых конфигураций Программист Платформа 1С v8.3 1С:Управление торговлей 11 Россия Абонемент ($m)

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

10 стартмани

11.04.2024    926    tango    5    

4
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. vld1973 91 07.09.22 18:10 Сейчас в теме
Как всегда отличная статья по функциям БСП. Спасибо большое.
nemo888; user1804494; Serg O.; sajmon45; quazare; kibnsk; A1WEB; +7 Ответить
2. quazare 3840 07.09.22 18:46 Сейчас в теме
(1) спасибо. казалось бы нет ничего проще, чем работать с файлами
3. user676027_svikator 125 08.09.22 09:23 Сейчас в теме
Спасибо было очень полезно.
user1804494; quazare; +2 Ответить
4. user865160 08.09.22 09:48 Сейчас в теме
Спасибо за статью. Для полноты картины было бы желательно увидеть структуры хранения данных, как они представлены в конфигураторе. Какие справочники, регистры задействуются и для чего.
user1804494; quazare; +2 Ответить
7. PLAstic 296 08.09.22 14:12 Сейчас в теме
(4) Не надо так делать. Надо заходить по ссылке ниже или в сам модуль и разбираться там. Информацию по форматам совершенно бесполезно дублировать тут, когда есть первоисточник. Автор лишь описал кейсы использования тех или иных методов.
megatrend; +1 Ответить
5. dhurricane 08.09.22 12:07 Сейчас в теме
Побуду душнилой и поспорю с заключением. Эта статья будет полезна новичкам тем, что "рекламирует" использование типового програмного интерфейса для работы с файлами вместо того, чтобы самостоятельно сидеть и ковырять справочники файлов, и пытаться заполнять их методом проб и ошибок. И эта статья будет бесполезна продвинутым разработчикам, т.к. спустя пару месяцев она утонет в ленте, да и в закладки нет большого смысла добавлять, ведь намного проще открыть модуль, пробежаться глазами по заголовкам процедур и функций, да почитать их описание. Информации по теме получишь заметно больше и актуальнее.
potoyalo; PLAstic; +2 1 Ответить
6. PLAstic 296 08.09.22 14:10 Сейчас в теме
Я бы рекомендовал изучить https://its.1c.ru/db/bsp317doc#content:1775:hdoc . Сразу все публичные методы подсистемы.
kondrp; WorkerPavel; +2 Ответить
8. user649981_sergeiprog1983 14.10.22 11:28 Сейчас в теме
Спасибо огромное за статью
9. quazare 3840 14.10.22 12:24 Сейчас в теме
(8) спасибо за отзыв. вы так же можете ознакомиться с одной из моих последних статей https://infostart.ru/1c/articles/1725228/
10. user1979322 22.08.24 10:39 Сейчас в теме
Все методы почему то не рабочие. Зачем писать такие статьи если пытаешься разобраться вставляешь метод в 1С, а его в 1С нет, и так со всеми методами
Оставьте свое сообщение