Имя: Пароль:
1C
 
Получение серверного (UNC) пути к папке в 1С
0 Demetres
 
31.03.17
15:04
Добрый день!

Подскажите есть ли в 1С метод для получения серверного (UNC) пути к папке?
1 YFedor
 
31.03.17
15:06
К какой папке?
2 Demetres
 
31.03.17
15:10
(1) Которую пользователь выбрал через диалог выбора файла
ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
но нужно не Y:\.... а \\server_name\share_name[\path]
3 Heckfy
 
31.03.17
15:19
Тут вроде решили: https://forum.sys-adm.in/index.php?topic=1345.0
Только я скрипта не вижу....
4 Heckfy
 
31.03.17
15:21
5 Demetres
 
31.03.17
15:25
(4) очень жаль я так надеялся
6 drcrasher
 
31.03.17
15:27
(5) что мешает через скрипт сделать?
7 Demetres
 
31.03.17
15:30
(6) Если честно пока не знаю как это сделать через скрипт
8 Demetres
 
31.03.17
15:35
Судя по всему что-то такое
    Попытка
        Script = Новый COMОбъект("MSScriptControl.ScriptControl");
        Script.Language = "javascript";
        Script.Timeout    = -1;
        Время = Script.Eval("var d = new Date(); d.getTime()");
    Исключение
        Время = ТекущаяДата();
    КонецПопытки;    
    
    Возврат Время;
9 Demetres
 
31.03.17
15:37
Только пока не понятно что тут нужно написать
10 eklmn
 
гуру
31.03.17
15:43
var sb = new StringBuilder(512);
var size = sb.Capacity;
var error = Mpr.WNetGetConnection("Z:", sb, ref size);
if (error != 0)
    throw new Win32Exception(error, "WNetGetConnection failed");
var networkpath = sb.ToString();
11 eklmn
 
гуру
31.03.17
15:44
что-то типа такого наверно надо, просто так не получить
12 Demetres
 
31.03.17
15:46
(11) Текст скрипта ребята подсказали выше, пока не знаю как это в 1С приладить

Sub Driveinfo()
    Dim drvpath
    drvpath = "z:"
    Dim fs, d, s
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set d = fs.GetDrive(fs.GetDriveName(drvpath))
    s = "Drive " & UCase(drvpath) & " - "
    s = s & d.VolumeName & vbCrLf
    s = s & d.sharename & vbCrLf
    s = s & "Free Space: " & FormatNumber(d.FreeSpace / 1024, 0)
    s = s & " Kbytes"
    MsgBox s
End Sub
13 sitex
 
naïve
31.03.17
15:48
(3) Там зарезаться надо, и скрипт видно будет.
14 sitex
 
naïve
31.03.17
15:48
(13) +зарегатся.
15 Heckfy
 
31.03.17
15:51
(13) :) Я знаю. :)
Я ТС подсказал, пусть он и режется. :)
16 eklmn
 
гуру
31.03.17
15:51
(12) ох е-мое, это ж обчный cmd "NET USE Z:"

да и выдает как надо
17 Demetres
 
31.03.17
15:58
Скрипт в (12) не заработал, или я что-то не так делаю, подскажите если кто в курсе

  Скрипт = Новый COMОбъект("MSScriptControl.ScriptControl");
  Скрипт.language="VBscript";
  
      Текст =
        "Sub Driveinfo()
        |Dim drvpath
        |drvpath = ""Y:""
        |Dim fs, d, s
        |Set fs = CreateObject(""Scripting.FileSystemObject"")
        |Set d = fs.GetDrive(fs.GetDriveName(drvpath))
        |s = ""Drive "" & UCase(drvpath) & "" - ""
        |s = s & d.VolumeName & vbCrLf
        |s = s & d.sharename & vbCrLf
        |s = s & ""Free Space: "" & FormatNumber(d.FreeSpace / 1024, 0)
        |s = s & "" Kbytes""
        |MsgBox s
        |End Sub";
  
  Скрипт.AddCode(Текст);    
  Текст = Скрипт.Run("Mess");
18 Demetres
 
31.03.17
16:20
(3) Вот такой скрипт работает, а как из него получить значения в 1С можете подсказать?

  Скрипт = Новый COMОбъект("MSScriptControl.ScriptControl");
  Скрипт.language="VBscript";
  
      Текст =
        "Sub Driveinfo()
        |Dim drvpath
        |drvpath = ""Y:""
        |Dim fs, d, s
        |Set fs = CreateObject(""Scripting.FileSystemObject"")
        |Set d = fs.GetDrive(fs.GetDriveName(drvpath))
        |s = ""Drive "" & UCase(drvpath) & "" - ""
        |s = s & d.VolumeName & vbCrLf
        |s = s & d.sharename & vbCrLf
        |s = s & ""Free Space: "" & FormatNumber(d.FreeSpace / 1024, 0)
        |s = s & "" Kbytes""
        |MsgBox s
        |End Sub";
      
  Скрипт.AddCode(Текст);    
  Текст = Скрипт.Run("Driveinfo");
19 eklmn
 
гуру
31.03.17
16:29
все как всегда просто до нельзя...
пора на отдых

ф = новый COMОбъект("Wscript.Network");
ц = ф.EnumNetworkDrives();
для т = 0 по ц.count() -1 цикл
  сообщить(ц.item(т));
КонецЦикла;
20 Torquader
 
31.03.17
16:34
Можно задать вопрос - а чего мы вообще хотим ?
Если мы хотим расшарить папку, то нужно вызывать одну функцию.
Если мы хотим подключиться к машине с сетевой папкой - другую.
А если мы хотим узнать, кто подключен, третью.

И что мы хотим ?
21 Demetres
 
31.03.17
16:45
У меня вот так получилось, всем спасибо!

Функция СетевоеИмяДиска(ИмяДиска)
    
    СетевоеИмяДиска = "";
    Скрипт = Новый COMОбъект("MSScriptControl.ScriptControl");
    Скрипт.language="VBscript";
  
    Текст = СтрШаблон(
        "Function  Driveinfo()
        |Dim drvpath
        |drvpath = ""%1""
        |Dim fs, d
        |Set fs = CreateObject(""Scripting.FileSystemObject"")
        |Set d = fs.GetDrive(fs.GetDriveName(drvpath))
        |Driveinfo = Driveinfo & d.sharename
        |End Function", ИмяДиска);
    
    
    Скрипт.AddCode(Текст);    
    Попытка
        СетевоеИмяДиска = Скрипт.Run("Driveinfo");
    Исключение
    КонецПопытки;

    Если ТипЗнч(СетевоеИмяДиска) = Тип("Строка")
        И Не ПустаяСтрока(СетевоеИмяДиска) Тогда
      
        Возврат СетевоеИмяДиска;
    Иначе
        Возврат ИмяДиска;
    КонецЕсли;    
  
КонецФункции
22 Heckfy
 
31.03.17
16:48
За это:

    Исключение
    КонецПопытки;

Поубивал бы!!!!!
Ну обработайте вы исключение хоть сообщением каким, хоть записью в ЖР!!!!
23 Demetres
 
31.03.17
17:14
(22) Я это и так обработал, в самом начале функции СетевоеИмяДиска = ""; если что-то не сработает пользователь увидит просто свои привычные "Y:\..." а выводить для него сообщение об ошибке тип "скрипт не отработал ошибка Х:015941" не нужно, поберегу его нервы.
24 Heckfy
 
31.03.17
17:16
Ну, удачи при отладке, при таких обработках исключений
25 Demetres
 
31.03.17
17:18
(24) Спасибо, но тут отлаживать нечего.
AdBlock убивает бесплатный контент. 1Сергей