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

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

DTX 4th

14.10.20

17:33

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

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

Вот код:



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

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

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

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

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

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

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

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

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

    Иначе

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

1

Гений 1С

14.10.20

20:25

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

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

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

2

lodger

14.10.20

21:05

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

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

3

H A D G E H O G s

14.10.20

21:23

4

Tarlich

14.10.20

23:37

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

5

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

15.10.20

00:13

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

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

6

DTX 4th

15.10.20

02:45

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

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

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

7

DTX 4th

15.10.20

02:47

(4)

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

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

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

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

8

vicof

15.10.20

03:12

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

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

9

DTX 4th

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)

Содержание:

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

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

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

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

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

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

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

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

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

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

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

Подскажите пожалуйста, никак не могу найти как должно происходить чтение файла «db» (не dbf). Интернет облазил, ничего не нашел, нашел только две строчки на форуме, но и они не работают. Можете привести пример, как 1с читает db файл

Хм, для начала недурно бы понять что за файл. Paradox?

это Paradox. Я не давно данные переносил из Инфо-бухгалтера, так экселем их открывал.

Если это Paradox DB, то можно попробовать связку ADO-провайдер ODBC-драйвер Paradox для ODBC

по расширению не всегда можно ориентироваться. Мы не знаем точно, откуда переносится инфа, и под расширением DB вполне может оказаться что-то самопальное…

в файле db хранится таблица. Excel, -думаю это не то

почему? Если файл парадоксовский, то Excel может его открыть

пробовал через Excel, вообще никакой реакции. Мне нужно не открыть файл, а прочитать его, нужен образец кода

сигнатуру файла можешь посмотреть? Какие байты вначале?

По-моему, это парадоксовский файлик. Сейчас посмотрим…

у меня запрашивает пароль

нету никакого пароля, даже не знаю от куда он взялся. Если это парадоксовский файл, то как его правильно прочитать?

хм… драйвер видит таблю User, но при попытке открытия непредвиденная ошибка базы данных 11010. Возможно, нет какого-нть индексного файла или чего-то наподобие

MS VISUAL FOXPRO, только посмотреть

Попытался сформировать строку из , опять-таки — таблицу видит, но данные не извлекает. Чего-то не хватает, скорее всего индексов.

есть еще какие-то файлы User.* ?

в описано, как формировать Paradox- строку соединения для провайдера Jet. Если есть желание — пробуйте самостоятельно, у вас база целиком есть.

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

вообще у парадокса обычно для одной таблицы есть файл данных и несколько вспомогательных с тем же именем но другими расширениями — PX, MB… Когда обращаешься к базе, как правило, нужно указывать папку со всеми этими файлами, после чего становится возможным обращаться к отдельным таблицам. Это я собираю в кучку все что я помню по вопросу. Последний раз с парадоксом воевал лет 12 назад.

когда я обратился через драйвер к папке, где лежит твой файл, мне удалось увидеть таблицу USER, но не удалось увидеть поля в ней, а при попытке исполнить SELECT * from USER я получил ошибку синтаксиса в предложении FROM. Это скорее всего может означать либо разрушенный/непарадоксовский файл, либо отсутствие требуемых дополнительных файлов (индексных и т.п.) в каталоге. Нужно понять в чем проблема.

Знакомый кодил на Btrieve обзывал расширением *.db Я тоже :) Файл слегка смахивает на Btrieve файл. Запись на поля делит прикладная программа.

чем прочитать -ищи ddf btrieve editor belov

утром проснулся вспомнил — как вариант это еще может быть файл клариона. найди pervasive попробуй им открыть файл.

pervasive — это программа для открытия таблиц?

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

Pervasive.SQL купил Btrieve у новелла и на его основе сделал sql — там есть инструмент для просмотра файлов btrieve, файлы клариона это по сути тоже btrieve. + много :)))

получается там две таблицы 1.ID    Code    Name    Text     2. ProfileID    Password    Card    Finger

мне все-таки кажется что парадоксовский файл. Обратите внимание на строку ancyrr в заголовке — таким образом у парадокса кодируется поддержка кириллицы (как вариант там может быть ascii и другое подобное). Вопрос только, почему его джет не кушает.

файл возможно не весь. последняя строчка не полная

Попытался открыть через BDE — получил более информативное сообщение: BLOB file not found or corrupt. Открыл в рид-онли. Получил список полей. При попытке открыть таблицу BDE запросил файлики: USER.PX USER.MB Так что мой первоначальный диагноз был верным.

Мы брали vfpoledb.dll Потом через ADO читали, писали. Вот куски кода: —————— … ————— … …

если пробовать строчки: то сначала появится таблица, с запросом пароля, а потом будет ошибка

файл все-таки парадоксовский, вот список полей из билдера: но чтобы зачитать данные, нужны все файлы. одного DB недостаточно

либо, если по какой-то причине этого нет — может быть, возможно восстановить индексы в Database Desktop. У меня он, к сожалению, не установлен потому что был не нужен. Если актуально, то могу позаморачиваться

последнее поле — Finger — это блоб. Блобы у парадокса хранятся в отдельных (!) файлах

finger -это поле не нужно. попробовал так: Выводит «нет» информации об ошибке нет

Database Desktop открыл в read-only

если других файлов действительно нет (в чем я не уверен), то вряд ли вы сможете открыть чем-либо кроме Database Desktop. Потому что база по сути повреждена — нет части данных.

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

скажи, я немного не понимаю. У меня база открывается через Database Tour Pro. Открывается таблица и могу посмотреть таблицу. А как в 1с открыть, при помощи Database Desktop?

ты чего то не договариваешь? :)))

Database Desktop — это не через 1С. Это просто самостоятельная программа. Дело в том что парадоксовская база содержит не один файл на таблицу, а несколько, а прислан только один. Соответственно, база с точки зрения парадокса — повреждена и просто так открыть ее не получится. И мы тут пытаемся открыть хоть как-то. Понятно?

Насчет файлов вы были правы, только что спросил. Их 5 шт: DB, MB, XGO, PX, YGO и как мне сразу с пятьми файлами работать

таблицу открыть я могу через Database Tour Pro, мне видны значения полей, а в 1с нет

ну ты и партизан…. Так как тебе сказали в На допросе давно был? :))))

извиняюсь. Вчера дали один файл, сегодня по другому спросил, дали 5 файлов

ну вот теперь пробуй через 1С со строкой соединения, как написано в . В Data source указывай папку с файлами, в Extended Properties Paradox 7.x. Возможно, получится.

+ или можно попробовать как в , но вариант из мне нравится больше — это гораздо проще

в написано: Provider=Microsoft.Jet.OLEDB.4.0;     Data Source=C:Program FilesBDBase;     Extended Properties=Paradox 7.x;     Persist Security Info = True; Можете подсказать, что значит этот код?

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

Ошибка в служебном сообщении: Неопознанный оператор     СтрокаПодключения= Provider=Microsoft.Jet.OLEDB<<?>>.4.0;Data Source=Путь;Mode =Read|Write|Share Deny None;Extended Properties=Paradox 7.x;Persist Security Info = True; (Проверка: Сервер)

Чего-то наподобие? Файл можно как обычный TXT сделать (убрать заголовок). Поля имеют фикс. длину. Легко распарсить. Только потом часть полей из текстового вида преобразовать обратно в коды с помощью КодСимвола а потом в десятичный вид. З.ы. надо только узнать про байт 0x80 несёт в себе данные или просто разграничитель полей.

не понимаю какие кавычки? Куда их ставить, поставлю в одном месте, в другом будет ошибка…

СтрокаПодключения=»Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Путь;Mode =Read|Write|Share Deny None;Extended Properties=Paradox 7.x;Persist Security Info = True;»;

всмысле СтрокаПодключения=»Provider=Microsoft.Jet.OLEDB.4.0;Data Source=»+Путь+»;Mode =Read|Write|Share Deny None;Extended Properties=Paradox 7.x;Persist Security Info = True;»;

Можно еще немного объяснить. Написал код Появляется ошибка: Произошла исключительная ситуация (ADODB.Connection); Операция не допускается, если объект закрыт. Ошибка при получении значения атрибута контекста (WorkBooks) Книга = Акцесс.WorkBooks.Open(Путь);

WorkBooks ? O_o   ты же не через Excel файлы открываешь.

через Excel тоже пробовал

А теперь попробуй об стенку с разбегу.

а пароль на базу не надо никакой ?

а где его надо написать? Есть пароли для пользователей, т.е. надо указать пользователя и его пароль?

у меня строка подключения была такая но мне сразу сказали что jIGGAe — это технический пароль на базы paradox

ставь не в одном месте, а в двух :)

, да, с таким пониманием технологий тяжело, наверно, работать…

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

Я, помнится, писал на сях читалку Paradox, чтобы восстановить файл с данными, только потом умная читалка показала, что в середине файла вместо данных одни 0xFF — после этого очень не люблю этот Paradox.

Читал тему — смешно :) Автор, по-ходу, и в 1С немного понимает, а ещё взялся из 1С сторонними продуктами пользоваться. куды мир катится…

Много лет назад я пользовался парадоксовскими базами, используя BDE (Borland Database Engine). Для совсем небольших объемов сойдет, когда речь начинает идти о десятках мегабайт — начинает барахлить даже локально: появляются висячие внешние ключи, дубликаты PK и прочая гадость. А уж по сети и говорить нечего. В результате отказался от него. А так, в принципе, сделать импорт данных никаких проблем — дельфю в руки и вперед.

+ починялки файлов какие-то были, точно помню

Если середину файла затёрло из-за ошибки на диске, то нет смысла такой файл восстанавливать.

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

Тэги:

Комментарии доступны только авторизированным пользователям

Gokusa

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

1

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

24.06.2014, 15:27. Показов 13771. Ответов 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С

3744 / 2932 / 581

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

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

Записей в блоге: 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С

3744 / 2932 / 581

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

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

Записей в блоге: 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С

3744 / 2932 / 581

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

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

Записей в блоге: 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С

3744 / 2932 / 581

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

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

Записей в блоге: 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

Сообщений: 493

26.06.2014, 09:38

13

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



0



Модератор

Эксперт 1С

3744 / 2932 / 581

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

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

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

27.06.2014, 02:34

14

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

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

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



0



17 / 17 / 0

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

Сообщений: 493

27.06.2014, 10:56

15

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



0



Понравилась статья? Поделить с друзьями:
  • Ошибка при подключении к ncalayer что делать
  • Ошибка при подключении к сети civilization 5
  • Ошибка при перемещении файла или папки устройство недостижимо
  • Ошибка при подготовке файлов для установки
  • Ошибка при получении значения атрибута контекста vbproject