Операции над файлами в 1С 8.3
👉@DevLab1C
&НаКлиенте
Процедура ОперацииНадФайлами(Команда)
// Создание переменных (имя и путь к файлу)
ПутьКФайлу_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
КонецПроцедуры
👉@DevLab1C
🔥2👍1
Получение и изменение атрибутов файла в 1С 8.3
👉@DevLab1C
&НаКлиенте
Процедура ПолучениеИИзменениеАтрибутовФайла(Команда)
ТекстФайл = Новый Файл("D:\Test.txt");
// Чтение атрибутов
ТекстФайл.ПолучитьВремяИзменения(); // время последнего изменения файла
ТекстФайл.ПолучитьТолькоЧтение(); // проверяем атрибут только чтение
ТекстФайл.ПолучитьНевидимость(); // проверяем атрибут hidden (скрытность, невидимость)
ТекстФайл.Размер(); // размер файла в байтах
// Получение расширение файла из его пути
ТекстФайл.Расширение(); // .txt
// Получение имени файла без расширения
ТекстФайл.ИмяБезРасширения(); // Test
// Получение информации по пути файла - это файл или каталог
Если ТекстФайл.ЭтоКаталог() Тогда
// Это каталог
ИначеЕсли ТекстФайл.ЭтоФайл() Тогда
// Это файл
КонецЕсли;
// Изменение атрибутов
ТекстФайл.УстановитьВремяИзменения(ТекущаяДата()); // меняем время последнего изменения файла
ТекстФайл.УстановитьТолькоЧтение(Ложь); // меняем атрибут только чтение
ТекстФайл.УстановитьНевидимость(Ложь); // меняем атрибут невидимости
КонецПроцедуры
👉@DevLab1C
🔥2👍1
Операции над каталогами в 1С 8.3
👉@DevLab1C
&НаКлиенте
Процедура ОперацииНадКаталогами(Команда)
//Создание каталога (он может уже существовать)
СоздатьКаталог("D:\Catalog");
//Создание подкаталогов
СоздатьКаталог("D:\Catalog\2020\1");
// Проверка существования каталога
Каталог = Новый Файл("D:\Catalog");
Если Каталог.Существует() Тогда
Сообщить("Каталог по пути D:\Catalog существует!");
КонецЕсли;
// Удаление каталога (вместе с файлами и подкаталогами)
УдалитьФайлы("D:\Catalog"); // Можно добавить максу
// Получение каталога временных файлов
КаталогВременныхФайлов(); // Например, C:\Windows\Temp
КонецПроцедуры
👉@DevLab1C
👍3🔥2
Получить двоичные данные двумя способами в 1С 8.3
👉@DevLab1C
Функция ПолучитьДвоичныеДанныеОбъекта()
// Получение двоичных данных через временный файл (и помещение их во временное хранилище)
ВременныйФайл = ПолучитьИмяВременногоФайла("SCAN");
ТабличныйДокумент.Записать(ВременныйФайл, ТипФайлаТабличногоДокумента.PDF);
АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ВременныйФайл));
// Получение двоичных данных через временный файл (и помещение их во временное хранилище)
Поток = Новый ПотокВПамяти;
ТабличныйДокумент.Записать(Поток, ТипФайлаТабличногоДокумента.PDF);
АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(Поток.ЗакрытьИПолучитьДвоичныеДанные());
Возврат АдресВоВременномХранилище;
КонецФункции
👉@DevLab1C
🔥2👍1
Передача файла с клиента на сервер в 1С 8.3
👉@DevLab1C
&НаКлиенте
Процедура ПередачаФайлаСКлиентаНаСервер(Команда)
ТекстФайл = Новый ЗаписьТекста("D:\Prostokvashino.txt");
ТекстФайл.ЗаписатьСтроку("Кот Матроскин");
ТекстФайл.ЗаписатьСтроку("Дядя Федор");
ТекстФайл.ЗаписатьСтроку("Шарик");
ТекстФайл.Закрыть();
Завершено = Новый ОписаниеОповещения("ПослеПередачи", ЭтотОбъект);
// Параметр УникальныйИдентификаторФормы - если не указывать - то файл будет удален после очередного запроса сервера
// если указать - то после удаления объекта формы
// Параметр Интерактивно (Истина) - дает пользователю выбрать файл самому
НачатьПомещениеФайла(Завершено, , "D:\Prostokvashino.txt", Ложь, ЭтаФорма.УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ПослеПередачи(Результат, ХранимыйАдрес, ВыбранноеИмяФайла, ДопПараметры) Экспорт
Если Результат Тогда
// Сохранение полученного адреса в реквизите формы (строка) - адрес файла в хранилище на сервере
АдресФайлаВХранилище = ХранимыйАдрес;
Сообщить("Файл " + ВыбранноеИмяФайла + " передан на сервер и сохранён во временном хранилище. Адрес: " + ХранимыйАдрес);
Иначе
Сообщить("Ошибка передачи файла на сервер!");
КонецЕсли;
КонецПроцедуры
👉@DevLab1C
👍2🔥2
Чтение файла на сервере из временного хранилища в 1С 8.3
👉@DevLab1C
&НаСервере
Процедура ЧтениеФайлаНаСервереИзВременногоХранилища()
Если ФайлВХранилище = "" Тогда
Сообщить("Сначала нужно передать файл с клиента на сервер!");
Возврат;
КонецЕсли;
ДвоичныеДанные = ПолучитьИзВременногоХранилища(ФайлВХранилище);
Если ДвоичныеДанные = Неопределено Тогда
Сообщить("Файл уже был удалён из временного хранилища!");
Возврат;
КонецЕсли;
ДвоичныеДанные.Записать("D:\to_test.txt");
Текст = Новый ЧтениеТекста("D:\to_test.txt");
Пока Истина Цикл
Строка = Текст.ПрочитатьСтроку();
Если Строка = Неопределено Тогда
Прервать;
Иначе
Сообщить(Строка);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
👉@DevLab1C
👍2🔥2
Передача файла с сервера на клиент в 1С 8.3
👉@DevLab1C
&НаКлиенте
Процедура ПередатьФайлССервераНаКлиент(Команда)
Если ФайлВХранилище = "" Тогда // Реквизит формы (строка): адрес файла в хранилище на сервере
Сообщить("Сначала нужно сохранить файл на сервере.");
Возврат;
КонецЕсли;
Завершено = Новый ОписаниеОповещения("ПослеПолучения", ЭтотОбъект);
МассивФайлов = Новый Массив;
МассивФайлов.Добавить(Новый ОписаниеПередаваемогоФайла("D:\from_test.txt", ФайлВХранилище));
НачатьПолучениеФайлов(Завершено, МассивФайлов,, Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ПослеПолучения(Файлы, ДополнительныеПараметры) Экспорт
Для Каждого ТекФайл Из Файлы Цикл
Сообщить(ТекФайл.Имя + " получен из " + ТекФайл.Хранение);
КонецЦикла;
КонецПроцедуры
👉@DevLab1C
❤2👍1🔥1
Узнать место на диске в 1С 8.3
👉@DevLab1C
Функция ПолучитьМестоНаДиске(Диск) Экспорт // Диск - строка - "d:\"
СистемнаяИнфо = Новый СистемнаяИнформация;
ТипПлатформы = СистемнаяИнфо.ТипПлатформы;
Если ТипПлатформы = ТипПлатформы.Windows_x86
Или ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда
СкриптФСО = Новый COMОбъект("Scripting.FileSystemObject");
МестоНаДиске = Окр(Число(СкриптФСО.getDrive(СкриптФСО.GetDriveName(Диск)).freeSpace())/1024/1024, 2);
Возврат МестоНаДиске;
Иначе
//Сообщить("Данная функция поддерживается только в ОС Windows");
Возврат Неопределено;
КонецЕсли;
КонецФункции
👉@DevLab1C
🔥2👍1
Получить каталог информационной базы данных в 1С 8.3
👉@DevLab1C
&НаКлиенте
Функция ПолучитьКаталогИБ()// аналог предопределенной КаталогИБ() в 1C 7.7
СтрокаИБ = СтрокаСоединенияИнформационнойБазы(); //File="D:\Base".
//Возвращает Строка соединения информационной базы, которую, например,
//можно использовать для запуска 1С:Предприятия средствами встроенного языка
ПутьИБ = Найти(Врег(СтрокаИБ), "FILE=");
Если ПутьИБ = 1 тогда // Файловая информационная база 1С:Предприятия 8 (.1CD)
Возврат Сред(СтрокаИБ,7,СтрДлина(СтрокаИБ)-8)+"\"; // Получим D:\Base
Иначе// Серверная - Используем КаталогВременныхФайлов()
ПозицияПоиска = Найти(Врег(СтрокаИБ), "SRVR=");
Если ПозицияПоиска <> 1 Тогда
Возврат Неопределено;
КонецЕсли;
ПозицияТЧК_ЗПТ = Найти(СтрокаИБ, ";");
ПозСтарт = 6 + 1;
ПозФиниш = ПозицияТЧК_ЗПТ - 2; //
ИмяСервера = Сред(СтрокаИБ, ПозСтарт, ПозФиниш - ПозСтарт + 1);
СтрокаИБ = Сред(СтрокаИБ, ПозицияТЧК_ЗПТ + 1);
ПутьИБ = Найти(Врег(СтрокаИБ), "REF=");// позиция имени сервера
Если ПутьИБ <> 1 Тогда
Возврат Неопределено;
КонецЕсли;
ПозСтарт = 6;
ПозицияТЧК_ЗПТ = Найти(СтрокаИБ, ";");
ПозФиниш = ПозицияТЧК_ЗПТ - 2;
ИмяИБНаСервере = Сред(СтрокаИБ, ПозСтарт, ПозФиниш - ПозСтарт + 1);
ПутьКБД = ИмяСервера + "/ " + ИмяИБНаСервере; //ServerName: Server1C / information_base_name: Buh3
Сообщить("ИБ в серверном режиме: "+ПутьКБД);
Сообщить("Серверная база данных! Используем каталог временных файлов ("+СокрЛП(КаталогВременныхФайлов())+") !");
Возврат КаталогВременныхФайлов();
КонецЕсли;
КонецФункции
👉@DevLab1C
🔥2👍1
Узнать размер папки в 1С 8.3
👉@DevLab1C
&НаКлиентеНаСервереБезКонтекста
Функция ПолучитьРазмерКаталога(ПутьККаталогу)
СистемнаяИнфо = Новый СистемнаяИнформация;
ТипПлатформы = СистемнаяИнфо.ТипПлатформы;
Если ТипПлатформы = ТипПлатформы.Windows_x86
Или ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда
СкриптФСО = Новый COMОбъект("Scripting.FileSystemObject");
СвойстваКаталога = СкриптФСО.GetFolder(ПутьККаталогу);
Возврат СвойстваКаталога.Size;
Иначе
//Сообщить("Данная функция поддерживается только в ОС Windows");
Возврат Неопределено;
КонецЕсли;
КонецФункции
👉@DevLab1C
👍4
Копирование всех файлов из одного каталога в другой в 1С 8.3
👉@DevLab1C
Процедура СкопироватьФайлы(Знач КаталогИсточник, Знач КаталогПриемник)
Попытка
//Проверим и поправим окончания пути каталогов
Если Прав(КаталогИсточник, 1) <> "\" Тогда
КаталогИсточник = КаталогИсточник + "\";
КонецЕсли;
Если Прав(КаталогПриемник, 1) <> "\" Тогда
КаталогПриемник = КаталогПриемник + "\";
КонецЕсли;
//Создадим каталог приемник
СоздатьКаталог(КаталогПриемник);
МассивФайлов = НайтиФайлы(КаталогИсточник, "*.*", Истина);
Для Каждого Файл Из МассивФайлов Цикл
ПолноеИмяИсточник = Файл.ПолноеИмя;
ПолноеИмяПриемник = КаталогПриемник + СтрЗаменить(Файл.ПолноеИмя, КаталогИсточник, "");
Если ПустаяСтрока(Файл.Расширение) Тогда
СоздатьКаталог(ПолноеИмяПриемник);
Иначе
КопироватьФайл(ПолноеИмяИсточник, ПолноеИмяПриемник);
КонецЕсли;
КонецЦикла;
Исключение
ИнфоОбОшибке = "Ошибка при копировании: " + ОписаниеОшибки()
+ " (из каталога: " + КаталогИсточник
+ "; в каталог: " + КаталогПриемник + ")";
Если ВыдаватьСообщения Тогда
Сообщить(ИнфоОбОшибке);
Иначе
Предупреждение(ИнфоОбОшибке);
КонецЕсли;
КонецПопытки;
КонецПроцедуры
👉@DevLab1C
🔥2❤1👍1
Асинхронное копирование всех файлов из одного каталога в другой в 1С 8.3
👉@DevLab1C
Асинх Процедура СкопироватьФайлыАсинх(Знач КаталогИсточник, Знач КаталогПриемник)
КаталогПриемник = Новый Файл(КаталогПриемник);
Если Не Ждать КаталогПриемник.СуществуетАсинх() Тогда
Ждать СоздатьКаталогАсинх(КаталогПриемник.ПолноеИмя);
КонецЕсли;
МассивФайлов = Ждать НайтиФайлыАсинх(КаталогИсточник, "*.*", Ложь);
Для Каждого Файл Из МассивФайлов Цикл
ПолноеИмяПриемника = КаталогПриемник.ПолноеИмя + "\" + Файл.Имя;
Если Файл.ЭтоКаталог() Тогда
СкопироватьФайлы(Файл.ПолноеИмя, ПолноеИмяПриемника);
Иначе
Ждать КопироватьФайлАсинх(Файл.ПолноеИмя, ПолноеИмяПриемника);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
👉@DevLab1C
🔥3👍1
Пример копирования (перемещения) файлов из одного каталога в другой в 1С 8.3
👉@DevLab1C
Процедура СкопироватьПереместитьКаталог(ИмяФайлаИсточник, ИмяФайлаПриемник, Переместить = Ложь)
Если Прав(ИмяФайлаИсточник, 1) <> "\" Тогда
ИмяФайлаИсточник = ИмяФайлаИсточник + "\";
КонецЕсли;
Файл = Новый Файл(ИмяФайлаПриемник);
ИмяФайлаИсточник = ИмяФайлаИсточник + Файл.Имя;
СоздатьКаталог(ИмяФайлаИсточник);
Если Прав(ИмяФайлаИсточник, 1) <> "\" Тогда
ИмяФайлаИсточник = ИмяФайлаИсточник + "\";
КонецЕсли;
Для Каждого Файлы Из НайтиФайлы(ИмяФайлаПриемник, "*.*", Истина) Цикл
Если Файлы.ЭтоКаталог() Тогда
СоздатьКаталог(СтрЗаменить(Файлы.ПолноеИмя, ИмяФайлаПриемник, ИмяФайлаИсточник));
Продолжить;
Иначе
КаталогПереносимогоФайла = Новый Файл(СтрЗаменить(Файлы.Путь, ИмяФайлаПриемник, ИмяФайлаИсточник));
Если НЕ КаталогПереносимогоФайла.Существует() Тогда
СоздатьКаталог(КаталогПереносимогоФайла.ПолноеИмя);
КонецЕсли;
Если Переместить Тогда
ПереместитьФайл(Файлы.ПолноеИмя, СтрЗаменить(Файлы.ПолноеИмя, ИмяФайлаПриемник, ИмяФайлаИсточник));
Иначе
КопироватьФайл(Файлы.ПолноеИмя, СтрЗаменить(Файлы.ПолноеИмя, ИмяФайлаПриемник, ИмяФайлаИсточник));
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если Переместить Тогда
УдалитьФайлы(ИмяФайлаПриемник);
КонецЕсли;
КонецПроцедуры
👉@DevLab1C
🔥2👍1
Видео для подготовки к Аттестации 1С:Специалист-Консультант по производству и ремонтам в 1С:ERP 2.5
Ключевые изменения в 1С:ERP 2.5.7 по производственному учету – за 15 минут
За что получают двойки на Аттестации по производству и ремонтам в 1C:ERP 2.5?
Как правильно реагировать на ошибки системы – на примере Аттестации Специалист-консультант по 1С:ERP
Ремонт оборудования заказчика в 1С:ERP 2.5 – схема учета для Аттестации и проектов за 20 минут
Объекты возникновения затрат (ОВЗ) в 1С:ERP 2.5.7 – разбираем новый функционал на практике
источник
👉@DevLab1C
Ключевые изменения в 1С:ERP 2.5.7 по производственному учету – за 15 минут
За что получают двойки на Аттестации по производству и ремонтам в 1C:ERP 2.5?
Как правильно реагировать на ошибки системы – на примере Аттестации Специалист-консультант по 1С:ERP
Ремонт оборудования заказчика в 1С:ERP 2.5 – схема учета для Аттестации и проектов за 20 минут
Объекты возникновения затрат (ОВЗ) в 1С:ERP 2.5.7 – разбираем новый функционал на практике
источник
👉@DevLab1C
👍3🔥2
Ускорение и оптимизация 1С
5 примеров ошибок в коде, которые приводят к замедлению работы 1С
Почему документ с одной строкой проводится 7,5 секунд
Как исправить ошибку при запуске после внедрения подсистемы Оценка производительности из БСП
Как ускорить процесс реструктуризации и обновления 1С в разы
3 принципа работы блокировок, о которых стоит знать каждому программисту 1С
Как «поймать» медленные запросы
источник
👉@DevLab1C
5 примеров ошибок в коде, которые приводят к замедлению работы 1С
Почему документ с одной строкой проводится 7,5 секунд
Как исправить ошибку при запуске после внедрения подсистемы Оценка производительности из БСП
Как ускорить процесс реструктуризации и обновления 1С в разы
3 принципа работы блокировок, о которых стоит знать каждому программисту 1С
Как «поймать» медленные запросы
источник
👉@DevLab1C
🔥4👍1