Имя: Пароль:
1C
 
Чтение файла Excel на сервере
,
0 catzilla codzilkin
 
17.01.25
10:04
Всем здравствуйте.
Не знаете что могло сломаться при обновлении комплексной или иной конфигурации? Или это платформа?

Выдает такую ошибку "Недопустимая строка с указанием класса 0x800401F3" при создании СОМОбъект("Excel.Application") в новом году. До этого говорят работало.

Лист = Новый СОМОбъект("Excel.Application");

Знаю что надо делать через копирование из буфера в Моксель 1С. Но пока вот так...
1 Волшебник
 
17.01.25
10:05
Переустановите Excel на сервере
2 craxx
 
17.01.25
10:20
(0) где этот вызов происходит? на сервере? на клиенте?
в толстом или тонком? или в веб, упаси Господь.
3 Волшебник
 
17.01.25
10:26
(2) на Linux-сервере :)
4 craxx
 
17.01.25
12:24
(3) а, да, точно, забыл же..
5 catzilla codzilkin
 
19.01.25
09:40
(2) на сервере
6 Волшебник
 
19.01.25
09:42
(5) Вы переустановили Excel на сервере? Он вообще там стоял?
7 catzilla codzilkin
 
19.01.25
09:44
(6) наш сисадмин ставил... утверждает что его до этого там не было судя по логам...
8 catzilla codzilkin
 
19.01.25
09:45
* вместе с сисадмином клиента
9 Волшебник
 
19.01.25
09:53
Проблема решена?
10 catzilla codzilkin
 
20.01.25
06:21
Нет. Переустановили и зарегистрировали всё что можно и нельзя. Схема работы такая... По кнопке берется файл экселевский с клиента и переносится на сервер 1с функцией платформенной. И меняется реквизит по которому к файлу нужно обращаться. С "путь" на "адрес". Даже если и исправить этот момент на сервере этот файл найти не может функция в дальнейшем. Ошибка на ошибке, сомневаюсь почему-то что у них это работало до обновления.
1. У себя на рабочем компьютере который и сервер и клиент расширение на создание СОМ-объекта не ругается. Но выдает ошибку описанную выше.
2. Восстановили архивную базу до обновления релиза у клиента. Ошибка та же. Дело не в обновлении конфигурации, как утверждает клиент. Архивная база дает ту же ошибку.
11 Мимохожий Однако
 
20.01.25
07:43
(10) Код переноса файла на сервер в студию
12 catzilla codzilkin
 
20.01.25
08:29
&НаКлиенте
Процедура Префикс_ЗаполнитьСуммыИзЭксельВместо(Команда)
    Оповещение = Новый ОписаниеОповещения("ЗаполнитьСуммыПоФайлу", ЭтотОбъект);
    
    ОткрытьФорму("ОбщаяФорма.Префикс_ВыборФайла",, ЭтотОбъект,,,, Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
13 catzilla codzilkin
 
20.01.25
08:29
Это вызывается по кнопке
14 catzilla codzilkin
 
20.01.25
08:32
&НаКлиенте
Процедура Выбрать(Команда)
    Если ЗначениеЗаполнено(Путь) Тогда
        ОписаниеОповещения = Новый ОписаниеОповещения("ПослеПомещенияФайлаНаСервер", ЭтотОбъект);
        НачатьПомещениеФайлаНаСервер(ОписаниеОповещения,,,,Путь, УникальныйИдентификатор);
    Иначе
        Сообщить("Файл не выбран!");    
    КонецЕсли;
КонецПроцедуры
15 catzilla codzilkin
 
20.01.25
08:32
Это по кнопке Ок в общей форме...
16 catzilla codzilkin
 
20.01.25
08:33
&НаКлиенте
Процедура ПослеПомещенияФайлаНаСервер(ОписаниеФайла, ДопПараметры) Экспорт
    
    Результат = Новый Структура;
    Результат.Вставить("Адрес", ОписаниеФайла.Адрес);
    
    Закрыть(Результат);    
    
КонецПроцедуры
17 Stepashkin
 
20.01.25
08:34
(12) Информативно.
18 catzilla codzilkin
 
20.01.25
08:34
Это оповещалка
19 catzilla codzilkin
 
20.01.25
08:34
&НаКлиенте
Процедура ЗаполнитьСуммыПоФайлу(Результат, ДополнительныеПараметры) Экспорт
    Если Результат <> Неопределено Тогда
        Префикс_ЗаполнитьСуммыИзЭксельВместоНаСервере(Результат.Адрес);
        ОбновитьИтоги(ЭтаФорма);
    КонецЕсли;
КонецПроцедуры
20 catzilla codzilkin
 
20.01.25
08:36
&НаСервере
Процедура Префикс_ЗаполнитьСуммыИзЭксельВместоНаСервере(Путь)
    Сообщение = "";
    Попытка
        Эксель = Новый COMОбъект("Excel.Application");
        Эксель.DisplayAlerts = 0;    
    Исключение
        Возврат;
    КонецПопытки;

    Книга    = Эксель.Workbooks.Open(Путь);
    ТекЛист    = Книга.WorkSheets(1);
    Данные = ТекЛист.UsedRange.Value;
    Колонки = Данные.Выгрузить();
    КонечнаяСтрока = Колонки.Получить(0).Количество();
    
    Х = 0;
    Для Каждого Стр Из Объект.Товары Цикл
        Стр.Сумма = Число(Колонки.Получить(0).Получить(Х));
        Стр.Цена = Стр.Сумма/Стр.Количество;    
        ОбработкаТабличныхЧастейКлиентСервер.РассчитатьСуммуНДСТабЧасти(Стр, Объект.СуммаВключаетНДС);
        Стр.Всего = Стр.Сумма + ?(Объект.СуммаВключаетНДС, 0, Стр.СуммаНДС);
        Х = Х + 1;
    КонецЦикла;
                
    Эксель.Workbooks.Close();
    Эксель.Application.Quit();
    Эксель.Quit();
    Эксель = 0;
    
    Сообщение = "Суммы перезаполнены";
    Сообщить(Сообщение);
    
    ЭтаФорма.Модифицированность = Истина;
КонецПроцедуры
21 catzilla codzilkin
 
20.01.25
08:39
Здесь
    Книга = Эксель.Workbooks.Open(Путь);
выдает такую ошибку

Ошибка при вызове метода контекста (Open)
{Расширение_Префикс1 Документ.РеализацияТоваровУслуг.Форма.ФормаДокументаТовары.Форма(134)}:Книга    = Эксель.Workbooks.Open(Путь);
{Расширение_Префикс1 Документ.РеализацияТоваровУслуг.Форма.ФормаДокументаТовары.Форма(172)}:Префикс_ЗаполнитьСуммыИзЭксельВместоНаСервере(Результат.Адрес);
{Расширение_Префикс1 ОбщаяФорма.Префикс_ВыборФайла.Форма(38)}:Закрыть(Результат);

[ОшибкаВоВремяВыполненияВстроенногоЯзыка]
по причине:
Произошла исключительная ситуация (Microsoft Excel): К сожалению, нам не удалось найти файл e1cib/tempstorage/16bbd0c1-4d16-4a96-b8e4-a6385f126973?seanceId=OWJkMDUxNzYtMjU4YS00MjM4LWI2NDYtYjZiZmRlY2YwZTE54mOp_BuFnkKi7uIkl56BJAAAAAA.xlsx. Возможно, он был перемещен, переименован или удален?
[ОшибкаИспользованияВстроенногоЯзыка]
22 catzilla codzilkin
 
20.01.25
08:46
Мне вот это непонятно...
"Данные = ТекЛист.UsedRange.Value;"
это возвращает ячейки что выделенные мышкой? Или вообще весь лист?
от крайней верхней левой заполненной ячейки до правой нижней даже если есть пустые строки и колонки посередине...
23 catzilla codzilkin
 
20.01.25
08:49
Потому что клиент пытался прочитать суммы из печформы УПД...
А в ней кроме строк с суммами разрывы страниц и итоги на каждой странице...
А судя по коду тут даже нет сверки для той ли номенклатуры происходит проставляется сумма...
24 catzilla codzilkin
 
20.01.25
08:50
* номенклатуры проставляется
25 Волшебник
 
20.01.25
09:12
Ну то есть ошибка уже другая. Проблема в сабже решена (пере)установкой Excel на сервере.
26 catzilla codzilkin
 
20.01.25
09:15
(25) Ну да... а можно тему переименовать? Или новую создавать?
27 Волшебник
 
20.01.25
09:17
(26) Ладно, пиши здесь. Настрочил уже...
28 catzilla codzilkin
 
20.01.25
09:23
(27) Спасибо!
29 catzilla codzilkin
 
20.01.25
09:24
Вопрос: как побороть ошибку?

[ОшибкаВоВремяВыполненияВстроенногоЯзыка]
по причине:
Произошла исключительная ситуация (Microsoft Excel): К сожалению, нам не удалось найти файл e1cib/tempstorage/16bbd0c1-4d16-4a96-b8e4-a6385f126973?seanceId=OWJkMDUxNzYtMjU4YS00MjM4LWI2NDYtYjZiZmRlY2YwZTE54mOp_BuFnkKi7uIkl56BJAAAAAA.xlsx. Возможно, он был перемещен, переименован или удален?
[ОшибкаИспользованияВстроенногоЯзыка]
30 Мимохожий Однако
 
20.01.25
10:00
Попробуй прочитать файл из объекта ТабличныйДокумент
31 LLeonidov
 
20.01.25
15:27
(29) попробуй вначале файл сохранить во временный и получить путь к нему. И конечно используй пункт (30) ком для чтения экселя из 1с в 2025 не нужен.

&НаСервере
Процедура Префикс_ЗаполнитьСуммыИзЭксельВместоНаСервере(АдресФайлаВоВременномХранилище)
    
    ПутьКФайлу = ПолучитьВременныйФайл(АдресФайлаВоВременномХранилище, "xlsx");
КонецПроцедуры

&НаСервере
Функция ПолучитьВременныйФайл(Адрес, Тип)
    ПутьКФайлу = ПолучитьИмяВременногоФайла(Тип);
    ДанныеИзХранилища = ПолучитьИзВременногоХранилища(Адрес);
    ДанныеИзХранилища.Записать(ПутьКФайлу);
    
    Возврат ПутьКФайлу;
КонецФункции
32 Dzenn
 
гуру
20.01.25
15:00
А зачем читать через КОМ объект, если 1С-ка давно умеет читать Эксель в табличный документ нативно?
33 nAPACEHAK
 
20.01.25
17:23
а это как?
с клиента в параметрах адрес
Префикс_ЗаполнитьСуммыИзЭксельВместоНаСервере(Результат.Адрес);

а на сервере он уже путь
Книга    = Эксель.Workbooks.Open(Путь);

смешались в кучу люди, кони... ?

Ошибка при вызове метода контекста (Open)
а есть такой файл разве, по такому пути
e1cib/tempstorage/блаблабла.xlsx
34 nAPACEHAK
 
20.01.25
17:28
(32) да вдруг там заголовки кривые, или 7 листов, а тут хоба, и Данные = ТекЛист.UsedRange.Value; - только диапазон по ВелхЛево-НизПраво заполненному диапазону тек.листа
35 Гений 1С
 
гуру
20.01.25
19:23
еще есть джуны, что читают не через ТабличныйДокумент? Непуганые..
36 vis
 
21.01.25
08:40
(35) От версии платформы же зависит