Получает значение разделителя пути, используемого в операционной системе, в которой работает клиентское приложение.
Синтаксис
ПолучитьРазделительПутиКлиента()Полное описание, параметры и ограничения
Глобальный контекст.ПолучитьРазделительПутиКлиента (Global context.GetClientPathSeparator)
Глобальный контекст (Global context)
ПолучитьРазделительПутиКлиента (GetClientPathSeparator)
Доступен, начиная с версии 8.3.3.
Синтаксис:
ПолучитьРазделительПутиКлиента()
Возвращаемое значение:
Тип: Строка.
Описание:
Получает значение разделителя пути, используемого в операционной системе, в которой работает клиентское приложение.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.3.3.
Методическая информация
Практические примеры
Спланировать собственный отчёт в стандартном каталоге документов
Получаем каталог документов, настроенный в текущей системе, а не строим C:\Users по имени пользователя. Проверяем будущий собственный путь и сумму отчёта без записи.
Где и как запускать
Модуль новой управляемой формы учебной внешней обработки. Код содержит готовые процедуры с директивами; вставляйте на уровне модуля, не внутрь другого обработчика. Каждую задачу запускайте в отдельной копии формы.
Подготовка
В отдельной учебной базе 8.5.1.1343 создайте внешнюю обработку УчебныйПланФайла с пустой управляемой основной формой. Для этого урока используйте тонкий клиент Windows.
В свойствах формы → События назначьте ПриСозданииНаСервере. Вставьте весь код на уровне модуля формы, включая Перем Занято и асинхронный обработчик команды.
Не создавайте кнопку вручную: она добавляется серверным обработчиком. Каждый урок запускайте в отдельной копии формы, сохранённой в своей EPF.
Кнопка получает настоящий каталог клиентского компьютера и составляет план собственного текстового отчёта о трёх книгах по 250. Она не записывает, не открывает и не удаляет этот файл.
Объект Файл описывает путь, но его создание в коде не создаёт файл на диске. Проверки существования и типа каталога используют асинхронные методы с Ждать.
РабочийКаталогДанныхПользователяАсинх может сам создать отсутствующий пользовательский каталог этой базы. Для соответствующего урока сначала показывается вопрос с Нет по умолчанию.
Веб-клиенту для этих методов нужно предварительно подключённое расширение работы с файлами; данный урок не устанавливает его и не обещает работу в браузере без расширения.
Запуск в 1С не проверен. Пути зависят от текущего клиента и пользователя; не копируйте чужой абсолютный путь и не публикуйте личные пути из сообщений.
Перем Занято;
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КомандаДействия = ЭтаФорма.Команды.Добавить("УчебноеДействие");
КомандаДействия.Действие = "УчебноеДействие";
КомандаДействия.Заголовок = "Составить собственный план файла без записи";
КомандаДействия.Подсказка = "Действие только над данными учебной формы";
КомандаДействия.ИзменяетСохраняемыеДанные = Ложь;
Кнопка = Элементы.Добавить("КнопкаУчебноеДействие", Тип("КнопкаФормы"));
Кнопка.ИмяКоманды = КомандаДействия.Имя;
Кнопка.Заголовок = КомандаДействия.Заголовок;
КонецПроцедуры
&НаКлиенте
Асинх Процедура УчебноеДействие(Команда)
Если Занято = Истина Тогда
Возврат;
КонецЕсли;
Занято = Истина;
Элементы.КнопкаУчебноеДействие.Доступность = Ложь;
Попытка
ИмяКаталога = Ждать КаталогДокументовАсинх();
Если ТипЗнч(ИмяКаталога) <> Тип("Строка") Тогда
ВызватьИсключение "Каталог должен быть строкой, а не объектом Обещание";
КонецЕсли;
Если ПустаяСтрока(ИмяКаталога) Тогда
ВызватьИсключение "Клиент не вернул каталог для учебного плана";
КонецЕсли;
Каталог = Новый Файл(ИмяКаталога);
СуществуетКаталог = Ждать Каталог.СуществуетАсинх();
Если Не СуществуетКаталог Тогда
ВызватьИсключение "Полученный каталог отсутствует: вручную создавать его этот урок не будет";
КонецЕсли;
ЭтоКаталог = Ждать Каталог.ЭтоКаталогАсинх();
Если Не ЭтоКаталог Тогда
ВызватьИсключение "Полученный путь не соответствует каталогу";
КонецЕсли;
Разделитель = ПолучитьРазделительПутиКлиента();
Если Разделитель <> "\" И Разделитель <> "/" Тогда
ВызватьИсключение "Неожиданный разделитель клиентского пути";
КонецЕсли;
Если Прав(ИмяКаталога, 1) <> Разделитель Тогда
ИмяКаталога = ИмяКаталога + Разделитель;
КонецЕсли;
СобственноеИмя = "guide-owned-" + Строка(Новый УникальныйИдентификатор) + ".txt";
ПолноеИмя = ИмяКаталога + СобственноеИмя;
ПланФайла = Новый Файл(ПолноеИмя);
ИмяЗанято = Ждать ПланФайла.СуществуетАсинх();
Если ИмяЗанято Тогда
ВызватьИсключение "Имя уже занято: не открываем и не перезаписываем чужой файл";
КонецЕсли;
Количество = 3;
Цена = 250;
Сумма = Количество * Цена;
ТекстОтчета = СтрШаблон("Учебные книги: %1 шт. по %2; сумма %3", Количество, Цена, Сумма);
Сообщить(Сумма = 750);
Сообщить(ПланФайла.Имя = СобственноеИмя);
Сообщить(ПланФайла.Расширение = ".txt");
Сообщить("Планируемый собственный путь, файл не создан: " + ПланФайла.ПолноеИмя);
Сообщить(ТекстОтчета);
Сообщить("Проверка свободного имени не резервирует его. Перед будущей записью требуется безопасное создание нового файла");
Исключение
Занято = Ложь;
Элементы.КнопкаУчебноеДействие.Доступность = Истина;
ВызватьИсключение;
КонецПопытки;
Занято = Ложь;
Элементы.КнопкаУчебноеДействие.Доступность = Истина;
КонецПроцедуры
Разбор по шагам
Запускаем асинхронную команду собственного учебного модуля. Кнопка блокируется только на время получения и проверки путей.
Функция возвращает стандартный каталог документов клиента. Он может быть перенаправлен системой и не обязан называться Documents.
Проверяем непустую строку, существование и вид каталога; существующие пользовательские файлы не перечисляются и не читаются.
К возвращённому каталогу добавляем собственное UUID-имя с расширением txt, учитывая присутствующий конечный разделитель.
При занятости имени прекращаем проход. Иначе считаем собственные 750 и показываем содержимое будущего отчёта, не создавая его.
Как проверить результат
Ожидаются три Истина, сумма 750 и планируемый собственный путь внутри стандартного каталога документов клиента.
Сравните начало пути со стандартным каталогом документов вашей Windows. Никакой гарантии C:\Users или фиксированной папки на всех машинах нет.
Ожидаемый результат
Каталог документов используется для конкретного собственного плана, а не как жёстко заданный путь чужого компьютера.
На что обратить внимание
Каталог может быть перенаправлен на сеть или синхронизируемое хранилище. Получение пути не доказывает доступность записи.
Наличие каталога не означает достаточные права для создания файла. Этот урок их не проверяет записью.
Расширение работы с файлами в веб-клиенте — отдельное требование, а не автоматически установленная часть примера.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Получить временный каталог асинхронно и спланировать свой отчёт
Ждать получает строку каталога текущего клиента. Проверяем каталог и свободное собственное имя, рассчитываем отчёт на 750, но не записываем файл.
Где и как запускать
Модуль новой управляемой формы учебной внешней обработки. Код содержит готовые процедуры с директивами; вставляйте на уровне модуля, не внутрь другого обработчика. Каждую задачу запускайте в отдельной копии формы.
Подготовка
В отдельной учебной базе 8.5.1.1343 создайте внешнюю обработку УчебныйПланФайла с пустой управляемой основной формой. Для этого урока используйте тонкий клиент Windows.
В свойствах формы → События назначьте ПриСозданииНаСервере. Вставьте весь код на уровне модуля формы, включая Перем Занято и асинхронный обработчик команды.
Не создавайте кнопку вручную: она добавляется серверным обработчиком. Каждый урок запускайте в отдельной копии формы, сохранённой в своей EPF.
Кнопка получает настоящий каталог клиентского компьютера и составляет план собственного текстового отчёта о трёх книгах по 250. Она не записывает, не открывает и не удаляет этот файл.
Объект Файл описывает путь, но его создание в коде не создаёт файл на диске. Проверки существования и типа каталога используют асинхронные методы с Ждать.
РабочийКаталогДанныхПользователяАсинх может сам создать отсутствующий пользовательский каталог этой базы. Для соответствующего урока сначала показывается вопрос с Нет по умолчанию.
Веб-клиенту для этих методов нужно предварительно подключённое расширение работы с файлами; данный урок не устанавливает его и не обещает работу в браузере без расширения.
Запуск в 1С не проверен. Пути зависят от текущего клиента и пользователя; не копируйте чужой абсолютный путь и не публикуйте личные пути из сообщений.
Перем Занято;
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КомандаДействия = ЭтаФорма.Команды.Добавить("УчебноеДействие");
КомандаДействия.Действие = "УчебноеДействие";
КомандаДействия.Заголовок = "Составить собственный план файла без записи";
КомандаДействия.Подсказка = "Действие только над данными учебной формы";
КомандаДействия.ИзменяетСохраняемыеДанные = Ложь;
Кнопка = Элементы.Добавить("КнопкаУчебноеДействие", Тип("КнопкаФормы"));
Кнопка.ИмяКоманды = КомандаДействия.Имя;
Кнопка.Заголовок = КомандаДействия.Заголовок;
КонецПроцедуры
&НаКлиенте
Асинх Процедура УчебноеДействие(Команда)
Если Занято = Истина Тогда
Возврат;
КонецЕсли;
Занято = Истина;
Элементы.КнопкаУчебноеДействие.Доступность = Ложь;
Попытка
ИмяКаталога = Ждать КаталогВременныхФайловАсинх();
Если ТипЗнч(ИмяКаталога) <> Тип("Строка") Тогда
ВызватьИсключение "Каталог должен быть строкой, а не объектом Обещание";
КонецЕсли;
Если ПустаяСтрока(ИмяКаталога) Тогда
ВызватьИсключение "Клиент не вернул каталог для учебного плана";
КонецЕсли;
Каталог = Новый Файл(ИмяКаталога);
СуществуетКаталог = Ждать Каталог.СуществуетАсинх();
Если Не СуществуетКаталог Тогда
ВызватьИсключение "Полученный каталог отсутствует: вручную создавать его этот урок не будет";
КонецЕсли;
ЭтоКаталог = Ждать Каталог.ЭтоКаталогАсинх();
Если Не ЭтоКаталог Тогда
ВызватьИсключение "Полученный путь не соответствует каталогу";
КонецЕсли;
Разделитель = ПолучитьРазделительПутиКлиента();
Если Разделитель <> "\" И Разделитель <> "/" Тогда
ВызватьИсключение "Неожиданный разделитель клиентского пути";
КонецЕсли;
Если Прав(ИмяКаталога, 1) <> Разделитель Тогда
ИмяКаталога = ИмяКаталога + Разделитель;
КонецЕсли;
СобственноеИмя = "guide-owned-" + Строка(Новый УникальныйИдентификатор) + ".txt";
ПолноеИмя = ИмяКаталога + СобственноеИмя;
ПланФайла = Новый Файл(ПолноеИмя);
ИмяЗанято = Ждать ПланФайла.СуществуетАсинх();
Если ИмяЗанято Тогда
ВызватьИсключение "Имя уже занято: не открываем и не перезаписываем чужой файл";
КонецЕсли;
Количество = 3;
Цена = 250;
Сумма = Количество * Цена;
ТекстОтчета = СтрШаблон("Учебные книги: %1 шт. по %2; сумма %3", Количество, Цена, Сумма);
Сообщить(Сумма = 750);
Сообщить(ПланФайла.Имя = СобственноеИмя);
Сообщить(ПланФайла.Расширение = ".txt");
Сообщить("Планируемый собственный путь, файл не создан: " + ПланФайла.ПолноеИмя);
Сообщить(ТекстОтчета);
Сообщить("Проверка свободного имени не резервирует его. Перед будущей записью требуется безопасное создание нового файла");
Исключение
Занято = Ложь;
Элементы.КнопкаУчебноеДействие.Доступность = Истина;
ВызватьИсключение;
КонецПопытки;
Занято = Ложь;
Элементы.КнопкаУчебноеДействие.Доступность = Истина;
КонецПроцедуры
Разбор по шагам
Команда объявлена Асинх Процедура. Занято и отключённая кнопка не дают запустить второй проход во время ожидания.
КаталогВременныхФайловАсинх возвращает Обещание; только после Ждать проверяем строку и отсутствие пустого результата.
Два асинхронных метода Файл отдельно проверяют существование и то, что путь соответствует каталогу.
Разделитель берём для клиентского компьютера. Уже имеющийся конечный разделитель не дублируем; собственное имя содержит новый UUID.
После проверки незанятости имени вычисляем 3 × 250 = 750 и выводим план. На исключении и обычном завершении кнопка снова доступна.
Как проверить результат
Ожидаются три Истина, текст отчёта с количеством 3, ценой 250 и суммой 750. Путь соответствует временному каталогу фактического клиента.
Нажмите снова: UUID и имя отличаются. Файл не появляется; проверка свободного имени не означает резервирование.
Ожидаемый результат
Готов настоящий план собственного временного отчёта с проверкой каталога, формулы и будущего имени без записи.
На что обратить внимание
Не присваивайте переменной результат без Ждать: тогда в ней Обещание, а не путь.
Клиентский временный каталог не является серверным; передача строки на сервер не даёт серверу доступ к этому пути.
Временный каталог не подходит для бессрочного хранения: этот урок намеренно не создаёт постоянный документ.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.