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");
   
НаборСимволов.Добавить("%");

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

КонецПроцедуры
Поиск кода
0
комментарии
____________________
Copyright by 1Cnik.by©, «Программист 1С в г.Минске», 25.04.2020
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Назад к содержимому