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

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 Конфигурации 1cv8 Бесплатно (free)

Статистическая выборка сценариев и точек изменения отчетов на общей форме ФормаОтчета в типовых конфигурациях. Примеры кода.

03.06.2024    2097    Serg2000mr    22    

86

Ценовая власть. Выносим из цикла схему СКД

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

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

1 стартмани

11.04.2024    681    tango    1    

3

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

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

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

10 стартмани

11.04.2024    549    tango    5    

4

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

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

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

08.04.2024    896    tango    0    

2

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

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

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

1 стартмани

05.04.2024    788    tango    12    

2

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

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

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

07.02.2024    3108    YA_418728146    11    

51

Регистры накопления в 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    1479    10    2ncom    6    

8
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. vld1973 86 07.09.22 18:10 Сейчас в теме
Как всегда отличная статья по функциям БСП. Спасибо большое.
user1804494; Serg O.; sajmon45; quazare; kibnsk; morin; +6 Ответить
2. quazare 3704 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 3704 14.10.22 12:24 Сейчас в теме
(8) спасибо за отзыв. вы так же можете ознакомиться с одной из моих последних статей https://infostart.ru/1c/articles/1725228/
Оставьте свое сообщение