Получить расширение файла 1с
« Как стать программистом 1С » Язык 1С » ПодключитьРасширениеРаботыСФайлами 1С, УстановитьРасширениеРаботыСФайлами 1С, ПолучитьФайл 1С, ПоместитьФайл 1С, ПолучитьФайлы 1С, ПоместитьФайлы 1С, ПолучитьИзВременногоХранилища 1С, ПоместитьВоВременноеХранилище 1С
ПодключитьРасширениеРаботыСФайлами 1С, УстановитьРасширениеРаботыСФайлами 1С, ПолучитьФайл 1С, ПоместитьФайл 1С, ПолучитьФайлы 1С, ПоместитьФайлы 1С, ПолучитьИзВременногоХранилища 1С, ПоместитьВоВременноеХранилище 1С
В веб-клиенте работа с файлами (чтение/запись) производится только на сервере.
Функция ПодключитьРасширениеРаботыСФайлами() используется в веб-клиенте для включения разрешения работы с файлами (поддерживают не все браузеры), если неудачно – возвращает Ложь. Перед первым использованием функции в этом браузере на этом комьютере требуется установить расширение работы с файлами с помощью функции УстановитьРасширениеРаботыСФайлами()
Функции
• ПоместитьФайл(АдресКудаПомещен, ИмяФайла)
• ПолучитьФайл(АдресОткуда)
• ПоместитьФайлы(МассивИменФайлов, МассивАдресовКудаПомещены)
• ПолучитьФайлы(МассивАдресовОткуда)
позволяют передвать файлы между клиентом и сервером.
Функции ПолучитьИзВременногоХранилища() и ПоместитьВоВременноеХранилище() позволяют получить данные файла из временного хранилища сервера, куда они были помещены с помощью ПолучитьФайл() и ПоместитьФайл().
На клиенте файлы располагаются где требуется в файловой системе. На сервере файлы помещаются в «хранилище» — временный каталог файлов сервера 1С. Напрямую с хранилищем работать нельзя – требуется получить значение из хранилища с помощью функции ПолучитьИзВременногоХранилища() и сохранить во временный файл на сервере с помощью функции ПолучитьИмяВременногоФайла()
Данные функции можно использовать не только в веб-клиенте, но и в остальных клиентах для оптимизации работы с файлами.
При использовании данных функций в веб-клиенте необходимо заранее выполнить функцию ПодключитьРасширениеРаботыСФайлами()
Обратите внимание на различные варианты поведения системы при выполнения данных функций. В некоторых браузерах выполнение кода программы прерывается до закачки файлов на сервер (например, пользователю выводится окно с процентами закачки файла), а в некоторых – выполнение программы продолжается, а загрузка производится фоново.
Для примеров использован текстовый файл на локальной «клиентской» машине по адресу «D:\Текстовый файл.txt» со следующим содержимым:
Привет, мир!
Конец файла
Пример 1. Чтение текстового файла на сервере. Имя файла выбирает пользователь/указывает программист
//перемещаем файл на сервер во "внутреннее хранилище сервера"
ВнутреннийАдресСервера = "";
//если имя файла выбирает пользователь в стандартном диалоговом окне Windows
Результат = ПоместитьФайл(ВнутреннийАдресСервера);
//если имя файла указывает программист напрямую
//Результат = ПоместитьФайл(ВнутреннийАдресСервера, "D:\Текстовый файл.txt",, Ложь);
Если не Результат Тогда
ВызватьИсключение "Ошибка. Не удалось передать файл на сервер. Операция прервана.";
КонецЕсли;
Сообщить(ВнутреннийАдресСервера);
//переводим выполнение на сервер вызовом серверной процедуры
ЧтениеФайла(ВнутреннийАдресСервера);
КонецПроцедуры
//начинаем работать с файлом
//узнаем размер файла в байтах (и переведем размер в мегабайты)
Файл = Новый Файл(ИмяВременногоФайла);
Сообщить(Строка(Окр(Файл.Размер() /1024 /1024, 2)) + "Мб");
//прочитаем первую строку файла
ТекстовыйФайл = Новый ЧтениеТекста(ИмяВременногоФайла);
ТекстПервойСтрокиФайла = ТекстовыйФайл.ПрочитатьСтроку();
Сообщить(ТекстПервойСтрокиФайла);
Пример 2. Передача на сервер нескольких файлов. Имена файлов выбирает пользователь/указывает программист
&НаКлиенте
Процедура КнопкаЧтениеФайла(Команда)
//перемещаем файл на сервер во "внутреннее хранилище сервера"
МассивВнутреннихАдресовСервера = Новый Массив;
//если список имен файлов выбирает пользователь
Результат = ПоместитьФайлы(,МассивВнутреннихАдресовСервера);
//если список имен файлов указывает программист напрямую
//МассивВнутреннихАдресовСервера = Новый Массив;
//МассивИменФайлов = Новый Массив;
//МассивИменФайлов.Добавить(Новый ОписаниеПередаваемогоФайла("D:\Текстовый файл.txt", ""));
//Результат = ПоместитьФайлы(МассивИменФайлов, МассивВнутреннихАдресовСервера,, Ложь);
Если не Результат или МассивВнутреннихАдресовСервера.Количество() = 0 Тогда
ВызватьИсключение "Ошибка. Не удалось передать файл на сервер. Операция прервана.";
КонецЕсли;
Для каждого ИмяФайла из МассивВнутреннихАдресовСервера Цикл
Сообщить(ИмяФайла.Хранение);
//переводим выполнение на сервер вызовом серверной процедуры
//реализацию этой функции см. в примере 1
ЧтениеФайла(ИмяФайла.Хранение);
КонецЦикла;
Пример 3. Запись нового файла на сервере с последующей передачей на клиент. Имя файла выбирает пользователь/формирует программист
&НаКлиенте
Процедура КнопкаЧтениеФайла(Команда)
//вызов серверной процедуры формирования файла, она возвращает "внутренний адрес", передаем его параметром
//куда сохранил пользователь файл и сохранил ли - мы не знаем
//пользователь всегда подтверждает разрешение на получение файла
ПолучитьФайл(ФормированиеФайла());
//вариант с сохранением файла без подтверждения пользователя, имя файла указываем сразу, в веб-клиенте работать не будет
//ПолучитьФайл(ФормированиеФайла(), "D:\Текстовый файл.txt", Ложь);
&НаСервере
Функция ФормированиеФайла()
//получаем файл из "временного хранилища сервера" и сохраняем во временный файл на сервере
ИмяВременногоФайла = ПолучитьИмяВременногоФайла();
//начинаем работать с файлом
//записываем текст в файл
ТекстовыйФайл = Новый ЗаписьТекста(ИмяВременногоФайла);
ТекстовыйФайл.ЗаписатьСтроку("Привет, мир!");
ТекстовыйФайл.ЗаписатьСтроку("Конец файла");
ТекстовыйФайл.Закрыть();
//помещаем во "временное хранилище сервера", система вернет "внутренний адрес"
Возврат ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяВременногоФайла));
Пользователи часто хотят изменить типовые решения под собственные нужды. Не всегда получается решить задачу, используя внешние обработки или отчеты и поэтому, приходится вносить изменения в типовые решения.
Для типовых конфигураций периодически выходят обновления. Для того чтобы обновления выполнять в автоматическом режиме, необходимо чтобы конфигурация была на поддержке без изменений. Если разрешить изменения, то автоматическое обновление будет не доступно. И для того чтобы выполнить обновление вручную, необходимо будет обращаться к специалистам. Обновление измененных конфигураций может потребовать много времени, это зависит от количества внесенных изменений.
Расширения конфигурации
Начиная с версии платформы 8.3.6 появился новый метод внесения изменений - "Расширения конфигурации". При использовании данного метода конфигурация не меняется, что позволяет сохранить возможность автоматического обновления. Расширения конфигураций создаются и редактируются в режиме конфигуратора. Для того чтобы открыть окно просмотра и редактирования расширений, необходимо перейти в главном меню: Конфигурация->Расширения конфигурации.
Механизм расширений - это новая разработка, поэтому добавление изменений доступно не для всех объектов метаданных.
Пример по добавлению расширения для справочника "Валюты".
Для расширений доступны следующие действия:
Добавление новых отчетов и обработок;
Изменение и добавление управляемых форм;
Добавление обычных форм;
Доступно изменение командного интерфейса;
Редактирование ролей;
Добавление подсистем и изменение их состава;
Выгрузка и загрузка расширений
Расширения можно выгружать в файл (*.cfe). Выгрузка доступна в конфигураторе и в предприятии. В режиме конфигуратора окно редактирования расширений открывается как показано выше. В режиме предприятия для загрузки, выгрузки, удаления расширений, используется специальная обработка, которая открывается через главное меню:
Все функции->Стандартные->Управление расширениями конфигурации.
Подробнее о переопределении процедур и функций можно прочитать в статье
Переопределение процедур и функций в расширении конфигурации.
Подробнее о том как добавить расширение в конфигурацию можно прочитать в статье
Добавить "Расширение конфигурации" для "Управление торговлей 11".
Комментарии (0)
В справочнике Номенклатура есть реквизит "ОсновноеИзображение" с типом "ХранилищеЗначения". В нем хранится файл картинки в двоичном коде. Есть необходимость выгрузить файлы изображений. Все картинки с разными типами например GIF или JPG, PNG и т.д. Естественно расширения файлов не сохранены. Как можно определить тип картинки (расширение файла)? Пока есть мысль сохранить во временный файл, затем побайтово прочитать первые N символов и попытаться найти ключевые фразы для каждого типа. Буду рад если ткнете в готовое решение или повернете в нужное направление.
это неестественно, а безалаберно.
В двоичных данных может быть все что душе угодно, поэтому должен быть реквизит, позволяющий определить хоть как-то определять содержимое, имя файла, или его расширение, для дальнейшей работы. Это все контролируется и на совести разработчика. Впрочем, как и вообще само по себе наличие данных в хранилище.
Базу очень легко раздуть до неимоверных размеров, на ровном месте.
А так, да, можно сохранить как текстовую строку, и поиском в ней символов явно из структуры тех или иных файлов, можно определять тип.
А потом сохранять заново, в определенном формате.
Медленно конечно, смотря какие там размеры файлов.
Если этот процесс будет регулярным, а не разовым, то лучше ввести такой признак в справочник номерклатуры, сделать обработку по определению типа файлов, которая пройдет, определит и пропишет расширение в реквизит. Ну и работать с этим будет намного проще.
(5) ipoloskov, ну мы же не знаем, что там у чела за конфа.
В некоторых конфах, и хранилище в сам справочник номенклатуры не пихают, а вынесено в отдельный справочник файлы.
Пусть с архитектурой уж сам заморачивается, где и как хранить эту информацию
Если б я это писал. Конфа не типовая, а от франчев.
Если этот процесс будет регулярным, а не разовым, то лучше ввести такой признак в справочник номенклатуры
Будет не чаще раза-двух в год. Обработка порядка 1000-2000 элементов. Наверное, Вы правы, что стоит завести отдельный реквизит.
Хранить в отдельном реквизите или в хранилище - решайте сами. Хранить сразу в хранилище лучше, имхо, потому что можно впихнуть любую информацию о файле, кроме того не потребуется менять структуру конфигурации. Но для это потребуется переконвертировать все хранящиеся изображения.
(1) ECartman, если правильно писали, то оно должно быть записано в имени картинки. Но если через одно место, то только парсить.
Блин, все разобрался. Надо было просто в синтаксис-помощник заглянуть)))
P.S. Для тех, кому интересно. У типа "Картинка" есть замечательный метод "Формат()", который, собственно, и покажет что за тип картинки. И смех и грех)
(9) ECartman, да интересно.
У картинки то есть, но откуда взяться картинке скажем при обработке справочника ?
Я так понимаю картинка, это декорация формы, либо в макете - куда этот файл необходимо поместить.
Но нам ведь нужно сделать выгрузку..не открывать же для этого форму каждого элемента справочника.
Ты картинку как-то программно создаешь, в нее выводишь файл из хранилища и потом считываешь формат ? А если файл в хранилище будет некартинкой, система переварит ?
В общем, просто покажи код который получился )) Для общего развития, может кому пригодится в будущем.
(10) Boneman, В справочнике "Номенклатура" есть реквизит "ОсновноеИзображение" с типом "ХранилищеЗначения". В него записывается изображение номенклатуры.
Далее имеем простой код
Форма интерактивного изменения изображения записывает в реквизит "ОсновноеИзображение" объект с типом "Картинка". Но если кто-то умудрится туда запихнуть не картинку, то вернется "НеизвестныйФормат" (проверено).
Ну и если у кого-то картинка сохраняется в двоичных данных, то сначала нужно получить из них картинку, потом проверить формат.
Как восстановить любое значение из файла в 1с 8.3, 8.2
Как записать текстовый файл в 1с 8.3, 8.2
Как прочитать текстовый файл в 1с 8.3, 8.2
Как проверить существование файла в 1С 8.3, 8.2
Как скопировать файл в 1с 8.3, 8.2
Как переместить файл в 1с 8.3, 8.2
Как найти файлы в каталоге в 1с 8.3, 8.2
Как удалить файл в 1с 8.3, 8.2
Как удалить файлы в каталоге по маске в 1с 8.3, 8.2
Как получить имя временного файла в 1с 8.3, 8.2
Как прочитать атрибуты файла в 1с 8.3, 8.2
Как установить атрибуты файла в 1с 8.3, 8.2
Как узнать размер файла в 1с 8.3, 8.2
Как узнать по пути, файл это или каталог в 1с 8.3, 8.2
Как вытащить расширение файла из его пути в 1с 8.3, 8.2
Как вытащить имя файла без расширения в 1с 8.3, 8.2
Как создать каталог в 1с 8.3, 8.2
Как проверить существование каталога в 1с 8.3, 8.2
Как удалить каталог вместе с содержимым в 1с 8.3, 8.2
Как сохранить произвольное значение во временное хранилище в 1с 8.3, 8.2
Как прочитать произвольное значение из временного хранилища в 1с 8.3, 8.2
Как перезаписать уже сохраненное значение во временном хранилище в 1с 8.3, 8.2
Как сохранить значение во временное хранилище на всё время жизни формы в 1с 8.3, 8.2
Как сохранить значение во временное хранилище на всё время сеанса пользователя в 1с 8.3, 8.2
Как удалить значение из временного хранилища в 1с 8.3, 8.2
Как узнать является ли строка адресом во временном хранилище в 1с 8.3, 8.2
Как передать файл с клиента на сервер в 1с 8.3, 8.2
Процедура ВыполнитьПослеПомещенияФайла ( Результат , Адрес , ВыбранноеИмяФайла , ДополнительныеПараметры ) Экспорт
Как прочитать файл на сервере из временного хранилища в 1с 8.3, 8.2
Как передать файл с сервера на клиент в 1с 8.3, 8.2
Поиск по сайту
Okolokompa в Яндекс Дзен
Объект языка 1С «Файл» позволяет:
- файл 1С — получить путь к файлу (каталог без имени файла), имя без расширения, только расширение
- файл 1С — проверить наличие файла
- файл 1С — определить файл это или каталог
- файл 1С — получить размер файла
- файл 1С — работать с атрибутами файла (время измененеия, только чтение, скрытые файлы).
Пример файл 1С — проверка наличия каталога на диске:
Функция ПолучитьКаталогПоИмениФайла(ИмяФайла)
//обращаемся к файлу, на этот момент существование файла не проверяется
Файл = Новый Файл(ИмяФайла);
//напрямую проверяем существование
Если не Файл.Существует() Тогда
Сообщить("Ошибка. Файл с именем '" + ИмяФайла + "' не существует");
Возврат ИмяФайла;
КонецЕсли;
//проверка на каталог
Если Файл.ЭтоКаталог() Тогда
//если последняя буква не "\", то добавляем ее
Возврат ?(Прав(СокрП(ИмяФайла), 1) = "\", ИмяФайла, СокрП(ИмяФайла) + "\");
КонецЕсли;
//возвращаем путь (т.е. только каталог из имени файла)
Возврат Файл.Путь;
Пример файл 1С — проверка существования файла на диске:
Функция ФайлМожноЗаписывать(ИмяФайла)
//обращаемся к файлу, на этот момент существование файла не проверяется
Файл = Новый Файл(ИмяФайла);
//напрямую проверяем существование
Если не Файл.Существует() Тогда
Сообщить("Ошибка. Файл с именем '" + ИмяФайла + "' не существует");
Возврат ИмяФайла;
КонецЕсли;
//вернет ИСТИНА, если нельзя записывать (т.е. только чтение "установлен")
Если Файл.ПолучитьТолькоЧтение() Тогда
Попытка
Файл.УстановитьТолькоЧтение(Ложь);
Исключение
//здесь мы окажемся, если у пользователя, под которым работает клиент 1С нет прав снять этот реквизит
Возврат Ложь;
КонецПопытки;
КонецЕсли;
Пример файл 1С — получение размера файла в байтах, килобайтах, мегабайтах:
Читайте также: