1С 8.3 Файлы, каталоги - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

1С 8.3 Файлы, каталоги

Данные > Примеры кода 1С > 1С 8.3 Файлы, каталоги
Файлы и каталоги в 1С 8.3 используются для различных операций с данными: сохранение и восстановление, экспорт и импорт, архивация, обмен и др. Для реализации работы с файлами и каталогами, их параметрами и атрибутами, на встроенном языке программирования 1С 8.3 существуют различные предопределенные функции и модели.
Чтение и запись файлов в 1С 8.3:
&НаСервере
Процедура ЧтениеИЗаписьФайлов()

   
// Любое сериализуемое значение (массив, структура, таблица значений, строки...) можно сохранить в файл
   
НаборСимволов = Новый Массив;
   
НаборСимволов.Добавить(125);
   
НаборСимволов.Добавить("А");
   
НаборСимволов.Добавить("99");
   
НаборСимволов.Добавить("%");
   
ЗначениеВФайл("D:\Symbol.txt", НаборСимволов); // работает только на &НаСервере

    // Восстановление произвольных значений из файла
   
НаборСимволовИзФайла = ЗначениеИзФайла("D:\Symbol.txt");
   
Сообщить(НаборСимволовИзФайла[0]); // 125
   
Сообщить(НаборСимволовИзФайла[1]); // А
   
Сообщить(НаборСимволовИзФайла[2]); // 99
   
Сообщить(НаборСимволовИзФайла[3]); // %

    // Запись текстового файла (работает и на &НаСервере и на &НаКлиенте)
    // Параметры: Путь с именем файла, кодировка, разделитель строк (необяз.), перезаписывать файл (необяз.)
   
ТекстФайл = Новый ЗаписьТекста("D:\Prostokvashino.txt", КодировкаТекста.ANSI, Символы.ПС, Ложь);
   
ТекстФайл.ЗаписатьСтроку("Кот Матроскин");
   
ТекстФайл.ЗаписатьСтроку("Дядя Федор");
   
ТекстФайл.ЗаписатьСтроку("Шарик");
   
ТекстФайл.Закрыть();

   
// Чтение текстового файла (работает и на &НаСервере и на &НаКлиенте)
    // Параметры: Путь с именем файла, кодировка, разделитель строк (необяз.), монопольный режим (необяз.)
   
ТекстФайл = Новый ЧтениеТекста("D:\Prostokvashino.txt", КодировкаТекста.ANSI, Символы.ПС, ,Истина);
    Пока Истина Цикл
// По строкам файлам
       
СтрокаФайла = ТекстФайл.ПрочитатьСтроку();
        Если
СтрокаФайла = Неопределено Тогда
            Прервать;
        Иначе
           
Сообщить(СтрокаФайла);// Вывод строки на экран
       
КонецЕсли;
    КонецЦикла;

КонецПроцедуры
Операции над файлами в 1С 8.3:
&НаКлиенте
Процедура ОперацииНадФайлами(Команда)

   
// Создание переменных (имя и путь к файлу)
   
ПутьКФайлу_Test="D:\Test.txt";
   
ПутьКФайлу_Copy="D:\Copy.txt";

   
// Создание пустого файла
   
ТекстФайл = Новый ЗаписьТекста();
   
ТекстФайл.Закрыть();

   
// Проверка на существование файла
   
ТекстФайл = Новый Файл(ПутьКФайлу_Test);
    Если
ТекстФайл.Существует() Тогда
       
Сообщить(ПутьКФайлу_Test+" существует!");
    КонецЕсли;

   
// Копирование файла. Параметры: Какой файл копируем, Куда файл копируем
   
КопироватьФайл(ПутьКФайлу_Test, ПутьКФайлу_Copy);// Если файл существует, то перезапишет

    // Перемещение файла. Параметры: Какой файл копируем, Куда файл копируем
   
ПереместитьФайл(ПутьКФайлу_Test, ПутьКФайлу_Copy);// Если файл существует, то перезапишет

    // Поиск файлов в каталоге (функция возвращает массив значений)
    // Параметры: Каталог поиска, Маска поиска, Поиск и в подкаталогах
   
МассивФайлов = НайтиФайлы("D:\", "*.txt", Ложь);
    Для Каждого
ТекФайл Из МассивФайлов Цикл
       
Сообщить("Найден файл: " + ТекФайл.ПолноеИмя);
    КонецЦикла;

   
// Удаление файла
   
УдалитьФайлы(ПутьКФайлу_Test); // Если файл с параметром только для чтения, то будет ошибка

    // Удаление файлов в каталоге по маске
    // поиск в каталоге нерекурсивный
   
УдалитьФайлы("D:\","*.txt"); // Если маски нет, то удалятся все файлы и сам каталог

    // Получение имя временного файла
   
ПолучитьИмяВременногоФайла(); // Например, C:\Temp\H_kImX035.tmp
   
ПолучитьИмяВременногоФайла(".txt"); // Например, C:\Temp\H_kImX035.txt

КонецПроцедуры
Получение и изменение атрибутов файла в 1С 8.3:
&НаКлиенте
Процедура ПолучениеИИзменениеАтрибутовФайла(Команда)

   
ТекстФайл = Новый Файл("D:\Test.txt");

   
// Чтение атрибутов
   
ТекстФайл.ПолучитьВремяИзменения(); // время последнего изменения файла
   
ТекстФайл.ПолучитьТолькоЧтение();  // проверяем атрибут только чтение
   
ТекстФайл.ПолучитьНевидимость(); // проверяем атрибут hidden (скрытность, невидимость)
   
ТекстФайл.Размер(); // размер файла в байтах

    // Получение расширение файла из его пути
   
ТекстФайл.Расширение(); // .txt

    // Получение имени файла без расширения
   
ТекстФайл.ИмяБезРасширения(); // Test

    // Получение информации по пути файла - это файл или каталог
   
Если ТекстФайл.ЭтоКаталог() Тогда
       
// Это каталог
   
ИначеЕсли ТекстФайл.ЭтоФайл() Тогда
       
// Это файл
   
КонецЕсли;

   
// Изменение атрибутов
   
ТекстФайл.УстановитьВремяИзменения(ТекущаяДата()); // меняем время последнего изменения файла
   
ТекстФайл.УстановитьТолькоЧтение(Ложь); // меняем атрибут только чтение
   
ТекстФайл.УстановитьНевидимость(Ложь); // меняем атрибут невидимости

КонецПроцедуры
Операции над каталогами в 1С 8.3:
&НаКлиенте
Процедура ОперацииНадКаталогами(Команда)

   
//Создание каталога (он может уже существовать)
   
СоздатьКаталог("D:\Catalog");

   
//Создание подкаталогов
   
СоздатьКаталог("D:\Catalog\2020\1");

   
// Проверка существования каталога
   
Каталог = Новый Файл("D:\Catalog");
    Если
Каталог.Существует() Тогда
       
Сообщить("Каталог по пути D:\Catalog существует!");
    КонецЕсли;

   
// Удаление каталога (вместе с файлами и подкаталогами)
   
УдалитьФайлы("D:\Catalog"); // Можно добавить максу

    // Получение каталога временных файлов
   
КаталогВременныхФайлов(); // Например, C:\Windows\Temp

КонецПроцедуры
Операции с временным хранилищем в 1С 8.3:
&НаКлиенте
Процедура ОперацииСВременнымХранилищем(Команда)

   // Временное хранилище позволяет передавать данные,
   // которые иначе не передать (произвольного типа) между сервером и клиентом

   // Сохранение произвольного значения (списка значений) во временном хранилище
   СЗ = Новый СписокЗначений;
   СЗ.Добавить("Арбуз");
   СЗ.Добавить("Дыня");
   СЗ.Добавить("Яблоко");
   АдресВХранилище = ПоместитьВоВременноеХранилище(СЗ);

   // Чтение произвольного значения (списка значений) из временного хранилища
   СЗИзХранилища = ПолучитьИзВременногоХранилища(АдресВХранилище);
   Если СЗИзХранилища = Неопределено Тогда
       Сообщить("Значение по этому адресу из хранилища уже удалено!");
   Иначе
       Сообщить(СЗИзХранилища[0]); // Арбуз
   КонецЕсли;

   // Перезапись уже сохраненного значения (массив) во временном хранилище
   НаборСимволов = Новый Массив;
   НаборСимволов.Добавить(125);
   НаборСимволов.Добавить("А");
   НаборСимволов.Добавить("99");
   НаборСимволов.Добавить("%");

   // Время хранения зависит от параметра "АдресВХранилище" функции ПоместитьВоВременноеХранилище
   ПоместитьВоВременноеХранилище(НаборСимволов, АдресВХранилище);

   // Если адрес - уникальный идентификатор формы или существующий адрес в хранилище:
   // Значение будет удалено после закрытия формы
   ПоместитьВоВременноеХранилище(НаборСимволов, ЭтаФорма.УникальныйИдентификатор);

   // Если адрес - уникальный идентификатор, не являющийся уникальным идентификатором формы %
   // Значение будет удалено после завершения сеанса пользвоателя
   ПоместитьВоВременноеХранилище(НаборСимволов, Новый УникальныйИдентификатор);

   // Если адрес не указан:
   // Значение будет удалено после очередного запроса сервера
   ПоместитьВоВременноеХранилище(НаборСимволов);

   // Удаление значения из временного хранилища
   УдалитьИзВременногоХранилища(АдресВХранилище);

   // Проверка является ли строка адресом во временном хранилище
   Если ЭтоАдресВременногоХранилища(АдресВХранилище) Тогда
       // Это адрес во временном хранилище
   КонецЕсли;

   // Получить двоичные данные объекта: https://koder.by/poluchit_dvoichnye_dannye.php

КонецПроцедуры
Передача файла с клиента на сервер в 1С 8.3:
&НаКлиенте
Процедура ПередачаФайлаСКлиентаНаСервер(Команда)

   
ТекстФайл = Новый ЗаписьТекста("D:\Prostokvashino.txt");
   
ТекстФайл.ЗаписатьСтроку("Кот Матроскин");
   
ТекстФайл.ЗаписатьСтроку("Дядя Федор");
   
ТекстФайл.ЗаписатьСтроку("Шарик");
   
ТекстФайл.Закрыть();

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

   
// Параметр УникальныйИдентификаторФормы - если не указывать - то файл будет удален после очередного запроса сервера
    // если указать - то после удаления объекта формы
    // Параметр Интерактивно (Истина) - дает пользователю выбрать файл самому
   
НачатьПомещениеФайла(Завершено, , "D:\Prostokvashino.txt", Ложь, ЭтаФорма.УникальныйИдентификатор);

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

&НаКлиенте
Процедура ПослеПередачи(Результат, ХранимыйАдрес, ВыбранноеИмяФайла, ДопПараметры) Экспорт

    Если
Результат Тогда
       
// Сохранение полученного адреса в реквизите формы (строка) - адрес файла в хранилище на сервере
       
АдресФайлаВХранилище = ХранимыйАдрес;
       
Сообщить("Файл " + ВыбранноеИмяФайла + " передан на сервер и сохранён во временном хранилище. Адрес: " + ХранимыйАдрес);
    Иначе
       
Сообщить("Ошибка передачи файла на сервер!");
    КонецЕсли;

КонецПроцедуры
Чтение файла на сервере из временного хранилища в 1С 8.3:
&НаСервере
Процедура ЧтениеФайлаНаСервереИзВременногоХранилища()

   Если ФайлВХранилище = "" Тогда
       Сообщить("Сначала нужно передать файл с клиента на сервер!");
       Возврат;
   КонецЕсли;

   ДвоичныеДанные = ПолучитьИзВременногоХранилища(ФайлВХранилище);
   Если ДвоичныеДанные = Неопределено Тогда
       Сообщить("Файл уже был удалён из временного хранилища!");
       Возврат;
   КонецЕсли;

   ДвоичныеДанные.Записать("D:\to_test.txt");

   Текст = Новый ЧтениеТекста("D:\to_test.txt");
   Пока Истина Цикл
       Строка = Текст.ПрочитатьСтроку();
       Если Строка = Неопределено Тогда
           Прервать;
       Иначе
           Сообщить(Строка);
       КонецЕсли;
   КонецЦикла;

   // Получить двоичные данные объекта: https://koder.by/poluchit_dvoichnye_dannye.php

КонецПроцедуры
Передача файла с сервера на клиент в 1С 8.3:
&НаКлиенте
Процедура ПередатьФайлССервераНаКлиент(Команда)

    Если
ФайлВХранилище = "" Тогда // Реквизит формы (строка): адрес файла в хранилище на сервере
       
Сообщить("Сначала нужно сохранить файл на сервере.");
        Возврат;
    КонецЕсли;

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

   
МассивФайлов = Новый Массив;
   
МассивФайлов.Добавить(Новый ОписаниеПередаваемогоФайла("D:\from_test.txt", ФайлВХранилище));
   
НачатьПолучениеФайлов(Завершено, МассивФайлов,, Ложь);

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

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

    Для Каждого
ТекФайл Из Файлы Цикл
       
Сообщить(ТекФайл.Имя + " получен из " + ТекФайл.Хранение);
    КонецЦикла;

КонецПроцедуры
📰 Актуальные новости с тегом #Файлы, каталоги:
  • В версии 8.3.28 реализовано горизонтальное масштабирование хранилища двоичных данных и механизм переноса данных из хранилища двоичных данных в базу данных и обратно.
  • В версии 8.3.27 реализована возможность управления хранилищами двоичных данных через командную строку.
  • В версии 8.3.27 реализована поддержка лимитов для S3 хранилищ.
  • В версии 8.3.26 появилась возможность изменять расположение каталогов кластера серверов, чтобы разные данные можно было разместить в различных директориях.
  • В версии 8.3.26 реализована возможность получения размера страницы PDF. Назначение каталогов для хранения данных сервисов кластера
  • В версии 8.3.26 реализована настройка размещения данных в хранилищах двоичных данных.
  • В версии 8.3.25 появилась возможность "плоского" размещения файлов журнала в одной корневой папке без создания отдельных папок-подкаталогов. Новый формат можно будет включить через настройку конфигурационного файла logcfg.xml.
  • В версии 8.3.24 поддержана возможность подключения к внешним хранилищам двоичных данных по протоколу S3, реализована дедупликация двоичных данных.
  • В версии 8.3.23 реализовано управление табличными пространствами базы данных (возможность размещения части БД на самом быстром диске).
  • В версию 8.3.22 добавлена комплексная оптимизация передачи больших файлов между клиентским приложением и сервером, включая значительное ускорение загрузки/выгрузки и снятие лимита в 4ГБ на объем передаваемых данных.
  • В версию 8.3.22 добавлен новый механизм - хранилище двоичных данных, который предназначен для хранения больших двоичных в специализированном хранилище, а не в базе данных.
0
комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 25.04.2020
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Защищенное соединение ssl
visa
mastercard
Maestro
Яндекс деньги
Назад к содержимому