|
Выбор файла на сервере | ☑ | ||
---|---|---|---|---|
0
Личунхо
30.01.18
✎
10:56
|
Здравствуйте!
1С:Предприятие 8.3 (8.3.4.437) Реально программа на одной машине. Но! Есть строка, которая прекрасно работает в блоке для сервера( т.е. &НаСервере): ФайлDBF.ОткрытьФайл("C:\TIME\tfoms.dbf",,Истина);// открытие файла Задача: Вставить вместо явного пути переменную, которую выбираем в диалоге с пользователем, типа: ФайлDBF.ОткрытьФайл(ИмяФайла,,Истина);// открытие файла А диалог выбора файла работает ТОЛЬКО в блоке для клиента (т.е.&НаКлиенте): ДВФ = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); ДВФ.Заголовок = "Выберите файл для обработки"; ДВФ.ПредварительныйПросмотр = Ложь; Если ДВФ.Выбрать() Тогда ИмяФайла = ДВФ.ПолноеИмяФайла; Иначе ИмяФайла = ""; КонецЕсли; Так вот имя файла из одного блока в другой не передаётся! Даже если объявить переменную глобально: Перем ИмяФайла; Дурдом! И как быть? |
|||
1
cw014
30.01.18
✎
11:00
|
Передавать на сервере в виде параметра процедуры?
|
|||
2
chelentano
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) Да ничего не показывает. В этом блоке (&НаКлиенте) всё работает и переменная получает ПОЛНЫЙ ПУТЬ к файлу и тут же может быть выведена на экран.
А её нужно передать в код для СЕРВЕЕРА (&НаСервере). |
|||
8
chelentano
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
|
На сервер можно передать через хранилище
|
|||
12
chelentano
30.01.18
✎
11:15
|
(11) Строку с именем файла? Да, тут без хранилища никак
|
|||
13
Мимохожий Однако
30.01.18
✎
11:16
|
(12) Строку передать можно )) Только можно нарваться на кукиш
|
|||
14
Мыш
30.01.18
✎
11:17
|
(0) Всё правильно. Платформа работает как надо.
|
|||
15
dezss
30.01.18
✎
11:17
|
ОФФ: боюсь спрашивать кем ТС работает. Геодезист?
|
|||
16
Мыш
30.01.18
✎
11:17
|
(15) Менеджер по формированию планетных систем.
|
|||
17
dezss
30.01.18
✎
11:19
|
(0)
Если ДВФ.Выбрать() Тогда ТвояПроцедураНаСервере(ДВФ.ПолноеИмяФайла); КонецЕсли &НаСервере Процедура ТвояПроцедураНаСервере(ПолноеИмяФайла) ФайлDBF.ОткрытьФайл(ПолноеИмяФайла,,Истина); КонецПроцедуры |
|||
18
chelentano
30.01.18
✎
11:20
|
(17) Ну вот, пришёл и всё опошлил
|
|||
19
dezss
30.01.18
✎
11:21
|
(18) Погодь. Не факт, что ему все будет понятно)))
|
|||
20
dezss
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) МимохожийОднако
Мимохожий, остынь. Нужно передать СТРОКУ, а не файл. Быстро, кратко и эффективно. ))) |
|||
26
dezss
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",,Истина); |
|||
29
catena
30.01.18
✎
12:03
|
(28)И где в твоей процедуре параметр?
|
|||
30
Личунхо
30.01.18
✎
12:06
|
(29) В катманде.
Читай первое сообщение. Строка: ФайлDBF.ОткрытьФайл(ИмяФайла,,Истина); НЕ работает. Переменная ИмяФайла НА СЕРВЕР не передается. |
|||
31
dezss
30.01.18
✎
12:09
|
(30) да твою ж...
я тебе уже написал, как передавать... на клиенте СинхронизироватьТФНаСервере(ИмяФайла); на сервере Процедура СинхронизироватьТФНаСервере(ИмяФайла) ..... ФайлDBF.ОткрытьФайл(ИмяФайла,,Истина); у тебя и с глазами тоже плохо? |
|||
32
Мыш
30.01.18
✎
12:10
|
(30) Дерзкий паренек )
> Процедура СинхронизироватьТФНаСервере() Тут нет ни одного параметра. > Переменная ИмяФайла НА СЕРВЕР не передается. Ты её не передаешь, вот она и не передается ))) |
|||
33
dezss
30.01.18
✎
12:13
|
ОФФ: реально, кем ты работаешь?
|
|||
34
Личунхо
30.01.18
✎
12:14
|
(31) Dezss, а ты реально кем? )))
Как только вставляю твой код сразу лезет ошибка (Я уже писал): {Справочник.ФИО.Форма.ФормаСписка.Форма(13,30)}: Слишком много фактических параметров (СинхронизироватьТФНаСервере) СинхронизироватьТФНаСервере(<<?>>ИмяФайла); (Проверка: Тонкий клиент) |
|||
35
catena
30.01.18
✎
12:18
|
(34)Осторожнее в общении, да?
Ты процедуре сказал, что ей нужно ждать параметр? |
|||
36
Мимохожий Однако
30.01.18
✎
12:21
|
ТС Не читатель, ТС- писатель. Твою мать..
|
|||
37
ptiz
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) В скобочках процедуры напиши название параметра.
|
|||
43
catena
модератор
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)Если верить автору [Реально программа на одной машине], то достаточно передавать полный путь к файлу(строку), но в случае если будет не на одной машине, работать не будет.
|
|||
48
ptiz
30.01.18
✎
12:53
|
(46) Фи... модальность - это уже устарело.
|
|||
49
dezss
30.01.18
✎
14:14
|
(46) мда...а теперь посмотри, что я тебе писал в (31).
(34) программистом и уже далеко не первый год...учился тоже на программиста, поэтому таких просто наитупейших вопросов у меня не возникает |
|||
50
Личунхо
31.01.18
✎
11:01
|
(49) Но ты же написал ошибочный код. )))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |