Имя: Пароль:
1C
1С v8
Как проверить наличие файла на сервере?
0 Volodja
 
02.03.22
16:50
Обычные формы:
Есть общий модуль бвв_ОбщийМодуль
стоят галки: Внешнее соединение,Клиент(обычное приложение) и Сервер


Процедура Инициализация_тзКоды_ТНВЭД() Экспорт
    сз_бввОбщегоЗначения = ПараметрыСеанса.бвв_ОбщегоЗначения.Получить();
    Если сз_бввОбщегоЗначения = Неопределено Тогда
        
        бвв_сзПереченьИзъятия = Новый СписокЗначений;
        бвв_тзКоды_ТНВЭД = Новый ТаблицаЗначений;
        бвв_тзКоды_ТНВЭД.Колонки.Добавить("ПолныйКодГСВС");
        бвв_тзКоды_ТНВЭД.Колонки.Добавить("КодГСВС");
        бвв_тзКоды_ТНВЭД.Колонки.Добавить("Наименование");
        бвв_тзКоды_ТНВЭД.Колонки.Добавить("ВходитВПеречень");
        бвв_тзКоды_ТНВЭД.Колонки.Добавить("ВходитВВС");
        
        
        _ФайлМакета="D:\1sb8\Коды_ТНВЭД\Список ГСВС.mxl";
        ФайлНаДиске = Новый Файл(_ФайлМакета);
        Если НЕ ФайлНаДиске.Существует() Тогда
            Сообщить("Не найден список кодов ТНВЭД нет файла - "+_ФайлМакета);
            Возврат ;
        КонецЕсли;
        _ТабличныйДок = Новый ТабличныйДокумент;
        _ТабличныйДок.Прочитать(_ФайлМакета);
.....
КонецПроцедуры

_ФайлМакета  - этот файл есть на сервере.
Если захожу через RDP на сервер и оттуда запускаю базу, то все отрабатывает как надо. Файл находит
Но если захожу с клиентской машины, то не видит, видимо ищет его на клиентской машине
Запутался совсем Как мне нужно правильно вызвать эту процедуру, чтобы файл гарантированно проверялся на сервере?
1 Amra
 
02.03.22
16:52
&НаСервере
2 Volodja
 
02.03.22
16:53
(1) Пробовал
и в #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
    #КонецЕсли
оборачивал
не получается
3 Kassern
 
02.03.22
16:55
(2) не так ты пробовал. Надо
&НаСервере
Процедура ПрочитатьФайл(ИмяФайла)
И вот тут уже читать
КонецПроцедуры
4 Amra
 
02.03.22
16:55
(2) Не верю. Проверь права пользователя, под которым стартует агент сервера на эту папку
5 piter3
 
02.03.22
16:55
на серванте прям такой будет путь D:\1sb8\Коды_ТНВЭД\Список ГСВС.mxl сомнительно что-то
6 Мимохожий Однако
 
02.03.22
16:57
На клиенте находишь файл и передаёшь через временное хранилище на сервер. Дальше не сложно.
7 Kassern
 
02.03.22
16:58
(6) у него обратная ситуация, файл на сервере, где кластер, с клиентской машинки не получается прочитать
8 Вафель
 
02.03.22
17:00
внешнее соединение - это не сервер, а толстый клиент
9 Volodja
 
02.03.22
17:00
(6)
Пробовал так

&НаСервере

Функция ПолучитьФайл_СписокТНВЭД_НаСервере() Экспорт
    _ФайлМакета="D:\1sb8\Коды_ТНВЭД\Список ГСВС.mxl";
    ФайлНаДиске = Новый Файл(_ФайлМакета);
    Если НЕ ФайлНаДиске.Существует() Тогда
        Сообщить("Не найден список кодов ТНВЭД нет файла - "+_ФайлМакета);
        Возврат Неопределено;
    КонецЕсли;
    _ТабличныйДок = Новый ТабличныйДокумент;
    _ТабличныйДок.Прочитать(_ФайлМакета);
    Адрес=ПоместитьВоВременноеХранилище(ЗначениеВСТрокуВнутр(_ТабличныйДок),Новый УникальныйИдентификатор);
    Возврат Адрес;
КонецФункции

&НаКлиенте
Функция ПолучитьФайл_СписокТНВЭД_НаКлиенте() Экспорт
    Адрес=бвв_ОбщийМодульСервер.ПолучитьФайл_СписокТНВЭД_НаСервере();
    ТД=ЗначениеИзСтрокиВнутр(ПолучитьИзВременногоХранилища(Адрес));  // Здесь пишет что:  Ошибка при вызове метода контекста
                                                    ПолучитьИзВременногоХранилища по причине Недопустимое значение параметра (параметр номер 1)
    УдалитьИзВременногоХранилища(Адрес);
    Возврат ТД;
КонецФункции
10 Volodja
 
02.03.22
17:01
(5) я его там сам создал. Он есть
11 Kassern
 
02.03.22
17:08
(9) Зачем ЗначениеИзСтрокиВнутр ? Вы же ПоместитьВоВременноеХранилище, так получайте из него соответствующим методом
12 Kassern
 
02.03.22
17:08
ПолучитьИзВременногоХранилища вам в помощь
13 Volodja
 
02.03.22
17:09
(11) это я после добавил.
ТД=ПолучитьИзВременногоХранилища(Адрес); так тоже самое выдает
14 Мимохожий Однако
 
02.03.22
17:14
Помести ФайлНаДиске во временное хранилище и получай на клиенте.
15 Мимохожий Однако
 
02.03.22
17:14
Помещение макета в табличный документ не имеет смысла.
16 Volodja
 
02.03.22
17:26
(15) Так даже не доходит до этого:
...
    ФайлНаДиске = Новый Файл(_ФайлМакета);
    Если НЕ ФайлНаДиске.Существует() Тогда
        Сообщить("Не найден список кодов ТНВЭД нет файла - "+_ФайлМакета);
        Возврат Неопределено;
    КонецЕсли;
....

Уже пишет, что нет его
17 ColonelAp4u
 
02.03.22
17:41
(16) попробуй сделать на компе откуда запускаешь этот файл D:\1sb8\Коды_ТНВЭД\Список ГСВС.mxl и запусти обработку, если найдет то значит он и не ищет на сервере его, что скорее всего так и есть, хотя вообще не пойму почему ты не сделал диалог выбора файла и все.
18 ColonelAp4u
 
02.03.22
17:48
(16) и еще вот так попробуй
&НаКлиенте
Процедура ЗагрузитьФайл(Команда)

ИмяФайлаДляОбработки = «C:\ДанныеДляЗагрузки.xml»;
// Описание процедуры, которая будет вызвана помещения файла во временное хранилище
ОписаниеОповещения = Новый ОписаниеОповещения(«ЗагрузитьФайлЗавершение», ЭтотОбъект);
// Начало помещение файла из файловой системы во временное хранилище
НачатьПомещениеФайла(ОписаниеОповещения, , ИмяФайлаДляОбработки, Ложь, УникальныйИдентификатор);

КонецПроцедуры



&НаКлиенте
Процедура ЗагрузитьФайлЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт

ВыполнитьЗагрузкуНаСервере(Адрес);

КонецПроцедуры



&НаСервере
Процедура ВыполнитьЗагрузкуНаСервере(Адрес)

// Получение данных из временного хранилища
Данные = ПолучитьИзВременногоХранилища(Адрес);
// Получение имени временного файла
ИмяВременногоФайла = ПолучитьИмяВременногоФайла(«xml»);
// Сохранение данных во временный файл
Данные.Записать(ИмяВременногоФайла);

// Обработка файла…

// Хорошим тоном будет удалить временный файл
Попытка

УдалитьФайлы(ИмяВременногоФайла);

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

КонецПроцедуры
19 Мимохожий Однако
 
02.03.22
18:49
Если это обработка, то макет можно положить внутри обработки без всяких файлов и ухищрений. В чём цель манипуляций с файлом?