Получить расширение файла 1с

Обновлено: 07.07.2024

Как восстановить любое значение из файла в 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

Сообщить ( ПолучитьИмяВременногоФайла ( ) ) ; // например, c:\Temp\v8_11AE_4.tmp

Сообщить ( ПолучитьИмяВременногоФайла ( ".txt" ) ) ; // например, c:\Temp\v8_11AE_5.txt

Как прочитать атрибуты файла в 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С 8 бежит ещё быстрей этого времени.

Управляемые формы теперь называются "интерфейс ТАКСИ", модальные окна запрещены, а режим использования синхронных вызовов расширений и внешних компонент наглухо положил работоспособность большинства этих расширений и внешних компонент, и половину старых методов в добавок.

В общем, пацаны, дела такие - многие из вас читали статью великолепного Чистова П. о работе с файлами в 8.3

Если Вы ещё этого не сделали - бегом марш! (ссылка)

Суть механизма работы с файлами в кратце:

1) На клиенте выбираем файл

2) Пихаем его в чёрный ящик

3) Сохраняем содержимое чёрного ящика на сервере

Загвоздка состоит в том, что делать это надо особенно, по-новому и с душой.

и прочие языческие штучки здесь не прокатят.

Вот листинг кода, который позволяет загрузить файл с клиента

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

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

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

С одним разобрались, теперь второе - как достать файл из этого хранилища значений (которое, напомню, находится на сервере) и сохранить на диск клиента?

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

Будьте, внимательны! Эта навигационная ссылка уже не имеет с временным хранилищем ничего общего! Проверить тип навигационной ссылки можно методом

По традиции, листинг кода, который вызывает диалог сохранения файла

Значение переменной "Файл" это ещё одна особенность данного способа. Здесь стоит обратить внимание на "ИмяФайла". Дело в том, что помещая файл во временное хранилище, информация о его имени и расширении теряется. Поэтому не забудьте где-нибудь сохранять корректное имя файла, или хотя бы его расширение, чтобы потом не мучаться с вопросом "А это вордовский документ или мп3?"

Метод "НачатьПолучениеФайлов" аналогичен методу "НачатьПомещениеФайлов". Просто один открывает диалог для выбора файла, другой же, наоборот, открывает диалог для сохранения файла.

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


Сначала файл помещается во временное хранилище и получается его адрес. Адрес передается на сервер. На сервере файл получается из временного хранилища и записывается на диск компьютера сервера:

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

Первый параметр процедуры из описания оповещения имеет тип ОписаниеПомещенногоФайла. Данный объект имеет 3 свойства:

В результате через параметр Адрес можно получить файл из временного хранилища. А через параметр СсылкаНаФайл.Файл можно получить всю необходимую информацию о файле.

По умолчанию файл будет удален из временного хранилища после окончания серверного вызова. Однако, если последним параметром указать уникальный идентификатор формы, то файл будет удален только после закрытия этой формы:

НачатьПомещениеФайлаНаСервер ( ПослеПомещения , , , , ПутьКФайлу , УникальныйИдентификатор ) ;

Если до помещения файла в хранилище известен адрес во временном хранилище, куда нужно поместить файл, то его можно указать четвертым параметром:

НачатьПомещениеФайлаНаСервер ( ПослеПомещения , , , Адрес , ПутьКФайлу ) ;

Проверка файла до помещения во временное хранилище

Если до помещения файла во временное хранилище нужно выполнить какие-то проверки, то это можно сделать в специальной процедуре, выполняемой до помещения файла во временное хранилище. Имя этой процедуры нужно указать в описании оповещения, которое указывается третьим параметром в методе НачатьПомещениеФайлаНаСервер:

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

У данной процедуры должно быть 3 параметра:

Например, можно проверить размер файла и если он слишком большой, то отказаться от помещения во временное хранилище:

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

Помещение файла во временное хранилище с диалогом выбора

Можно предоставить пользователю самому выбрать файл, который нужно поместить во временное хранилище. В этом случае сначала будет открыт диалог выбора файла, пользователь выберет файл и данный файл будет помещен во временное хранилище.

Для открытия диалога выбора файла нужно пятым параметром вместо пути к файлу указать объект ПараметрыДиалогаПомещенияФайлов. Данный объект схож с объектом ДиалогВыбораФайла, но имеет только 4 свойства:

  • Заголовок
  • МножественныйВыбор
  • Фильтр
  • ИндексФильтра
ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов ; ПослеПомещения = Новый ОписаниеОповещения ( "ПослеПомещения" , ЭтотОбъект ) ; НачатьПомещениеФайлаНаСервер ( ПослеПомещения , , , , ПараметрыДиалога ) ; Процедура ПослеПомещения ( ОписаниеПомещенногоФайла , ДопПараметры ) Экспорт

В этом случае сначала будет открыто диалоговое окно для выбора файла:


Выбранный файл будет помещен во временное хранилище.

Если пользователь нажмет на кнопку Отмена и откажется от выбора файла, то первый параметр в процедуре, вызываемой после помещения файла во временное хранилище будет равен Неопределено.

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

Можно вообще не указывать объект ПараметрыДиалогаПомещенияФайлов, в этом случае все равно будет открыт диалог выбора файла:

ПослеПомещения = Новый ОписаниеОповещения ( "ПослеПомещения" , ЭтотОбъект ) ;

Прогресс помещения файла во временное хранилище

Если файл большой, то он может долго загружаться во временное хранилище. В этом случае неплохо было бы показать пользователя прогресс помещения файла во временное хранилище. Для этого в метод НачатьПомещениеФайлаНаСервер вторым параметром можно передать описание оповещения с именем процедуры, которая будет периодически вызываться в процессе помещения файла во временное хранилище. У данной процедуры должно быть 4 параметра:

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

В результате в процессе помещения файла во временное хранилище будет показано окно состояния с прогрессом:


Количество вызовов процедуры ХодВыполнения не определено. Для маленького файла это может быть только 1 раз, для большого даже больше 100.

Если в этой процедуре присвоить параметру ОтказОтПомещенияФайла = Истина, то в процедуре, которая будет вызвана после помещения файла у первого параметра свойство ПомещениеФайлаОтменено тоже будет равно Истина и файл не будет помещен во временное хранилище:

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

Асинхронный метод через обещание

Есть аналогичный метод ПоместитьФайлНаСерверАсинх. Данный метод тоже является асинхронным, но вместо описания оповещения использует обещание.

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

Обещание = ПоместитьФайлНаСерверАсинх ( , , , ПутьКФайлу ) ; Расширение = ОписаниеПомещенногоФайла . СсылкаНаФайл . Расширение ;

Помещение во временное хранилище нескольких файлов

Параметры данного метода схожи с параметрами метода НачатьПомещениеФайлаНаСервер, только там где был один файл или объект, здесь будет массив файлов/объектов.

Вместо пути к файлу нужно передать массив объектов ОписаниеПередаваемогоФайла. Данный объект имеет 2 свойства:

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

В данном примере последним параметром был указан уникальный идентификатор формы. Если его не указать, то второй файл не будет записан на сервер. Дело в том, что в данном примере вызов сервера происходит дважды: сначала для первого файла, потом для второго. Если не указан уникальный идентификатор формы, то файл будет удален из временного хранилища после окончания серверного вызова, то есть после записи первого файла. А при втором вызове сервера, для записи второго файла, временное хранилище уже будет пустым.

Поэтому нужно или указывать уникальный идентификатор формы в методе НачатьПомещениеФайловНаСервер или записывать все файлы на сервер за один серверный вызов.

Процедура, которая вызывается до помещения файлов во временное хранилище ничем не отличается от метода НачатьПомещениеФайлаНаСервер. Только в данном случае первым параметром будет не объект СсылкаНаФайл, а массив объектов СсылкаНаФайл, по одному для каждого файла. Второй параметр отменяет помещение во временное хранилище не одного файла, а сразу всех файлов:


Для работы с текстовыми файлами в 1С предназначен объект ТекстовыйДокумент:

Для добавления строк в конец текстового документа используется метод ДобавитьСтроку. Параметром нужно передать добавляемую строку:

Для записи текстового документа в файл на диск нужно вызвать метод НачатьЗапись и вторым параметром указать путь к файлу:

Пример записи текстового файла с тремя строками:

В результате будет получен следующий файл:


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

ПослеЗаписи = Новый ОписаниеОповещения ( "ПослеЗаписи" , ЭтотОбъект ) ; Процедура ПослеЗаписи ( Результат , ДопПараметры ) Экспорт

Есть аналогичный асинхронный метод ЗаписатьАсинх, который использует асинхронность через обещания:

Для записи текстового файла на сервере используется синхронный метод Записать:

С помощью метода УстановитьТекст можно сразу установить весь текст:

Кодировка текстового файла

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

ТекстДок . НачатьЗапись ( ПослеЗаписи , ПутьКФайлу , "UTF-16LE" ) ; ТекстДок . НачатьЗапись ( ПослеЗаписи , ПутьКФайлу , "UTF-16BE" ) ; ТекстДок . НачатьЗапись ( ПослеЗаписи , ПутьКФайлу , "windows-1251" ) ;

Если нужно записать в кодировке UCS-2LE или UCS-2BE, то нужно указать UTF-16LE или UTF-16BE. Это почти что одно и то же.

Список всех возможных кодировок можно посмотреть в синтакс-помощнике.

Кодировку текста можно указать не только строкой, но и с помощью системного перечисления КодировкаТекста:

ТекстДок . НачатьЗапись ( ПослеЗаписи , ПутьКФайлу , КодировкаТекста . Системная ) ;

Возможные значения перечисления:

Чтение текстового файла

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

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

ПослеЧтения = Новый ОписаниеОповещения ( "ПослеЧтения" , ЭтотОбъект , ТекстДок ) ;

Кодировка текста определяется автоматически из файла. Если кодировку не получится определить, то будет использоваться кодировка UTF-8. При необходимости можно указать требуемую кодировку третьим параметром:

ТекстДок . НачатьЧтение ( ПослеЧтения , ПутьКФайлу , "UTF-8" ) ;

Есть аналогичный асинхронный метод ПрочитатьАсинх, который вместо описания оповещения использует обещание:

При чтении файла на сервере можно воспользоваться синхронным методом Прочитать:

С помощью метода КоличествоСтрок можно узнать количество строк текстового файла, а методом ПолучитьСтроку, вызываемом в цикле, можно прочитать файл построчно:

ПослеЧтения = Новый ОписаниеОповещения ( "ПослеЧтения" , ЭтотОбъект , ТекстДок ) ;

Работа со строками текстового документа

В результате будет получен такой текстовый файл:


Если первым параметром указать номер строки, которой еще не существует в текстовом документе, то строка будет просто вставлена в конец документа.


С помощью метода УдалитьСтроку можно удалить строку из текстового документа. Параметром нужно указать номер удаляемой строки:

Методом Очистить можно полностью очистить текстовый документ:

Интерактивное редактирование текстового файла

После чтения текстового файла можно открыть его для интерактивного редактирования. Для этого используется метод Показать:

ПослеЧтения = Новый ОписаниеОповещения ( "ПослеЧтения" , ЭтотОбъект , ТекстДок ) ;

В результате в 1С будет открыт редактор текстового документа:


Первым параметром можно переопределить заголовок окна, а вторым указать имя файла, под которым будет предложено сохранить текстовый файл после его редактирования:

//передаем тектовый документ и имя файла через доп. параметры ПослеЧтения = Новый ОписаниеОповещения ( "ПослеЧтения" , ЭтотОбъект , ДопПараметры ) ;

В результате после редактирования текстового документа будет предложено сохранить его:


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

Разделитель строк

При записи текстового документа средствами платформы 1С символ LF преобразуется в символы CR и LF. При чтении выполняется обратное преобразование CR и LF в LF.

При необходимости преобразования можно переопределить в методах НачатьЗапись и НачатьЧтение:

ТекстДок . НачатьЧтение ( ПослеЧтения , ПутьКФайлу , , Разделитель ) ;

То есть в методе НачатьЗапись указывается символ, в который будет выполнено преобразование символа LF. А в методе НачатьЧтение указывается символ, который нужно преобразовать в символ LF.

Можно указывать только следующие символы:

Если нужно использовать CR и LF, то параметр можно не указывать.

Последовательный доступ к файлу

Объект Текстовый документ при чтении загружает весь текстовый файл в память компьютера. Если файл большой, то памяти может не хватить.

Для решения данной проблемы можно использовать объекты последовательного доступа к текстовым файлам: ЗаписьТекста и ЧтениеТекста. Данные объекты загружают в память только определенный фрагмент текста, с которым в данный момент идет работа.

Читайте также: