Имя: Пароль:
1C
1С v8
Загрузка из Exel
0 Falanger
 
23.08.17
16:05
Здравствуйте.
Самая заезжанная тема из всех возможных. Но вот встал вопрос и можно переписать слегка по другому, но хочется понять почему ей так не нравится. вот код:
&НаКлиенте
Процедура ПутьКФайлуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    Диалог.Заголовок = "Выбор файла";
    Диалог.Фильтр = "Excel файлы(*.xls;*.xlsx)|*.xls;*.xlsx";
    Диалог.ИндексФильтра = 0;
    Диалог.ПредварительныйПросмотр = Ложь;
    Диалог.ПроверятьСуществованиеФайла = Истина;
    Диалог.МножественныйВыбор = Ложь;
    Диалог.ПолноеИмяФайла = ПутьКФайлу;
    Элемент.Значение = Диалог.ПолноеИмяФайла;
    Если Диалог.Выбрать() Тогда
    ПутьКФайлу = Диалог.ПолноеИмяФайла;
    КонецЕсли;

КонецПроцедуры
Элемент.Значение не хочет понимать, или это только для обычного приложения?
1 Lexey_
 
23.08.17
16:12
(0) да
2 Falanger
 
23.08.17
16:13
))) заездили тему, что не вызывает интереса
3 Falanger
 
23.08.17
16:14
никак не найду что поправить для управляемой формы, хочется что бы откликалась
4 Lexey_
 
23.08.17
16:17
(3) устанавливай значение реквизита формы, а не элемента формы
5 Falanger
 
23.08.17
16:25
так пробовал, говорит что поле объекта не обнаружено.
не пойму это связано с тем что тип реквизита - любая ссылка? надо на строку переделывать и писать команду?
так не хотел, хотел по проще.
Просто до этого писал на обычных приложениях, а тут чёта к вечеру заработался)
6 Lexey_
 
23.08.17
16:27
(5) значит, не так делал
7 Falanger
 
23.08.17
16:34
(6) ну об этом я догадался, вряд ли стал бы тревожить если смог справится сам.
8 Falanger
 
23.08.17
16:35
не соображу как установить значение реквизите, всё вроде стандартно делаю
9 Lexey_
 
23.08.17
16:36
(8) что значит стандартно?
10 Wirtuozzz
 
23.08.17
16:37
(8) Реквизит доступен через отладчик? он на форму то выведен?
11 Falanger
 
23.08.17
16:43
на форме реквизит да есть, ПутьКФайлу (тип любая ссылка), что-то не верно?
12 Falanger
 
23.08.17
16:44
(9) стандартно - это код пред вами (0), как мне кажется (конечно ошибаюсь раз не работает), что так и должно быть, только элемент надо заменить, а как не соображу
13 Numerus Mikhail
 
23.08.17
16:45
(11) ПутьКФайлу должен быть строкой, по моим подсчетам.
А в коде замени Элемент.Значение на ПутьКФайлу
14 Numerus Mikhail
 
23.08.17
16:45
Или я уже заработался и не понимаю что происходит
15 Falanger
 
23.08.17
16:46
(10) через отладчик он его видит как поле формы
16 Falanger
 
23.08.17
16:47
сам заработался, но (13) если должен быть строкой, тогда надо команду добавлять иначе как выбрать файл(ПутьКФайлу)
17 Wirtuozzz
 
23.08.17
16:47
(11) тип не тот. должна быть строка неограниченной длины.
18 Numerus Mikhail
 
23.08.17
16:49
(16)  Вот рабочий код

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

Я вообще не очень понимаю, зачем у вас строки

    Диалог.ПолноеИмяФайла = ПутьКФайлу;
    Элемент.Значение = Диалог.ПолноеИмяФайла;
19 Falanger
 
23.08.17
16:51
(18) верхняя согласен, лишняя)
20 Numerus Mikhail
 
23.08.17
16:52
(19) И нижняя тоже)
обе строчки убрать и всё будет работать
21 Falanger
 
23.08.17
16:55
а чем же вызвать файл? xls-который. Если тип реквизита -
строка
22 Falanger
 
23.08.17
16:57
в команде писать?
23 Numerus Mikhail
 
23.08.17
16:59
(21) Как понять чем вызвать?
Что должно происходить после того, как выбран файл?
24 dezss
 
23.08.17
17:02
(21) Диалог нужен только для того, чтобы получить ПутьКФайлу. Он не получит сам файл. Сам файл потом получай и обрабатывай по тому пути, который вернет диалог.
25 Falanger
 
23.08.17
17:13
сорри не верно выразился. Имел ввиду при коде (18) и реквизите формы ПутьКФайлу (тип Строка), как Диалог поймёт какой файл. Файл нужно выбрать
А как выбрать его можно ссылкой?
26 dezss
 
23.08.17
17:19
(25) Диалог, это окошко выбора файла, которое нужно только для того, чтобы пользователь показал где этот файл лежит.
Диалог ничего не понимает, понимать должен именно пользователь, который его использует.

А если ты уже знаешь где этот файл, то нафиг тебе диалог вообще?

Блин, вроде ж не пятница. Народ заработался, новогодние праздники нужны уже)))
27 Numerus Mikhail
 
23.08.17
17:20
(25) Что значит выбрать файл ссылкой?

На строчке Если ДиалогОткрытияФайла.Выбрать() Тогда

появится диалог выбора файла. Там ты выберешь нужный и запишешь путь к этому файлу

затем уже будешь работать с файлом, путь которого тебе известен

XLS = Новый COMОбъект("Excel.Application");
FileXLS = XLS.WorkBooks.Open(ПутьКФайлу);

ну или чего там тебе надо
28 Falanger
 
23.08.17
17:28
Да уж даже не четверг))
какой тип должен быть у реквизита формы ПутьК Файлу?
29 Numerus Mikhail
 
23.08.17
17:33
(28) СТРОКА
30 Вафель
 
23.08.17
17:33
(28) Ты же сам написал в (25)
31 Falanger
 
23.08.17
17:54
Ох, совсем запутался. Вод код, но я никак не пойму как  указать путь к файлу xls который у меня на диске лежит.
&НаКлиенте
Процедура ПутьКФайлуНачалоВыбора(ПутьКФайлу, ДанныеВыбора, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    ДиалогОткрытияФайла.Заголовок = "Выберите файл";
    ДиалогОткрытияФайла.Фильтр = "Exel файлы (*.xls;*.xlsx)|*.xls;*.xlsx";
    ДиалогОткрытияФайла.ИндексФильтра = 0;
    
    Если ДиалогОткрытияФайла.Выбрать() Тогда
        ПутьКФайлу = ДиалогОткрытияФайла.ПолноеИмяФайла;
    КонецЕсли;
       Объект.Свойство(ПутьКФайлу);
    
КонецПроцедуры


&НаСервереБезКонтекста
Функция  ПутьКФайлуНачалоВыбораНаСервере1(ТЗ = Неопределено, ПутьКФайлу = Неопределено, НомерПервойСтроки = 1, НомерПервойКолонки = 1, ВсегоСтрок = 0, ВсегоКолонок = 0) Экспорт
    
//Если ЛистЭксель = Неопределено Тогда
    ЛистЭксель = ПолучитьCOMОбъект("Excel.Application");
    Книга = ЛистЭксель.WorkBooks.Open(ПутьКФайлу);

//КонецЕсли;
Если ВсегоСтрок = 0 Тогда
    ВсегоСтрок = ЛистЭксель.Cells.SpecialCells(11).Row;
КонецЕсли;
Если ВсегоКолонок = 0 Тогда
    ВсегоКолонок = ЛистЭксель.Cells.SpecialCells(11).Column;
КонецЕсли;
Если ТЗ = Неопределено Тогда
    ТЗ =  Новый ТаблицаЗначений;
    Для Счетчик = 1 По ВсегоКолонок Цикл
        ТЗ.Колонки.Добавить("Колонка"+Счетчик, Новый ОписаниеТипов("Строка"));
    КонецЦикла;
КонецЕсли;
Для Счетчик = НомерПервойСтроки По ВсегоСтрок Цикл
    НоваяСтрока = ТЗ.Добавить();
КонецЦикла;

Область = ЛистЭксель.Range(ЛистЭксель.Cells(НомерПервойСтроки,НомерПервойКолонки), ЛистЭксель.Cells(ВсегоСтрок,ВсегоКолонок));
Данные = Область.Value.Выгрузить();

Для Счетчик = 0 По ВсегоКолонок-1 Цикл
    ТЗ.ЗагрузитьКолонку(Данные[Счетчик], Счетчик);
КонецЦикла;
ЛистЭксель = Неопределено;
Возврат ТЗ;

КонецФункции
32 Falanger
 
23.08.17
17:55
Объект.Свойство(ПутьКФайлу); - не обращаем внимание, случайно попало))
33 Falanger
 
23.08.17
17:56
Жёстко привязываться к файлу не вариант, он может перемещаться.
34 Numerus Mikhail
 
23.08.17
18:00
(33) Если он может перемещаться, то никак
Придумывай другую реалиацию
храни его в хранилище значений в самой базе тогда
35 Falanger
 
23.08.17
18:05
Неужели в управляемой форме нельзя сделать реквизит с кнопкой выбора, чтобы можно было указать месторасположения файла и далее с ним работать?
В простой форме я так и делал. Был реквизит с кнопкой выбора, тыкал в его местонахождение и далее по цепочке..
36 Fram
 
23.08.17
18:24
казалось бы, а причем тут Excel?
37 Fram
 
23.08.17
18:27
(35) можно. делай. я, например, так и не понял в чем проблема?
38 Fram
 
23.08.17
18:38
(31) подразумевается что ПутьКФайлуНачалоВыбораНаСервере1 будет вызываться с клиента?.. не будет работать
39 Tateossian
 
23.08.17
19:23
(19) Не лишняя. Это чтоб диалог выбора спозиционировался на ранее выбранном файле, если путь к нему заполнен.
40 dezss
 
24.08.17
10:03
(31) теперь все понятно. Ты наткнулся на те же грабли, на какие тыкаются почти все, когда переходят на УФ. У тебя ПутьКФайлу - это путь на клиенте, т.е. на самом клиентсом компе, а ты пытаешься этот путь открыть на сервере (да-да, на физическом сервере), а там его тупо нет, так как это путь на клиенте!!!
Про делай все на клиенте, не пихай в ТЗ, а пихай в массив структур и все будет гут.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.