Тип: Строка.
Полное имя создаваемого каталога.
Допускается использование схемы ftp для адресации файлов. При использовании этой схемы в адресах необходимо указывать прямые слеши '/', а не обратные '\'.
Описание:
Существование каталога <ИмяКаталога> не приводит к ошибке.
Для работы метода на веб-клиенте необходимо предварительно подключить расширение работы с файлами.
В режиме совместимости конфигурации Версия8_3_10 и ниже при использовании запрещенных символов в имени каталога, каталог создан не будет. При этом исключение не генерируется.
Пример:
Плюс в типовых конфигурациях для каждого пользователя можно переопределить каталог сохранения данных. В справочнике пользователя есть реквизит настроек каталог для сохранения файлов.
Думаю это то что вам нужно!
Или же на клиенте вы можете определить операционную систему и имя пользователя.
Затем скриптами можете сами вычислить путь по умолчанию или ими же получить каталог сохранения настроек пользователя, но это конечно для винды. Для линукса возможно что-то есть похожее!
Странный вопрос "Нужно получить каталог текущего пользователя из конфигуратора" помню такое было было в 7.7 при настройке пользователя, но в 8-ке такого не встречал. Или вы имеете ввиду тот католог, где хранятся фото для номенклатуры и другие докукменты.. Намного проще админить этот католог с помощью средств Windows и системного администратора.
Кстати, актуальная тема. WSScript.Shell возвращает какую-то хрень, а не каталог пользователя, который открывается при указании пустого каталога в диалоге выбора файла. Вот как его узнать? Откуда 1С знает, какой каталог открывать?
(9) Кстати, вот я в хроме нажимаю Ctrl+S - открывается какой-то условный каталог, в который я когда-то записывал данные. Потом я в 1С что-то решил открыть (внешнюю обработку, например) и в диалоге открытия файла вижу уже совершенно другой каталог. Нажимаю Ctrl+R, пишу "cmd" и вижу там третий каталог.
Фактически меня интересует, куда сохраняет 1С каталог, из которого я что-то открывал или в который я что-то сохранял последний раз из 1С...
(12) ну у автора вообще там УТ 11, так что 7.7 - это не про это ))) Но все же интересно, есть ли такая возможность в современном продукте. В делфи было точно.
Для режимов запуска "Тонкий клиент" и "Толстый клиент":
в MS Windows: <Personal>;
в Linux: выбирается из надстройки gnome. Если gnome не указан, то вернем домашний каталог <Home>.
Для режимов запуска "Веб клиент" (реализуются только в расширении для работы с файлами):
при использовании веб-браузера Microsoft Internet Explorer: <Personal>;
при использовании веб-браузера Mozilla Firefox (с помощью XPCOM интерфейса nsIDirectoryServiceProvider):
в MS Windows: <Personal>;
в Linux: <Home>;
в MacOS: <Docs> ;
в OSX: <UsrDocs>.
Для мобильной платформы:
iOS: Подкаталог \Documents относительно домашней директории приложения. Стандартный каталог, который доступен для обмена файлов в iTunes с помощью функции NSHomeDirectory().
Android:<Абсолютный путь>, может различаться на разных устройствах. Например:
/mnt/sdcard/Android/data/com.e1c.mobile/files/
/storage/emulated/0/Android/data/com.e1c.mobile/files/
Windows:
для смартфона: путь внутри домашней директории приложения (C:\Users\<User>\AppData\Local\Packages\<Application>\RoamingState). Каталог не доступен при подключении к ПК. Доступ с ПК можно обеспечить только с помощью утилиты ISETool из комплекта Windows Phone SDK.
для планшета: путь внутри домашней директории приложения C:\Data\Users\<User>\DefApps\APPDATA\Local\Packages\ <Application>\RoamingState)
Ну этот метод возвращает каталог документов (типа МоиДокументы) всегда, а не текущий каталог приложения, использованный последний раз.
Но тут проблема юзабилити: допустим, пользователь открыл некую форму из некого объекта и в ней нажал "сохранить", появился диалог выбора файлов, в котором он спустился по дереву в какое-то свое родное место, после чего нажал "Сохранить". В итоге описание оповещения вернуло полное имя файла, в этот файл я и записал нечто.
Дальше юзер через минуту еще раз открывает форму для другого объекта, и хочет записать этот объект в файл. В принципе я могу ему сгенерировать имя файла, но не могу получить тот самый путь, который будет при вызове диалога выбора файла. Возможно пользователь захочет зайти в подкаталог этого каталога для сохранения нового файла, а может быть сохранит и в этот. Если каждый раз открывать ему каталог документов, то он возненавидит этот функционал.
В идеале все должно работать так: юзер выбирает объект, нажимает "выгрузить", открывается форма с уже сгенерированным именем файла и путем. Он нажимает прямо в форме "Сохранить и закрыть", выбирает второй объект, нажимает "Выгрузить", "Сохранить и закрыть". В идеале даже "Сохранить и закрыть" - лишнее, но нужно дать юзеру выбрать файл в случае чего.
Пока реализовал так: жамкаем "Выгрузить", открывается диалог выбора файла, в наименование генерируется нужное наименование. Но фишка вся в том, что хотелось бы вообще от этого диалога по-возможности отказаться, когда все параметры есть. Но тут проблема с выбором каталога. Остается колхозить сохранение пути в каком-то месте для конкретного юзера, но может так оказаться, что он зайдет в систему с другого компа...
Кароче, без получения пути к текущему каталогу грустно!
В принципе я могу ему сгенерировать имя файла, но не могу получить тот самый путь, который будет при вызове диалога выбора файла.
Поскольку при вызове диалога сохранения файла открывается стандартный диалог проводника (если речь идет про Windows?), то полные имена последних открывавшихся и сохранявшихся файлов хранятся в реестре, в разделе:
Примеры работы 1С с реестром есть, сначала читаем параметр MRUList, по его первому символу определяем нужный параметр из диапазона a - j, считываем из него полное имя последнего файла и выделяем каталог. Профит!
(20) Во-первых, у меня нет в реестре ветки OpenSaveMRU, но есть HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSavePidlMRU.
Во-вторых, при выборе файла в этой ветке реестра ничего не меняется. Вот как-то так...
+(22) Заглянул в Win2008 R2 - да, ветка теперь называется OpenSavePidlMRU, но вот параметры в ней теперь бинарные, похоже, в UTF-8, да еще и скомпонованы как-то заковыристо.
Наверняка в Windows 7 и более поздних версиях то же самое, а раньше в XP была просто строка.
и они не меняются при выборе файла из управляемого интерфейса 1С.
Боюсь, что вы не разобрались: они меняются, но не все сразу, а только один из них, самый "древний". И его номер становится первым в индексе, который описан в параметре MRUList или как он там теперь обзывается (последний в разделе).
То есть, если в этом параметре первые байты, к примеру, 00 08, то имя последнего открывавшегося файла сохранено в параметре:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSavePidlMRU\*\08
При следующем сохранении этот параметр не изменится, а изменится (затрется) самый старый, например, 03. И тогда параметр MRUList уже будет начинаться с 00 03.
Дело за малым - вытащить имя файла из бинарных данных. :)
P.S. Хотя я сомневаюсь, что это вообще нужно: проверил работу недавно использовавшейся мной обработки по загрузке данных из Excel, там тоже используется диалог выбора файла.
Так вот, у меня сложилось впечатление, что если в параметрах ДиалогВыбораФайла() вообще не задавать Каталог, то автоматически открывается как раз последняя папка, из которой читались файлы. Похоже, что платформа 1С сама считывает это параметр средствами Windows, если ей не мешать принудительным указанием папки.
Так вот, у меня сложилось впечатление, что если в параметрах ДиалогВыбораФайла() вообще не задавать Каталог, то автоматически открывается как раз последняя папка, из которой читались файлы.
Или в которую писались - я об этом как раз выше и писал. Дело за малым - получить этот каталог. Индекс - да, меняется, а вот имени файла я не обнаружил.
Чтобы не заставлять пользователя еще раз открывать диалог выбора файла.
Теперь понятно. Ну, под столь специфическую хотелку 1С функции не предусмотрела. Хотя бы из-за весьма сомнительной ее целесообразности.
И даже вариант вытаскивания последнего записанного файла из реестра я бы не рекомендовал, отзываю свое предложение.
Так что если такое надо, то делайте сами, программно, в толстом клиенте - через СохранитьЗначение(), в тонком - через аналоги, работающие с хранилищами настроек.
WshShell.SpecialFolders.Item("Desktop") - рабочий стол пользователя..
а всего доступно AllUsersDesktop, AllUsersStartMenu, AllUsersPrograms, AllUsersStartup, Desktop, Favorites, Fonts, MyDocuments, NetHood, PrintHood, Programs, Recent, SendTo, StartMenu, Startup, Templates.
или
wshShell.ExpandEnvironmentStrings("%HOMEPATH%") - полный путь к основному каталогу пользователя из оснастки Локальные пользователи и группы
У команды
net user [<UserName> {<Password> | *} [<Options>]] [/domain]
net user [<UserName> {<Password> | *} /add [<Options>] [/domain]]
net user [<UserName> [/delete] [/domain]]
Есть параметр каталог по умолчанию.
/homedir:<Path>
Попробуйте посмотреть как ваш пользователь в AD заведен, и посмотрите его параметры.
скриптом
|If FSO.FolderExists(colEnvVars(""userprofile"") & FolderName1) Then
| GoSubFolders colEnvVars(""userprofile"") & FolderName1
|End If
как в https://infostart.ru/public/121383/
(27) переменная окружения "userprofile" всегда одинаковая, а пользователь папку любую выбрать может. Вот открыл он в одном месте одну папку (например, "рабочий стол, папка1, папка2, папка3"), записал туда объект. Потом открывает второй объект, нажимает "Записать", в у него открывается форма с некоторыми галочками, например. от которых что-то зависит. Имя файла в этой форме есть, а вот полного имени - нет, т.к. последний открытый каталог я получить не могу. Если не указывать каталог совсем, то файл будет писаться вообще в каталог, откуда 1С запущена - что полный бред вообще с точки зрения реализации в платформе. Т.е. пользователю все-равно придется открывать диалог сохранения файла.
Да, можно запоминать путь при выборе файла, но это костыль, т.к. он может просто в 1С через "Открыть" выбрать какой-нибудь файл из жутко далекого места и ему придется еще раз открыть форму выбора файла из моей формы только потому, что я не могу получить имя текущего каталога, который откроется при указании пустого каталога в диалоге выбора файла.
(30) т.е. пользователь предыдущий раз сохранил отчетность на флешку, флешку уже извлек. На другой день в "нужной" обработке без спроса пользователя о месте хранения пытаться записать файл в по несуществующему пути?
На другой день в "нужной" обработке без спроса пользователя о месте хранения пытаться записать файл в по несуществующему пути?
Вот-вот, именно это я и имел в виду в своем последнем сообщении.
Но тут можно хотя бы перед записью программно проверять существование папки назначения. Хотя от замены флешки (на другую под той же буквой) и это не спасет.
Кроме того, мерещатся мне проблемы и похуже: пользователь может сначала что-то выгрузить в XML, потом открыть какой-нибудь внеший ERF и сохранить отчетик в XLS, - и все в разных папках. Что ему предложит такая функция, если он снова решит что-то выгрузить в XML? Получается, функция должна учитывать тип файла, иначе велик риск без спросу выгрузить "не туда".
Чтобы этот риск уменьшить, пусть программист сам озаботится сохранением нужных имен папок.
(33) пользователь должен получить возможность записать файл, не открывая диалога выбора файла лишний раз. Это как минимум уменьшает количество кликов, что сказывается на производительности труда. Но некоторым, конечно, этот термин ничего не говорит - и правильно, загнивающий запад путь об этом думает.
(35) если бы мне word записывал файл без спроса выбора каталога и имени файла, а записывал новый файл в последний открытый каталог... я бы его быстро снес нафиг.
Так что не надо думать о пользователях как о баранах.
(38) открываете файл в ворде с флешки, вынимаете флешку - и что? Нажимаете Ctrl+S - и куда пишется файл? Вы вообще не понимаете, о чем пишите. И доказательства тут ни при чем.
открываете файл в ворде с флешки, вынимаете флешку - и что? Нажимаете Ctrl+S - и куда пишется файл?
Путаете теплое с мягким.
В данном случае он не пишет по последнему пути открытым пользователем. Он пишет в конкретный файл, который открыт/сохранен пользователем с выбором пути. О чем вам уже несколько раз предлагали: запоминайте сами расположение для сохранения нужных файлов, а не использовать "последний текущий каталог".
Ваше же желание выглядело бы так: Открыли "Файл1" из "Мои документы". Открыли "Файл2" с флешки. На файле "Файл1" нажимаем Ctrl+S и он записывается по последнему текущему пути на флешке.
О чем вам уже несколько раз предлагали: запоминайте сами расположение для сохранения нужных файлов, а не использовать "последний текущий каталог".
Так и приходится делать. Но все-равно первый раз пользователь должен открыть этот долбаный каталог, чтобы было что запомнить.
Мое желание только в воспаленном мозгу так выглядело. В реальности оно куда утилитарнее: есть форма сохранения чего-то куда-то. Пользователь нажимает на этом чем-то кнопку, которая открывает форму с некоторым списком элементов. Нужно выбрать из него нечто, поставить галочки (каждый раз это могут быть различные галочки и прочее). От этих галочек и прочего зависит имя файла, при том я могу автоматически понять в ряде случаев какие галочки и прочее нужно выбрать. Т.е. вот у меня есть имя файла, которое я автоматически определил. Иногда не могу - это другой вопрос, к делу не относящийся. Т.е. вот у меня есть имя файла. Без каталога. И для того, чтобы определить этот долбанный каталог, мне нужно заставить пользователя нажать "Сохранить", показать ему этот долбаный диалог, заставить его нажать в нем единственную кнопку "Сохранить", и только после этого записать файл. Если бы я мог получить каталог сразу, то я могу бы сохранить файл по кнопке "Сохранить" из формы без вызова диалога. И если пользователю нужно было бы изменить имя файла, он бы нажал "..." после его долбаного имени. И т.к. у меня нет возможности получить этот долбаный каталог, мне придется его сохранять где-то в параметрах долбаного пользователя, при этом я сохраню имя только того долбаного каталога, который пользователь удосужится выбрать из моей долбаной формы, а если он вдруг минут пять назад уже открывал какой-нибудь файл из какой-нибудь другой формы, который лежит в стапиццот вложенных каталогов на хрензнаеткаком диске, то мне его придется заново заставить пройти этот путь, если, конечно, он не сохранит оное хозяйство в своем "избранном".
(41) вот, это уже ближе к делу.
Как вариант, можно хранить каталог по-умолчанию, который при первом запуске обработки предложить пользователю указать в явном виде. И сохранять его для данного пользователя.
Дать возможность менять этот путь в настройках.
Дать возможность пользователю сохранять с показом диалога выбора каталога. И сохранять этот путь.
Все зависит от конкретной логики в обработке.
Но тупо пытаться писать в последний "текущий" каталог, который может быть выбран совсем не из обработки, совсем не к месту.
пытаться писать в последний "текущий" каталог, который может быть выбран совсем не из обработки, совсем не к месту
Не совсем. Даже наоборот. Только человек с безграничным ЧСВ будет думать, что его форма сохранения какого-то результата - это пуп Земли. Пользователи работают с различными данными в 1С. Вот бухгалтер открыла отчет (ОСВ), сохранила его в папку с отчетами, которая находится на каком-нить корпоративном файлопомоечном диске, до которого еще добраться надо. Вот нажала она "Сохранить нечто" - открывается обработка, которую написал я. И ей к той эксельной ОСВ нужно добавить это мое нечто (а может это будет не ОСВ, а может и вообще не отчет, а другая обработка, сохраняющая какое-то нечто). Некто из небожителей уже, например, определил, как должно это мое нечто называться с точностью до регистра символов, поэтому заставлять это все писать в имени файла пользователя - редкая садюга может. Но и тут есть нюансы - галочки и списочки. Собрал я имя файла. Запомнил, я, допустим, этот долбаный каталог (который - опять же, по Вашей логике - может находиться на флешке, которую уже небожителям отдали, а сейчас там вторая флешка, на которой нет того каталога, да и дата, например, изменилась - каталог нужен с другой датой, а его уже создали, когда сохраняли эту ОСВ, например) и бухгалтерша лоснящейся от жары и возбуждения рукой жмет "Сохранить", в итоге я вижу, что такого каталога нет ни разу и вынужден снова открыть ей этот долбанный диалог выбора файла. Она его три минуты назад уже видела или даже создала, а я ей "снова здорова"... Это не хорошо...
бухгалтерша лоснящейся от жары и возбуждения рукой
Аж мурашки по коже... "Тебе бы не картины, начальник, тебе книжки писать!" (с)
Если прямо-таки жизни нет без такого функционала, так все уже сказано: "венда" хранит список последних открывавшихся файлов в разделе реестра HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSavePidlMRU\, есть примеры кода на С для извлечения этой информации, а если вы не можете их найти или перевести на 1С, то это уже ваша проблема, "Убунту поставь и не мучайся". :-P
(43) очень животрепещущая история. Только один маленький нюанс.
В промежутке между сохраненным отчетом и нажатие "Сохранить нечто" звонит начальник и матом кроет, где тот крендельный ежедневный отчет ему на почту. Админ бездельник почту не настроил на отправку из программы, и ей приходится создавать крендельный отчет, сохранять его в файл (соответственно в определенный каталог). Тут она вспоминает, что горе программист помимо отчета заставляет ее зачем-то нажимать эту гребаную кнопку "Сохранить нечто". Переключается на эту обработку и нажимают нужную кнопку. Фу. Вроде успела. Пора домой. После выходных ее вызывают на ковер и начинают орать: почему она ...(тут не цензурно) отчет не сдала?
Она вся в слезах: Как не сдала? Все сделала. Отчет сохранила. Крендельную кнопочку нажала.
Кто виноват? И что делать? извечные вопросы...
Если этот отчет нужно вместе с еще какой-то хренью сдавать, то может предусмотреть возможность сохранять это все в одном месте одной программой и одной кнопкой?
В любом случае, лишний раз напрячь (если нет желания автоматизировать) может быть выгоднее, чем подставить.
После того, как она эту хрень сохранила, ее нужно будет отправить контроллеру, который должен двумя подписями это подписать и отправить небожителям, которые этого начальника с его матами сами пошлют куда угодно )))
Если тут подразумевается человек, а не электронное устройство (хотя с учетом данного постановщика задачи исключать нельзя ничего!), то его должность пишется по-другому: "контролёр".
(32) ну так проверить путь можно - тут как раз проблем нет. а вот получить его, получается, нельзя.
Хотя, да, горе 1с-ники вечно ничего не проверяют - пишут сразу без полного имени файла, а там каталог запуска 1С, в который на нормальном компьютере запись запрещена...
(34) если так трудно понять, что пример был не с точки зрения проверки существования пути, а вообще возможности неверного пути с точки "необходимого" для пользователя, то никакие доказательства тут не помогут. Вас уже ни в чем убедить невозможно. Будут просто отговорки. В прочем это ваш выбор.
(54) ну раз 1С открывает последний каталог при вызове диалога выбора файла с пустым именем каталога, то это говорит как минимум о том, что она это где-то хранит.
А указанный Вами вариант возвращает другой каталог, отличный от того, который последний раз был открыт в 1С.
Здравствуйте, Коллеги!
Уже на "носу" 8.3.20 платформа, а работа с файлами: получить каталог загрузки, сохранить в каталог и в сообщении внизу предоставить переход к каталогу в котором файл был сохранен - не реализовано.
Или, подскажите, пожалуйста, у меня устаревшая версия БСП РаботаСФайлами?
КаталогДокументов() "Описание:
Предоставляет доступ к стандартному каталогу документов."
Сохранил файл в папку "1" на раб столе, полный путь "C:\Users\1c_support\Desktop\1"
Вот это
КаталогДокументов = Новый Файл(КаталогДокументов());
КаталогПользователя = КаталогДокументов.Путь;
возвращает "C:\Users\1c_support\Documents"
а надо
"C:\Users\1c_support\Desktop\1"
Вообще мысли, что на профильных сайтах больше специалистов по троллингу сидит чем специалистов, вопросы за последнюю неделю: 1. Как програмно получить имя каталога, в который пользователь сохранял последний раз файл; 2. Как отловить Пометку удаления "НаКлиенте", чтобы оповещение послать в другие формы, что надо данные обновить; 3. Как отследить нажатие клавиши клавиатуры на таб доке и т.п. главное все вопросы до меня уже кто-то задавал, и все это решается, и на мой взгляд все это НУЖНО для удобства работы пользователей, но вместо ответов в каждой теме "а зачем да почему", то-ли гуманитарии одни вместо программистов сидят чтобы пофлудить на форумах то-ли еще чего, я хз. Сорян, накипело.
Решил проблему в лоб, сохраняю при записи файла путь к каталогу в регистр
И тут же врубаешь спасительную дурку, которая не даёт перенапрячься твоему мозгу, потому что иначе картина мироздания станет нестерпимо неприятной для тебя.