загрузить файл эксель на сервере

1. XelOla 17 12.05.21 16:53 Сейчас в теме
Гуглила, читала, пробовала применять
остановилась на этом
&НаКлиенте
Процедура Загрузить(Команда)
	Файл = Новый ДвоичныеДанные(ОБъект.ИмяФайла);
	Адрес = ПоместитьВоВременноеХранилище(Файл, ЭтаФорма.УникальныйИдентификатор);
	//ОбработатьНаСервере(Адрес);
	ЗагрузитьНаСервере(Адрес);
КонецПроцедуры

&НаСервере
Процедура ЗагрузитьНаСервере (ФайлВХранилище)
	Попытка 
		ex = ПолучитьCOMобъект("","Excel.Application");
	Исключение
		Сообщить("Excel Application не создан!!");
		Возврат;
	КонецПопытки;
	ДвоичныеДанные = ПолучитьИзВременногоХранилища(ФайлВХранилище);
	
	тПуть = КаталогВременныхФайлов() + "123.xlsx"; //для примера...
	ДвоичныеДанные.Записать(тПуть);	
	Попытка
		ex.workbooks.open.Open(тПуть,,Истина,,,,,,,,Ложь);
	Исключение
		Сообщить("Файл перемещен или удален!");
		Возврат;
	КонецПопытки;
Показать


и ВСЕ РАВНО НЕ ПОЛУЧИЛОСЬ!
Помогите пожалуйста
Лучше всего - рабочей обработкой, читающей файл Эксель на сервере 1С на SQL


Управляемые формы. MS SQL. И база и эксель физически лежат на одной машине. Но эксель упорно не открывается, мол 1с не видит его. COMОбъект на клиенте вроде как нельзя создавать. Как боритесь с этой ситуевиной?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. BuryMeInVegas 12.05.21 16:59 Сейчас в теме
Так а проблема в чём? Вы открыли книгу Excel, а прочитать данные с листов в этой книге? На этом этапе Вы будто бы почистили картошку и удивляетесь, почему она ещё не пожарена. Очевидно, потому что её нужно ещё пожарить. :)
3. BuryMeInVegas 12.05.21 17:01 Сейчас в теме
(1) Вот кусочек кода, где я забираю данные из одного листа Excel и кидаю на другой.
// Открываем временный файл КонтрольИсключений, копируем в нём лист с данными и вставляем эти данные в лист книги Excel приемника
	КнигаКонтрольИсключений = ОткрытьExcelДокумент.WorkBooks.Open(ВременныйКаталог + "КонтрольИсключений.xlsx");
	ЛистКонтрольИсключений  = КнигаКонтрольИсключений.WorkSheets(1).Cells.Select();
	
	НовыйЛистКонтрольИсключений 	 = НоваяКнига.WorkSheets.Add();
	НовыйЛистКонтрольИсключений.Name = "Контроль исключений";
	
	ОткрытьExcelДокумент.Selection.Copy();
	НовыйЛистКонтрольИсключений.Paste();
Показать


https://infostart.ru/public/398279/ - Вот тут есть куча приёмов для работы с Excel.
svetanik; +1 Ответить
4. andy_zhav 197 12.05.21 17:08 Сейчас в теме
(1) Почитайте про метод табличного документа "Прочитать"

Позволяет загрузить в табличный документ файл экселя. Не требует установки экселя
Прикрепленные файлы:
gentle; ubnkfl; SlavaKron; +3 Ответить
5. vadim.semyonov.rzn 12.05.21 17:42 Сейчас в теме
(4) Согласен, "прочитать" гораздо универсальнее. Например, на сервере может не быть офиса. А помещать во временное хранилище лучше всего через НачатьПомещениеФайла (BeginPutFile). СП в помощь
svetanik; +1 Ответить
6. BuryMeInVegas 12.05.21 17:52 Сейчас в теме
(4) В случае, когда нужно просто скопипастить лист Excel в ТабДок, а потом читать данные с ТабДока, согласен, удобнее.
7. unknown181538 153 12.05.21 19:13 Сейчас в теме
(4) Правда, насколько я понимаю, он только с одного листа читает. Иногда не хватает возможности лист выбрать.
26. ubnkfl 13.05.21 09:51 Сейчас в теме
(7) После чтения многостраничного документа в табличный документ у таб. дока появляются именованные области по названиям страниц Эксель. Потом получите нужную область.
unknown181538; +1 Ответить
28. XelOla 17 13.05.21 09:52 Сейчас в теме
(26) вот лучше б , честно, кинули готовое решение
29. ubnkfl 13.05.21 09:53 Сейчас в теме
(28) ты мне тогда зарплату скинь свою
unknown181538; nomad_irk; Sashares; +3 Ответить
30. FatPanzer 13.05.21 09:53 Сейчас в теме
8. XelOla 17 12.05.21 21:36 Сейчас в теме
да проблема в клиент-серверной 1С,
в файловой все отлично.
9. FatPanzer 12.05.21 23:00 Сейчас в теме
(8) Так в чем проблема-то?
10. XelOla 17 13.05.21 08:30 Сейчас в теме
(9) на форме путь к файлу, серверная 1с говорит нет файла по этому адресу.
Прикрепленные файлы:
ЗагрузкаЛидов (2).epf
12. FatPanzer 13.05.21 09:13 Сейчас в теме
(10) А на самом деле он есть? Что нам показывает проводник в этой папке? Используйте Файл.Существует() для проверки физического наличия файла на диске.
15. XelOla 17 13.05.21 09:26 Сейчас в теме
(11)
(12)
файл есть естественно, но толи прав USRV8 не хватает, толи сервер 1С запущен на другом (физически) сервере.
Это не мой сервер - не могу знать. в Файловой на том же вин-сервере работает.
16. FatPanzer 13.05.21 09:31 Сейчас в теме
(15)
но толи прав USRV8 не хватает
Ну так проверьте на сервере Файл.Существует() - создался он или нет именно на сервере. Долго еще в телепатов играть собираетесь?
21. XelOla 17 13.05.21 09:44 Сейчас в теме
(16) НЕ МОГУ, ксатти, точка останова НАСервере не срабатывает. (НАПОМИНАЮ, сервер ЧУЖОЙ)
23. FatPanzer 13.05.21 09:46 Сейчас в теме
(21) Причем тут точка останова? У вас есть метод Сообщить()
Еще раз повысишь голос - будешь сама со своими проблемами трахаться.
27. XelOla 17 13.05.21 09:52 Сейчас в теме
(23) Файл = Новый ДвоичныеДанные(ОБъект.ИмяФайла);
Адрес = ПоместитьВоВременноеХранилище(Файл, ЭтаФорма.УникальныйИдентификатор);
//ОбработатьНаСервере(Адрес);
Сообщить(Файл.Существует());
Это на Клиенте
Метод объекта не обнаружен (Существует)
{ВнешняяОбработка.ЗагрузкаЛидов.Форма.Форма.Форма(17)}: Сообщить(Файл.Существует());
31. FatPanzer 13.05.21 09:54 Сейчас в теме
(27) Читаем СП и смотрим, к каким объектам применяется метод Существует(). Уж точно не к двоичным данным.
32. XelOla 17 13.05.21 09:54 Сейчас в теме
(30)
(23)
ДвоичныеДанные = ПолучитьИзВременногоХранилища(ФайлВХранилище);
	
	тПуть = КаталогВременныхФайлов() + "123.xlsx"; //для примера...
	ДвоичныеДанные.Записать(тПуть);
	Сообщить(тПуть.Существует());

НаСервере
{ВнешняяОбработка.ЗагрузкаЛидов.Форма.Форма.Форма(35)}: Значение не является значением объектного типа (Существует)
	Сообщить(тПуть.Существует());
Показать
33. FatPanzer 13.05.21 09:58 Сейчас в теме
(32) ... и уж точно не к строковой переменной.
34. XelOla 17 13.05.21 10:01 Сейчас в теме
(33) как тогда? явно написать? или
35. FatPanzer 13.05.21 10:03 Сейчас в теме
(34) или включить Синтакс-Помощник и найти там метод Существует()
11. andy_zhav 197 13.05.21 09:12 Сейчас в теме
(1) А кто вам сказал что com объект на клиенте нельзя создавать? Очень даже можно. Попробуйте сделать чтение на клиенте
13. andy_zhav 197 13.05.21 09:16 Сейчас в теме
(10) Странный способ создания COM объекта у вас.

Попробуйте вместо ex = ПолучитьCOMобъект("","Excel.Application");
использовать ex = Новый ("Excel.Application");

Работает и на клиенте и на сервере
14. XelOla 17 13.05.21 09:24 Сейчас в теме
(13) ВЫ МЕНЯ СЛЫШИТЕ??? эксель не трогаем, все ок. НЕТ ДОСТУПА К ФаЙЛУ!!!
17. andy_zhav 197 13.05.21 09:41 Сейчас в теме
(14)
Вот это

&НаСервере
Процедура ЗагрузитьНаСервере (ФайлВХранилище)


замените на вот это

&НаКлиенте
Процедура ЗагрузитьНаСервере (ФайлВХранилище)


И будет вам счастье. Не нужно будет играться с правами и прочим для пользователя серверного
18. XelOla 17 13.05.21 09:43 Сейчас в теме
(17) господи, о чем вы говорите?! зачем?! у меня потом идет создание справочника, его я тоже НаКлиенте создавать буду!?
20. FatPanzer 13.05.21 09:44 Сейчас в теме
(18) А в чем проблема передать уже прочитанные данные потом на сервер?
unknown181538; +1 Ответить
19. XelOla 17 13.05.21 09:44 Сейчас в теме
(17) вы думаете я просто, для себя открываю файл Эксель? просто на него посмотреть!?
22. andy_zhav 197 13.05.21 09:44 Сейчас в теме
(18) Поверьте, так правильнее. Если у вас в организации все лицензированное, то хороший админ вам не скажет спасибо, если эксель будет установлен на сервере, ибо это в плане лицензирования ГОРАЗДО дороже.
FatPanzer; +1 Ответить
24. XelOla 17 13.05.21 09:46 Сейчас в теме
(22) мне пофиг на этого админа, на этот сервер, мне надо выполнить разовую работу. по переносу данных из Экселя в справочник УНФ, мне надо из файла Эксель наСервере получить данные.
36. Sashares 34 13.05.21 10:07 Сейчас в теме
(24) Разовая работа.
Если вы не умеете переносить файл на сервер (нигде же примеров посмотреть нельзя, действительно), создайте на форме обработки табличный документ скопируйте в него данные из екселя вручную, обработайте этот табличный документ.
Дел на 5 минут.
39. XelOla 17 13.05.21 10:13 Сейчас в теме
(36) дело в том, что уже не первый раз возвращают по такой причине, прошлый раз человек сумел на сервере запуститься с консоли (не уверена, что верно пишу,) и обработка заработала.
25. andy_zhav 197 13.05.21 09:50 Сейчас в теме
(24) Если сервер чужой, есть явные проблемы с правами или еще чем-то, и эти проблемы на СЕРВЕРЕ не решаются, то единственное решение - сделать это на клиенте и передать на сервер данные для формирования справочника.

или вы хотите чтобы здесь нашли ответственного админа за сервер и сказали на что нужно дать права? Вам подсказывают реальные способы решения а вы не слышите
FatPanzer; +1 Ответить
37. andy_zhav 197 13.05.21 10:08 Сейчас в теме
(32)
&НаКлиенте
Процедура Загрузить(Команда)
    Файл = Новый Файл(ОБъект.ИмяФайла);
    Если Не Файл.Существует() Тогда
      Сообщить("ФАЙЛ НЕ СУЩЕСТВУЕТ");
      Возврат;
    КонецЕсли;
    Попытка 
        ex = ПолучитьCOMобъект("","Excel.Application");
    Исключение
        Сообщить("Excel Application не создан!!");
        Возврат;
    КонецПопытки;
    Попытка
        ex.workbooks.open.Open(Файл.ПолноеИмя,,Истина,,,,,,,,Ложь);
    Исключение
        Сообщить(ОписаниеОшибки());
        Возврат;
    КонецПопытки;
КонецПроцедуры
Показать
42. XelOla 17 13.05.21 10:17 Сейчас в теме
(37) что я буду делать на клиенет с файлом, предеавать на сервер строки?
вот так тоже не открыл
ДвоичныеДанные = ПолучитьИзВременногоХранилища(ФайлВХранилище);

тПуть = КаталогВременныхФайлов() + "123.xlsx"; //для примера...
ДвоичныеДанные.Записать(тПуть);
КаталогНаДиске = Новый Файл(тПуть);
Сообщить(КаталогНаДиске.Существует());
Сообщить( тПуть);
Попытка
ex.workbooks.open.Open(КаталогНаДиске,,Истина,,,,,,,,Ложь);
Исключение
Сообщить("Файл перемещен или удален!");
Возврат;
КонецПопытки;
47. unknown181538 153 13.05.21 12:23 Сейчас в теме
(42) заполнить таблицу обработки или табличную часть , и она будет доступна на сервере без дополнительных движений
38. XelOla 17 13.05.21 10:12 Сейчас в теме
(33)
ДвоичныеДанные = ПолучитьИзВременногоХранилища(ФайлВХранилище);
	
	тПуть = КаталогВременныхФайлов() + "123.xlsx"; //для примера...
	ДвоичныеДанные.Записать(тПуть);
	 КаталогНаДиске = Новый Файл(тПуть);
	Сообщить(КаталогНаДиске.Существует());
	Попытка
		ex.workbooks.open.Open(тПуть,,Истина,,,,,,,,Ложь);
	Исключение
		Сообщить("Файл перемещен или удален!");
		Возврат;
	КонецПопытки;
Показать

НаСервере, сообщить ответил ДА!
Но тут же - Файл перемещен или удален написал,
соответсвенно, ничего не загрузил
40. FatPanzer 13.05.21 10:16 Сейчас в теме
(38) Ну, значит на сервер стоит не такой эксель. Или идите к админу, или работайте на клиенте (хоть с файлом, хоть с табдоком - вариантов уже накидали достаточно)
43. XelOla 17 13.05.21 10:18 Сейчас в теме
(40) на файловый работает
44. FatPanzer 13.05.21 10:20 Сейчас в теме
(43) Потому что права разные, потому и работает.
46. XelOla 17 13.05.21 10:28 Сейчас в теме
(44)
usrv8 не имеет права запускать com объекты чтоли?
41. andy_zhav 197 13.05.21 10:17 Сейчас в теме
Кстати, а точно так нужно открывать файл экселя через ком объект? точно уже не помню, но мне кажется ошибка там не изза наличия или отсутствия файла.

Вот тут например совсем другой способ открытия листа экселя. Возможно ошибка у вас в исключении изза ошибки в ком объекте
Попытка
Excel = Новый COMОбъект("Excel.Application");
Excel.WorkBooks.Open(ИмяФайла);
Состояние("Обработка файла Microsoft Excel...");
Исключение
Сообщить("Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!");
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;

Попытка
//Открываем необходимый лист

Excel.Sheets(1).Select();// лист 1, по умолчанию

Исключение
//Закрываем Excel
Показать
45. XelOla 17 13.05.21 10:27 Сейчас в теме
(41)
хорошо, значит, читаю на клиенте, на сервер передаю данные в структуре
и через заполнитьзначенияСвойств
48. user1135816 4 13.05.21 12:56 Сейчас в теме
На клиенте прочиать файл в табличныйдокумент. далее табличный перефразировать в таблицу значений или таблица на форме. На сервере использовать данные из таблицы для создания файла.
П.с. что у вас выдает данные строки: ТабДок = Новый ТабличныйДокумент; ТабДок.Прочитать(ПутьКФайлу, СпособЧтения); Что в табдок или какая ошибка?
(45)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот