Меню

Ошибка при вызове метода контекста quit

   sovsemnovichek

12.09.13 — 10:51

есть процедура, которая работает с файлом Excel

Процедура ЗагрузитьНажатие(Элемент)

        
    Если ИмяФайла = «» Тогда

        Сообщить(«Вы не выбрали файл»);

    КонецЕсли;

    
    
    Попытка

        Состояние( «Загрузка Microsoft Excel…» );

        ExcelПриложение = Новый COMОбъект(«Excel.Application»);

    Исключение

        Сообщить(«Ошибка при загрузке Microsoft Excel.» + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);

        Возврат;

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

    
    Попытка

        Состояние(«Открытие файла Microsoft Excel…»);

        ExcelФайл = ExcelПриложение.WorkBooks.Open(ИмяФайла);

    Исключение

        Сообщить(«Ошибка открытия файла Microsoft Excel.» + ИмяФайла + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);

        ExcelПриложение.Quit();

        Возврат;

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

    
    Попытка

        Состояние(«Обработка файла Microsoft Excel…»);

        ExcelЛист = ExcelФайл.Sheets(1);

        xlCellTypeLastCell         = 11;

        КоличествоСтрок         = ExcelЛист.Cells.SpecialCells(xlCellTypeLastCell).Row;

        КоличествоКолонок         = ExcelЛист.Cells.SpecialCells(xlCellTypeLastCell).Column;

    Исключение

        Сообщить(«Ошибка открытия листа №1 Microsoft Excel.» + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);

        ExcelПриложение.Quit();

        Возврат;

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

    
        Если КоличествоСтрок < 2 И КоличествоКолонок < 4 Тогда

        Сообщить(«Неверный формат данных!» + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);

        ExcelПриложение.Quit();

        Возврат;

    КонецЕсли;

    
    ТабличноеПоле.Очистить();

    
    Если (РКод = 0) ИЛИ (РНаименование = 0) ИЛИ (РКоличество = 0) Тогда

        Сообщить(«Вы не произвели необходимые настройки!»);

    КонецЕсли;

    
    Для Row  = 2 По КоличествоСтрок Цикл  

        
        КолКод                     = ExcelПриложение.Cells(Row,РКод).Value;    

        КолонкаАртикул             = ExcelПриложение.Cells(Row,РАртикул).Value;

        КолонкаНоменклатура     = ExcelПриложение.Cells(Row,РНаименование).Value;

        КолонкаКоличество        = ExcelПриложение.Cells(Row,РКоличество).Value;

      
    
    КолСтрока =  Формат(КолКод,»ЧГ=0″);

    КолАрт    =  Формат(КолонкаАртикул,»ЧГ=0″);

    
            
    ТаблицаИтог = ТабличноеПоле.Добавить();

    
    ТаблицаИтог.Код             = КолСтрока;

    ТаблицаИтог.Артикул         = КолАрт;

    ТаблицаИтог.Наименование     = КолонкаНоменклатура;

    ТаблицаИтог.Количество         = КолонкаКоличество;

    
    
КонецЦикла;

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

Проблема такая: почему, когда каждый раз выполняется процедура файл не закрывается, а так и остается открытым…? И каждый раз открывается заново, комп начинает, естественно сильно тормозить… Как решить эту проблему?

   cw014

1 — 12.09.13 — 10:53

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

   mikecool

2 — 12.09.13 — 10:55

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

   le_

3 — 12.09.13 — 10:56

ExcelПриложение = Неопределено;
   Формат

4 — 12.09.13 — 10:56

так попробуй ExcelПриложение.ActiveWorkbook.Close();

   le_

5 — 12.09.13 — 10:57

(3) Нужно вставить после:

ExcelПриложение.Quit();
   cw014

6 — 12.09.13 — 10:57

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

Объект.DisplayAlerts = Ложь;

Объект.Quit();

   wPa

7 — 12.09.13 — 10:58

ExcelПриложение  = NULL;

   sovsemnovichek

8 — 12.09.13 — 11:01

Ага) будем пробовать

   sovsemnovichek

9 — 12.09.13 — 11:13

Хорошо, файл каким-то странным образом стал закрываться, хотя я ничего не делал =D, но теперь куча процессов Excel остается, что такое?

   mikecool

10 — 12.09.13 — 11:14

(9) смотри (2)

   sovsemnovichek

11 — 12.09.13 — 11:16

(4) это так делается да?

   cw014

12 — 12.09.13 — 11:16

(9) смотри (6) — 100% рабочее

   sovsemnovichek

13 — 12.09.13 — 11:21

рычит

{Форма.Форма.Форма(49)}: Ошибка при вызове метода контекста (Quit)

        ExcelПриложение.Quit();

по причине:

Неизвестная ошибка

   sovsemnovichek

14 — 12.09.13 — 11:22

Попытка

        Состояние(«Открытие файла Microsoft Excel…»);

        ExcelФайл = ExcelПриложение.WorkBooks.Open(ИмяФайла);

    Исключение

        Сообщить(«Ошибка открытия файла Microsoft Excel.» + ИмяФайла + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);

        ExcelПриложение.Quit();

        Возврат;

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

Здесь вот рычит

  

sovsemnovichek

15 — 12.09.13 — 12:04

(6) не работает, не получается почему-то

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

Содержание

Поле объекта не обнаружено

1С ошибка Поле объекта не обнаружено

Существует множество статей, которые описывают возможные причины возникновения в 1С ошибки “Поле объекта не обнаружено”. Порой это связывают с обновлением платформы, обновлением типового релиза, или с какими-то другими причинами.

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

Такое сообщение платформа выдает, когда пытается обратиться к свойству объекта языка, которого у данного объекта нет. Не важно, что это за объект – документ, справочник, таблица значений , или сообщение пользователю.

  • Удалили табличную часть, к которой обращаемся в коде?
  • Переименовали реквизит, а в коде не исправили?
  • Заменили значение со ссылки на неопределено?

Вуаля – платформа выдаст ошибку “Поле объекта не обнаружено”!

Как исправить? Исходя из природы ошибки – переименовать реквизит на нужное имя, отредактировать код, или использовать правильные обращения к стандартным свойствам объекта.

Например, у объекта “СообщениеПользователю” нет свойства “Таблица”, и следующий код приведет к ошибке:

Сообщение = Новый СообщениеПользователю;
Сообщение.Таблица = “Ошибка”;

Индекс находится за границами массива

1С ошибка Индекс находится за пределами массива

Что означает такое сообщение системы? Как правило, с данной ошибкой разработчик сталкивается при некорректной работе с коллекциями. Самые частые случаи появления ошибки “Индекс находится за границами массива”.

  • Использование при обходе коллекции количества элементов вместо индекса. Индексы начинаются с нуля, а количество элементов – с единицы. Поэтому следующий код гарантированно приведет к ошибке: Массив[Массив.Количество()]
  • Последствия удаления элементов из коллекции, очистки коллекции или замены коллекции на пустую
  • Ошибочное увеличение счетчика в цикле “Для”

 Как исправить? Для удаления элементов из коллекции по условию – использовать обратный цикл. Добавлять условие на соответствие счетчика цикла и индекса массива. Не увеличивать счетчик внутри кода цикла Для … Цикл … КонецЦикла

Обращение к процедуре как к функции

ОШибка

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

Данная ошибка имеет две вариации – если используется стандартная процедура из методов какого-нибудь объекта, то фраза будет звучать “Обращение к процедуре объекта как к функции”. Если же использовать процедуру, объявленную в коде, то текст ошибки будет “Обращение к процедуре как к функции”.
При этом ошибка использования процедуры объекта является ошибкой времени выполнения – т.е. на этапе сохранения и проверки конфигурации платформа эту ошибку не обнаружит.

А вот неправильное использование процедуры синтаксическая проверка (Ctrl + F7) успешно обнаруживает, и не даст сохранить конфигурацию или внешнюю обработку/отчет, пока ошибка не будет устранена.

Рассмотрим два примера:

1. Воспроизведем ошибку “Обращение к процедуре как к функции”. При этом платформа не даст сохранить изменения, т.к. не проходит синтакс-контроль.

2. Воспроизведем ошибку “Обращение к процедуре объекта как к функции”. Здесь мы неверно используем метод объекта массива “Добавить”, который является процедурой.

Как исправить? Ошибка тривиальная, и исправление тоже. Чаще всего, достаточно внимательно прочитать описание методов объекта во встроенной справке или синтакс-помощнике. Если метод является процедурой, то значений он возвращать не может. Следовательно, нужно модифицировать код так, чтобы такого ошибочного вызова не было.
Если же используется процедура, объявленная в коде, возможно, есть необходимость изменить ее на функцию, либо также скорректировать код, который эту процедуру использует.

Процедура не может возвращать значение

Родственная предыдущей ошибка. Для того, чтобы код возвращал какое-то значение, следует этот код размещать в функции, а не в процедуре.

В процедуре можно написать ключевое слово “Возврат” без параметров. Это будет означать выход из процедуры.

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

Процедура ПроцедураНеМожетВозвращатьЗначение(Команда)
Возврат "Ошибка";
КонецПроцедуры

Как исправить? Платформа сама подсказывает, в каком месте кода ошибка. Нужно изменить текст модуля – либо удалить параметр у ключевого слова Возврат, либо убрать его вовсе, либо изменить процедуру на функцию – зависит от того, какая логика у вашей процедуры, и как вы предполагаете ее использовать.

Переменная не определена

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

  • Опечатка в имени переменной
  • Обращение к переменной, которая нигде в области видимости не объявлена (неявной инициализацией с присвоением значения, явным образом с использованием ключевого слова “Перем”, или передана в качестве параметра)
  • Написание на клиенте серверного кода. Например, обращение к менеджеру справочников “Справочники”, и т.п. Клиентская часть приложения “не видит ” серверные объекты языка
  • Также ошибка может появиться, если ранее код использовался в режиме толстого клиента, но после был запущен в тонком клиенте.

Как исправить?

Внимательно следить за правильностью набранного кода, своевременно объявлять переменные или передавать их в качестве параметров. Писать серверный код только в серверных модулях, а также использовать соответствующие инструкции препроцессора, например “&НаСервере”.

Значение не является значением объектного типа

Ошибка “Значение не является значением объектного типа” может возникнуть при неверном обращении к объекту языка. Объектный тип – это такие объекты языка, которые содержат в себе другие объекты – свойства, реквизиты и т.п. Эти свойства доступны через точку, например “Объект.СвойствоЭтогоОбъекта”

Но если через точку попытаться использовать какое-то значение, которое внутри себя свойств не имеет – например, любое значение примитивного типа – это и приведет к ошибке.

Разберем более сложный пример:

&НаСервере
Процедура ЗначениеНеЯвляетсяЗначениемОбъектногоТипаНаСервере(Справочники = Ложь)
Сообщить(Справочники.Сотрудники.ПустаяСсылка());
КонецПроцедуры

Ошибка может быть “плавающей”. Если вместо параметра по умолчанию “Справочники = Ложь” будет передан менеджер справочников, то ошибки возникать не будет. А если вызвать процедуру без параметров, то будет использоваться параметр по умолчанию с типом Булево, что и приведет к ошибке.

Чаще всего чтобы исправить ошибку, нужно в отладчике посмотреть, какой тип значения используется. Можно внести изменения в код, чтобы обеспечить корректное поведение (например, в запросе вместо наименования товара выбрать ссылку, и в коде через точку уже обращаться к свойствам ссылки, а не текстового наименования). А можно добавить проверку на нужный тип значения. Т.е. – если значение того типа, который мы ожидаем – выполняем код. Иначе – не выполняем.

Ошибка при вызове метода контекста

Ошибка при вызове метода контекста

Обнаружены ошибки в 1С Синтаксическая ошибка

В языке 1С у разных объектов (запросов, справочников, табличных документов и др.) есть предопределенные методы, предусмотренные платформой. Обращение к этим методам требует соблюдения порядка и параметров, правильного синтаксиса и соблюдения условий использования. Например, при чтении табличного документа из файла он не должен быть открыт в другой программе, при подключении к http-соединению оно должно быть доступно, и т.п.

Если эти условия не соблюдать, платформа в зависимости от версии может выдавать сообщения вида “Ошибка при вызове метода контекста”, и далее будут следовать более подробные сведения об ошибке – стек вызовов, приведших к ошибке, номер строки и позиции в строке, где произошла ошибка.

Чаще всего ошибка при вызове метода контекста встречается в следующих методах:

  1. Записать
  2. Прочитать
  3. Выполнить
  4. Создать
  5. ПроверитьВывод

Разберем эту ошибку на примере метода Выполнить объекта Запрос:

Запрос = Новый Запрос("ВЫБРАТЬ ПЕРВЫЕ 1 1 ГДЕ ИСТИНА И");
Запрос.Выполнить();

В тексте запроса допущена ошибка –  после первого условия “ГДЕ ИСТИНА” указан оператор И, но после него нет еще одного условия. В результате при попытке выполнения запроса, платформа вернет ошибку.

Для исправления ошибки зачастую достаточно внимательно использовать методы, при необходимости уточнять порядок, количество и тип параметров – это можно сделать в справке или синтакс-помощнике (встать курсором на имя метода в коде, и нажать сочетание клавиш Ctrl+F1). В случае запроса – нужно передавать синтаксически корректный текст запроса; в случае проверки вывода на печать – в системе должен быть установлен принтер; в случае подключения к почте – должны быть корректно указаны логин и пароль, и т.п.

Тип не может быть выбран в запросе в 1С 8.3 (8.2)

Ошибка Тип не может быть выбран в запросе

С такой ошибкой начинающие разработчики (да и не только начинающие 😉 ) сталкиваются чаще всего, при чтении запросом данных из таблиц значений, либо из регистров сведений. Все дело в том, что запросы поддерживают далеко не все типы значений. Так, например, нельзя запросом выбрать тип Картинка, ХранилищеЗначений, Шрифт, и многие другие типы, которые не относятся к примитивным или ссылочным типам значений.

Так, если ресурс регистра сведений имеет тип ХранилищеЗначений, выбрать его запросом будет нельзя. Также, если в таблицу значений поместить значения не подходящих типов, а после передать эту таблицу в качестве параметра-источника данных, выполнение запроса также приведет к ошибке “Тип не может быть выбран в запросе”.

Еще одна ситуация, когда запрос будет выдавать ошибку – если таблица значений, которая передается в качестве параметра, имеет не типизированные колонки.

Неверно:

//ТЗОшибочныйТип.Колонки.Добавить("Контрагент");

Верно:

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

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

Использование в 1С модальных окон в данном режиме запрещено

Ошибка Использование в 1С модальных окон в данном режиме запрещено​

Платформа будет выдавать такое сообщение, если в коде используются методы, приводящие к открытию модальных окон. Модальные окна – это окна, которые при открытии блокируют весь остальной интерфейс. В 1С есть несколько модальных методов – например – “Вопрос”, “ОткрытьЗначение”, “Предупреждение”. Кроме того, в коде может использоваться модальный синтаксис открытия форм: “ОткрытьМодально()”

Если в свойствах конфигурации выбран режим использования модальности “Не использовать”, то выполнение модальных методов будет приводить к этой ошибке “Использование в 1С модальных окон в данном режиме запрещено”.

Для устранения ошибки можно пойти несколькими путями. Как водится, один – быстрый, другой – правильный 🙂

Быстрый способ – переключить режим использования модальности в положение “Использовать”.

Более правильный способ – использовать в коде немодальные вызовы методов. Например, у метода “Вопрос” есть немодальный аналог  – “ПоказатьВопрос”, у метода “Предупреждение” – “ПоказатьПредупреждение”, и т.п. Чаще всего об этих методах дополнительно указано в синтакс-помощнике и справке.

Кроме того, в последних версиях платформы появились асинхронные методы – “ВопросАсинх”, “ПредупреждениеАсинх” и др. Появление этих методов позволяет писать более простой и понятный асинхронный код, и направлено в первую очередь, на более полноценную поддержку браузерами и работу в веб-клиенте.

1С 8.3 и 8.2: Запись с такими ключевыми полями существует!

Данная ошибка появляется при некорректной записи в регистр сведений. Чаще всего с этой ошибкой сталкиваются начинающие разработчики, не до конца понимающие механизмы работы с ключевыми полями (измерениями).

Суть ошибки следующая – регистр сведений позволяет записать запись (строку таблицы) с уникальным набором ключевых полей – а для периодических регистров также и поля Период. Если следующая запись полностью повторяет значение ключевых полей, но осуществляется методом Записать с параметром Замещать = Истина, то запись в таблице регистра просто заменится на идентичную.

Однако если поместить две абсолютно одинаковые записи в набор записей, и попытаться его записать – платформа выдаст ошибку. Еще один распространенный случай, когда 1С сообщает “Запись с такими ключевыми полями существует” – это запись в периодический регистр сведений с периодичностью от “День” и выше, подчиненный регистратору.

В типовых конфигурациях часто эту ошибку можно воспроизвести, если в пользовательском режиме создать два документа “Установка цен номенклатуры” с одной и той же номенклатурой и за один и тот же день. Попытка провести второй документ приведет к ошибке.

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

Поле объекта недоступно для записи в 1С

Ошибка Поле объекта недоступно для записи в 1С​

Чаще всего начинающие программисты 1С сталкиваются с этой ошибкой в двух ситуациях.

Первый случай – это попытка редактирования системных полей, недоступных для записи. Например, в модуле формы сама форма будет содержаться в объекте ЭтаФорма. И попытка присвоить этому реквизиту любое значение приведет к ошибке “Поле объекта недоступно для записи”.

Второй случай – и с ним новички как раз допускают больше всего ошибок – это попытка редактирования полей ссылки, а не самого объекта. Чаще всего код выглядит примерно так:

Элемент = Справочники.Сотрудники.НайтиПоКоду("12345");
Элемент.Наименование = "Новое наименование";

 

Исполнение данного кода приведет к ошибке, т.к. поля ссылки доступны только для чтения, а метод НайтиПоКоду вернет именно ссылку. Чтобы можно было внести изменения, следует из ссылки получить сам объект – используя соответствующий метод ПолучитьОбъект().

Для исправления ошибки зачастую достаточно получить объект из ссылки. В случае же попытки редактирования свойств, доступных только на чтение самый правильный подход – анализировать имеющуюся документацию по этим свойствам, и не пытаться присваивать им значения, если платформа этого не предусматривает.

Ссылка на обработку

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

Заключение

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

  1. Доброе время суток.
    Проблема заключается в следующем внешняя обработка загрузки из Эксель на личном компьютере работает нормально, но на РДП выдает ошибку «ошибка при вызове метода контекста (open)» там и там база файловая.Переделал все что нашел в инете
    — создал папку C:WindowsSysWOW64configsystemprofileDesktop ;
    — Настройки DCOM добавил пользователя;
    — И проделал «А решается это так:
    на сервере убиваем excel (taskkill /im excel.exe /f)
    открываем оснастку «Службы компонентов» (Пуск->Администрирование->Службы компонентов)
    в ней раскрываем ветку Службы компонентов->Компьютеры->Мой компьютер->Настройка DCOM
    справа в списке находим Microsoft Excel Application, открываем Свойства, вкладка Удостоверение, выбираем «Текущий пользователь», ОК.
    Готово»
    И все равно выскакиваю по ошибке.
    Есть у кого то предложение что можно сделать еще.


  2. nomad_irk

    Online

    nomad_irk
    Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.889
    Симпатии:
    1.029
    Баллы:
    204

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

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

  3. {ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(35)}: Ошибка при вызове метода контекста (Open)
    КНИГА = Excel.WorkBooks.Open(ИмяФайла);
    по причине:
    Неизвестная ошибка

  4. Запустил интерактивно и все равно ошибка
    Опечатки нет пере набрал Open раз 10


  5. nomad_irk

    Online

    nomad_irk
    Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.889
    Симпатии:
    1.029
    Баллы:
    204

    при интерактивном открытии файла, что говорит?

  6. Доброго,
    Клиент какой запускается на RDP, 32/64 бит ?

  7. Добрый день.При интерактивном открытии ничего не пишет.
    RDP клиент запускается 64 и офис 64

  8. Похожая проблема вылечилась использованием 32 битного клиента (мы можем это себе позволить),
    еще, как вариант, я делал через формирование файла на сервере и передачу его на клиента
    С.П.- : «ПоместитьВоВременноеХранилище», «ПолучитьФайлы», «ОписаниеПередаваемогоФайла»
    1.На сервере получаю макет, передаю его на клиента через «ПоместитьВоВременноеХранилище»/»ПолучитьФайлы»
    2. На клиенте формируется документ через COM : «Новый COMОбъект(«Word.Application»)»
    3. На клиенте заполняется макет, тем или иным способом


  9. ExtreMe

    Offline

    ExtreMe
    Опытный в 1С

    Регистрация:
    13 сен 2014
    Сообщения:
    89
    Симпатии:
    8
    Баллы:
    29

    мой набор: win8.1 64x, Excel 2016 64х, 1c 8.3.13.1513 64х и текст обработки

        Путь    = Объект.ИмяФайла; // тип Строка
    
        Попытка
            ОбъектExcel = Новый COMОбъект("Excel.Application");
        Исключение
            Возврат "Ошибка открытия MS Excel";
        КонецПопытки;
    
        Попытка
            ОбъектExcel.WorkBooks.Open(Путь);
        Исключение
            ОбъектExcel.DisplayAlerts = 0;
            ОбъектExcel.Quit();
            ОбъектExcel.DisplayAlerts = 1;
            ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
            Возврат ОписаниеОшибки;
        КонецПопытки;
    

    проверил Службы компонентов->Компьютеры->Мой компьютер->Настройка DCOM->Microsoft Excel Application->Свойства->Удостоверение
    Выбран «Текущий пользователь»

    Создал папку Desktop по обоим путям C:WindowsSysWOW64configsystemprofileDesktop и C:WindowsSystem32configsystemprofileDesktop

    И хренасдва. всё равно выдаёт ошибку на стройке ОбъектExcel.WorkBooks.Open(Путь); и уходит в исключение :(

    {ВнешняяОбработка.ЗагрузкаИзExcel.Форма.Форма.Форма(53)}: Ошибка при вызове метода контекста (Open)
            ОбъектExcel.WorkBooks.Open(Путь);
    по причине:
    Неизвестная ошибка
    

    — Объединение сообщений, 17 янв 2019

    попробовал под 1c 8.3.13.1513 86х, то же самое
    после каждого запуска обработки в диспетчере остаётся висеть процесс Excel’я, я его каждый раз завершаю

    Последнее редактирование: 17 янв 2019

  10. ExtreMe

    Offline

    ExtreMe
    Опытный в 1С

    Регистрация:
    13 сен 2014
    Сообщения:
    89
    Симпатии:
    8
    Баллы:
    29

    одинаковая ситуация с тонким и толстым клиентом


  11. ExtreMe

    Offline

    ExtreMe
    Опытный в 1С

    Регистрация:
    13 сен 2014
    Сообщения:
    89
    Симпатии:
    8
    Баллы:
    29

    пока решение нашёл в таком варианте:
    открыть файл Excel
    сделать поправки в коде

        Путь    = Объект.ИмяФайла; 
       
        Попытка
            //ОбъектExcel = Новый COMОбъект("Excel.Application");
            ОбъектExcel = ПолучитьCOMОбъект(, "Excel.Application");
        Исключение
            ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
            Возврат ОписаниеОшибки;
        КонецПопытки;
       
        //Попытка
        //    ОбъектExcel.WorkBooks.Open(Путь);
        //Исключение
        //    ОбъектExcel.DisplayAlerts = 0; 
        //    ОбъектExcel.Quit();
        //    ОбъектExcel.DisplayAlerts = 1;
        //    ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
        //    Возврат ОписаниеОшибки;
        //КонецПопытки;
    

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

    — Объединение сообщений, 17 янв 2019

    не совсем понял настройки безопасности
    Службы компонентов->Компьютеры->Мой компьютер->Настройка DCOM->Microsoft Excel Application->Свойства->Безопасность
    добавляя там пользователя, у меня то проходило чтение то нет
    стабильной работы обработки при первом варианте кода не дало

    Последнее редактирование: 17 янв 2019

  12. ExtreMe

    Offline

    ExtreMe
    Опытный в 1С

    Регистрация:
    13 сен 2014
    Сообщения:
    89
    Симпатии:
    8
    Баллы:
    29

    Последнее редактирование: 20 янв 2019

  13. evgkup

    Offline

    evgkup

    Регистрация:
    9 авг 2019
    Сообщения:
    1
    Симпатии:
    0
    Баллы:
    1

    Была аналогичная проблема на сервере
    Помогло следующее (отображение открывающегося приложения excel)
    Попытка
    лпИмяФайла = «c:tmp1.xls»;
    лпExcel = Новый COMОбъект(«Excel.Application»);
    лпExcel.Visible = 1;
    лпExcel.DisplayAlerts = 0;
    лпExcel.WorkBooks.Open(лпИмяФайла);
    Исключение
    лпExcel.Quit();
    Сообщить(ОписаниеОшибки());
    Возврат;
    КонецПопытки;
    …набор действий

    Последнее редактирование: 9 авг 2019


1C-pro.ru - форум по 1С:Предприятию 7.7, 8.0, 8.1, 8.2, 8.3

Heltarion

2 / 2 / 0

Регистрация: 21.11.2011

Сообщений: 57

1

02.12.2011, 11:18. Показов 8319. Ответов 11

Метки нет (Все метки)


Добрый день!
Посмотрите пожалуйста. Есть в обработке таблица значений, в которую я выгружаю данные их XML, после этого я корректирую таблицу и хочу чтобы программа сохранила ее в новый документ эксель. Для этого я создал процедуру «Процедура СохранитьНажатие(Элемент) Экспорт». При сохранении выскакивает: «Ошибка при установке значения атрибута контекста (Value)». Насколько я понимаю, программе не нравится тип значения, который я передаю.
Переменные:

ТПП — «табличное поле правил», в ней уже занесены некотрые значения из XML
НоменклатураЗагрузки, НоменклатураБазы — имена столбцов ТПП
СтолбЗагр, СтолбБаз — столбцы в экселе

Код процедуры:

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
СтолбЗагр = 1;
СтолбБаз = 2;
 
Если ИнициализацияЭкселя() Тогда
      Книга = Excel.WorkBooks.Add();
      Sheet = Книга.Sheets(1);
    
      Для каждого стр из ТПП Цикл
              Sheet.Cells(стр,СтолбЗагр).Value=стр.НоменклатураЗагрузки;
              Sheet.Cells(стр,СтолбБаз).Value=стр.НоменклатураБазы;
      КонецЦикла;
 
      Попытка
              Книга.SaveAs("F:1CBaseВнешнии обработкиправила.xls");
      Исключение
              Сообщить(ОписаниеОшибки()+" Файл не сохранен!");
              Возврат;
      КонецПопытки;
КонецЕсли;
Сообщить("Готово");

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



0



308 / 308 / 1

Регистрация: 16.01.2011

Сообщений: 1,073

02.12.2011, 11:32

2

СохранитьНажатие(Элемент) это событие формы
в этой процедуре пропиши вызов другой процедуры, например СохранитьВЭксель();
саму же процедуру СохранитьВЭксель() добавь в модуль объекта и сделай её экспортной. Вставь свой код представленный выше.
обращение из формы будет ЭтотОбъект.СохранитьВЭксель();



1



2 / 2 / 0

Регистрация: 21.11.2011

Сообщений: 57

02.12.2011, 11:56

 [ТС]

3

СохранитьНажатие(Элемент) это событие формы
в этой процедуре пропиши вызов другой процедуры, например СохранитьВЭксель();
саму же процедуру СохранитьВЭксель() добавь в модуль объекта и сделай её экспортной. Вставь свой код представленный выше.
обращение из формы будет ЭтотОбъект.СохранитьВЭксель();

В МодулеОбъекта создал функцию «Процедура СохранитьВЭксель(ТПП) Экспорт»
Прописал в ней тотже код, что выше. В событии формы написал: ЭтотОбъект.СохранитьВЭксель(ТПП);
Выскочила ошибка: Ошибка при вызове метода контекста (Cells)
Что я нетак сделал?



0



308 / 308 / 1

Регистрация: 16.01.2011

Сообщений: 1,073

02.12.2011, 12:10

4

процедуру ИнициализацияЭкселя() тоже закинь в модуль объекта
СохранитьВЭксель(ТПП), параметр ТПП скорее всего не нужен



1



2 / 2 / 0

Регистрация: 21.11.2011

Сообщений: 57

02.12.2011, 12:19

 [ТС]

5

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

Добавлено через 4 минуты
Проблема вот в чем:
Sheet.Cells(стр,СтолбЗагр).Value=1;
Sheet.Cells(стр,СтолбБаз).Value=2;

Так работает, но если я поставлю
Sheet.Cells(стр,СтолбБаз).Value=стр.НоменклатураБа зы;
Выдает ошибку «Ошибка при установке значения атрибута контекста (Value)».

Дело в том что «стр.НоменклатураБазы» — это справочник ссылка, если у нее текстовый тип то программа глотает и записывает.



0



19 / 18 / 1

Регистрация: 15.11.2011

Сообщений: 54

02.12.2011, 12:22

6

чет вы мудрено делаете.
У вас не правильно указывается адресс ячейки в cell. Если стр — это коллекция или массив записей, то он не может нести в себе номер ячейки.
Не знаком с 1C, но програмлю в Excel и делаю выгрузки из других систем.



1



2 / 2 / 0

Регистрация: 21.11.2011

Сообщений: 57

02.12.2011, 12:28

 [ТС]

7

В данный момент ему не нравится присваемое значение к ячейке экселя (если я правильно понимаю сообщение «Ошибка при установке значения атрибута контекста (Value)» )

Причем если тип значения строка, то он его получает без вопросо, если тип значения СправочникССсылка, то он руегается на «Ошибка при установке значения атрибута контекста (Value)».

Я просто не понимаю как обратиться к такому типу переменных чтобы получить значение типа строка.



0



19 / 18 / 1

Регистрация: 15.11.2011

Сообщений: 54

02.12.2011, 12:30

8

а принудительно все значения в текст перевести нельзя?



1



308 / 308 / 1

Регистрация: 16.01.2011

Сообщений: 1,073

02.12.2011, 12:30

9

стр.НоменклатураБазы.Наименование например



1



2 / 2 / 0

Регистрация: 21.11.2011

Сообщений: 57

02.12.2011, 12:32

 [ТС]

10

стр.НоменклатураБазы — это уже есть наименование интересующего меня поля (имя столбца), в некотрых случаях можно писать: стр.НоменклатураБазы.Значение, но это нетот случай

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



0



308 / 308 / 1

Регистрация: 16.01.2011

Сообщений: 1,073

02.12.2011, 12:34

11

значение из Excel?



1



Heltarion

2 / 2 / 0

Регистрация: 21.11.2011

Сообщений: 57

02.12.2011, 12:43

 [ТС]

12

Рабочий код:

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Функция ИнициализацияЭкселя()
 
    //Пытаемся подключиться к Excel
    Попытка
        Excel = новый COMОбъект("Excel.Application");
        Сообщить("=====> Загрузка производится через MS Excel...");
        Возврат Истина;
    Исключение
        Возврат Ложь                
    КонецПопытки;     
    
КонецФункции
 
 
Процедура СохранитьНажатие(Элемент) Экспорт
    СтолбЗагр = 1; // задаю номер столбца№1 в эксель
    СтолбБаз = 2;  // задаю номер столбца№2 в эксель
    
    Если ИнициализацияЭкселя() Тогда
        Книга = Excel.WorkBooks.Add(); // создал новый документ
        Sheet = Книга.Sheets(1);          // открыл страницу 1
   
// цикл для заполнения таблицы эксель данными из табличного поля (по двум полям)     
        Для каждого стр из ТПП Цикл
            Sheet.Cells(стр,СтолбЗагр).Value=стр.НоменклатураЗагрузки;
            Sheet.Cells(стр,СтолбБаз).Value=стр.НоменклатураБазы.Наименование;
        КонецЦикла;
 
//выполняю сохранение документа       
        Попытка
            Книга.SaveAs("F:1CBaseВнешнии обработкиправила12.xlsx");
        Исключение
            Сообщить(ОписаниеОшибки()+" Файл не сохранен!");
            Возврат;
        КонецПопытки;
    КонецЕсли;
    Книга.Application.Quit();
    Сообщить("Готово");
КонецПроцедуры



0



1

2

Показывать по
10
20
40
сообщений

Новая тема

Ответить

Zebraaa

Дата регистрации: 16.03.2012
Сообщений: 23

Платформа 1с 8.2.15.310, релиз 1.0.12.2 При открытии стандартного отчета Карточка субконто выдается сообщение: Ошибка при вызове метода контекста (Найти поле). Если доступные поля. Найти поле(Отборы.Элементы [Я]_ Левое значение).=Неопределенно Тогда по причине Несоответствии типов (параметр номер 1) <br>Причем такая ошибка выходит только у одного пользователя, у других все нормально открывается.

Sh_S

Дата регистрации: 02.03.2007
Сообщений: 7730

где-то стоит отбор со сравнением с пустым значением, зайдите в настройку и посмотрите

Zebraaa

Дата регистрации: 16.03.2012
Сообщений: 23

А можно ,пожалуиста, по подробнее!

Sh_S

Дата регистрации: 02.03.2007
Сообщений: 7730

мне кажется теперь, что я не права. Под рукой бухгалтерии нет, но в УПП и ЗУПе если поставить отбор по пустому значению выходит просто шапка отчета. Но все-таки посмотрите внимательно на отборы в настройках.

Zebraaa

Дата регистрации: 16.03.2012
Сообщений: 23

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

Денис (САМАРА)

Дата регистрации: 09.04.2008
Сообщений: 8351

Платформу обновить до последней. Выполнить тестирование и исправление со всеми флагами.

Zebraaa

Дата регистрации: 16.03.2012
Сообщений: 23

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

Денис (САМАРА)

Дата регистрации: 09.04.2008
Сообщений: 8351

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

Zebraaa

Дата регистрации: 16.03.2012
Сообщений: 23

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

Денис (САМАРА)

Дата регистрации: 09.04.2008
Сообщений: 8351

Имеются ввиду «Сохраненные варианты отчета».

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

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

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Ошибка при вызове метода контекста previewfile1c
  • Ошибка при вызове метода контекста open произошла исключительная ситуация microsoft excel