В платформе 1С сообщения об ошибках бывают достаточно запутаны, и без должных навыков разобраться в причинах достаточно сложно. Вот и сообщение об ошибке при вызове контекста может ввести в ступор начинающего разработчика. Однако в подавляющем большинстве случаев мы видим подобное сообщение, если разработчик допустил ошибку в своем коде. Причем речь зачастую идет не об орфографических ошибках, а о логических.
Исправляем ситуацию
Чтобы избавиться от этого неприятного сообщения об ошибке при вызове метода контекста, следует понимать, что контекстом называют методы платформы 1С. Значит в определенной строке кода воспользовались методом с неверными параметрами или вызвали его не от того владельца. Всегда внимательно и полностью читайте сообщения об ошибках – часто в них содержится указание на строку и метод, вызвавший ошибку. Это поможет сэкономить время на отладку и поиск проблемного места в коде.
Рассмотрим действия разработчика на примере со специально допущенной ошибкой. Мы запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора. Компилятор 1С пропускает такую процедуру, так как орфографических ошибок в написании команд мы не допустили. Однако в режиме предприятия нас ждет такое сообщение об ошибке:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.ВерсияДанных КАК ВерсияДанных,
| Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
| Номенклатура.Родитель КАК Родитель,
| Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул,
| Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| Номенклатура.Предопределенный КАК Предопределенный,
| Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| ";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
КонецЦикла;
Приведенный текст ошибки программисту 1С скажет, что в модуле формы обработки «ЧтениеЗаписьXML на 152 строчке кода не может выполниться запрос. Причина в том, что на 17 строчке запроса нет чего-то, что ждал компилятор. Таким образом, чтобы убрать подобное сообщение, необходимо выяснить, что там должно быть и написать недостающий код.
Увидев вышеприведенный кусок кода, разработчик заметит, что в запросе есть служебное слово «ГДЕ», дающее сигнал 1С, что дальше будет условие. Но мы забыли дописать его и, естественно, система с помощью сообщения об ошибке спрашивает нас – «а где условие?». Чтобы исправить эту ситуацию необходимо либо убрать оператор «ГДЕ» из запроса, либо добавить условие.
Но ошибки могут быть не только в текстах запросов. Допустим, мы хотим выбрать всю номенклатуру и узнать, входит ли она в определенную группу. Проверка происходит с помощью метода «ПринадлежитЭлементу» и его параметра, который должен быть типа СправочникСсылка. Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.ВерсияДанных КАК ВерсияДанных,
| Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
| Номенклатура.Родитель КАК Родитель,
| Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул,
| Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| Номенклатура.Предопределенный КАК Предопределенный,
| Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ЭтоГруппа ";
НужнаяГруппаЭлементов = Справочники.Номенклатура.НайтиПоНаименованию("Мебель");
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить(ВыборкаДетальныеЗаписи.Ссылка.ПринадлежитЭлементу("НужнаяГруппаЭлементов"));
КонецЦикла;
1С выдает настолько же информативное сообщение, из которого мы понимаем, что на 158 строке у 1 параметра неправильный тип. Но что же делать, если мы не знаем, какой тип должен быть? В этом нам поможет Синтакс-помощник, встроенный в платформу 1С.
В конфигураторе находим строку и метод, на который указывало сообщение об ошибке, и нажимаем на него правой кнопкой мыши. Выбираем пункт «Поиск в синтакс-помощнике» и платформа самостоятельно ищет справочную информацию по выделенному методу. В справке мы видим не только подробное описание параметров и самого метода, но и пример. Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает.
Чаще всего причиной подобных ошибок выступают следующие факторы:
- Невнимательность;
- Отсутствие опыта или знаний;
- Несогласованность действий разработчиков друг с другом;
- Изменения в методах контекста в новых версиях платформы.
Но ошибки при разработке ПО случаются постоянно, поскольку иногда ошибаются даже специалисты с многолетним опытом. Самое главное – уметь исправлять их и учиться на них. Постепенно вы будете видеть сообщения об ошибках все реже и научитесь замечать подобные «опечатки» еще до запуска 1С.
Содержание:
1. Ошибка при установке значения атрибута контекста
2. Ошибка при получении значения атрибута контекста
Одной из наиболее частых ошибок исполнения кода 1С являются ошибки, связанные с установкой реквизита либо получением реквизита через точку, либо ошибка при вызове функции или процедуры через точку. Все данные объекты являются атрибутами информационных объектов-владельцев, к которым они принадлежат. Рассмотрим примеры таких ошибок и причины их возникновения.
1. Ошибка при установке значения атрибута контекста
Ошибка при установке значения атрибута контекста говорит нам о невозможности присвоить выбранное значение определенному атрибуту информационного объекта. Вызвано это либо несовпадением типа атрибута и присваиваемого ей значения, отсутствием возможности присвоить значение выбранному атрибуту, так как его можно только читать, но не записывать в него, отсутствием прав у текущего пользователя на запись значений в данный атрибут. Например, в реквизит «ДатаДокумента» с типом «Дата» пытаемся записать строку, в реквизит с типом данных ссылки на документ пытаемся записать не ссылку, а объект, полученный по ссылке, что невозможно из-за несоответствия типов, что приводит к ошибке установки значения атрибута.
Другой пример – проходя циклом выборку запроса, пытаемся в колонку выборки записать значение, что невозможно, так как значения выборки запроса можно только считывать, а для того, чтобы можно было полученные из запроса данные изменять в коде, нужно пользоваться не выборкой, а выгружать результат запроса в таблицу значений, в таком случае в цикле по ней можно будет менять значения в колонках, но только на значения, соответствующие типу колонки. Либо у пользователя, под которым выполняется код, нет прав на изменение даты документа, при попытке записать в данный реквизит новую дату, будет выведено сообщение об ошибке установке значения, но в причине будет указано отсутствие прав у пользователя.
2. Ошибка при получении значения атрибута контекста
Ошибка при получении значения атрибута контекста указывает на невозможность прочитать значение атрибута объекта в силу его отсутствия, либо отсутствия прав на его чтение. Например, обращение к несуществующему реквизиту объекта, несуществующему полю выборки из запроса, несуществующему свойству элемента формы и т.п. Так же как пример можно рассмотреть получение текущего пользователя из параметров сеанса — если данный параметр сеанса не установлен, то тоже будет выведена ошибка получения значения атрибута контекста, но в причине будет указана попытка получения неинициализированного значения параметра сеанса.
При возникновении данных ошибок значения атрибута в 1Св первую очередь следует проверить существование атрибута, к которому обращаются, затем проверить совпадение типов значений атрибута и присваиваемого ему значения, затем уже проверить права на установку либо чтение значения. Проверить, является ли дело в правах либо дать права на действия с атрибутом, можно, установив привилегированный режим для совершения действия с данным атрибутом, прописав перед строчкой с ошибкой УстановитьПривилегированныйРежим(Истина), после строчки — УстановитьПривилегированныйРежим(Ложь).
Специалист компании «Кодерлайн»
Александр Суворов
|
|||
roman2
20.08.18 — 16:45 |
Запускаем типовой обмен между ЗУП и ЕРП. В настройка COM-соединение. Получаем сообщение: Ошибка при загрузке данных: {ОбщийМодуль.ОбменДаннымиXDTOСервер.Модуль(2035)} : Ошибка при вызове метода контекста (ОткрытьФайл): Ошибка доступа к файлу ‘C:Userss-app-1AppDataLocalTempv8_8C20_626.xml’ Такое впечатление, что файла уже нет, когда управление возвращается в ЗУП. У кого есть решение? |
||
roman2
1 — 20.08.18 — 17:02 |
Запускаем типовой обмен между ЗУП и ЕРП. В настройках способ обмена — COM-соединение. В момент обмена получаем сообщение. {ОбщийМодуль.ОбменДаннымиXDTOСервер.Модуль(2035)} : Ошибка при вызове метода контекста (ОткрытьФайл): Ошибка доступа к файлу ‘C:Userss-app-1AppDataLocalTempv8_8C20_626.xml’ Такое впечатление, что файла уже нет, когда управление возвращается в ЗУП. У кого есть решение? |
||
sechs
2 — 20.08.18 — 17:26 |
А что вы запускаете с какими настройками и какое сообщение в какой момент получаете? |
||
sechs
3 — 20.08.18 — 17:26 |
А что вы запускаете с какими настройками и какое сообщение в какой момент получаете ? |
||
Franchiser
4 — 20.08.18 — 17:29 |
режим работы на клиенте или на сервере есть переключатель? |
||
roman2
5 — 21.08.18 — 09:47 |
(4) все происходит на сервере |
||
hhhh
6 — 21.08.18 — 10:15 |
(5) ну значит и правда нет доступа к папке C:Userss-app-1AppData |
||
roman2
7 — 21.08.18 — 11:19 |
(6) такого не может быть. Служба сервера запущена под s-app-1. Еще интересно, а COM-соединение под каким пользователем устанавливается? В логах пользователь ОС… Может это ключ к решению? |
||
youalex
8 — 21.08.18 — 11:43 |
(7) ну создай файл любой где можно, посмотри какой у него будет владелец. по идее. |
||
roman2 9 — 22.08.18 — 13:39 |
решение не получено… задача решилась так. Запустил обмен в отладке из конфигуратора ЗУП под другим Админом. Обмен прошел. После чего обмен начал выполняться и под другим пользователем. Может кто сможет докопаться до решения? |
|
TurboConf — расширение возможностей Конфигуратора 1С |
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку «Обновить» в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
В этой статье мы расскажем об ошибке доступа к файлу 1с. Как решить возникшую проблему, что это за баг и еще немного об этом.
Ошибка доступа к файлу 1C 8.3
«1С: Предприятие» — система программ для автоматизации, улучшения и упрощения деятельности различных сфер компании, начиная от бухгалтерии и заканчивая учетом. 1С: возможности при правильной настройке безграничны . Для предпринимателя — нужно найти хороших программистов.
Нет ни одной программы в современном мире, как бы хороша она не была без ошибок и проблем. Такое случается и с нашим приложением. В ряде случаев виноват в этом криворукий программист. Многие проблемы вы не сможете решить без его участия, но некоторые, вам подсилу и самому.
Причины возникновения
Случается, что люди, которые используют данную прогу сталкиваются с проблемой при запуске программы.
Способы решения
По наименованию явившегося бага поймем что происходит с системой — нет прав для доступа к файлу. Такое случается если юзер создает копию базы и подключает ее. Также ошибка бывает в результате попытки открыть файл по сетевому доступу.
Первостепенное что мы делаем в таком случае — проверяем доступ к файлу. Правая кнопка мыши по файлу -> проверяем стоит ли галочка на «Общий доступ».
Взгляните на права пользователя под которым вы зашли в систему виндоус. У вас должны быть права и на чтение файлов и на запись.
Когда данные к которым нужно получить доступ (база) находится на удаленном (локальном) персональном компьютере — смотрим закладку «Безопасность». В безопасности вы должны убедиться что у пользователя нет запрета на запись.
Предупреждения о проблемах вылазят когда возмущается брандмауэр. Это касается сетевых объектов. Антивирусные программы препятствуют нормальной работе.
Открываем брандмауэр и антивирус и ищем в списке блокируемых программ 1С. Удаляем из списка.
Почистите кеш, ошибки также возникают из-за кеша.
Большой шанс появления ошибки, когда два синонимичных приложения запускаются вместе. К примеру, ЗУП и Бухгалтерия. Если запустить по очереди, проблема исчезнет
Дополнительный способ
Ничего не помогло — воспользуйтесь следующими методами:
Путь к имени файла должен быть допустимым в каталоге отчетов: щелкните вкладку «Вывод». Перейдите на вкладку «Параметры вывода». В поле Имя файла убедитесь, что путь действителен.
Сколько дискового пространства доступно для файла: Откройте Windows Explorer. Выберите Локальный диск (буква диска:), на котором хранится отчет. Щелкните правой кнопкой мыши на локальном диске (буква диска:) и нажмите Свойства. Откроется окно свойств. Проверьте доступное свободное пространство на этом локальном диске.
Убедитесь, что у пользователя есть разрешения на доступ к папке IO_Data: Откройте проводник Windows. Щелкните правой кнопкой мыши основную папку выберите «Свойства».
Перейдите на вкладку «Безопасность». Убедитесь, что у пользователя есть полные права на эту папку и все подпапки. Если вы не можете проверить права доступа, обратитесь к администратору.
Ошибка работы 1С 8 с Excel: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft Office Excel): Нет доступа к файлу
Описание ошибки:
Проявила себя в клиент-серверной базе. Релиз платформы 1С: Предприятие 8.3.13.1644.
Найденные решения:
Полная формулировка ошибки:
{Доработки Документ.УстановкаЦенНоменклатуры.Форма.Доп_ФормаИмпортXLS.Форма(83)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft Office Excel): Нет доступа к файлу ‘C:1C_ArhivТест загрузка прайсов[имя_файла].xlsx’. Это может быть вызвано одной из следующих причин.
• Имени файла или пути не существует.
• Файл используется другой программой.
• Имя книги, которую вы пытаетесь сохранить, совпадает с именем открытой в данный момент книги.
При доработке в расширении для конфигурации 1С: Комплексная автоматизация 8, ред. 2, которая должна загружать данные из файлов Excel и при попытке выполнения в коде РабочаяКнига = ExcelПриложение.WorkBooks.Open(ФормаИмпортXLS.ИмяФайла);. Что удивительно, но в более ранней редакции Комплексной, 1.1, эта проблема не возникала в этом же коде, хотя обе базы на одном сервере.
Проблема оказалась нова для автора этого текста только в 2020 году, хотя самой проблеме достаточно много времени (более 5 лет на момент написания). В обсуждении данной ошибки на сайте infostart.ru «Ошибка открытия файла Excel на сервере» обсуждается несколько предложений по решению проблемы, среди которых наиболее популярный вариант решения. Так же там много попутных предложений по настройке прав на стороне сервера, если вдруг популярный вариант окажется не актуальным.
Популярность этого варианта подтверждается исчерпывающим обсуждением и вот на этом ресурсе: «v8.x: [РЕШЕНО] Ошибка при вызове метода контекста (Open) при работе с Excel»
Проблема была рещена данным простым решением, но обращу внимание на то, что данное действие должно быть выполнено на сервере, а не на локальном рабочем месте.
Оцените, помогло ли Вам предоставленное описание решения ошибки?
© www.azhur-c.ru 2014-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.
23-09-2020
Журавлев А.С.
(Сайт azhur-c.ru)
Выгружаю конфигурацию для конвертации обраб. MD83Exp выдает ошибку {ВнешняяОбработка.ВыгрузкаМетаданных.МодульОбъекта}: Ошибка при вызове метода контекста (ОткрытьФайл) мЗаписьXML.ОткрытьФайл(ИмяФайлаВыгрузки, «UTF-8»); по причине: Ошибка доступа к файлу ‘ Кто знает подскажите как исправить {ВнешняяОбработка.ВыгрузкаМетаданных.МодульОбъекта}: Ошибка при вызове метода контекста (ОткрытьФайл) мЗаписьXML.ОткрытьФайл(ИмяФайлаВыгрузки, «UTF-8»); по причине: Ошибка доступа к файлу ‘
1. Проверить доступ к каталогу выгрузки. 2. Проверить способ выгрузки (сервер / клиент). Выгружать нужно на клиенте.
выгрузка на клиенте и права на компе админские запускается 1С в режиме «толстый клиент упраляемое приложение»
+ MD82Exp все выгружал(работал в режиме обычного приложения) но потом конвертор 1с не хотел загружать, а MD83Exp сразу дает проблему — он только запускается в режиме сервера
пока писал тебе ответ решил, что вопрос доступа на комп с сервера интересен
+ но запустил с админскими правами на сервере и там записывал все то-же как и было с той-же ошибкой
Подскажите с проблемой кто знает
Подскажите если кто выгружал конфигурацию как он это сделал
если толстый клиент, то надо MD82Exp
Она выгружает (я писал) но не дает загрузить в конвертор
+ здесь возникает в принципе тот-же вопрос с ошибкой доступа и отсутствия каталога
+ Надо тогда найти старую версию конвертора 2…., а не 3….
Чем короче отвечаешь, тем длиннее ветка. Опиши все условия сразу и подробно.
ИмяФайлаВыгрузки — пустая
имя файла UPP полное имя «С:1UPP.XML»
1С запускается в режиме «Клиента управляемое приложение» В обработке метки все сняты больше нечего не требуется указываешь место и название файла и запускается и получаю сообщение об ошибке
+ конфигурация УПП 1.3 (1.3.95.1) платформа 8.3 (8.3.9.1850)
+ конвертор 8.3 (8.3.9.1850)
Откатился на конфигурацию конвертора 2.1.8.2 и все грузится
ну точно дали пользователю user1cv8 на эту папку на сервере С:1UPP.XML ??
Конвертация данных, а не конвертор
Тэги: 1С 8
Комментарии доступны только авторизированным пользователям
01.03.21 — 03:37
Всем привет.
Управление торговлей, редакция 11 (11.4.13.123) хост db
Бухгалтерия предприятия, редакция 3.0 (3.0.86.16) хост db1
При попытке Торговлей получить данные Бухгалтерии получаю ошибку:
Ошибка при загрузке данных: {ОбщийМодуль.ОбменДаннымиXDTOСервер.Модуль(2010)}: Ошибка при вызове метода контекста (ОткрытьФайл): Ошибка доступа к файлу ‘C:UsersUSR1CV8AppDataLocalTempv8_7448_d5d.xml’
Не понятно, почему идёт обращение в папку C:UsersUSR1CV8, если на db и db1 сервис 1С запущен под пользователем USR1CV82.
1 — 01.03.21 — 06:30
Нам отсюда не видно, что и как у тебя настроено.
2 — 01.03.21 — 07:56
3 — 01.03.21 — 08:36
Дай админ права пользователю USR1CV82
4 — 01.03.21 — 08:43
(3) на обоих хостах USR1CV82 в группе Администраторы
5 — 01.03.21 — 08:45
Да тут скорее всего COM+ приложение с отдельной активацией (Server Application) настроено. (2) все покажет
6 — 01.03.21 — 09:31
(5) Что то я там кнопочки «Скачать» не нашел
7 — 01.03.21 — 09:33
(6) CTRL+F «скачать»
8 — 01.03.21 — 09:35
Ну и большими буквами слово «Подсистема» сверху должна наводить на мысли о том, что это целостный/взаимосвазанный/неделимый набор инструментов.
9 — 01.03.21 — 10:31
(8) ну так дай прямую ссылку на скачку, а не вот это все, где откуда, что качать то?
10 — 01.03.21 — 22:15
Для тех, кто читать и думать не хочет, вот самая прямая ссылка http://devtool1c.ucoz.ru/load/0-0-0-21-20
11 — 03.03.21 — 08:05
12 — 03.03.21 — 11:48
(11) Как я и предполагал, у тебя настроено COM+ приложение. Удали его и тогда внешнее соединение будет работать от имени пользователя сервера 1С.
13 — 04.03.21 — 07:18
(12) можно подробнее, какое именно приложение? А то там несколько.
14 — 04.03.21 — 08:01
(13) На твоей картинке я вижу только одно созданное COM+ приложение — для класса V83.ComConnector. Ну и 8.2 то тебя полагаю вообще не интересует. Поэтому вариантов всего 1.
15 — 09.03.21 — 07:13
(12) но это приложение используется для одного ПО. Поэтому удалить его нельзя. Как быть тогда?
16 — 09.03.21 — 07:37
Блин. Все напутали. Уточнил, что проблема в том, что Бухгалтерия(db1) с Торговлей(db) не может соединиться через COM. На скриншоте выше COM соединение, которое настроено — на Торговле(db) и оно нормально работает. А надо, как я понял, показать скриншот, где COM не работает, то есть на сервере Бухгалтерия(db1). Верно?
craxx
17 — 09.03.21 — 08:05
(16) Ну и это. Настоятельно советую 8.3.18.1208 поменять на более новую. Глючнее платформы в жизни не видел.
Дано: сервер 1С, платформа 8.3.7
Проблема: при обновлении конфигурации или загрузке базы из выгрузки возникает ошибка:
Попытка подключения к контексту сервера с неподходящей версией метаданных. Правильный контекст сервера: <ИМЯ>
Вместо имени может быть название базы данных или какого-либо процесса.
Решение
Проблема это пришла вместе с релизом платформы 8.3.7 и возникает, судя по форумам, независимо от операционной системы (у кого-то на Windows, у кого-то на Linux). В нашем случае это была ОС Windows Server 2012 R2 с сервером 1С (кластер) и базами на MS SQL Server.
На данный момент было найдено лишь одно решение: перезапуск (restart) «Агента сервера 1С:Предприятие»:
Services — «Агент сервера 1С:Предприятие 8.3» — Restart:
После этого можно снова делать то действие, что приводило к ошибке. В нашем случае повторное обновление или загрузка базы проходит без ошибок.
В 1С обещают данную проблему устранить в будущих релизах. Как вариант, можно не обновляться до версии 8.3.7 и подождать следующей версии (в 8.3.6 такой проблемы нет).
Если Вам понравилась статья, пожалуйста, поставьте лайк, сделайте репост или оставьте комментарий. Если у Вас есть какие-либо замечания, также пишите комментарии.