Добрый день.
Для работы с электронными таблицами открываю Excel стандартным кодом:
С переходом на арендованную 1С обработки перестали работать на тонком клиенте.
Прошу помочь с интеграцией.
Для работы с электронными таблицами открываю Excel стандартным кодом:
Excel = Новый COMОбъект("Excel.Application");
Книга = Excel.WorkBooks.Open(ФайлИмпорта);
С переходом на арендованную 1С обработки перестали работать на тонком клиенте.
Ошибка открытия MS Excel: {ВнешняяОбработка.Импорт.Форма.Форма.Форма(66)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft Excel): Не удалось найти "C:\Users\ХХХ\Desktop\1.xlsx". Проверьте правильность ввода имени и расположения файла. При попытке открытия файла из списка недавно использованных файлов убедитесь, что файл не был переименован, перемещен или удален.
Прошу помочь с интеграцией.
По теме из базы знаний
Найденные решения
(13) Отвечая вам, понял, что уже ни в чем не уверен). Провайдер предоставляет мне доступ к облачной 1С через тонкий клиент или через WEB-интерфейс на выбор.
Текущее решение такое:
Исходный файл XLS заменен на CSV, тем более, что в моем случае у него строже структура.
Из сети взят код помещения файла во временное хранилище сервера. Как это работает, не понимаю, но работает).
Текущее решение такое:
Исходный файл XLS заменен на CSV, тем более, что в моем случае у него строже структура.
Из сети взят код помещения файла во временное хранилище сервера. Как это работает, не понимаю, но работает).
&НаКлиенте
Процедура Импорт(Команда)
Перем ВыбранноеИмя;
Перем АдресВременногоХранилища;
Если ПоместитьФайл(АдресВременногоХранилища, ВыбранноеИмя, ВыбранноеИмя,
Истина, УникальныйИдентификатор) Тогда
Формирование(АдресВременногоХранилища);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура Формирование(АдресВременногоХранилища)
ПутьНаСервере = "Q:\Temp1csrvu\v8_F3A2_a7.tmp";
ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВременногоХранилища);
ДвоичныеДанные.записать(ПутьНаСервере);
Текст = Новый ЧтениеТекста(ПутьНаСервере, КодировкаТекста.Системная,Символы.ПС,,0);
ТекстСтрокиФайла = Текст.ПрочитатьСтроку();
Текст.Закрыть();
КонецПроцедуры
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) С ComObject стало как-то сложно на новых платформах, сейчас всех перевожу на такое
пока работает на всех платформах, клиентах, серверах и т.п. Почему-то надо именно обе строки, по одной они не работают ))
Попытка
Книга = ПолучитьCOMОбъект(ИмяФайла,);
Книга = ПолучитьCOMОбъект(ИмяФайла, "Excel.Application");
Исключение
Сообщить("НЕ удалось открыть Ексель или найти файл " + ОписаниеОшибки());
Возврат;
КонецПопытки;
пока работает на всех платформах, клиентах, серверах и т.п. Почему-то надо именно обе строки, по одной они не работают ))
(2) (7) Тонкий клиент запускается локально, обработка лежит локально, подгружаемый файл локальный. На удаленном сервере Excel недоступен (пров просит денег), но дело похоже не в этом, т.к. текстовый файл тоже не могу прочесть. См. (4)
(3) Про права не могу пока сказать. Сделал запрос в рарус. 1С арендована на сервисе, как понял - работаю через тонкий клиент.
(4) Похоже, так и есть. Пробую открыть локальный текстовый файл:
В модуле ОбменСБанкомВФормате1С есть код, который приводит к той же ошибке:
(3) Про права не могу пока сказать. Сделал запрос в рарус. 1С арендована на сервисе, как понял - работаю через тонкий клиент.
(4) Похоже, так и есть. Пробую открыть локальный текстовый файл:
ЗагружаемыйФайл = Новый ТекстовыйДокумент;
ЗагружаемыйФайл.Прочитать(ФайлИмпорта);
Ошибка при вызове метода контекста (Прочитать): Каталог не обнаружен
Интересно, как читаются файлы выписки из банк-клиента - такой же локальный файл.
В модуле ОбменСБанкомВФормате1С есть код, который приводит к той же ошибке:
ЧтениеТекста = Новый ЧтениеТекста(ФайлИмпорта, "windows-1251",,,Ложь);
(9)
Работа в сервисе, и работа в тонком клиенте, и работа в терминальном доступе - это все разные технологии подключения к 1С.
Без понимания по какой технологии Вы работаете можно только угадать почему не запускается. Если работаете в сервисе, то обработка должна быть сертифицирована поддержкой сервиса. Обратитесь к ним и предоставьте обработку.
Если терминальный доступ, или терминальный доступ к облаку, то на сервере терминалов должен быть установлен Эксель.
1С арендована на сервисе, как понял - работаю через тонкий клиент.
Работа в сервисе, и работа в тонком клиенте, и работа в терминальном доступе - это все разные технологии подключения к 1С.
Без понимания по какой технологии Вы работаете можно только угадать почему не запускается. Если работаете в сервисе, то обработка должна быть сертифицирована поддержкой сервиса. Обратитесь к ним и предоставьте обработку.
Если терминальный доступ, или терминальный доступ к облаку, то на сервере терминалов должен быть установлен Эксель.
(13) Отвечая вам, понял, что уже ни в чем не уверен). Провайдер предоставляет мне доступ к облачной 1С через тонкий клиент или через WEB-интерфейс на выбор.
Текущее решение такое:
Исходный файл XLS заменен на CSV, тем более, что в моем случае у него строже структура.
Из сети взят код помещения файла во временное хранилище сервера. Как это работает, не понимаю, но работает).
Текущее решение такое:
Исходный файл XLS заменен на CSV, тем более, что в моем случае у него строже структура.
Из сети взят код помещения файла во временное хранилище сервера. Как это работает, не понимаю, но работает).
&НаКлиенте
Процедура Импорт(Команда)
Перем ВыбранноеИмя;
Перем АдресВременногоХранилища;
Если ПоместитьФайл(АдресВременногоХранилища, ВыбранноеИмя, ВыбранноеИмя,
Истина, УникальныйИдентификатор) Тогда
Формирование(АдресВременногоХранилища);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура Формирование(АдресВременногоХранилища)
ПутьНаСервере = "Q:\Temp1csrvu\v8_F3A2_a7.tmp";
ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВременногоХранилища);
ДвоичныеДанные.записать(ПутьНаСервере);
Текст = Новый ЧтениеТекста(ПутьНаСервере, КодировкаТекста.Системная,Символы.ПС,,0);
ТекстСтрокиФайла = Текст.ПрочитатьСтроку();
Текст.Закрыть();
КонецПроцедуры
Показать
(14) На всякий случай дополню: если планируется использование в внешней обработке с безопасным режимом, то запись временного файла будет производиться только с разрешением РазрешениеНаИспользованиеКаталогаВременныхФайлов в ф-ции СведенияОВнешнейОбработке.
ПараметрыРегистрации.Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаВременныхФайлов(Истина,Истина,"Для корректной работы с временными файлами"));
Правильно! Т.к. СОМ объекты создаются на сервере и файлы ищутся на сервере, а у вас тонкий клиент.
Для того что бы заработало надо посношаться с передачей файлов с тонкого клиента на сервер (для веб версии со спецификой) и грузить там файлы из темпа. А так же на сервере должен стоять MS Excel :)
Для того что бы заработало надо посношаться с передачей файлов с тонкого клиента на сервер (для веб версии со спецификой) и грузить там файлы из темпа. А так же на сервере должен стоять MS Excel :)
Улучшил ваш код, для чтения на тонком клиенте
(4)
&НаКлиенте
Процедура ПутьНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) //необходимо в событии "НачалоВыбора" поля ввода вызвать ДиалогВыбораФайла
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = "Выберите файл Excel";
Диалог.ПредварительныйПросмотр = Ложь;
Диалог.Фильтр = "(*.xls,*.xlsx)|*.xls;*.xlsx;|Microsoft Excel 97/2000/XP/2003 (*.xls)|*.xls|Microsoft Excel 2007/2010 (*.xlsx)|*.xlsx";
Если Диалог.Выбрать() Тогда
ВыбранныйФайл = Диалог.ПолноеИмяФайла;
Объект.Путь = ВыбранныйФайл;
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ВыбранныйФайл, СпособЧтенияЗначенийТабличногоДокумента.Текст);
;
////1) Выводим Excel в табличн.документ
НачальнаяСтрока = 2; // внимание, тут мы начинаем перед начальной строкой, назначая имена в таблице!!!
Для а=1 по ТабДок.ШиринаТаблицы Цикл
// делаем что то типа такого:
//ТабДок.Область(2,1).Текст = "Столбец1";
//ТабДок.Область(2,2).Текст = "Столбец2";
//ТабДок.Область(2,3).Текст = "Столбец3";
//ТабДок.Область(2,4).Текст = "Столбец4";
ТабДок.Область(НачальнаяСтрока,а).Текст = "Столбец"+а;
КонецЦикла;
ЧтениеExcel_через_ТД(ТабДок);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЧтениеExcel_через_ТД(ТабДок)
////2) Выгружаем в таблицу значений
НачСтрока = 2; столбцов = ТабДок.ШиринаТаблицы; ВсегоСтрок = ТабДок.Области.Лист1.Низ; НачальныйСтолбец = 1;
ПЗ = Новый ПостроительЗапроса;
ПЗ.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабДок.Область(НачСтрока,НачальныйСтолбец,ВсегоСтрок,столбцов));
ПЗ.ДобавлениеПредставлений = ТипДобавленияПредставлений.НеДобавлять;
ПЗ.ЗаполнитьНастройки();
ПЗ.Выполнить();
ТаблицаЗначений = ПЗ.Результат.Выгрузить();
КонецПроцедуры
Показать(4)
Есть несколько вариантов:
ФайлИмпорта у вас где находится?
каким образом подключаетесь к арендованной 1С?
Установлен ли Excel на удаленном сервере?
Также могу посоветовать использовать или взять за образец штатную обработку 1С в БП "ЗагрузкаДанныхИзВнешнегоИсточника"
ФайлИмпорта у вас где находится?
каким образом подключаетесь к арендованной 1С?
Установлен ли Excel на удаленном сервере?
Также могу посоветовать использовать или взять за образец штатную обработку 1С в БП "ЗагрузкаДанныхИзВнешнегоИсточника"
В модуле загрузки Классификатора найден код:
1. Как понимаю, создается временный файл на сервере провайдера.
2. Создается ссылка(?) на импортируемый файл
3. Запись содержимого во временный файл.
4. Обработка временного файла.
Повторить не удалось:
ИмяВременногоФайла = ПолучитьИмяВременногоФайла();
ДвоичныеДанныеФайла = ПолучитьИзВременногоХранилища(АдресФайла);
ДвоичныеДанныеФайла.Записать(ИмяВременногоФайла );
ФайлЧтение.ОткрытьФайл(ИмяВременногоФайла);
1. Как понимаю, создается временный файл на сервере провайдера.
2. Создается ссылка(?) на импортируемый файл
3. Запись содержимого во временный файл.
4. Обработка временного файла.
Повторить не удалось:
Ошибка создания документов: {ВнешняяОбработка.Импорт.Форма.Форма.Форма(113)}: Ошибка при вызове метода контекста (ПолучитьИзВременногоХранилища): Ошибка получения значения из временного хранилища: Неправильный путь к файлу 'C:\Users\...
Вот ответ провайдера:
Обработки выполняющие загрузку файлов в базу при работе через тонкий клиент будут использовать com-объекты на том ПК где они исполняются,т.е com-объекты Excel или Open Office должны быть установлены на этом ПК. В коде обработки должно быть указано выполнение процедуры "На клиенте".
Т.к. мне неудобно пересылать на сервер файл построчно, остановился на приведенном выше варианте текстового CSV документа, передаваемого целиком во временное хранилище сервера.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот