Вот такую вот процедуру написал с использованием компоненты - может кому пригодится
Если пользователи работают с базой через терминал (RDP), запускаешь при начале работы системы и дурных вопросов от юзверей становится намного меньше
// Создает в КаталогеПользователя подкаталог "Мой компьютер" а в нем ярлыки на диски того компьютера
// за которым сидит юзверь. Каталогом по умолчанию для файловых операция выставляется КаталогПользователя
// Чтобы юзверь не ныл "А как мне сохранить отчет на мой диск "С"? А через сетевое окружение это слишком долго! А я не запомню!" и т.п. хрень
Процедура СоздатьЯрлыкиНаСвоиДиски()
Перем RDPsession, ClientName;
БазаНаСетевомДиске = 0;
рег = СоздатьОбъект( "РаботаСРегистромWin" );
// имя терминальной сессии (если в терминале) или "Console"
рег.ОткрытьКлюч( "HKEY_CURRENT_USER", "Volatile Environment", "KEY_QUERY_VALUE" );
рег.ЗапроситьЗначение("SESSIONNAME", RDPsession);
Если (ПустоеЗначение(RDPsession) = 1) ИЛИ (RDPsession = "Console") Тогда
// Т.е. мы работаем не через терминальную сессию, а запускаем 1С на своем компе - определяем имя компютера на которм сидим
рег.ОткрытьКлюч( "HKEY_LOCAL_MACHINE", "SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName", "KEY_QUERY_VALUE" );
рег.ЗапроситьЗначение( "ComputerName", ClientName );
// Теперь проверяем где-же у нас база - на локальном или на сетевом ресурсе
Если Лев(КаталогИБ(), 1) <> "\" Тогда
WshNetwork=СоздатьОбъект("WScript.Network");
Drives=WshNetwork.EnumNetworkDrives();
ы=0;
Пока ы <= Drives.Count()-1 Цикл
Если Лев(КаталогИБ(), 2) = Drives.Item(ы) Тогда
БазаНаСетевомДиске = 1;
//Сообщить(Drives.Item(ы)+" - "+Drives.Item(ы+1));
КонецЕсли;
ы=ы+2;
КонецЦикла;
Иначе
БазаНаСетевомДиске = 1;
КонецЕсли;
Иначе
// Работаем через терминальную сессию - определяем имя компьютера за которым сидим следующим образом
рег.ОткрытьКлюч( "HKEY_CURRENT_USER", "Volatile Environment", "KEY_QUERY_VALUE" );
рег.ЗапроситьЗначение( "CLIENTNAME", ClientName);
КонецЕсли;
Если (БазаНаСетевомДиске = 1) ИЛИ ((ПустаяСтрока(RDPsession) = 0) И (RDPsession <> "Console")) Тогда
// Если работаем через терминал или каталог БД находится на сетевом ресурсе
КаталогДляЯрлыков = КаталогПользователя() + "Мой компьютер";
ФСР = СоздатьОбъект("ФСРасш");
Если ФСР.СуществуетФайл(КаталогДляЯрлыков) = 1 Тогда
Если ФСР.ЭтоКаталог(КаталогДляЯрлыков) = 1 Тогда
FSO=СоздатьОбъект("Scripting.FileSystemObject");
FSO.DeleteFolder(КаталогДляЯрлыков,0);
Иначе
ФСР.УдалитьФайл(КаталогДляЯрлыков);
КонецЕсли;
КонецЕсли;
Если ФСР.СоздатьКаталог(КаталогДляЯрлыков) = 1 Тогда
WshShell=СоздатьОбъект("WScript.Shell");
WshShortcut=WshShell.CreateShortcut(КаталогДляЯрлыков + "\Disk C.lnk");
//WshShortcut.Arguments="C:\autoexec.bat";
WshShortcut.Description="Диск ""С"" моего комьютера";
//WshShortcut.HotKey="CTRL+ALT+F";
WshShortcut.IconLocation="shell32.dll, 5";
WshShortcut.TargetPath="\\"+ClientName+"\C$";
WshShortcut.WindowStyle=1;
WshShortcut.WorkingDirectory="C:\";
//Сообщить(WshShortcut.FullName);
WshShortcut.Save();
КонецЕсли;
МенеджерДиалогов = СоздатьОбъектВК("OpenFileDialogsManager.dll", "AddIn.OpenFileDialogsManager");
Если МенеджерДиалогов <> 0 Тогда
//МенеджерДиалогов.БлокироватьДиалоги(1)
МенеджерДиалогов.УстановитьНачальныйКаталог(КаталогПользователя());
Если НазваниеНабораПрав() <> АдминистративныйНаборПрав Тогда
// А теперь надежно зафиксируем пациента в его рабочем каталоге, чтоб не лазил по серверу куда попало :)
МенеджерДиалогов.ЗапретитьФайловыеОперации(1); //отключает в диалоге операции копирования, удаления, перемещения, контекстное меню
//МенеджерДиалогов.ЗапретитьИзменениеТекущегоКаталога(2); // Запрещаем переходить по дереву каталогов вверх от тек. каталога (вниз можно)
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Вот еще бы ту возможность о которой я писал в предыдущем посте, тогда можно было-бы разблокировать строку
МенеджерДиалогов.ЗапретитьИзменениеТекущегоКаталога(3) и было-бы полное счастье для админа. Юзеры сидят себе тихонько в своих каталогах и не лазят куда не просят