Имя: Пароль:
1C
 
Сервер не читает dbf
, ,
0 Mary01
 
14.06.15
11:01
В чем может быть проблема:
Есть процедура, читающая файл формата dbf. Выполняется &НаСервере. В локальной базе работает нормально,  а в SQL выпадает ошибка "Перед выполнением операции нужно открыть базу".
Файл лежит в общем каталоге, в который есть доступ с сервера, на файл установлены полные права. Даже пробовала выложить этот файл на рабочий стол сервера, и базу запускать прямо на сервере, но все равно не читает, не открывает.
1С 8.3, на сервере ОС Windows Server 2012.
1 shuhard_серый
 
14.06.15
11:03
(0) в 100500 раз
права должны быть у учетной записи, о которой запущен rphost,
байки про полные права трави бухам
2 Mary01
 
14.06.15
11:08
(1) А если полные права на файл установлены для группы "Все"? Учетная запись, у которой запущен rphost, разве в эту группу не входит?
3 ДенисЧ
 
14.06.15
11:11
rphost часто стартует от системной учётки, у которой нет доступа в сеть.
4 Mary01
 
14.06.15
11:21
Что делать, если нет сейчас возможности проверить права этой учетки, можно ли как-то обойти это ограничение и прочитать файл?
5 ДенисЧ
 
14.06.15
11:25
(4) Если у тебя нет прав водить машину, но тебе нужно срочно поехать - ты сядешь за руль?
6 Mary01
 
14.06.15
11:32
(5) хорошая метафора )
7 ДенисЧ
 
14.06.15
11:37
Читай на клиенте и передавай на сервер
8 Рус Иван
 
14.06.15
11:38
(7)+1
9 Рус Иван
 
14.06.15
11:42
Года полтора назад столкнулся с подобной задачей - решил ее запуском базы под отдельным пользователем, все заработало
10 Mary01
 
14.06.15
11:47
(7) Сделала, пишет: ошибка отображения типов. Отсутствует отображение для типа XBase
11 Mary01
 
14.06.15
11:48
(9) пользователь - имеется в виду пользователь в базе 1С или пользователь - учетка на сервере?
12 ДенисЧ
 
14.06.15
11:50
(10) И правильно. Читать и передавать-то правильно надо.
Хотя бы через временное хранилище, а не напрямую
13 hhhh
 
14.06.15
11:56
(11) на сервере. По умолчанию, если админ ничего не менял - это пользователь USR1CV8 Проверьте есть у этого конкретного пользователя права на этот файл?
14 ДенисЧ
 
14.06.15
11:57
(13) читай (4)...
15 Mary01
 
14.06.15
12:18
(12) сделала, но теперь имя временного файла превышает 8 символов и не читает.
16 shuhard_серый
 
14.06.15
12:18
(15) душещипательная история
17 Mary01
 
14.06.15
12:22
(16) да уж
18 Mary01
 
14.06.15
12:33
Ура! Все получилось! Сделала так:
19 Mary01
 
14.06.15
12:34
&НаКлиенте
Процедура Загрузить(Команда)
    

     ДвоичныеДанные =  Новый ДвоичныеДанные(Объект.ФайлЗагрузки + "\EdIzm.DBF");
     АдресВременногоХранения = ПоместитьВоВременноеХранилище(ДвоичныеДанные);
        ЗагрузитьединицыИзмерения(АдресВременногоХранения);

    
КонецПроцедуры
20 Mary01
 
14.06.15
12:35
&НаСервере
Процедура ЗагрузитьЕдиницыИзмерения(АдресВременногоХранения)
    
    
ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВременногоХранения);
  
    ДвоичныеДанные.Записать("C:\Users\USR1CV8\AppData\Local\Temp" + "\EdIzm.DBF");
    
    БД = Новый XBase;
    БД.ОткрытьФайл("C:\Users\USR1CV8\AppData\Local\Temp" + "\EdIzm.DBF");     
    
...
КонецПроцедуры
21 Рус Иван
 
14.06.15
12:36
(11) Пользователь в базе 1с
(9) + база была в режиме "Обычное приложение"
22 Mary01
 
14.06.15
12:43
(21) можно попробовать, только придется переписывать форму
23 ДенисЧ
 
14.06.15
12:55
За это
" ДвоичныеДанные.Записать("C:\Users\USR1CV8\AppData\Local\Temp""

Два года без права переписки.
24 Mary01
 
14.06.15
13:04
(23) а как надо?
25 ДенисЧ
 
14.06.15
13:06
(24) Минимум - КаталогВременныхФайлов()
А если завтра придёт админ и перезапустит сервер под другим польователем?
26 Mary01
 
14.06.15
13:17
(23) но C:\Users\USR1CV8\AppData\Local\Temp"" - это и есть катлог временных файлов.
А, ты имеешь в виду, что он перезапустит, и тогда вместо USR1CV8 может быть другой пользователь?
27 ДенисЧ
 
14.06.15
13:21
(26) Я ещё бы понял, если бы %TEMP%...
Но хардкодить такие пути... Я за такое 3х человек уволил в своё время...
28 Mary01
 
14.06.15
13:23
(27) а так можно?
ДвоичныеДанные.Записать(КаталогВременныхФайлов() + "\EdIzm.DBF");
29 ДенисЧ
 
14.06.15
13:25
(28) Так уже намного лучше.
30 Mary01
 
14.06.15
13:28
(29) а как еще лучше, чтобы совсем правильно?
Я не поняла, как использовать %TEMP%...
31 ДенисЧ
 
14.06.15
13:38
(30) Забудь.
32 Fragster
 
гуру
14.06.15
13:54
ПолучитьИмяВременногоФайла(".dbf");
33 Fragster
 
гуру
14.06.15
13:54
только без точки
34 Mary01
 
14.06.15
14:03
(32) я уже так делала, но имя было очень длинным, и когда я пыталась этот файл прочитать, то это не получалось сделать - возникала ошибка, что имя файла превышает 8 символов. Поэтому я задаю короткое имя принудительно.