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

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С:ERP Управление предприятием 2 1С:Управление торговлей 11 Россия Абонемент ($m)

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

1 стартмани

11.04.2024    507    tango    0    

3

Формула в реквизите. Приквелл к сериалу "Ценовая власть"

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

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

10 стартмани

11.04.2024    388    tango    5    

3

Ценовая власть. Второй сезон

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

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

08.04.2024    672    tango    0    

2

Ценовая власть (УТ 11.5) - 2

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

В прошлый раз специальной обработкой мы выбрали объекты УТ 1.5, группируя по подсистемам. Оказалось, что состав подсистем не вполне корректно отображает функциональную структуру, но зато мы нашли процедуру, которая, вроде бы, должна содержать в себе всё, что нас интересует. Обновление цен должно ведь следовать выбранной стратегии ценообразования, верно? Иначе что она обновляет...

06.04.2024    454    tango    1    

1

Ценовая власть или Управление ценообразованием (УТ 11.5)

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

Ценовая власть - это способность (возможность) компании изменять в некоторых пределах отпускную цену своего товара (услуг, продукции). Чем в более широких пределах вы можете играть в цену продажи, тем больше этой власти у вас. Если вы не можете управлять отпускной ценой, то это или не ваш бизнес, или не бизнес вовсе. Здесь в рубрике "База знаний аналитика и руководителя проекта" слово проект не ограничено "проектом в 1С". Посмотрим, что для этого есть в УТ 11.5.

1 стартмани

05.04.2024    537    tango    12    

2

Расширяем возможности дополнительных обработок и настраиваем их отладку

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

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

07.02.2024    2616    YA_418728146    11    

43

Регистры накопления в 1С:КА2 и 1С:ERP для расчета НДФЛ, страховых взносов и взаиморасчетов с сотрудниками на январь 2024 года. Краткое описание

Зарплата Механизмы типовых конфигураций Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет НДФЛ Абонемент ($m)

Для расчета зарплаты и соответствующих налогов в конфигурациях 1С:КА2 и 1С:ERP используется 22 регистра накопления, 7 регистров сведений, 1 регистр расчета и бухгалтерские проводки. В таблице приведены названия этих регистров, указаны основные регистраторы и виды движений приход/расход. В описании приводится краткое функциональное назначение регистров в основных зарплатных процессах. Описание регистров родилось из черновиков при написании различных отчетов и обработок при эксплуатации 1С-овских конфигураций и исправлении ошибок по НДФЛ, взаиморасчетов с сотрудниками и прочих. Информация не претендует на полноценное описание работы регистров, скорее это дискуссионный материал. Но, возможно, кому-то пригодится и сократит время при подготовке отчетности за непростой (в плане учета зарплаты) 2023 год. А возможно, кто-то поделится своим опытом.

1 стартмани

10.01.2024    1159    8    2ncom    6    

8

Шаблоны новых объектов 1С для 1С:Бухгалтерии предприятия

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

Используются для создания новых объектов в конфигурации, чтобы не забыть, что нужно сделать. Сделано на примере 1С:Бухгалтерия предприятия, в других конфигурациях могут быть другие, а могут быть и похожие объекты.

28.12.2023    4985    mrXoxot    11    

100
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. vld1973 85 07.09.22 18:10 Сейчас в теме
Как всегда отличная статья по функциям БСП. Спасибо большое.
user1804494; Serg O.; sajmon45; quazare; kibnsk; morin; +6 Ответить
2. quazare 3606 07.09.22 18:46 Сейчас в теме
(1) спасибо. казалось бы нет ничего проще, чем работать с файлами
3. user676027_svikator 124 08.09.22 09:23 Сейчас в теме
Спасибо было очень полезно.
user1804494; quazare; +2 Ответить
4. user865160 08.09.22 09:48 Сейчас в теме
Спасибо за статью. Для полноты картины было бы желательно увидеть структуры хранения данных, как они представлены в конфигураторе. Какие справочники, регистры задействуются и для чего.
user1804494; quazare; +2 Ответить
7. PLAstic 295 08.09.22 14:12 Сейчас в теме
(4) Не надо так делать. Надо заходить по ссылке ниже или в сам модуль и разбираться там. Информацию по форматам совершенно бесполезно дублировать тут, когда есть первоисточник. Автор лишь описал кейсы использования тех или иных методов.
megatrend; +1 Ответить
5. dhurricane 08.09.22 12:07 Сейчас в теме
Побуду душнилой и поспорю с заключением. Эта статья будет полезна новичкам тем, что "рекламирует" использование типового програмного интерфейса для работы с файлами вместо того, чтобы самостоятельно сидеть и ковырять справочники файлов, и пытаться заполнять их методом проб и ошибок. И эта статья будет бесполезна продвинутым разработчикам, т.к. спустя пару месяцев она утонет в ленте, да и в закладки нет большого смысла добавлять, ведь намного проще открыть модуль, пробежаться глазами по заголовкам процедур и функций, да почитать их описание. Информации по теме получишь заметно больше и актуальнее.
potoyalo; PLAstic; +2 1 Ответить
6. PLAstic 295 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 3606 14.10.22 12:24 Сейчас в теме
(8) спасибо за отзыв. вы так же можете ознакомиться с одной из моих последних статей https://infostart.ru/1c/articles/1725228/
Оставьте свое сообщение