Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Выбор файла на сервере

Выбор файла на сервере
Я
   Личунхо
 
30.01.18 - 10:56
Здравствуйте!
1С:Предприятие 8.3 (8.3.4.437)
Реально программа на одной машине.
Но!

Есть строка, которая прекрасно работает в блоке для сервера( т.е. &НаСервере):

ФайлDBF.ОткрытьФайл("C:\TIME\tfoms.dbf",,Истина)// открытие файла


Задача: Вставить вместо явного пути переменную, которую выбираем в диалоге с пользователем, типа:

ФайлDBF.ОткрытьФайл(ИмяФайла,,Истина)// открытие файла


А диалог выбора файла работает ТОЛЬКО в блоке для клиента (т.е.&НаКлиенте):
ДВФ = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    ДВФ.Заголовок    = "Выберите файл для обработки";
    ДВФ.ПредварительныйПросмотр =    Ложь;
   Если ДВФ.Выбрать() Тогда
       ИмяФайла = ДВФ.ПолноеИмяФайла;
    Иначе
        ИмяФайла = "";
    КонецЕсли;

Так вот имя файла из одного блока в другой не передаётся!
Даже если объявить переменную глобально:
Перем ИмяФайла;

Дурдом!

И как быть?
 
 
   cw014
 
1 - 30.01.18 - 11:00
Передавать на сервере в виде параметра процедуры?
   chelentano
 
2 - 30.01.18 - 11:00
(0) Передать имя файла в серверную процедуру
   МимохожийОднако
 
3 - 30.01.18 - 11:00
Что показывает отладчик в строке 
ИмяФайла = ДВФ.ПолноеИмяФайла;
   МимохожийОднако
 
4 - 30.01.18 - 11:01
Где код передачи имени файла в дальнейшие процедуры?
   Личунхо
 
5 - 30.01.18 - 11:04
(4) Так я про него и спрашиваю.
   Неверный Параметр И
 
6 - 30.01.18 - 11:06
(0) > Дурдом!

Санитары!
   Личунхо
 
7 - 30.01.18 - 11:06
(3) Да ничего не показывает. В этом блоке (&НаКлиенте) всё работает и переменная получает ПОЛНЫЙ ПУТЬ к файлу и тут же может быть выведена на экран.

А её нужно передать в код для СЕРВЕЕРА (&НаСервере).
   chelentano
 
8 - 30.01.18 - 11:08
(7) Так передай, будь мужиком
   Рэйв
 
9 - 30.01.18 - 11:11
(7)А на севере  путь совпадает с клиентским чтоли?
   Рэйв
 
10 - 30.01.18 - 11:12
(9)Файл дежащий по пути C:\ на клиенте далеко не факт что лежит по тому же адресу на сервере
 
 Рекламное место пустует
   МимохожийОднако
 
11 - 30.01.18 - 11:13
На сервер можно передать через хранилище
   chelentano
 
12 - 30.01.18 - 11:15
(11) Строку с именем файла? Да, тут без хранилища никак
   МимохожийОднако
 
13 - 30.01.18 - 11:16
(12) Строку передать можно )) Только можно нарваться на кукиш
   Мыш
 
14 - 30.01.18 - 11:17
(0) Всё правильно. Платформа работает как надо.
   dezss
 
15 - 30.01.18 - 11:17
ОФФ: боюсь спрашивать кем ТС работает. Геодезист?
   Мыш
 
16 - 30.01.18 - 11:17
(15) Менеджер по формированию планетных систем.
   dezss
 
17 - 30.01.18 - 11:19
(0)
 Если ДВФ.Выбрать() Тогда
       ТвояПроцедураНаСервере(ДВФ.ПолноеИмяФайла);
 КонецЕсли

&НаСервере
Процедура ТвояПроцедураНаСервере(ПолноеИмяФайла)
    ФайлDBF.ОткрытьФайл(ПолноеИмяФайла,,Истина);
КонецПроцедуры
   chelentano
 
18 - 30.01.18 - 11:20
(17) Ну вот, пришёл и всё опошлил
   dezss
 
19 - 30.01.18 - 11:21
(18) Погодь. Не факт, что ему все будет понятно)))
   dezss
 
20 - 30.01.18 - 11:21
(19) + сча будет ошибка, что ФайлDBF не определена)))
   Мыш
 
21 - 30.01.18 - 11:24
(20) Не будет. У пациента файловая )
   Личунхо
 
22 - 30.01.18 - 11:28
(17) dess:

Справочник.ФИО.Форма.ФормаСписка.Форма(28,22)}: Переменная не определена (ПолноеИмяФайла)
    ФайлDBF.ОткрытьФайл(<<?>>ПолноеИмяФайла,,Истина); (Проверка: Сервер)
СинхронизироватьТФНаСервере(<<?>>ДВФ.ПолноеИмяФайла); (Проверка: Тонкий клиент)
    ФайлDBF.ОткрытьФайл(<<?>>ПолноеИмяФайла,,Истина); (Проверка: Сервер)
   МимохожийОднако
 
23 - 30.01.18 - 11:30
   МимохожийОднако
 
24 - 30.01.18 - 11:31
Учимся пользоваться поиском ))
https://helpf.pro/faq83/view/1407.html
   Личунхо
 
25 - 30.01.18 - 11:38
(24) МимохожийОднако

Мимохожий, остынь. Нужно передать СТРОКУ, а не файл.
Быстро, кратко и эффективно.
)))
   dezss
 
26 - 30.01.18 - 11:40
(22) показывай код...
это уже не смешно...я думал, что другая будет неопределена))))
   МимохожийОднако
 
27 - 30.01.18 - 11:46
(25) И с сервера ты этот файл не увидишь. Но можно выбрать файл через сетевое окружение. Не хочешь читать примеры - сам себе Буратино.
   Личунхо
 
28 - 30.01.18 - 11:59
(26) dezs :

Перем ИмяФайла ;
&НаКлиенте
   Процедура СинхронизироватьТФ(Команда)
    ДВФ = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    ДВФ.Заголовок    = "Выберите файл для обработки";
   ДВФ.ПредварительныйПросмотр =    Ложь;
   Если ДВФ.Выбрать() Тогда
     ИмяФайла = ДВФ.ПолноеИмяФайла;     
    Иначе
       ИмяФайла = "";
    КонецЕсли;
    СинхронизироватьТФНаСервере();
   КонецПроцедуры

&НаСервере
Процедура СинхронизироватьТФНаСервере()
ТД = ТекущаяДата();
Менеджер = Справочники.ФИО;
Выборка = Менеджер.Выбрать();
Пока Выборка.Следующий() Цикл
 СТ = Выборка.ПолучитьОбъект();
 СТ.Статус="Нет";
 СТ.Записать();
КонецЦикла;
ФайлDBF = Новый XBase;// создаем новый объект 

ФайлDBF.Кодировка = КодировкаXBase.OEM;
ФайлDBF.ОткрытьФайл("C:\TIME\tfoms.dbf",,Истина);
   catena
 
29 - 30.01.18 - 12:03
(28)И где в твоей процедуре параметр?
   Личунхо
 
30 - 30.01.18 - 12:06
(29) В катманде.

Читай первое сообщение.

Строка:

 ФайлDBF.ОткрытьФайл(ИмяФайла,,Истина);

НЕ работает. 

Переменная ИмяФайла НА СЕРВЕР не передается.
   dezss
 
31 - 30.01.18 - 12:09
(30) да твою ж...
я тебе уже написал, как передавать...
на клиенте
    СинхронизироватьТФНаСервере(ИмяФайла);
на сервере
Процедура СинхронизироватьТФНаСервере(ИмяФайла)
.....
ФайлDBF.ОткрытьФайл(ИмяФайла,,Истина);

у тебя и с глазами тоже плохо?
   Мыш
 
32 - 30.01.18 - 12:10
(30) Дерзкий паренек )
> Процедура СинхронизироватьТФНаСервере()

Тут нет ни одного параметра.

> Переменная ИмяФайла НА СЕРВЕР не передается.

Ты её не передаешь, вот она и не передается )))
   dezss
 
33 - 30.01.18 - 12:13
ОФФ: реально, кем ты работаешь?
 
 
   Личунхо
 
34 - 30.01.18 - 12:14
(31) Dezss, а ты реально кем? )))

Как только вставляю твой код сразу лезет ошибка (Я уже писал):

{Справочник.ФИО.Форма.ФормаСписка.Форма(13,30)}: Слишком много фактических параметров (СинхронизироватьТФНаСервере)

    СинхронизироватьТФНаСервере(<<?>>ИмяФайла); (Проверка: Тонкий клиент)
   catena
 
35 - 30.01.18 - 12:18
(34)Осторожнее в общении, да?

Ты процедуре сказал, что ей нужно ждать параметр?
   МимохожийОднако
 
36 - 30.01.18 - 12:21
ТС Не читатель, ТС- писатель. Твою мать..
   ptiz
 
37 - 30.01.18 - 12:22
(0) Делай реквизит формы, а не переменную. Не лучший вариант, но самый простой.
   Личунхо
 
38 - 30.01.18 - 12:22
(32) Мыш (без мягкого знака), уверяю тебя, ты тоже не знаешь, как её передать. ))))))))))))))))))

(35)    catena, диванный воин? Хочешь посабачиться? Могу дать ссылку. )))
КАК сказать процедуре, что её нужно ждать параметр, и главное КАК ЕГО ПЕРЕДАТЬ?
   Личунхо
 
39 - 30.01.18 - 12:23
(37) Pitz? КАК? Сам-то делал? Код есть?
   Мыш
 
40 - 30.01.18 - 12:24
(34) Поздравляю, Шарик, ты балбес (цы)

Ключевое слово Процедура начинает секцию исходного текста, выполнение которого можно инициировать из любой точки программного модуля, просто указав ИмяПроцедуры() >>>> со списком параметров <<<< (если параметры не передаются, то круглые скобки, тем не менее, обязательны)
   Мыш
 
41 - 30.01.18 - 12:25
Хотя не, это же провокатор обыкновенный. Нынче их модно называть "тролль" )))
   МимохожийОднако
 
42 - 30.01.18 - 12:25
(38) В скобочках процедуры напиши название параметра.
   catena
 
Модератор
43 - 30.01.18 - 12:28
(38)Не хочу. Предупреждаю о соблюдении правил.


на клиенте
    СинхронизироватьТФНаСервере(ИмяФайла);
на сервере
Процедура СинхронизироватьТФНаСервере(ИмяФайла)
   Личунхо
 
44 - 30.01.18 - 12:35
(43)
Зашибись. Теперь пишет
{Справочник.ФИО.Форма.ФормаСписка.Форма(29)}: Ошибка при вызове метода контекста (ОткрытьФайл)
    ФайлDBF.ОткрытьФайл(ИмяФайла,,Истина);
по причине:
Перед выполнением операции нужно закрыть базу
   Личунхо
 
45 - 30.01.18 - 12:39
(44)
О! ПОЦОНЫ!
ВсЕМ СПАСИБО!

Всё работает!
   Личунхо
 
46 - 30.01.18 - 12:40
Вот рабочий код!
Перем ИмяФайла ;
&НаКлиенте
   Процедура СинхронизироватьТФ(Команда)
    ДВФ = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    ДВФ.Заголовок    = "Выберите файл для обработки";
   ДВФ.ПредварительныйПросмотр =    Ложь;
   Если ДВФ.Выбрать() Тогда
     ИмяФайла = ДВФ.ПолноеИмяФайла;     
     Иначе
       ИмяФайла = "";
    КонецЕсли;
    СинхронизироватьТФНаСервере(ИмяФайла);
   КонецПроцедуры

&НаСервере
Процедура СинхронизироватьТФНаСервере(ИмяФайла)
    ФайлDBF = Новый XBase;// создаем новый объект 

    ФайлDBF.Кодировка = КодировкаXBase.OEM;
    //ФайлDBF.ОткрытьФайл("C:\TIME\tfoms.dbf",,Истина);// открытие файла

    ФайлDBF.ОткрытьФайл(ИмяФайла,,Истина);
   Сергиус
 
47 - 30.01.18 - 12:44
(0)Если верить автору [Реально программа на одной машине], то достаточно передавать полный путь к файлу(строку), но в случае если будет не на одной машине, работать не будет.
   ptiz
 
48 - 30.01.18 - 12:53
(46) Фи... модальность - это уже устарело.
   dezss
 
49 - 30.01.18 - 14:14
(46) мда...а теперь посмотри, что я тебе писал в (31).
(34) программистом и уже далеко не первый год...учился тоже на программиста, поэтому таких просто наитупейших вопросов у меня не возникает
 
 Рекламное место пустует
   Личунхо
 
50 - 31.01.18 - 11:01
(49) Но ты же написал ошибочный код. )))


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует