Ошибка открытия файла для чтения xls 1с

   falselight

27.04.20 — 05:05

Подскажите пожалуйста, в чем может быть ошибка, открытия .xls листа?

    Попытка

        Excel = Новый COMОбъект(«Excel.Application»);

        Excel.WorkBooks.Open(Файл);

    Исключение

        Сообщить(«Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!»);

        Сообщить(ОписаниеОшибки());

        Возврат 0;

    КонецПопытки;

Выходит сообщение об ошибке, —

Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!

{ВнешняяОбработка.LOADxls.Форма.Форма.Форма(18)}: Ошибка при вызове конструктора (COMОбъект): -2147220994(0x800401FE): Приложение было запущено, но оно не зарегистрировало фабрику классов

   falselight

1 — 27.04.20 — 05:20

Ошибка, на этой строке.

Excel = Новый COMОбъект(«Excel.Application»);

Запустил другой конфигуратор. Там такой ошибки нет.

   falselight

2 — 27.04.20 — 05:39

Может что известное. Хотел узнать.

Пока работаю под другим конфигуратором.

   Василий Алибабаевич

3 — 27.04.20 — 08:00

(0)

1. Если все расположено на клиентской машине — нужно установить нормальный Excel.

2. Если на сервере — п. 1 и проверить права пользователя ОС на создание COM объектов.

   SleepyHead

4 — 27.04.20 — 08:37

(0) А что, читать через табличный документ уже нельзя?

   falselight

5 — 27.04.20 — 11:01

(3) (4) Дело в том что не работает на одной из версий платформы. На которой я начал делать.

Вот и не понял. Открыл другую, так как не давно пробовал делать тоже самое. и там так же.

В начале же нужно прочитать с Эксель. Вот с него не читалось.

   H A D G E H O G s

6 — 27.04.20 — 11:23

ЛивингСтар, ты ли это?

   SleepyHead

7 — 27.04.20 — 11:27

(5) Ты вообще понял, что написано в (4)?

Читай через табличный документ,а  не ком-объект. И будет тебе счастье.

   ChMikle

8 — 27.04.20 — 14:17

(0) База какая SQL или файловая и где выполняется >>Excel = Новый COMОбъект(«Excel.Application»); в процедуре

&НаКлиенте или &НаСервере ?

   Ram_zes

9 — 27.04.20 — 14:20

(0) считай это дерьмо через табличный документ

   Ram_zes

10 — 27.04.20 — 14:21

(0) и да

Тут рука профи нужна.

zmb@list.ru

Загрузка файла будет 1500 на карту стоить. Предоплата 100%.

   falselight

11 — 27.04.20 — 16:39

(4) Да как то привык так вот эксель открывать при загрузке с него.

А не копировать и вставлять в табличный документ.

   falselight

12 — 27.04.20 — 16:40

(8) На сервере конечно, как обычно.

&НаСервере

Функция СоздатьТЗсXLSЛистов(Файл)

    Таблица = Новый ТаблицаЗначений;

    Попытка

        Excel = Новый COMОбъект(«Excel.Application»);

        Excel.WorkBooks.Open(Файл);

    Исключение

        Сообщить(«Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!»);

        Сообщить(ОписаниеОшибки());

        Возврат 0;

    КонецПопытки;

    Попытка

        Excel.Sheets(1).Select();  

    Исключение

        Excel.ActiveWorkbook.Close();     

        Excel = 0;

        Сообщить(«Файл » + Строка(Файл)+» не соответствует необходимому формату! Первый лист не найден!»);

        ОтменитьТранзакцию();

        Возврат 0;

   falselight

13 — 27.04.20 — 16:40

(8) В данный момент файловая.

   falselight

14 — 27.04.20 — 16:42

(10) А как вы сообщение отредактировали свое????

   ChMikle

15 — 27.04.20 — 16:43

(12) Попробуйте создать процедуру  &НаКлиенте и в процедуре открыть файл . Кстати Ексель стоит на компе, где пытаетесь  файл считать.

&НаКлиенте процедура()

  Попытка

        Excel = Новый COMОбъект(«Excel.Application»);

        Excel.WorkBooks.Open(Файл);

    Исключение

        Сообщить(«Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!»);

        Сообщить(ОписаниеОшибки());

        Возврат 0;

    КонецПопытки;

   falselight

16 — 27.04.20 — 17:13

(15) Тут вопрос был, почему под одной платформой не работает.

Идет ошибка что в (0). А под другой работает.

Я этого не мог понять. Может что с платформой.

Попробую ваш совет.

А ещё на сервере такой метод может не сработать, вроде как была как то у меня информация. Там как то иначе нужно.

Может это вот этот ваш совет про это. Я там встретился с тем что на сервере. делают копированием в табличный документ.

   ChMikle

17 — 27.04.20 — 17:52

(16) Вы можете на клиенте в таблицу значений считать данные екселя и отдать ее на сервер выполнять дальнейшие манипуляции.

   Cthulhu

18 — 27.04.20 — 18:07

(17): на клиенте бывает (штатно) таблицазначений? и она норм сериализуется при передаче на сервер???

   Timon1405

19 — 27.04.20 — 18:16

   Cthulhu

20 — 27.04.20 — 18:46

(19): метод «Прочитать» для таб.документов появился совсем недавно (в 15-м что ли релизе?)

ну и там (по ссылке) в принципе в коде не учтено, что книга читается в таб.документ с областями, имена которых совпадают с именами листов книги….

   Cthulhu

21 — 27.04.20 — 18:48

(10): опс. пардон, ялох…

просто на практике недавно нарвался, что «прочитать» нормально работал на 15-м — и при этом напрочь отказывался на 14-м… пардон, про «недавно№ не читайте, по ссылке на 9-м проверено…

   falselight

22 — 28.04.20 — 10:00

В файловой базе загрузка прошла успешно.

Сейчас перенес на сервер. На удаленный рабочий стол, там не работает. Ошибка http://joxi.ru/823qePbHDq86wr

тут нужно делать как в (19) или (15) или (4) советуют?

Ошибка при загрузке http://joxi.ru/KAx3R4VT1LKM62

и http://joxi.ru/823qePbHDq86wr

   falselight

23 — 28.04.20 — 10:02

Ошибка на Колонки, на какие то из этих процедур видимо

&НаСервере

Функция СоздатьТЗсXLSЛистов(Файл)

    Таблица = Новый ТаблицаЗначений;

    Попытка

        Excel = Новый COMОбъект(«Excel.Application»);

        Excel.WorkBooks.Open(Файл);

    Исключение

        Сообщить(«Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!»);

        Сообщить(ОписаниеОшибки());

        Возврат 0;

    КонецПопытки;

    Попытка

        Excel.Sheets(1).Select();  

    Исключение

        Excel.ActiveWorkbook.Close();     

        Excel = 0;

        Сообщить(«Файл » + Строка(Файл)+» не соответствует необходимому формату! Первый лист не найден!»);

        ОтменитьТранзакцию();

        Возврат 0;

    КонецПопытки;    

    Версия = Лев(Excel.Version,Найти(Excel.Version, «.») — 1);

    Если Версия = «8» тогда

        ФайлСтрок   = Excel.Cells.CurrentRegion.Rows.Count;

        ФайлКолонок = Макс(Excel.Cells.CurrentRegion.Columns.Count, 13);

    Иначе

        ФайлСтрок   = Excel.Cells(1, 1).SpecialCells(11).Row;

        ФайлКолонок = Excel.Cells(1, 1).SpecialCells(11).Column;  

    Конецесли;

    Сч = 1;    

    //

    Таблица.Колонки.Добавить(«НоваяСтрока», ,»НоваяСтрока»);

    //

    Пока ЗначениеЗаполнено(Excel.Cells(1, Сч).Text) Цикл

        ИмяКолонки        = Excel.Cells(1, Сч).Text;

        //

        ИмяБезПробелов = СтрЗаменить(ИмяКолонки, » «, «»);     //

        ИмяБезПробелов = СтрЗаменить(ИмяБезПробелов, «(«, «»); //

        ИмяБезПробелов = СтрЗаменить(ИмяБезПробелов, «)», «»); //

        ИмяБезПробелов = СтрЗаменить(ИмяБезПробелов, «.», «»); //

        ИмяБезПробелов = СтрЗаменить(ИмяБезПробелов, «,», «»); //

        //

        ИмяКолонки     = СтрЗаменить(ИмяКолонки, » «, «»); //

        ИмяКолонки     = СтрЗаменить(ИмяКолонки, «(«, «»); //

        ИмяКолонки     = СтрЗаменить(ИмяКолонки, «)», «»); //

        ИмяКолонки     = СтрЗаменить(ИмяКолонки, «.», «»); //

        ИмяКолонки     = СтрЗаменить(ИмяКолонки, «,», «»); //

        //

        ИмяБезПробелов = СтрЗаменить(ИмяБезПробелов,»/»,»»);

        ИмяКолонки     = СтрЗаменить(ИмяКолонки,»/»,»»);

        НоваяКолонка   = Таблица.Колонки.Добавить(ИмяБезПробелов, ,ИмяКолонки);

        Сч                = Сч + 1;

    КонецЦикла;

    НомерСтроки = 1;

    Для НС = 2 по ФайлСтрок Цикл  

        НоваяСтрока                = Таблица.Добавить();        

        //

        НоваяСтрока[«НоваяСтрока»] = НомерСтроки;            

        //

        Для НомерКолонки = 1 по Таблица.Колонки.Количество()-1 Цикл

            ТекущееЗначение         = Excel.Cells(НС, НомерКолонки).Text;

            ИмяКолонки                = Таблица.Колонки[НомерКолонки].Имя;             

            НоваяСтрока[ИмяКолонки] = ТекущееЗначение;            

        КонецЦикла;

        НомерСтроки = НомерСтроки + 1;

    КонецЦикла;  

    //

    Excel.DisplayAlerts = 0;

    Excel.ActiveWorkbook.Close();

    Excel.Quit();

    Excel.DisplayAlerts = 1;

    //

    Возврат Таблица;

КонецФункции

//

&НаСервере

Процедура СоздатьТаблицуНаФорме(ТзДляСоздания)

    //

    Таблица          = РеквизитФормыВЗначение(«Товары»);

    МассивРеквизитов = Новый Массив;

    Для Каждого Колонка Из Таблица.Колонки Цикл

        МассивРеквизитов.Добавить(«Товары.» + Колонка.Имя);      

    КонецЦикла;

    //

    ИзменитьРеквизиты(,МассивРеквизитов);

    //

    ЭлементТаблица = Элементы.Найти(«Товары»);

    Если ЭлементТаблица <> Неопределено Тогда

        Элементы.Удалить(ЭлементТаблица);      

    КонецЕсли;    

    //

    ЭлементТаблица             = Элементы.Добавить(«Товары», Тип(«ТаблицаФормы»), Элементы.Группа7);

    ЭлементТаблица.ПутьКДанным = «Товары»;

    ЭлементТаблица.Отображение = ОтображениеТаблицы.Список;  

    //

    МассивРеквизитов.Очистить();

    Для Каждого Колонка ИЗ ТзДляСоздания.Колонки Цикл

        МассивТипов = Новый Массив;

        МассивТипов.Добавить(Колонка.ТипЗначения);

        НоваяКолонка = Новый РеквизитФормы(Колонка.Имя, Новый ОписаниеТипов(МассивТипов), «Товары»);

        МассивРеквизитов.Добавить(НоваяКолонка);

    КонецЦикла;

    //

    ИзменитьРеквизиты(МассивРеквизитов);

    ЗначениеВРеквизитФормы(ТзДляСоздания, «Товары»);

    //

    ЭлементТЗ = Элементы.Товары;

    Для Каждого Колонка ИЗ ТзДляСоздания.Колонки Цикл

        НовыйЭлементФормы             = Элементы.Добавить(«Товары» + Колонка.Имя, Тип(«ПолеФормы»), ЭлементТЗ);

        НовыйЭлементФормы.Вид         = ВидПоляФормы.ПолеВвода;

        НовыйЭлементФормы.ПутьКДанным = «Товары.» + Колонка.Имя;

    КонецЦикла;

КонецПроцедуры

//

   ChMikle

24 — 28.04.20 — 10:26

(22) с правами на доступ к екселю (или он вообще не установлен на компе гдк стоит сервер 1С) у пользователя под которым запущен сервер 1С

   falselight

25 — 28.04.20 — 10:47

(24) Эксель стоит. Открывается. Видимо там принцип работы какой то другой. Отличный от того что выполняется в файловой версии на персональном компьютере.

   falselight

26 — 28.04.20 — 10:50

(25) Принцип обработки файла кодом из 1с, я имею ввиду

   ChMikle

27 — 28.04.20 — 10:51

(25) когда в серверной версии вы на сервере запускаете работу с екселем, то создается сом объект на компе где стоит сервер 1С и под правами пользователя , под которыми он запущен.

   ChMikle

28 — 28.04.20 — 10:53

+(27) 1Ссервер м.б. запущен не под тем пользователем, под которым вы заходите для проверки прав доступа к екселю

   falselight

29 — 28.04.20 — 11:01

(28) Да на этом сервере у меня органиченные права. то есть получается этот код не отработает там?

Как можно выйти из положения?

   falselight

30 — 28.04.20 — 11:05

(17) &НаКлиенте не доступна     Таблица = Новый ТаблицаЗначений;

   ChMikle

31 — 28.04.20 — 11:06

(29) администратор системного подключать и проверять права именно на доступ к екселю под пользователем , под которым сервер 1С  запущен

(30) К екселю подключается из под разных платформ ?

   ChMikle

32 — 28.04.20 — 11:15

(30) на форме создайте элемент ТаблицаЗначений , колонки добавьте и потом перебором переписывайте

   falselight

33 — 28.04.20 — 11:25

(31) На сервере под удаленным рабочим столом одна платформа.

(32) И на сервере не работает отладка, не посмотрю как выполняется код. Одно видно что ругается на Колонки сначала (22) .

   falselight

34 — 28.04.20 — 11:40

(32) А как мне эксель то открыть?

   falselight

35 — 28.04.20 — 12:56

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

   ikea

36 — 28.04.20 — 13:10

(35) А как файл Excel на сервер с клиента передается? Через временное хранилище?

   МимохожийОднако

37 — 28.04.20 — 13:18

Повторюсь. Не надо СОМ. Используй чтение в табличный документ из файла методами 1С.

   Cthulhu

38 — 28.04.20 — 13:29

если уж так хоццца через com

попробуй включи пользователя, под которым запускается сервер приложений 1С Предприятия 8,  в группу Distributed COM Users — если не поможет, то дополнительно включить его в группу локальных администраторов.

(о результате — отпишись?)

   Cthulhu

39 — 28.04.20 — 13:31

(36): тогда бы ошибка была про файл. который не найден —  не на этапе создания com-объекта, а при открытии файла….

   Cthulhu

40 — 28.04.20 — 13:33

   falselight

41 — 28.04.20 — 13:39

(37) Буду пробовать сейчас этот вариант.

Ещё раз. спасибо за мотивацию.

   falselight

42 — 28.04.20 — 16:00

После того как с табличного документа я заполню &НаСервере таблицу значений,

где мне заполнять табличную часть на форме обработки? &НаКлиенте или на &НаСервере ?

А то утомился, подумал спрошу дельный совет. С табличного документа, я заполнил таблицу значений на сервере. Дальше?

Что бы на форме заполнить.

Что бы это все работало на удаленном рабочем столе, на сервере в базе ms sql server.

   Фрэнки

43 — 28.04.20 — 16:09

(42) Так ты на Сервере заполняй сразу в Объект, который из реквизита формы в значение получен. А затем обратно из значения в реквизит формы

у тебя что нет типовой? там же есть такое уже готовое, что подсмотреть можно.

   falselight

44 — 28.04.20 — 16:15

(43) Буду сейчас пробовать!

   falselight

45 — 28.04.20 — 16:15

(43) То есть сама таблица значений что есть у обработки, и положена на форму обработки для визуального отображения не доступна &НаСервере ?

   H A D G E H O G s

46 — 28.04.20 — 16:17

Ахахаха, жесть жестяночка.

   Cthulhu

47 — 28.04.20 — 16:19

(45): во-первых, реквизит №тз» и объект «тз» — это две большие разницы.

ну и во-вторых — а вы попробуйте эту «тз» передать в параметре на сервер… а потом расскажите…

(46) ага. :)))

   falselight

48 — 28.04.20 — 16:21

Смысл в том, что получив таблицу значений с эксель

хочу вывести это на форму. Вот и узнаю что бы без проб, как сразу правильно делать?

http://joxi.ru/RmznO4eiRZ5wVm

Намек хотя бы.

   Фрэнки

49 — 28.04.20 — 16:27

(48) такая ТЗ, как у тебя на картинке видна = реквизит формы. Поэтому нужно через

ТекущийОбъект = РеквизитФормыВЗначение(«Книги»);

ЗдесьПишемСвойКодЗаполнения(ТекущийОбъект);

ЗначениеВРеквизитФормы(ТекущийОбъект, «Книги»);



тогда увидишь свою заполненную тз на форме

   ChMikle

50 — 28.04.20 — 17:01

(48) делал загрузку с формы, поищу обработку , если найду вышлю

   МимохожийОднако

51 — 28.04.20 — 17:12

(48) достаточно поместить табличное поле на форму, связанную с прочитанной таблицей. Посмотри типовую обработку по загрузке данных из табличного документа.

   ChMikle

52 — 28.04.20 — 17:29

Куда выслать обработку ?

   falselight

53 — 29.04.20 — 04:04

(52) Спасибо. Я сам делаю тут. Все равно по загрузке свои особенности.

Или вы тоже грузили в УТ 11.4

Вес товара с упаковкой (г), г    

Высота предмета, см    

Высота упаковки, см    

Глубина предмета, см    

Глубина упаковки, см    

Ширина предмета, см    

Ширина упаковки, см

   falselight

54 — 29.04.20 — 04:35

(52) Ну, а если есть интересные какие примеры. Можно сюда. MyRezume2020@yandex.ru

  

falselight

55 — 29.04.20 — 04:59

На сервере удалось прочитать, вот таким кодом.

Сейчас уже и дальше можно обрабатывать.

//

&НаКлиенте

Процедура ФайлДляЗагрузкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

    СтандартнаяОбработка = ложь;

    ВыбратьФайл(«ФайлДляЗагрузки»);

КонецПроцедуры

//

&НаКлиенте

Процедура ВыбратьФайл(ФайлДляЗагрузки)

    #Если ВебКлиент Тогда

    Результат = ПодключитьРасширениеРаботыСФайлами();

    Если Не Результат Тогда

        УстановитьРасширениеРаботыСФайлами();

        Если Не ПодключитьРасширениеРаботыСФайлами() Тогда

            ВызватьИсключение «Ошибка. Ваш браузер не поддерживает работу с файлами.»;

        КонецЕсли;

    КонецЕсли;

    #КонецЕсли

    Диалог                         = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);

    Диалог.Заголовок             = «Выберите файл»;

    Диалог.ПолноеИмяФайла         = «»;

    Диалог.МножественныйВыбор     = Ложь;

    Диалог.Фильтр               = «Документ Excel (*.xls, *.xlsx)|*.xls;*.xlsx|»;

    Оповещение                  = Новый ОписаниеОповещения(«ОповещениеПослеВыбораФайлаДляОткрытия», ЭтотОбъект, ФайлДляЗагрузки);    

    Диалог.Показать(Оповещение);

КонецПроцедуры

//

&НаКлиенте

Процедура ОповещениеПослеВыбораФайлаДляОткрытия(ВыбранныеФайлы, ДопПараметры) Экспорт

    Если ТипЗнч(ВыбранныеФайлы) = Тип(«Массив»)    Тогда

        Объект[ДопПараметры] = ВыбранныеФайлы[0];

    КонецЕсли;

КонецПроцедуры

//

&НаКлиенте

Процедура Прочитать(Команда)

    Если Не ЗначениеЗаполнено(Объект.ФайлДляЗагрузки) Тогда

        Сообщить(«Не указан файл. Обработка не выполнена.»);

        Возврат;

    КонецЕсли;    

    ВыбФайл = Новый Файл(Объект.ФайлДляЗагрузки);

    Если Не ВыбФайл.Существует() Тогда

        Сообщить(«Файл не существует!»);

        Возврат;

    КонецЕсли;  

    ТДВыгрузка = Новый ТабличныйДокумент;

    мПрочитатьТабличныйДокументИзExcel(ТДВыгрузка, Объект.ФайлДляЗагрузки, 1);

    ПрочитатьНаСервере(ТДВыгрузка);

КонецПроцедуры

//

&НаКлиенте

Функция мПрочитатьТабличныйДокументИзExcel(ТабличныйДокумент, ИмяФайла, НомерЛистаExcel = 1) Экспорт

    xlLastCell = 11;

    ВыбФайл    = Новый Файл(ИмяФайла);

    Если НЕ ВыбФайл.Существует() Тогда

        Сообщить(«Файл не существует!»);

        Возврат Ложь;

    КонецЕсли;

    Попытка

        Excel = Новый COMОбъект(«Excel.Application»);

        Excel.WorkBooks.Open(ИмяФайла);

        ExcelЛист = Excel.Sheets(НомерЛистаExcel);

    Исключение

        Сообщить(«Ошибка. Возможно неверно указан номер листа книги Excel.»);

        Возврат Ложь;

    КонецПопытки;

    SpecialCells = Excel.Sheets(НомерЛистаExcel).Cells.SpecialCells(11);

    RowCount     = SpecialCells.Row;

    ColumnCount  = SpecialCells.Column;

    Для Column = 1 По ColumnCount Цикл

        ТабличныйДокумент.Область(«C» + Формат(Column, «ЧГ=»)).ШиринаКолонки = ExcelЛист.Columns(Column).ColumnWidth;

    КонецЦикла;

    Для Row = 1 По RowCount Цикл

        Для Column = 1 По ColumnCount Цикл

            Если ТипЗнч(ExcelЛист.Cells(Row,Column).Value) = Тип(«Число») Тогда

                ЗначениеЗамена = СтрЗаменить(ExcelЛист.Cells(Row,Column).Value, » «, «»);

            Иначе

                ЗначениеЗамена = ExcelЛист.Cells(Row,Column).Value

            КонецЕсли;    

            ТабличныйДокумент.Область(«R» + Формат(Row, «ЧГ=») +»C» + Формат(Column, «ЧГ=»)).Текст = ЗначениеЗамена;

        КонецЦикла;

    КонецЦикла;

    Excel.WorkBooks.Close();

    Excel = 0;

    Возврат Истина;

КонецФункции //

//

&НаСервере

Процедура ПрочитатьНаСервере(Макет)

    ТЗсXLS = Новый ТаблицаЗначений;

    ТЗсXLS.Колонки.Добавить(«», Новый ОписаниеТипов(«Строка»));

    ТЗсXLS.Колонки.Добавить(«OzonID»,                Новый ОписаниеТипов(«Строка»));

    ТЗсXLS.Колонки.Добавить(«Баркод»,                Новый ОписаниеТипов(«Строка»));

    ТЗсXLS.Колонки.Добавить(«Наименование»,        Новый ОписаниеТипов(«Строка»));

    ТЗсXLS.Колонки.Добавить(«Автор»,                Новый ОписаниеТипов(«Строка»));

    ТЗсXLS.Колонки.Добавить(«Год»,                    Новый ОписаниеТипов(«Строка»));

    ТЗсXLS.Колонки.Добавить(«Издательство»,        Новый ОписаниеТипов(«Строка»));

    ТЗсXLS.Колонки.Добавить(«Артикул»,                Новый ОписаниеТипов(«Строка»));

    ТЗсXLS.Колонки.Добавить(«Комплектация»,        Новый ОписаниеТипов(«Строка»));

    ТЗсXLS.Колонки.Добавить(«ВесТовараСУпаковкой», Новый ОписаниеТипов(«Строка»));

    ТЗсXLS.Колонки.Добавить(«ВысотаПредмета»,        Новый ОписаниеТипов(«Строка»));

    ТЗсXLS.Колонки.Добавить(«ВысотаУпаковки»,        Новый ОписаниеТипов(«Строка»));

    ТЗсXLS.Колонки.Добавить(«ГлубинаПредмета»,        Новый ОписаниеТипов(«Строка»));

    ТЗсXLS.Колонки.Добавить(«ГлубинаУпаковки»,        Новый ОписаниеТипов(«Строка»));

    ТЗсXLS.Колонки.Добавить(«ШиринаПредмета»,        Новый ОписаниеТипов(«Строка»));

    ТЗсXLS.Колонки.Добавить(«ШиринаУпаковки»,        Новый ОписаниеТипов(«Строка»));

    ТЗсXLS.Колонки.Добавить(«Количество»,            Новый ОписаниеТипов(«Строка»));

    ТЗсXLS.Колонки.Добавить(«Цена»,                Новый ОписаниеТипов(«Строка»));

    ТЗсXLS.Колонки.Добавить(«НомерСтроки»,           Новый ОписаниеТипов(«Строка»));

    //

    Для Стр = 2 По Макет.ВысотаТаблицы Цикл

        НоваяСтрока                     = ТЗсXLS.Добавить();        

        НоваяСтрока.OzonID                 = СокрЛП(Макет.Область(Стр, 1).Текст);

        НоваяСтрока.Баркод                 = СокрЛП(Макет.Область(Стр, 2).Текст);

        НоваяСтрока.Наименование         = СокрЛП(Макет.Область(Стр, 2).Текст);

        НоваяСтрока.Автор                 = СокрЛП(Макет.Область(Стр, 2).Текст);

        НоваяСтрока.Год                 = СокрЛП(Макет.Область(Стр, 2).Текст);

        НоваяСтрока.Издательство         = СокрЛП(Макет.Область(Стр, 2).Текст);

        НоваяСтрока.Артикул             = СокрЛП(Макет.Область(Стр, 2).Текст);

        НоваяСтрока.Комплектация         = СокрЛП(Макет.Область(Стр, 2).Текст);

        НоваяСтрока.ВесТовараСУпаковкой = СокрЛП(Макет.Область(Стр, 2).Текст);

        НоваяСтрока.ВысотаПредмета         = СокрЛП(Макет.Область(Стр, 2).Текст);

        НоваяСтрока.ВысотаУпаковки         = СокрЛП(Макет.Область(Стр, 2).Текст);

        НоваяСтрока.ГлубинаПредмета     = СокрЛП(Макет.Область(Стр, 2).Текст);

        НоваяСтрока.ГлубинаУпаковки     = СокрЛП(Макет.Область(Стр, 2).Текст);

        НоваяСтрока.ШиринаПредмета         = СокрЛП(Макет.Область(Стр, 2).Текст);

        НоваяСтрока.ШиринаУпаковки         = СокрЛП(Макет.Область(Стр, 2).Текст);

        НоваяСтрока.Количество             = СокрЛП(Макет.Область(Стр, 2).Текст);

        НоваяСтрока.Цена                 = СокрЛП(Макет.Область(Стр, 2).Текст);        

        НоваяСтрока.НомерСтроки         = Стр;

    КонецЦикла;

    //

    ТзКнигиНаФорме = РеквизитФормыВЗначение(«Книги»);

    Для Каждого СтрТЗсXLS Из ТЗсXLS Цикл

        НоваяСтрока                     = ТзКнигиНаФорме.Добавить();        

        НоваяСтрока.НомерСтроки         = СокрЛП(СтрТЗсXLS.НомерСтроки-1);        

        НоваяСтрока.OzonID                 = СокрЛП(СтрТЗсXLS.OzonID);

        НоваяСтрока.Баркод                 = СокрЛП(СтрТЗсXLS.Баркод);

        НоваяСтрока.Наименование         = СокрЛП(СтрТЗсXLS.Наименование);

        НоваяСтрока.Автор                 = СокрЛП(СтрТЗсXLS.Автор);

        НоваяСтрока.Год                 = СокрЛП(СтрТЗсXLS.Год);

        НоваяСтрока.Издательство         = СокрЛП(СтрТЗсXLS.Издательство);

        НоваяСтрока.Артикул             = СокрЛП(СтрТЗсXLS.Артикул);

        НоваяСтрока.Комплектация         = СокрЛП(СтрТЗсXLS.Комплектация);

        НоваяСтрока.ВесТовараСУпаковкой = СокрЛП(СтрТЗсXLS.ВесТовараСУпаковкой);

        НоваяСтрока.ВысотаПредмета         = СокрЛП(СтрТЗсXLS.ВысотаПредмета);

        НоваяСтрока.ВысотаУпаковки         = СокрЛП(СтрТЗсXLS.ВысотаУпаковки);

        НоваяСтрока.ГлубинаПредмета     = СокрЛП(СтрТЗсXLS.ГлубинаПредмета);

        НоваяСтрока.ГлубинаУпаковки     = СокрЛП(СтрТЗсXLS.ГлубинаУпаковки);

        НоваяСтрока.ШиринаПредмета         = СокрЛП(СтрТЗсXLS.ШиринаПредмета);

        НоваяСтрока.ШиринаУпаковки         = СокрЛП(СтрТЗсXLS.ШиринаУпаковки);

        НоваяСтрока.Количество             = СокрЛП(СтрТЗсXLS.Количество);

        НоваяСтрока.Цена                 = СокрЛП(СтрТЗсXLS.Цена);        

    КонецЦикла;

    ЗначениеВРеквизитФормы(ТзКнигиНаФорме, «Книги»);    

КонецПроцедуры

//

Ошибка чтения ТабДок.Прочитать()

Я

  

МимохожийОднако

09.11.20 — 14:03

При открытии файла XLS через ТабДок.Прочитать()

Ошибка при выполнении файловой операции . Формат файла не поддерживается.

Если исходный файл открыть в Excel  и сохранить, ошибки нет.

Мне надо читать его программно. Кто-нибудь решал эту проблемку?

  

RomanYS

1 — 09.11.20 — 14:05

(0) попробуй переименовать в *.xlsx, экселю пофигу а 1С такую ошибку выдает если формат не соответствует расширению

  

alkorolev

2 — 09.11.20 — 14:18

(0) сколько листов в файле? примечания есть?

  

МимохожийОднако

3 — 09.11.20 — 14:20

(2) Лист один. Примечаний нет

(1) Расширение *.xls .  В свойствах тип файла Лист Microsoft Excel 97–2003 (.xls)

  

RomanYS

4 — 09.11.20 — 14:24

(3) у xls и xlsx внутренняя структура. Если файл с новым форматом сохранить с расширением xls, то эксель его откроет, а не 1С нет. Просто попробуй, нет — будешь искать варианты дальше

  

ДенисЧ

5 — 09.11.20 — 14:31

Откуда файл взялся? С интернета каким-нибудь пых-скриптом создан?

Такое в таких случаях бывает, это же опенсорц, там делают на ХХП…

  

yzimin

6 — 09.11.20 — 14:34

В 8.3.17.1549 пофиксили

  

МимохожийОднако

7 — 09.11.20 — 14:42

(5) Файл прислан по почте. Создается регламентом у контрагентов. Как-не знаю. Скорее всего ХХП

(6) 1С:Предприятие 8.3 (8.3.18.1128)

(4) Попробую.

  

vicof

8 — 09.11.20 — 14:45

(0) Через ком-объект прочитай.

  

МимохожийОднако

9 — 09.11.20 — 14:52

(8) Этот вариант я оттягиваю до последнего )

  

МимохожийОднако

10 — 09.11.20 — 15:04

(4) Переименование с другим расширением даёт тот же результат:»Формат не поддерживается»

  

mszsuz

11 — 09.11.20 — 15:06

Это формат Excel 95, неподдерживается.

  

RomanYS

12 — 09.11.20 — 15:06

(10) А файл то открывал, может там вообще csv внутри

  

RomanYS

13 — 09.11.20 — 15:07

(10) выложи файл, если не секретный

  

МимохожийОднако

14 — 09.11.20 — 15:11

(12) Экселем файл открывается без проблем. Сохраняю его без каких либо изменений. После этого он открывается из 1С без ошибок.

  

RomanYS

15 — 09.11.20 — 15:12

(14) открой блокнотом

  

МимохожийОднако

16 — 09.11.20 — 15:15

  

МимохожийОднако

17 — 09.11.20 — 15:16

(15) В блокноте с кракозябрами

  

УдавВПопугаях

18 — 09.11.20 — 15:16

была недавно эта проблема, файл формировали какой то приблудой, в свойствах файла должно быть название, какой то там xl

  

МимохожийОднако

19 — 09.11.20 — 15:16

(18) Как решили эту проблему?

  

УдавВПопугаях

20 — 09.11.20 — 15:18

тему поднимал «малоопытный» человек, наверно никак, но было ясно, что при формировании получаем файл не совсем той структуры, которая получается из самого экселя, типа как какого то оглавления не хватает или еще чего то подобного

  

УдавВПопугаях

21 — 09.11.20 — 15:22

  

УдавВПопугаях

22 — 09.11.20 — 15:23

проблема не совсем такая, но причина может быть аналогичная. Excelize во.

  

RomanYS

23 — 09.11.20 — 15:26

(16) Да, внутри похож на xls… похоже без экселя 1С его не съест.

(21) С таким тоже сталкивался, победить не смог.

  

УдавВПопугаях

24 — 09.11.20 — 15:28

(23) велосипед наверно только, как xml может или еще что

ну факт в том, что штатный механизм в таком случае не работает

  

УдавВПопугаях

25 — 09.11.20 — 15:34

эмммм… звиняйте за «малоопытного»)

ras27

  

RomanYS

26 — 09.11.20 — 15:40

(24) Так старый формат (xls) вроде не xml внутри и закрыт. И парсить xml это та ещё задача, ТС как раз ищет лёгких путей))). Здравой выглядит идея пересохранять файл экселем или сервисом каким, а потом читать штатно табличным документом

  

УдавВПопугаях

27 — 09.11.20 — 15:45

(26) кстати о сервисах) можно дать сервис поставщику файла и пусть льет напрямую

  

МимохожийОднако

28 — 13.11.20 — 07:56

Повторное сохранение файла через открытие файла в Excel позволяет привести его формат к виду, который читается из 1С.

Может быть, подскажете командную строку или набор команд, который делает это без участия пользователя?

Тогда можно будет запустить обработку, которая читает файл с некорректным для 1С форматом и сохраняет обратно в хранилище.

У меня эти файлы лежат до времени в хранилище значений в регистре сведений.

Ошибка при вызове метода контекста (Прочитать)

Ошибка при выполнении файловой операции при чтении xls файла методом прочитать объекта ТабличныйДокумент. 

Скрин сообщения

oshibka-pri-vypolnenii-fajlovoj-operatsii

Данный объект 1C умеет не только записывать в Excel, но возможна и обратная операция с ограничениями, свойственными табличному документу.

В чем плюсы такой методики чтения

  • Всё производится встроенными средствами;
  • достаточно быстро;
  • код в 2 строки
  • данные не требуется преобразовывать, обычно всё считывается достаточно корректно, их можно проверить средствами 1С.
  • возможно считывать значения ячеек как текст (без авто-преобразования),
  • доступно на сервере, где excel вообще нельзя установить (linux, OSx).

Причина ошибки

Отличительной особенностью, вызывающей данную ошибку, является то, что 1С нужен монопольный доступ на время считывания.

Если же документ открыт, то выходит ошибка при выполнении файловой операции чтения.

COM-Объекта Excel.Application в данном ситуации просто открывает еще один экземпляр, а также  в нём можно скрыть отображение сообшения о режиме «чтения».

Другой причиной может быть: отсутствие прав на чтение этого файла

Решение:

Закрыть открытую в Excel (или другой программе) книгу, проверить права на файл (возможность открытия в его в Excel, косвенный признак его наличия)

Реклама — средство заставить людей нуждаться в том, о чем они раньше не слыхали.

Содержание:

1.       Об ошибке при выполнении файловой операции

2.       Устранение «Ошибки при выполнении файловой операции» в 1С 8.3   

1.    Об ошибке при выполнении файловой операции

Приветствую, коллеги! В данной статье будет описана ошибка «Ошибка при выполнении файловой операции», и подробно рассмотрены способы ее устранения.

Когда происходит обновление конфигураций в 1С 8, по завершении обновления, часто появляется ошибка, которая гласит «Ошибка при выполнении файловой операции – файл не содержит доступных обновлений».  

2.    Устранение «Ошибки при выполнении файловой операции» в 1С 8.3

Рассмотрим методы, при помощи которых, можно устранить ошибку при выполнении файловой операции в 1С.

Итак, первый способ – это попробовать сделать обновление при помощи файлов по обновлению вида «релиз 1с*.cfu». Если это не помогло, то можно попробовать обновить систему при помощи общего файла вида «полный релиз 1С*.cf».

Вторым способом будет проверка на соответствие общей версии системы 1С с минимальными требованиями версии конфигурации 1С, которую обновляем.

Третий способ устранения ошибки при выполнении файловой операции в 1С – более сложный, но действенный. Необходимо открыть в конфигурацию от поставщика в режиме Конфигуратора. Если ошибка всё так же появляется, то необходимо удалить конфигурацию поставщика, а затем опять установить. По сути, в данном варианте «вытягивается» последняя, рабочая версия данной конфигурации и обновление будет завершено без ошибок.

Рассмотрим подробнее третий способ. Пусть у нас уже есть некоторая конфигурация 1С KORG 1-ой версии, которая работает, но нужно поставить 2-ю версию, то есть обновить версию конфигурации 1С 8.3. Когда происходит обновление, всплывает ошибка «Ошибка при выполнении файловой конфигурации». Порядок действий в этом случае:

1.     скачать релиз 1С KORG с версией 1*.cf;

2.     копируем нашу базу данных;

3.     в конфигураторе, который соответствует обновляемой базе, переходим по пути: «Конфигурация → Поддержка → Настройки поддержки → Снять с поддержки». В случае, если кнопка для снятия с поддержки недоступна, необходимо сперва включить возможные изменения. После этого нужно дать согласие, если система 1С будет уточнять что-либо или подтверждать действия;

4.     Далее переходим по следующему пути: «Конфигурация → Сравнить и объединить с конфигурацией из файла…». Здесь необходимо выбрать файл «полный релиз 1С KORG версии 1*.cf»;

5.     Далее перед нами появится окно, в котором система 1С будет запрашивать постановление на учёт для поддержки, на это уведомление обязательно отвечаем согласием;

6.     В случае, если наша конфигурация является типовой, откроется окно по сравнению конфигураций. В нем обязательно убираем все «галочки». Далее последует объединение конфигураций;

7.     В новом окне кликаем на «Сохранить изменения»;

8.     Ещё раз сохраняем базу данных;

9.     Обновляем конфигурацию 1С стандартным способом.

Если всё сделать, согласно инструкции выше, то в вашей конфигурации 1С 8.3 «Ошибка при выполнении файловой операции» больше не возникнет. Спасибо за внимание!

Специалист компании «Кодерлайн»

Айдар Фархутдинов

Ошибка при чтении файла из эксель в табличный документ?

Я пытаюсь файл эксель прочитать в табличный документ. Файл с форматом «xlsx» читается без проблем, а файл формата «xls» выдает ошибку. В чём ошибка?5f900d0e5763a276099014.png


  • Вопрос задан

    более двух лет назад

  • 963 просмотра

1. подробнее какой код…
2. Описание:
Считывает табличный документ из файла.
Позволяет считывать табличный документ из файла табличного документа Microsoft Excel 97 — 2010 ( *.xls и *.xlsx) или электронной таблицы OpenOffice Calc ( *.ods).

Пригласить эксперта

Иногда под расширением .xls на самом деле файл записан в .xlsx


  • Показать ещё
    Загружается…

30 янв. 2023, в 12:59

15000 руб./за проект

30 янв. 2023, в 12:56

50000 руб./за проект

30 янв. 2023, в 12:52

5000 руб./за проект

Минуточку внимания

Обновлено 15.10.2020

1с логотип

Добрый день! Уважаемые читатели и гости одного из крупнейших IT блогов Рунета Pyatilistnik.org. В прошлый раз мы с вами разобрали, что из себя  представляет файловая система raw, и как ее исправить, чтобы восстановить свои данные. Двигаемся дальше и поговорим сегодня на тему  капризности 1С, точнее на капризную работу в рамках Windows Server 2016. Я рассмотрю причину и устранение периодически повторяющейся ошибки на сервере 1С 8.3 «Ошибка при выполнении файловой операции«. Ее я стал встречать после обновления с Windows Server 2012 R2 д 2016. Думаю мой опыт сэкономит вам часик серфинга по интернету.

Описание проблемы

В моей компании заканчивается обновление операционных систем у виртуальных серверов, с Windows Server 2012 R2 на Windows Server 2016, я понимаю, что поддержка первых еще будет несколько лет, но хочется уже не делать это в последний момент, а слегка опережать, да и уже давно пора стремиться к Windows Server 2019. Сервера 1С не были исключением, обновление происходило по быстрому варианты. Тут подразумевается накатывание более новой версии ОС по верх старой, тут мы убивали двух зайцев:

  1. Получали свежую версию ОС
  2. Оставляли весь софт на сервере, и не требовалась его переустановка

В случае чего всегда можно было откатиться из снапшота на момент проведения работ, благо ESXI 6.5 это помогает делать в два клика. Все прекрасно обновилось и сервер зажил новой жизнью. В какой-то момент при запуске клиента 1С 8.3 на RDS ферме, стала появляться ошибка:

Ошибка при выполнении файловой операции

Ошибка при выполнении файловой операции в 1С 8.3

Устранение проблемы

Начав изучать данный вопрос мы не стали откатываться к бэкапу, так как данная проблема возникала не постоянно, а через некоторые промежутки и была вызвана явно не переходом на более новую версию операционной системы. Подняв исторические данные в системе заявок, я нашел похожую, где решением ошибки был перенос базы данных 1С на другой диск. Меня это заинтересовало и я стал прикидывать, что же могло быть в той ситуации. Через минут 20 я нашел одну закономерность, что на всех проблемных хостах был установлен компонент Windows дедупликации, как раз на тех дисках, где располагались базы данных 1С.

Я для тестирования отключил дедупликацию и вернул все в исходное состояние, и о чудо ошибка при выполнении файловой операции больше не появлялась. Все те же действия я произвел и на остальных серверах.

запуск сборки мусора на томе

Вывод: Windows Дедупликация и 1С просто не совместимы друг с другом, это нужно запомнить

Из дополнительных методов я могу вам посоветовать еще очистку кэша 1С. Еще в на умных сайтах советуют на серверах, где используется 1С отключать протокол IPv6 на сетевых интерфейсах, но лично я не понимаю этого прикола, так как сама Microsoft советует по возможности этого не делать, в виду того, что очень многие ее сервисы и компоненты Windows в приоритете используют именно его, меньше будет проблем с DNS и Active Directory.

Вообще если у вас виртуальные сервера лежат на системе хранения данных, то у нее должна быть своя функция дедупликации и использовать лучше и правильнее ее. Если у вас есть другие варианты решения данной проблемы, то пишите их в комментариях. С вами был Иван Семин, автор и создатель IT портала Pyatilistnik.org.

Автор magnifico61, 30 мая 2018, 22:18

0 Пользователей и 1 гость просматривают эту тему.


ФайлНовый = ПолучитьИмяВременногоФайла("xlsx");
Excel = Новый COMОбъект("Excel.Application");
Книга = Excel.WorkBooks.Open(Объект.Файл);
Книга.SaveAs(ФайлНовый);
Excel.Quit();
Excel = Неопределено;

Файл сохраняется, но при открытии ошибка формат или расширение файла является недопустимым.
Как мне сохранить файл в новый формат?


Цитата: magnifico61 от 30 мая 2018, 22:18
Файл сохраняется, но при открытии ошибка формат или расширение файла является недопустимым.
Как мне сохранить файл в новый формат?

Сохранить сначала в xls-формате, открыть файл в Excel, поддерживающем xlsx и сохранить его в нужном.

Что за конфигурация у Вас, почему возникла потребность в программировании?


УТ 11. Excel поддерживает xlsx.

Руками каждый раз пересохранять файл нет возможности, так как постоянно грузится большое количество данных с разных файлов Excel.
Это необходимо чтобы облегчить работу пользователю.


А сама УТ 11 не поддерживает выгрузку в xlsx-формате?
А если  .xlsx выгруженного файла изменить на  .xls, открываться будет?
Excel новых версий поддерживает оба формата, так зачем эти «городушки»?

На какой платформе работаете?


в xls не пробовал сохранить.
платформа 8.3.10.2580


Пользовался таким, чтобы пересохранить наоборот, xlsx в xls. Остальные варианты не пробовал но, думаю, всё будет работать.

Функция ПересохранитьЭксельФайл(ПутьКФайлу,ПутьНового=Неопределено,пФорматФайла=51)

Попытка
ExcelЗапущен = Ложь;

//Проверка на существование файла
мФайл = Новый Файл(ПутьКФайлу);
Если НЕ мФайл.Существует() Тогда
ТекстИскл = "[Файл: " + ПутьКФайлу + " не найден.]";
ВызватьИсключение ТекстИскл;
КонецЕсли;

СоответствиеРасширений = Новый Соответствие;

СоответствиеРасширений.Вставить(45, ".mht");
СоответствиеРасширений.Вставить(46, ".xml");
СоответствиеРасширений.Вставить(23, ".csv");
СоответствиеРасширений.Вставить(9,  ".dif");
СоответствиеРасширений.Вставить(8,  ".dbf");
//работает только в 2007
СоответствиеРасширений.Вставить(51, ".xlsx");
СоответствиеРасширений.Вставить(47, ".xml");
СоответствиеРасширений.Вставить(57, ".pdf");
СоответствиеРасширений.Вставить(60, ".ods");
//

СоответствиеВерсий = Новый Соответствие;

СоответствиеВерсий.Вставить(45, "11.0");
СоответствиеВерсий.Вставить(46, "11.0");
СоответствиеВерсий.Вставить(23, "11.0");
СоответствиеВерсий.Вставить(9,  "11.0");
СоответствиеВерсий.Вставить(8,  "11.0");
//работает только в 2007
СоответствиеВерсий.Вставить(51, "12.0");
СоответствиеВерсий.Вставить(47, "12.0");
СоответствиеВерсий.Вставить(57, "12.0");
СоответствиеВерсий.Вставить(60, "12.0");
//

Расширение = СоответствиеРасширений.Получить(пФорматФайла);
Если Расширение=Неопределено Тогда
ВызватьИсключение "[Неверно указан параметр ""Формат файла"".]";
КонецЕсли;

Если ПутьНового=Неопределено Тогда
ПутьНового=ПолучитьИмяВременногоФайла(Расширение);
КонецЕсли;

Попытка
Excel = Новый COMОбъект("Excel.Application");
ExcelЗапущен = Истина;
Исключение
ВызватьИсключение "[Не удалось запустить Excel.]" + Символы.ПС + ОписаниеОшибки();
КонецПопытки;

//проверка возможности сохранения в выбранный формат
Если Excel.Version < СоответствиеВерсий.Получить(пФорматФайла) Тогда
ВызватьИсключение "[В текущей версии Excel выбранный формат файла ("+Расширение+") не поддерживается.]";
КонецЕсли;

Excel.Visible       = Ложь;
Excel.DisplayAlerts = Ложь;

КнигаExcel = Excel.WorkBooks.Open(ПутьКФайлу);
КнигаExcel.SaveAs(ПутьНового, пФорматФайла);

КнигаExcel.Close();
Excel.DisplayAlerts = Истина;
Excel.Quit();
Excel = Неопределено;

Возврат ПутьНового;

Исключение
Если ExcelЗапущен Тогда
Excel.Quit();
КонецЕсли;
КнигаExcel = Неопределено;
Excel      = Неопределено;
ВызватьИсключение ОписаниеОшибки();
КонецПопытки;

КонецФункции


Если  Число(Excel.version) < 12 Тогда
// Excel это ComОбъект(«Excel.application»)

   FileFormatNum = -4143// ага, загадочное число

Иначе
   FileFormatNum = 56// ну что мешало сделать форматы стандартными?

КонецЕсли;
БольшойОтчет.SaveAs(ИмяОтчета,FileFormatNum);

отсюда:
https://www.mista.ru/topic.php?id=637830

Банальные мелочи при сохранении в Excel. Боян, но мож кому надо.

При составлении из 1С сложных многостраничных книг в Excel наткнулся на нижеприведенные проблемы, и тк решил их, выкладываю тут. Может кому пригодится )

Если админы посчитают ненужным — сносите смело.

1. «Кривая» расцветка. Цвета абсолютно не те какие закладывались изначально.
Проблема возникает при сборке различных страниц Excel выгруженных из 1С в одну книгу. Тк сборка обычно происходит на основе существующей либо новой книги Excel то палитра книги отличается от палитры сохраняемых из 1С листов. Решение — стандартизировать палитру, подгоняя ее под палитру используемую 1С. Если сборка идет на основе некого шаблона, то надо предварительно на этапе его разработки скопировать туда палитру из «1Сного» листа Excel. Если сборка идет в пустой файл — то просто скопировать палитру (благо это очень просто).

БольшойОтчет.Colors = СтраницаИз1С.Colors;

2. Стандартная сетка Excel зачастую раздражает и мешается. Лучше ее отключать. Например так.

БольшойОтчет.Application.Activewindow.DisplayGridLines = 0;

3. По умолчанию желательно открывать некий определенный лист книги. Делаем:

БольшойОтчет.WorkSheets(Х).Activate(); // где Х — номер листа

4. Вечно один из пользователей отчетов не имеет 2007 хотя бы Excel. Логично что приходится сохранять в xls а не xlsx. Это легко иделать из 1С, а вот используя хз какую версию Excel на компьютере пользователя (которую переодически меняют админы по своему усмотрению) сложнее (тк он для новых книг сам выбирает формат по умолчанию). Приходится анализировать версию:

Если Число(Excel.version) < 12 Тогда
// Excel это ComОбъект(«Excel.application»)
FileFormatNum = -4143 // ага, загадочное число
Иначе
FileFormatNum = 56 // ну что мешало сделать форматы стандартными?
КонецЕсли;
БольшойОтчет.SaveAs(ИмяОтчета,FileFormatNum);

Собственно все. Удачи.

Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают


Цитата: wise от 31 мая 2018, 13:19
Иначе
   FileFormatNum = 56

:o lol , в моей функции как раз формат «56», т.е. xls отсутствует. Видимо я именно в xlsx и сохранял, а про xls забыл. Спасибо за подсказку.

Т.е. нужно добавить в мою функцию

СоответствиеРасширений.Вставить(56,  ".xls");
СоответствиеВерсий.Вставить(56,  "11.0");



Добрый день. Не перестаю умиляться 1С-ом… Лирику прочь…
Довольный как слон, что справился с задачей… расслабился…

1C
1
2
3
4
5
// сие есть реквизит формы, обозначенный инспектором как ТабличныйДокумент
&НаКлиенте
Процедура .....
ТаблицаЭксель.Прочитать(ДиалогВыбораФайла.ПолноеИмяФайла,СпособЧтенияЗначенийТабличногоДокумента.Текст);
....

Ведь дома на бэкапе (как выяснилось, на «толстом» клиенте) работало.
В «облачной» базе… поясняю для точности: «облако» — виртуальная машина, подключение к которой идет внешней программой по RDP. Так вот в штатной «облачной» базе получаю «Метод недоступен на тонком клиенте».
Не беда, академиев не заканчивали..

1C
1
2
3
4
5
6
7
8
9
&НаСервере
Процедура ПрочитатьФайлТабДоком(ИмяФайла)
    ТаблицаЭксель.Прочитать(ИмяФайла,СпособЧтенияЗначенийТабличногоДокумента.Текст);
КонецПроцедуры
 
&НаКлиенте
Процедура .....
ПрочитатьФайлТабДоком(ДиалогВыбораФайла.ПолноеИмяФайла);
....

Теперь новая проблема — «Неправильное имя файла tsclientDXXXXXXXXXXимяфайла.xlsx».
Принципиально не хочу просить настроить подключение к «облачной» базе «толстым» клиентом, хочу, чтобы работало всегда.
Что делать с последней ошибкой? Сам думаю, что косяк у провайдера.

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

Nikoly
16.07.2011 15:31 Прочитано: 22014

При работе на сервере, регламентного задания, обработка открывает через Excel = Новый COMОбъект(«Excel.Application»); Excel.Application.Workbooks.Open(ИмяФайла) документ, мне выдается ошибка:
Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft Office Excel): Нет доступа к файлу ‘C:1СНовыйДокумент.xls’. Это может быть вызвано одной из следующих причин.
• Имени файла или пути не существует.
• Файл используется другой программой.
• Имя книги, которую вы пытаетесь сохранить, совпадает с именем открытой в данный момент книги.
Если запускаю обработку не в регламентном задании, то все выполняется без ошибок. Подскажите что это за ошибка и как мне читать данные из Excel в регламентном задании?


Изменено 16.07.11 15:32:46 по причине: Другая категория

Yandex
Возможно, вас также заинтересует

Реклама на портале

Nikoly
19.07.2011 18:27 Ответ № 1

http://forum.mista.ru/topic.php?id=522217
Создать папку C:WindowsSysWOW64configsystemprofileDesktop и C:WindowsSystem32configsystemprofileDesktop (в зависимости от разрядности вашей системы)

Подсказка: Для быстрого поиска ответов — используйте ‘Поиск’

Ошибка при вызове метода контекста (Прочитать)

Ошибка при выполнении файловой операции при чтении xls файла методом прочитать объекта ТабличныйДокумент. 

Скрин сообщения

oshibka-pri-vypolnenii-fajlovoj-operatsii

Данный объект 1C умеет не только записывать в Excel, но возможна и обратная операция с ограничениями, свойственными табличному документу.

В чем плюсы такой методики чтения

  • Всё производится встроенными средствами;
  • достаточно быстро;
  • код в 2 строки
  • данные не требуется преобразовывать, обычно всё считывается достаточно корректно, их можно проверить средствами 1С.
  • возможно считывать значения ячеек как текст (без авто-преобразования),
  • доступно на сервере, где excel вообще нельзя установить (linux, OSx).

Причина ошибки

Отличительной особенностью, вызывающей данную ошибку, является то, что 1С нужен монопольный доступ на время считывания.

Если же документ открыт, то выходит ошибка при выполнении файловой операции чтения.

COM-Объекта Excel.Application в данном ситуации просто открывает еще один экземпляр, а также  в нём можно скрыть отображение сообшения о режиме «чтения».

Другой причиной может быть: отсутствие прав на чтение этого файла

Решение:

Закрыть открытую в Excel (или другой программе) книгу, проверить права на файл (возможность открытия в его в Excel, косвенный признак его наличия)

Сущность хорошей рекламы не в том, чтобы возбуждать надежду, а в том, чтобы распалять жадность.

Дорабатывал обработку загрузки прихода из Excel. Обработка изначально была не моя, все хорошо работало, но внезапно клиент в облаке переехал с файловой базы на SQL, потому что файловая тормозила.

И тут 1С начала писать, что файл не обнаружен. Оказывается, код загрузки из Excel был написан только под толстого клиента. Пришлось дорабатывать стандартным образом:

//На клиенте
ДД = Новый ДвоичныеДанные(ПолноеИмяФайла);//На сервере
ПолноеИмяФайла = ПолучитьИмяВременногоФайла(«XLS»);
ДД.Записать(ПолноеИмяФайла);
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ПолноеИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Текст);

Доработал и забыл. Как вдруг новая напасть — попросили доработать обработку, начинаю ее отлаживать, а она не считывает данные из XLSX файла.

Причем выдает ошибку доступа к временному файлу:

Я попробовал записывать во временный каталог, но это не принесло результата:

ТекКаталог = ПолучитьИмяВременногоФайла();
СоздатьКаталог(ТекКаталог);
ПолноеИмяФайла = ТекКаталог + «» + Новый УникальныйИдентификатор() + ТипФайла; //ПолучитьИмяВременногоФайла(«XLS»);ДД.Записать(ПолноеИмяФайла);Ф = Новый Файл(ПолноеИмяФайла);
Сообщить(ПолноеИмяФайла » Существует: » + Ф.Существует());ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ПолноеИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Текст); //, ТипФайлаТабличногоДокумента.ODS);

Причем 1С писала, что файл существует:

Тогда почему же она не может его считать? Задачу нужно было решить срочно, причем прикладную логику я уже сделал, а споткнулся на мелочи. Я уже было хотел перейти на локальный компьютер для разработки (тем более что на сервере из соображений быстродействия отключена отладка). Но тут мне пришла мысль впервые попробовать использовать не временные файлы, а потоки:

ПотокДанных = Новый ПотокВПамяти();
ЗаписьДД = Новый ЗаписьДанных(ПотокДанных);
ЗаписьДД.Записать(ДД);
ЗаписьДД.Закрыть();
ПотокДанных.Перейти(0, ПозицияВПотоке.Начало);
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ПотокДанных, СпособЧтенияЗначенийТабличногоДокумента.Текст, ТипФайлаТабличногоДокумента.ODS);
ПотокДанных.Закрыть();

Увы, при этом выдавалась все та же ошибка доступа. Кроме того, в документации я посмотрел, что из памяти можно считывать не все форматы, а только MXL и ODS. Бред, конечно, но такова 1С.

И тут до меня дошло попробовать поменять расширение на XLSX:

//на клиенте
ДД = Новый ДвоичныеДанные(ПолноеИмяФайла);
Ф = Новый Файл(ПолноеИмяФайла);
ТипФайла = Ф.Расширение);//на сервере
ТекКаталог = ПолучитьИмяВременногоФайла();
СоздатьКаталог(ТекКаталог);
ПолноеИмяФайла = ТекКаталог + «» + Новый УникальныйИдентификатор() + ТипФайла;
ДД.Записать(ПолноеИмяФайла);ДД = Новый ДвоичныеДанные(ПолноеИмяФайла);
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ПолноеИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Текст);

И всё заработало. У 1С, как обычно, беда с диагностикой ошибок. Она пишет совсем не ту ошибку, которая вызывает проблему. Доступ к файлу есть, просто формат файла 1С определяет по расширению, а не содержимому файла.

Время факт: 0,5 час. На поиски решения проблемы.

Ошибка работы 1С 8 с Excel: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft Office Excel): Нет доступа к файлу

Описание ошибки:
Проявила себя в клиент-серверной базе. Релиз платформы 1С: Предприятие 8.3.13.1644.

Найденные решения:

Полная формулировка ошибки:

{Доработки Документ.УстановкаЦенНоменклатуры.Форма.Доп_ФормаИмпортXLS.Форма(83)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft Office Excel): Нет доступа к файлу ‘C:1C_ArhivТест загрузка прайсов[имя_файла].xlsx’. Это может быть вызвано одной из следующих причин.

• Имени файла или пути не существует.
• Файл используется другой программой.
• Имя книги, которую вы пытаетесь сохранить, совпадает с именем открытой в данный момент книги.

1C 8 Произошла исключительная ситуация (Microsoft Office Excel): Нет доступа к файлу .xlsx

1С 8 работа с Excel Ошибка при вызове метода контекста (Open)

При доработке в расширении для конфигурации 1С: Комплексная автоматизация 8, ред. 2, которая должна загружать данные из файлов Excel и при попытке выполнения в коде РабочаяКнига = ExcelПриложение.WorkBooks.Open(ФормаИмпортXLS.ИмяФайла);. Что удивительно, но в более ранней редакции Комплексной, 1.1, эта проблема не возникала в этом же коде, хотя обе базы на одном сервере.

Проблема оказалась нова для автора этого текста только в 2020 году, хотя самой проблеме достаточно много времени (более 5 лет на момент написания). В обсуждении данной ошибки на сайте infostart.ru «Ошибка открытия файла Excel на сервере» обсуждается несколько предложений по решению проблемы, среди которых наиболее популярный вариант решения. Так же там много попутных предложений по настройке прав на стороне сервера, если вдруг популярный вариант окажется не актуальным.

1C 8

Популярность этого варианта подтверждается исчерпывающим обсуждением и вот на этом ресурсе: «v8.x: [РЕШЕНО] Ошибка при вызове метода контекста (Open) при работе с Excel»

1C 8.2 8.3 Произошла исключительная ситуация (Microsoft Office Excel): Нет доступа к файлу

Проблема была рещена данным простым решением, но обращу внимание на то, что данное действие должно быть выполнено на сервере, а не на локальном рабочем месте.

1C 8 Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация

Оцените, помогло ли Вам предоставленное описание решения ошибки?




© www.azhur-c.ru 2014-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.

23-09-2020

Журавлев А.С.
(Сайт azhur-c.ru)

0

14.02.2019 — 09:24


Не думал, что возникнет такая проблема. Файлов Excel перечитал уже несметное количество. У клиента из УТ11 моей обработкой закачивается прайс, все работало уже пару лет и вот после нового выдает ошибку при открытии файла. Пишет, что «неизвестная ошибка»
Какие отличия от того года:
1.Обновил платформу на 8.3.12.1685(в ней появились косяки с функционированием горячих клавиш и правой кнопки мыши. На 8.3.13.1690 приложение вообще периодически вылетало). Пока вернулись к 8.3.12.1685
2. Обновили УТ до 11.4.6.188
3. Excel 2010 при открытии руками выдавал сообщение про сбой активации. Говорит, что устранил, сегодня я еще не проверял.
Прайс не закачивается, ошибка не ушла
У меня на компе этот же файл прекрасно обрабатывается, но у меня стоит старый, добрый Excel 2007

1

14.02.2019 — 09:51

Как читаешь то? ТабДок.Прочитать()?

2

14.02.2019 — 09:59

(1)до чтения не доходит, файл перестал открываться
Попытка
Excel = Новый COMОбъект(«Excel.Application»);
WB = Excel.Workbooks.Open(ПутьКФайлу);

3

14.02.2019 — 10:31

Попробуй зарегистрировать comcntr.dll из 8.3.12.1685.

4

14.02.2019 — 10:34

(3)попробую вечером, но я ранее никогда такого не делал,
без этого работало. Вот для обмена ЗУП И БП, действительно требуется регистрация

5

14.02.2019 — 10:38

Цитата:

Сообщение от USSR Посмотреть сообщение

Пока вернулись к 8.3.12.1685

Если это означает изменение настроек запуска — то работаешь из 8.3.12.1685 а comcntr.dll из 8.3.13.1690

6

14.02.2019 — 10:39

C:Program Files (x86)1cv8[версия платформы]bincomcntr.dll

7

14.02.2019 — 10:54

2-USSR > куда не доходит? 1С умеет читать эксель без всяких комобъектов

8

14.02.2019 — 11:07

Цитата:

Сообщение от USSR Посмотреть сообщение

3. Excel 2010 при открытии руками выдавал сообщение про сбой активации.

Ну дык от этого и плясать.
мс офис просто так от нечего делать такие сообщения не станет выдавать.

Цитата:

Сообщение от USSR Посмотреть сообщение

Говорит, что устранил,

типа крякнул повторно еще раз :)))

В идеале снести офис, слегка подчистить реестр (типа RegCleaner), перезагрузить и поставить офис заново.

9

14.02.2019 — 11:23

(7)я знаю, но все работало и переделывать не хочется
(4)я это знаю, я же написал, попробую, но по моему не в этом дело
(8)готов со всем согласиться. я не знаю как и кто там крякал ))

10

14.02.2019 — 12:02

Цитата:

Сообщение от USSR Посмотреть сообщение

до чтения не доходит, файл перестал открываться

А может быть проблема в том, что данный файл на тот момент уже открыт?
Доводилось сталкиваться с ситуацией, что открытый экселовский файл никак визуально не отображается.
Приходилось открывать какой-нибудь другой экселовский файл, чтобы увидеть ранее открытый файл. После чего этот файл вручную закрывал. А дальше — все работало, как положено.

11

14.02.2019 — 12:15

(10)в диспетчере задач Excel процесса не было

12

14.02.2019 — 12:35

11-USSR > Через диспетчер задач возникшую у меня проблему не рассматривал…
Хохмы ради, можно открыть какой-нибудь другой экселовский файл. Если проблемный файл никак не проявит себя, то это другой случай.

13

15.02.2019 — 04:26

C:Program Files (x86)1cv8[версия платформы]bincomcntr.dll — регистрация ожидаемо не помогла
Установил 8.3.14, переустановил Excel, с удалением предыдущего, но без рекомендуемой уважаемыми БШ и самим Excel (не было возможности удаленно это сделать без потери связи), пока ничего не помогло.
На моем компе все работает, даже на другой конфигурации. Но в реестре старый офис остался и еще кое где, начисто он не удалился

14

15.02.2019 — 17:41

Цитата:

Сообщение от USSR Посмотреть сообщение

регистрация ожидаемо не помогла

Что значит ожидаемо. Если все случилось после манипуляций с платформой то comcntr.dll первый в рядах подозреваемых. К то же начинать надо с самого простого. Дальше попробуй написать ПолучитьCOMОбъект(, «Excel.Application»). Первый параметр пустой. Если ошибка — то проблема не с файлом. Попробуй создать другие ком объекты (тот же word или 1С). Что бы уже точно понимать где ошибка.

15

15.02.2019 — 20:37

(14)Ожидаемо — это то, что COM объект создается, но файд не открывается, я об этом сразу написал. И я никогда не регистрировал эту компоненту для целей чтения из Excel. Вот например для связи разных баз по COM — это да

16

16.02.2019 — 08:38

Короче, не выходит каменный цветок. С помощью MicrosoftProgram_Install_and_Uninstall вроде бы вычистил Office 2010. Снес Оffice 2007. Снова поставил. Интерактивно файлы открываются мгновенно и без проблем. Скопировал базу к себе на комп. Все работает, причем для обоих установленных у меня офисов (2003,2007). При создании COM объекта указывал и Excel.Application и Excel.Application.11 и Excel.Application.12.
У проблемного человека так и не работает. При открытии файла «Неизвестная ошибка». И у него и у меня Windows 7 msx. Пока единственное отличие нашел в том, что у него есть служба Office Software Protection Control. Я ее и останавливали запускал, никакого эффекта. Надо вечером попробовать открыть файл Word. Какая то засада. В инете эта тема встречается, но она мусолится вокруг клиент-серверной 1с, у меня файловая. В службах компонентов DCOM Excel не нашел, ни по имени, ни по идентификатору продукта. У меня на компе тоже не нашел.

17

17.02.2019 — 10:07

Сделал вариант на ADO. Визуально кажется несколько медленнее. Но причину бунта Excel.Application надо найти

18

17.02.2019 — 10:27

Ты пробовал ПолучитьCOMОбъект(, «Excel.Application») (При включенном Excel) и ПолучитьCOMОбъект(«», «Excel.Application») ?

19

17.02.2019 — 10:56

(18)Нет, я так не пробовал. Посмотрю на досуге. Но вариант не очень, читать из уже открытого файла. Тем более в моей обработке возможна обработка сразу с двух файлов, есть там некоторые особенности ценообразования.
Хотелось бы все-таки выбрать имена файлов и просто нажать кнопочку «Заполнить», как было раньше ) Как и у меня на компе, пробовал и на другой тачке на WIN 2008 Server.

20

17.02.2019 — 11:31

(18)Попробовал. Заполнение из открытого файла с помощью ПолучитьCOMОбъект(, «Excel.Application») работает

21

17.02.2019 — 11:38

(18)а так тоже не работает:
Excel = ПолучитьCOMОбъект(«», «Excel.Application»);
WB = Excel.Workbooks.Open(ПолноеИмяФайла);

22

19.02.2019 — 14:17

Цитата:

Сообщение от Uho Посмотреть сообщение

2-USSR > куда не доходит? 1С умеет читать эксель без всяких комобъектов

Цитата:

Сообщение от USSR Посмотреть сообщение

(7)я знаю, но все работало и переделывать не хочется

Цитата:

Сообщение от USSR Посмотреть сообщение

Сделал вариант на ADO. Визуально кажется несколько медленнее.

?????

23

19.02.2019 — 14:44

(22) ну что непонятно, время идёт, а прайсы не заканчиваются. Пришлось переделать. Но это не путь к успеху. Причина так и не выяснена

24

19.02.2019 — 15:23

23-USSR > если переделывать, почему не средствами 1С?

25

19.02.2019 — 16:42

(24)Тоже средствами 1с, но без Excel.Application
Connection = Новый COMОбъект(«ADODB.Connection»);

и тд.)

26

19.02.2019 — 18:43

ADODB — средство 1С? ну-ну
ЗЫ. Раз уж переписывал, переписал бы по-нормальному

27

19.02.2019 — 19:49

(27)это вопрос терминологический. 1с под виндой позволяет мне создать этот объект, значит можно считать что средствами 1с) а как по нормальному?) Если честно, то мне больше всего нравится именно excel.applicstion, попадались прайсы, которые без него мне не обработать.

28

19.02.2019 — 21:42

ТабличныйДокумент.Прочитать() пару лет с 8.3.8 вроде бы точно юзаем

29

19.02.2019 — 22:12

(28)Этот пробел в знаниях обязательно закрою, но Excel.Application все равно бывает нужен ) И на чтение, и на запись. На 7.7 много чего с ним. Правда и обсуждаемый казус тоже впервые, может никогда и не повторится.

30

20.02.2019 — 09:02

Недавно наткнулся что Табличный документ 1с 8.3.12 не прочитало, а COM Excell Application прочитал — под расширением xls была сохранена страница html. Excell ругнулся, что формат не его, но все же открыл. А так многие выгрузки переделал, в разы ж быстрее читает.

31

01.03.2019 — 16:49

23-USSR > Как вариант, может быть проблема заполнения шапки документа.
Тоже наблюдал случай, когда Excel не мог начать чтение документа. По подозрению проблемы в шапке — очистил шапку и подменил на шапку из читаемого файла — чтение прошло нормально. — Вероятно, при формировании шапки документа, в шапку прошли недокументированные символы.

32

01.03.2019 — 17:13

Цитата:

Сообщение от perpetum Посмотреть сообщение

Тоже наблюдал случай, когда Excel не мог начать чтение документа

Даже пустой файл создать не может. Там проблема с разрешениями (ИМХО). Решается большим бубном.

33

01.03.2019 — 18:36

(31)Про какую шапку Вы говорите ? я не понял. Файл вообще не открывается. Причем пробовал этот же файл читать еще на 4 компах, 3 в терминале. Все работает. Интерактивно и на проблемном компе открывается и даже читается по COM.Но только предварительно открытый

Понравилась статья? Поделить с друзьями:

Не пропустите эти материалы по теме:

  • Яндекс еда ошибка привязки карты
  • Ошибка открытия файла блокировок 1cv8ddb 1cd
  • Ошибка отмена sap приложения
  • Ошибка открытия файла xml файл содержит неизвестные данные
  • Ошибка отладчика лазарус

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии