Ошибка при получении значения атрибута контекста workbooks

Не получается прочитать файл Екселя на сервере. Ошибка при получении значения атрибута

Я
   DTX 4th

14.10.20 — 17:33

Ошибка при получении значения атрибута контекста (Workbooks): Неизвестная ошибка

DisplayAlerts тоже не получается установить.

Вот код:

[1c]

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

    Попытка    Эксель.Visible = Ложь;             Исключение ОО = ОписаниеОшибки(); КонецПопытки;

    Попытка    Эксель.DisplayAlerts = Ложь;     Исключение ОО = ОписаниеОшибки(); КонецПопытки;

    
    Если Файл <> Неопределено Тогда

        Попытка    Книга = Эксель.WorkBooks.Open(Файл); Исключение

            ОО = ОписаниеОшибки();

            ВызватьИсключение ОО;

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

        
        ЛистЭксель = Книга.WorkSheets(1);

    Иначе

[/1c]

На клиенте работает без ошибок. На сервере эксель есть, файл открывается

   Гений 1С

1 — 14.10.20 — 20:25

(0) читай через табличный документ. Зачем тебе этот аппликатион? Может нет на сервере экселя?

сделай визибл.

Посмотри в отладчике свойства переменной Эксель

   lodger

2 — 14.10.20 — 21:05

в контексте сервисного пользователя сервера 1с в текущем конфиге нет возможности запустить «Excel.Application». ему рабочий стол подавай, а откуда у сервисного пользака винды рабочий стол?

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

   H A D G E H O G s

3 — 14.10.20 — 21:23

Я просто оставлю это здесь

Программист 1С, удаленно с разовым посещением офиса, 80-120 на руки

   Tarlich

4 — 14.10.20 — 23:37

нужна загрузка из экселя  без установленного экселя -))

   Сияющий в темноте

5 — 15.10.20 — 00:13

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

вам что из excel нужно?

   DTX 4th

6 — 15.10.20 — 02:45

(1) Как вариант

(2) Мне казалось, я по rdp пробовал с серва запустить

(3) Будь ласка, более конструктивно плз

   DTX 4th

7 — 15.10.20 — 02:47

(4)

>Эксель = Новый COMОбъект(«Excel.Application»); — выполняется

>На сервере эксель есть

>>нужна загрузка из экселя  без установленного экселя -))

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

   vicof

8 — 15.10.20 — 03:12

«На сервере эксель есть»

На терминальном или 1сном?

  

DTX 4th

9 — 15.10.20 — 05:16

(8) Эм, терминальный сервер — это клиент в клиент-серверной топологии

Ну т.е. на той машине, где серв 1с, у того пользователя, которым запускается служба сервера (и потом процессы 1cv8?)

Содержание:

1.       Ошибка при установке значения атрибута контекста

2.       Ошибка при получении значения атрибута контекста

Одной из наиболее частых ошибок исполнения кода 1С являются ошибки, связанные с установкой реквизита либо получением реквизита через точку, либо ошибка при вызове функции или процедуры через точку. Все данные объекты являются атрибутами информационных объектов-владельцев, к которым они принадлежат. Рассмотрим примеры таких ошибок и причины их возникновения.  

1.    Ошибка при установке значения атрибута контекста

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

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

2.    Ошибка при получении значения атрибута контекста

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

При возникновении данных ошибок значения атрибута в 1Св первую очередь следует проверить существование атрибута, к которому обращаются, затем проверить совпадение типов значений атрибута и присваиваемого ему значения, затем уже проверить права на установку либо чтение значения. Проверить, является ли дело в правах либо дать права на действия с атрибутом, можно, установив привилегированный режим для совершения действия с данным атрибутом, прописав перед строчкой с ошибкой УстановитьПривилегированныйРежим(Истина), после строчки — УстановитьПривилегированныйРежим(Ложь).  

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

Александр Суворов

COM-объект и Excel

lilyapo сказал(-а): 20.12.2016 13:59

COM-объект и Excel

Создаю COM-объект и пытаюсь открыть файл Excel:
ex=Новый ComОбъект(«Excel.Application»);
ex.WorkBooks.Open(Файл);
Файл существует, COM-объект создается, но при открытии файла Excel выдается сообщение:

Ошибка при вызове метода контекста (Open)
ex.WorkBooks.Open(Файл);
по причине:
Неизвестная ошибка

Сталкиваюсь с этим впервые, на других компах всю жизнь все работает, с любой платформой 8.3
Если что-то с Excel, то что?

avm3110 сказал(-а): 20.12.2016 15:25

Re: COM-объект и Excel

Создаю COM-объект и пытаюсь открыть файл Excel:
ex=Новый ComОбъект(«Excel.Application»);
ex.WorkBooks.Open(Файл);
Файл существует, COM-объект создается, но при открытии файла Excel выдается сообщение:

Ошибка при вызове метода контекста (Open)
ex.WorkBooks.Open(Файл);
по причине:
Неизвестная ошибка

Сталкиваюсь с этим впервые, на других компах всю жизнь все работает, с любой платформой 8.3
Если что-то с Excel, то что?

lilyapo сказал(-а): 20.12.2016 15:55

Re: COM-объект и Excel

avm3110 сказал(-а): 20.12.2016 16:31

Re: COM-объект и Excel

А попробуй «завернуть» в Попытку

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

lilyapo сказал(-а): 20.12.2016 17:04

Re: COM-объект и Excel

avm3110 сказал(-а): 20.12.2016 17:25

Re: COM-объект и Excel

[QUOTE=lilyapo;469920]Все то же самое.
Ошибка при вызове метода контекста (Open): Неизвестная ошибка

похоже у тебя проблема с com-ом. А у тебя Excel нормально в реестре зареген? Ты его видишь в com-объектах?

Попробуй подключиться к открытому «ручками» экселю

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

Обучение программированию на 1С

Использование COM-соединения, выгрузка в Excel через COM-объект Excel.Application

Вообще COM-объекты используют для соединения информационной базы 1С с файлом Word, Excel, Outlook или любой другой программой, поддерживающей данный интерфейс обмена данными. В этой статье рассмотрим задачу выгрузки/загрузки данных из/в MS Excel. Чтобы это осуществить воспользуемся COM-соединением и объектом Excel.Application. Для примера возьмём задачу выгрузки/загрузки данных о номенклатуре. Пример рассмотрим ниже.

COM-соединение

Что же такое COM-соединение? Component Object Model (или COM) – это технология (фирмы Microsoft) взаимодействующих компонентов, которые одновременно могут быть использованы в разных приложениях. При этом весь функционал соответствующего компонента наследуется внутрь разрабатываемого приложения. В нашем случае COM-объект Excel.Application используется внутри кода 1С для операций с файлом книги MS Excel.

Объект Excel.Application

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

  • ОбъектExcel.WorkBooks.Open(ИмяФайла) – Открытие книги MS Excel
  • ОбъектExcel.ActiveWorkbook.Close() – Закрытие текущей книги
  • ОбъектExcel.Quit() – Закрытие COM-объекта
  • ОбъектExcel.Sheets(ИмяЛиста) – Получает лист книги
  • ЛистExcel.Cells(НачалоСтрока, НачалоСтолбец) – Ячейка таблицы на данном листе
  • ЛистExcel.Range(Ячейка1, Ячейка2) – Выделенная область
  • ЯчейкаExcel.Value – Значение ячейки таблицы
  • ЯчейкаExcel.Text – Текст ячейки таблицы

Постановка задачи

Итак, предположим, что в обработке 1С у нас имеется табличная часть, состоящая из следующих колонок:

Необходимо реализовать 2 функционала (сделать на форме 2 основные кнопки):

  1. Выгрузка табличной части в подготовленный файл MS Excel
  2. Загрузка табличной части из файла.

Алгоритм выгрузки/загрузки в MS Excel

Алгоритм выгрузки следующий:

  1. Выгружаем табличную часть в таблицу значений
  2. Создаём новый COM-объект Excel.Application
  3. Выбираем файл, открываем файл книги MS Excel
  4. Переходим на заданный лист книги
  5. Выгружаем данные в файл
  6. Закрываем книгу, выходим из COM-объекта.

Алгоритм загрузки следующий:

  1. Создаём новый COM-объект Excel.Application
  2. Выбираем файл, открываем файл книги MS Excel
  3. Переходим на заданный лист книги
  4. Загружаем данные из файла в таблицу значений
  5. Закрываем книгу, выходим из COM-объекта
  6. Таблицу значений выгружаем в табличную часть.

Операция выгрузки и загрузки данных о номенклатуре происходит в заранее подготовленный шаблон MS Excel.

Пример кода 1С

Код 1С я постарался разделить на отдельные функции, чтобы, скопировав, с ними можно было работать где угодно. На форме обработки 1С были созданы 3 кнопки:

В итоге в реализации алгоритма получились следующие основные процедуры и функции 1С:

  • ПолучитьExcel – Получает COM-объект MS Excel;
  • ЗакрытьExcel – Закрывает использование COM-объекта MS Excel;
  • ПолучитьЛистExcel – Получает лист книги Excel;
  • ДобавитьТабличныйДокументВExcel – Добавляет табличный документ на лист Excel (нужно для выгрузки данных);
  • ПрочитатьОбластьИзExcel – Читает область ячеек с листа Excel (нужно для загрузки данных);
  • ШиринаЛистаExcel – Ширина листа Excel;
  • ВысотаЛистаExcel – Высота листа Excel;
  • ПреобразоватьТДвТЗ – Преобразует табличный документ в таблицу значений;
  • ПреобразоватьТЗвТД – Преобразует таблицу значений в табличный документ;

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

Настройка DCOM для Excel.Application в 1С, за минуту

Настройка DCOM для Excel.Application в 1С, за минуту

Добрый день! Уважаемые читатели и гости, популярного IT блога pyatilistnik.org. Сегодня я продолжу пополнять свою копилку знаний в разделе 1С. Вчера меня один из разработчиков, попросил ему помочь настроить компоненты DCOM для Excel.Application в связке с приложением 1С. Я ранее этого не делал, так что пришлось в этом разбираться. По итогам найденного решения, появилась и эта заметка. Уверен, что на этот материал найдутся желающие.

Что такое DCOM

Distributed Component Object Model (DCOM) — программная архитектура, разработанная компанией Microsoft для распределения приложений между несколькими компьютерами в сети. Программный компонент на одной из машин может использовать DCOM для передачи сообщения (его называют удаленным вызовом процедуры) к компоненту на другой машине. DCOM автоматически устанавливает соединение, передает сообщение и возвращает ответ удаленного компонента. С данным компонентов мы уже знакомились, когда решали ошибку 10016.

Настройка DCOM для Excel.Application

И так у меня есть виртуальная машина под управлением Windows Server 2012 R2, на ней установлены серверные компоненты 1С, есть задача для Excel.Application модуля, настроить DCOM компоненты.

Нам необходимо открыть в панели управления Windows, компонент «Службы компонентов».

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

В службах компонентов (Component Services) откройте ветку:

Если по каким-то причинам у вас нет пункта Microsoft Excel Application, откройте реестр Windows, найдите ветку: HKEY_CLASSES_ROOTAppIDEXCEL.EXE, если ее нет, то создаем ее. В ней должен быть ключ REG_SZ со значением .

КОМУ ЛЕНЬ самому создавать, то можете скачать данный ключ реестра у меня. Просто запустите потом и подтвердите, что согласны добавить. Затем откройте командную строку от имени администратора и выполните команду:

У вас откроется mmc оснастка «Службы компонентов», которая делает то же что и DCOMCONFIG, но позволяет видеть 32 битные компоненты. В результате этих манипуляций компонент Microsoft Excel Application у вас должен появиться. Открываем свойства Microsoft Excel Application.

Переходим на вкладку «Безопасность (Secutity)». В пункте «Разрешения на запуск и активацию (Launch and Activation Permissions)», выберите «Настроить (Customize )» и изменить. Вам нужно добавить сюда учетную запись, от имени которой запускается служба 1С и предоставить ей права:

  • Локальный запуск — Local Launch
  • Локальная активация — Local Activation

Далее переходим к пункту «Разрешения на доступ (Access Permissions)» и так же меняем их. Добавьте там ту же учетную запись, от имени которой запускается сервис 1С, и дайте ей права «Локальный доступ (Local Access)». Сохраните настройки.

Закрываем окно служб компонентов, теперь для того, чтобы закончит ьнастройку DCOM для 1С и Microsoft Excel Application, вам необходимо дать права на две папки.

Вам нужно убедиться, что у вас есть две папки:

2147221005(0x800401F3): Недопустимая строка с указанием класса — что делать

При выполнении каких-либо задач с комплексом 1С (фоновый обмен данными между компонентами, запуске нужной конфигурации, проверки выполнения кода etc) может появиться сообщение об ошибке 2147221005(0x800401F3). Последняя обычно сопровождается строкой « Недопустимая строка с указанием класса » и связана с неверным кодом программы, не зарегистрированными в системе компонентами и другими релевантными факторами. Давайте разберёмся, что делать при появлении ошибки 2147221005(0x800401F3) в вашей 1С.

Суть и причины «Недопустимая строка с указанием класса»

Ошибка 2147221005(0x800401F3) относится к регулярно встречающимся ошибкам 1С, и фиксируется у многих пользователей. Единственного и эффективного рецепта её решения не существует, так как она может иметь уникальную основу, и вызывается особенностями программного кода в конкретной системе.

Тем не менее к числу наиболее популярных причин ошибки 2147221005 относятся следующие:

  • Пользователь использует устаревшую конфигурацию 1С . К примеру, фиксировались случаи появления ошибки 2147221005(0x800401F3) при использовании архаичной конфигурации «Управление торговлей» при попытке обмена данными с 1С «Бухгалтерия предприятия»;
  • Наличие некорректного кода программы (к примеру, обращение к устаревшему «V82.COMConnector» вместо модерного «V83.COMConnector»);
  • В системе не зарегистрирована библиотека comcntr.dll , имеющая важное значение для работы 1С;
  • У пользователя, запускающего определённый комплекс 1С, нет достаточных прав для работы с ним (к примеру, запуск выполняется из гостевой учётной записи, вместо учётки администратора);
  • В системе не установлен (не зарегистрирован) Excel , необходимый для работы 1С.

Давайте разберёмся, как исправить ошибку 2147221005 «Недопустимая строка с указанием класса» в вашей системе 1С.

Обновите вашу конфигурацию 1С до актуальной версии

Первым делом убедитесь, что вы используете самую свежую версию конфигурации 1С. При подключении к нужным базам для выполнения обмена она может попытаться использовать устаревшую платформу (к примеру, 8.2), которая фактически отсутствует. Потому обновите вашу версию конфигурации до актуального релиза, а потом попробуйте осуществить требуемое подключение.

Используйте свежую версию 1С

Запускайте 1С с правами админа

Убедитесь, что вы запускаете систему под учётной записью администратора, а не ограниченного в правах «Гостя» или аналога.

Измените код программы

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

COMConnector = Новый COMObject(«V82.COMConnector»);

COMConnector = Новый COMObject(«V83.COMConnector»);

После указанной замены ошибка «Недопустимая строка с указанием класса» может быть решена.

Зарегистрируйте в системе библиотеку comcntr.dll

Если вы пользуетесь Виндовс 64, то необходимо провести корректную регистрацию в системе библиотеки comcntr.dll . Нажмите на Win+R, введите следующую строку:

C:WindowsSysWOW64regsvr32 «c:Program Files(x86)1cv88.3.12.1469bincomcntr.dll»

Вместо «8.3.12.1469» укажите установленную у вас версию технологической платформы. После этого нажмите на ввод. Указанная регистрация может помочь избавиться от ошибки 2147221005 в 1С.

Проверьте наличие установленного в системе Excel

Наличие установленного в системе Excel является необходимым элементом при обращении к нему системы 1С. Потому рекомендуем убедиться, что Эксель в системе установлен корректно, для чего нажмите Win+R, введите там Excel , и нажмите ввод. Если программа запустилась, тогда всё работает корректно. Если нет, тогда следует установить (переустановить) Excel (комплекс «MS Office») на вашей машине (машинах).

Используйте специализированные форумы 1С

Если не один из указанных советов вам не помог, обратитесь к помощи форумов, которые посещают множество программистов и специалистов 1С. В частности, рекомендуем такие форумы как forum.infostart.ru, cyberforum.ru/1c-standard, is.ideasoft.in.ua где вам могут помочь в решении возникшей дисфункции.

Заключение

В нашем материале мы разобрали, когда появляется ошибка «2147221005(0x800401F3): Недопустимая строка с указанием класса», и как можно её исправить. Данная дисфункция может иметь различные причины, а для её решения рекомендуем задействовать весь комплекс способов, перечисленным нами выше. Их выполнение может помочь устранить ошибку 2147221005 в вашей системе 1С.

ComObject Excel.Application без офисного пакета

Мне нужно прочитать файл Excel из Powershell.
Я использую этот объект:

Он прекрасно работает на машине с установкой Office, но если Office не установлен, я получаю эту ошибку:

Есть ли какая-то среда выполнения для Office, чтобы использовать ее?

3 Ответа

Там нет «runtime» для Excel, которые вы можете использовать без получения надлежащей лицензии для Excel (и установки Excel на машину). Если вы пытаетесь сделать это на сервере OS с несколькими пользователями, вам также нужно рассмотреть возможность специального лицензирования (поскольку одна лицензия Excel не будет охватывать несколько пользователей более чем вероятно).

Вы можете рассмотреть возможность использования OpenXML SDK для Office в качестве способа выполнения некоторых общих действий в файле Excel, как описано здесь . Поскольку это библиотека .NET, вы сможете использовать ее изнутри PowerShell.

Нет времени выполнения, как и доступа.

Там есть зритель, если это вам поможет.

Обзор

С помощью средства просмотра Excel можно открывать, просматривать и печатать книги Excel, даже если у вас не установлен Excel. Вы также можете скопировать данные из Excel Viewer в другую программу. Тем не менее, вы не можете редактировать данные, сохраните книгу или создайте новую книгу.

Вместо COM можно использовать активные X-объекты данных (ADO), например

Похожие вопросы:

Мне нужно закончить заявку в C#. Теперь я хочу получить функцию, которая управляет файлом Excel для получения данных. Я использовал getActiveObject(Excel.Application) , но это ничего не возвращает.

У меня есть набор документов, чтобы запросить, чтобы пользователь открыл версию только для чтения(опция рекомендуется только для чтения). Я хотел бы открыть документ excel без чтения только в.

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

Я пытался получить доступ к COM объектам всех экземпляров Excel 2010, зарегистрированных в ROT в Visual C# Express 2010. Я нашел код на.

Есть ли способ преобразовать .xls в .csv без установки Excel с помощью Powershell? У меня нет доступа к Excel на конкретной машине, поэтому я получаю ошибку при попытке: New-Object -ComObject.

У меня есть powershell скрипт, который использует -ComObject Word.Application. Я хотел бы использовать это в сервере windows, но у него нет Word. На данный момент , когда я выполняю, у меня есть эта.

У меня есть небольшой скрипт, который позволяет мне объединить несколько .csv к А.файлы XLSX: $path = C:UsersFrancescoMDesktopCSVResults* $csvs = Get-ChildItem $path -Include *.csv $y =.

Я столкнулся с проблемой на Powershell Excel ComObject, где я не могу принять разделитель, отличный от запятой , . Некоторые из внешних .Полученные файлы csv используют другой разделитель, например.

Ошибка в 1С 8. Ошибка при получении значения атрибута контекста (ОсновнаяРоль), Недопустимо использование свойства ОсновнаяРоль

Описание ошибки:
Проблема стала возникать после того, как в серверную базу УТ 10.3 был добавлен функционал Библиотеки МДЛП. Ошибка не проявляла себя явно при работе в режиме 1С: Предприятие, но негативно влияла на выполнение некоторых регламентных заданий, так что они аварийно прерывались.

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

{ОбщийМодуль.Пользователи.Модуль(116)}: Ошибка при получении значения атрибута контекста (ОсновнаяРоль)
по причине:
Недопустимо использование свойства «ОсновнаяРоль»

Проблема стала заметна случайно лишь тогда, когда в частности регламентное фоновое задание «Наличие новых ЭД» стало прерываться в процессе своего выполнения из за ошибки.

1С 8 как исправить ошибку при получении значения атрибута контекста ОсновнаяРоль
Рис. 1. Пример ошибки «Ошибка при получении значения атрибута контекста (ОсновнаяРоль)» в регламентном задании «Наличие новых эд в сервисе ЭДО« 

Так же и в другом регламентном задании стала проявляться ошибка «Ошибка при получении значения атрибута контекста (ОсновнаяРоль) по причине: Недопустимо использование свойства «ОсновнаяРоль».


Рис. 2. Пример ошибки «Недопустимо использование свойства «ОсновнаяРоль» в регламентном задании «Выполнение обмена по сценарию…»

Удивителен тот факт, что код «Метаданные.ОсновнаяРоль» вполне нормальный. Т.е. конструкция вызывается в конфигураторе при конфигурировании как свойство объекта «Метаданные». Так же не возникает ошибок при проверка кода при сохранении изменений конфигурации. 

Нажатие на изображении увеличит его

Рис. 3. Причина ошибки в коде, конструкция «Метаданные.ОсновнаяРоль = Неопределено».

Релиз используемой платформы 1С в базе, в которой возникла проблема — 8.3.18.1741


Рис. 4. Сведения о конфигурации, версии платформы и параметры конфигурации.

Удивительно, что описание данного свойства «ОсновнаяРоль» отсутствует в Синтакс-помощнике. Хотя, как уже было коротко упомянуто, свойство «ОсновнаяРоль» глобального свойства «Метеданные» используется в библиотеке МДЛП. Исходно основное назначение библиотеки — для конфигураций, работающих в режиме управляемого приложения. Конфигурация 1С: Управление торговлей 10.3 работает в другом режиме — обычного приложения. Поэтому получается, что конструкция кода эксплуатируется в редко используемой библиотеке и ее работоспособность не совсем понятна в текущем релизе платформы.

В сети оказалось достаточно мало вспомогательной информации об этой ошибке. Из найденного, что может кому-то помочь — это обсуждение на форуме forum.1c.ru «После обновления на 2.0.15.8 выпадает ошибка: Недопустимо использование свойства «ОсновнаяРоль».

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

1С 8 свойство метода метаданные конфигурации ОсновнаяРоль
Рис. 5. Отсутствие в «Синтакс-помощнике» описания метода «ОсновнаяРоль»

Поэтому решением данной проблемы стало изменение кода на конструкцию: Метаданные.ОсновныеРоли.Количество()

Нажатие на изображении увеличит его

Рис. 6. Устранение ошибки «Ошибка при получении значения атрибута контекста (ОсновнаяРоль)» заменой текста кода.

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

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




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

21-07-2022

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

Gokusa

Заблокирован

1

1C 8.x (тонкий)

24.06.2014, 15:27. Показов 13593. Ответов 14

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


Студворк — интернет-сервис помощи студентам

суть проблемы такова:
при закрытии формы в которой происходит работа с екселем, ругается на переменную Ексель.Applicatioons.Quit();
вот так
«{Форма.УпрФорма.Форма(628)}: Ошибка при получении значения атрибута контекста (Application)
Эксель.Application.Quit();
по причине:
Неизвестная ошибка»
при закрытии формы проверяю

1C
1
2
3
4
5
6
&НаКлиенте
Процедура ПриЗакрытии()
    Если типЗнч(Эксель) = Тип("COMОбъект") Тогда 
        Эксель.Application.Quit();    
    КонецЕсли;
КонецПроцедуры

с одними файлами работает нормально, с другим ругается.
Эксель — это клиентская переменная упр.формы.
в чем может быть ошибка?



0



16 / 16 / 4

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

Сообщений: 138

24.06.2014, 15:39

2

А если попробовать Ексель.Workbooks.Close();



0



Модератор

Эксперт 1С

3724 / 2918 / 575

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

Сообщений: 11,491

Записей в блоге: 1

24.06.2014, 15:48

3

Покажи инициализацию переменной Эксель



0



Gokusa

Заблокирован

24.06.2014, 16:10

 [ТС]

4

книгу и лист закрываю также.
все равно ругается

Добавлено через 50 секунд
инициализация переменной

1C
1
2
3
4
5
6
Попытка
            Эксель = Новый COMОбъект("Excel.Application"); 
        Исключение
            Предупреждение("Ошибка открытия файла " + Файл);
             Возврат;
        КонецПопытки;

Добавлено через 5 минут
вот инициализация и закрытие

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
&НаКлиенте
 Процедура ИнициализацияЕксель()
     
     Попытка
         Эксель = Новый COMОбъект("Excel.Application"); 
     Исключение
         Предупреждение("Ошибка открытия файла " + Файл);
         Возврат;
     КонецПопытки;
     
 КонецПроцедуры
 
 &НаКлиенте
 Процедура ЗакрытиеЕксель()
     Если ТипЗнч(Лист) = Тип("COMОбъект") Тогда
         Попытка
             Лист.Application.Quit();
             Лист  = Неопределено;
         Исключение
         КонецПопытки;
     КонецЕсли;
     
     Если ТипЗнч(Книга) = Тип("COMОбъект") Тогда
         Попытка
             Книга.Application.Quit();
             Книга  = Неопределено;
         Исключение
         КонецПопытки;
     КонецЕсли;
     Если ТипЗнч(Эксель) = Тип("COMОбъект") Тогда
         Попытка
             Эксель.Application.Quit();
             Эксель  = Неопределено;
         Исключение
         КонецПопытки;
     КонецЕсли;
 КонецЕсли;
КонецПроцедуры

процесс висит, либо еслине висит торугается.



0



16 / 16 / 4

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

Сообщений: 138

24.06.2014, 16:11

5

Скорее всего, потому что на клиенте



0



Gokusa

Заблокирован

24.06.2014, 16:19

 [ТС]

6

не могу книгу закрыть



0



Dethmontt

Модератор

Эксперт 1С

3724 / 2918 / 575

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

Сообщений: 11,491

Записей в блоге: 1

24.06.2014, 16:23

7

Должно работать если эксель ничего не держит

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
&НаКлиенте
 Процедура ИнициализацияЕксель()
     
     Эксель = Неопределено;
     Попытка
         Эксель = Новый COMОбъект("Excel.Application"); 
     Исключение
         Предупреждение("Ошибка открытия файла " + Файл);
         Возврат;
     КонецПопытки;
     
 КонецПроцедуры
 
 &НаКлиенте
 Процедура ЗакрытиеЕксель()
     Если Эксель <> Неопределено Тогда
             Эксель.Application.Quit();
             Эксель  = Неопределено;
     КонецЕсли;
КонецПроцедуры



0



Gokusa

Заблокирован

24.06.2014, 16:28

 [ТС]

8

что значит «не держит»?
у меня еще выпадает окошко сохранить изменения в документе для ексель.хотя я его не меняю.



0



Модератор

Эксперт 1С

3724 / 2918 / 575

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

Сообщений: 11,491

Записей в блоге: 1

24.06.2014, 16:29

9

значит сам эксель его меняет



0



Gokusa

Заблокирован

24.06.2014, 16:31

 [ТС]

10

а что в этом случае можно сделать?
з.ы.
я написал вот

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
&НаКлиенте
 Процедура ИнициализацияЕксель()
     
     Попытка
         Эксель = Новый COMОбъект("Excel.Application"); 
     Исключение
         Предупреждение("Ошибка открытия файла " + Файл);
         Возврат;
     КонецПопытки;
     
 КонецПроцедуры
 
 &НаКлиенте
 Процедура ЗакрытиеЕксель()
     Если ТипЗнч(Лист) = Тип("COMОбъект") Тогда
         Попытка
             Лист.Application.Quit();
             Лист  = Неопределено;
         Исключение
             ИсключениеЕксель();
         КонецПопытки;
     КонецЕсли;
     
     Если ТипЗнч(Книга) = Тип("COMОбъект") Тогда
         Попытка
             Книга.Application.Quit();
             Книга  = Неопределено;
         Исключение
             ИсключениеЕксель();
         КонецПопытки;
     КонецЕсли;
     Если ТипЗнч(Эксель) = Тип("COMОбъект") Тогда
         Попытка
             Эксель.Application.Quit();
             Эксель  = Неопределено;
         Исключение
             ИсключениеЕксель();
         КонецПопытки;
     КонецЕсли;
 
 КонецПроцедуры
 
 &НаКлиенте
 Процедура ИсключениеЕксель()
     ИнформацияОбОшибке = ИнформацияОбОшибке();
        Сообщить(ИнформацияОбОшибке);
        Эксель.Application.Quit();                
        Эксель = Неопределено;                        
        Книга.Application.Quit();
        Книга  = Неопределено;                     
        Лист.Application.Quit();
        Лист   = Неопределено;
        Возврат;
     КонецПроцедуры

все равно виситэ



0



Dethmontt

Модератор

Эксперт 1С

3724 / 2918 / 575

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

Сообщений: 11,491

Записей в блоге: 1

24.06.2014, 16:32

11

Попробуй вот так

1C
1
2
3
4
5
6
7
8
Если ТипЗнч(Эксель) = Тип("COMОбъект") Тогда
         Попытка
             Эксель.Workbook.Close(Истина);
             Эксель.Application.Quit();
             Эксель  = Неопределено;
         Исключение
         КонецПопытки;
     КонецЕсли;



1



Gokusa

Заблокирован

24.06.2014, 17:39

 [ТС]

12

у меня сейчас вообще при открытии файла ексель выпало окошко сохранить изменения в файле.
сохранить, отмена и т.п.
в чем м.б. причина,могу ли я его программно сохранить?

Добавлено через 1 час 2 минуты
разобрался, спасибо Детмонт.
я тут тавталогией занялся.
книги, листы



0



17 / 17 / 0

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

Сообщений: 486

26.06.2014, 09:38

13

Кстати сказать, если вызвать Эксэл программно во время отладки и прекратить отладку до программного закрытия Эксэла то он останется висеть — это такой типа глюк самого Эксэла…



0



Модератор

Эксперт 1С

3724 / 2918 / 575

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

Сообщений: 11,491

Записей в блоге: 1

27.06.2014, 02:34

14

Цитата
Сообщение от BVladimir2
Посмотреть сообщение

это такой типа глюк самого Эксэла…

Это фича!!!
причем к этому процессу можно потом подцепиться и продолжить работу…



0



17 / 17 / 0

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

Сообщений: 486

27.06.2014, 10:56

15

Не понял почему, но иногда легко подцепляюсь к такому «оставемуся» процессу, а иногда ни в какую…



0



Содержание:

1.       Ошибка при установке значения атрибута контекста

2.       Ошибка при получении значения атрибута контекста

Одной из наиболее частых ошибок исполнения кода 1С являются ошибки, связанные с установкой реквизита либо получением реквизита через точку, либо ошибка при вызове функции или процедуры через точку. Все данные объекты являются атрибутами информационных объектов-владельцев, к которым они принадлежат. Рассмотрим примеры таких ошибок и причины их возникновения.  

1.    Ошибка при установке значения атрибута контекста

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

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

2.    Ошибка при получении значения атрибута контекста

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

При возникновении данных ошибок значения атрибута в 1Св первую очередь следует проверить существование атрибута, к которому обращаются, затем проверить совпадение типов значений атрибута и присваиваемого ему значения, затем уже проверить права на установку либо чтение значения. Проверить, является ли дело в правах либо дать права на действия с атрибутом, можно, установив привилегированный режим для совершения действия с данным атрибутом, прописав перед строчкой с ошибкой УстановитьПривилегированныйРежим(Истина), после строчки — УстановитьПривилегированныйРежим(Ложь).  

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

Александр Суворов

  1. 20.12.2016, 13:59


    #1

    lilyapo вне форума


    Иногда оказывает помощь


    По умолчанию COM-объект и Excel

    Создаю COM-объект и пытаюсь открыть файл Excel:
    ex=Новый ComОбъект(«Excel.Application»);
    ex.WorkBooks.Open(Файл);
    Файл существует, COM-объект создается, но при открытии файла Excel выдается сообщение:

    Ошибка при вызове метода контекста (Open)
    ex.WorkBooks.Open(Файл);
    по причине:
    Неизвестная ошибка
    Сталкиваюсь с этим впервые, на других компах всю жизнь все работает, с любой платформой 8.3
    Если что-то с Excel, то что?


  2. 20.12.2016, 15:25


    #2

    avm3110 вне форума


    Гордость форума PRO


    По умолчанию Re: COM-объект и Excel

    Цитата Сообщение от lilyapo
    Посмотреть сообщение

    Создаю COM-объект и пытаюсь открыть файл Excel:
    ex=Новый ComОбъект(«Excel.Application»);
    ex.WorkBooks.Open(Файл);
    Файл существует, COM-объект создается, но при открытии файла Excel выдается сообщение:

    Ошибка при вызове метода контекста (Open)
    ex.WorkBooks.Open(Файл);
    по причине:
    Неизвестная ошибка
    Сталкиваюсь с этим впервые, на других компах всю жизнь все работает, с любой платформой 8.3
    Если что-то с Excel, то что?

    Ты открываешь Апликайшон — а как ты это открываешь (интерактивно или же на сервере)? Опять же у тебя какой эксель (32-х разрядный или же 64-х разрядный) и в каком контексте пытаешься открыть (в 32-х разрядном клиенте или же на стороне 64-х разрядного сервера)?


  3. 20.12.2016, 15:55


    #3

    lilyapo вне форума


    Иногда оказывает помощь


    По умолчанию Re: COM-объект и Excel

    Все очень просто.
    Файловая база.
    Excel 2010. Файл лежит на том же диске, что и база и открывающая его обработка.
    Никакого клиент-серверного режима нет.


  4. 20.12.2016, 16:31


    #4

    avm3110 вне форума


    Гордость форума PRO


    По умолчанию Re: COM-объект и Excel

    А попробуй «завернуть» в Попытку

    Что выдаст?

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


  5. 20.12.2016, 17:04


    #5

    lilyapo вне форума


    Иногда оказывает помощь


    По умолчанию Re: COM-объект и Excel

    Все то же самое.
    Ошибка при вызове метода контекста (Open): Неизвестная ошибка
    ОписаниеОшибки()=»»


  6. 20.12.2016, 17:25


    #6

    avm3110 вне форума


    Гордость форума PRO


    По умолчанию Re: COM-объект и Excel

    [QUOTE=lilyapo;469920]Все то же самое.
    Ошибка при вызове метода контекста (Open): Неизвестная ошибка

    похоже у тебя проблема с com-ом. А у тебя Excel нормально в реестре зареген? Ты его видишь в com-объектах?

    Попробуй подключиться к открытому «ручками» экселю

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

    Excel = ПолучитьCOMОбъект(, «Excel.Application»);
    При этом первый параметр нужно оставить пустым. В этом случае при этом подцепится тот файл экселя, который был открыт последним, даже если порядок переключения окон был таким:
    Excel1, Excel2, IE, Проводник, 1С (т.е. что-то и было открытым между 1с и экселевским файлом) — все равно откроется Excel2, потому что он был активен последним.


  7. Пользователь сказал cпасибо:


  8. 20.12.2016, 17:41


    #7

    lilyapo вне форума


    Иногда оказывает помощь


    По умолчанию Re: COM-объект и Excel

    Все получилось!
    Спасибо огромное, фантастика!:dance:


  9. 13.09.2018, 12:20


    #8

    KrisLis вне форума


    Гость форума


    По умолчанию Re: COM-объект и Excel

    Цитата Сообщение от lilyapo
    Посмотреть сообщение

    Все получилось!
    Спасибо огромное, фантастика!:dance:

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


  10. 13.09.2018, 13:10


    #9

    lilyapo вне форума


    Иногда оказывает помощь


    По умолчанию Re: COM-объект и Excel

    Попробуй подключиться к открытому «ручками» экселю

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

    Excel = ПолучитьCOMОбъект(, «Excel.Application»);
    При этом первый параметр нужно оставить пустым. В этом случае при этом подцепится тот файл экселя, который был открыт последним, даже если порядок переключения окон был таким:
    Excel1, Excel2, IE, Проводник, 1С (т.е. что-то и было открытым между 1с и экселевским файлом) — все равно откроется Excel2, потому что он был активен последним.
    Так я справилась с проблемой


Понравилась статья? Поделить с друзьями:
  • Ошибка при получении значения атрибута контекста sheets
  • Ошибка при получении заголовков сообщений с сервера электронной почты
  • Ошибка при получении доступа к микрофону вк
  • Ошибка при получении документов с сервера утм
  • Ошибка при получении вашей сетевой информации