Содержание:
1. Ошибка при установке значения атрибута контекста
2. Ошибка при получении значения атрибута контекста
Одной из наиболее частых ошибок исполнения кода 1С являются ошибки, связанные с установкой реквизита либо получением реквизита через точку, либо ошибка при вызове функции или процедуры через точку. Все данные объекты являются атрибутами информационных объектов-владельцев, к которым они принадлежат. Рассмотрим примеры таких ошибок и причины их возникновения.
1. Ошибка при установке значения атрибута контекста
Ошибка при установке значения атрибута контекста говорит нам о невозможности присвоить выбранное значение определенному атрибуту информационного объекта. Вызвано это либо несовпадением типа атрибута и присваиваемого ей значения, отсутствием возможности присвоить значение выбранному атрибуту, так как его можно только читать, но не записывать в него, отсутствием прав у текущего пользователя на запись значений в данный атрибут. Например, в реквизит «ДатаДокумента» с типом «Дата» пытаемся записать строку, в реквизит с типом данных ссылки на документ пытаемся записать не ссылку, а объект, полученный по ссылке, что невозможно из-за несоответствия типов, что приводит к ошибке установки значения атрибута.
Другой пример – проходя циклом выборку запроса, пытаемся в колонку выборки записать значение, что невозможно, так как значения выборки запроса можно только считывать, а для того, чтобы можно было полученные из запроса данные изменять в коде, нужно пользоваться не выборкой, а выгружать результат запроса в таблицу значений, в таком случае в цикле по ней можно будет менять значения в колонках, но только на значения, соответствующие типу колонки. Либо у пользователя, под которым выполняется код, нет прав на изменение даты документа, при попытке записать в данный реквизит новую дату, будет выведено сообщение об ошибке установке значения, но в причине будет указано отсутствие прав у пользователя.
2. Ошибка при получении значения атрибута контекста
Ошибка при получении значения атрибута контекста указывает на невозможность прочитать значение атрибута объекта в силу его отсутствия, либо отсутствия прав на его чтение. Например, обращение к несуществующему реквизиту объекта, несуществующему полю выборки из запроса, несуществующему свойству элемента формы и т.п. Так же как пример можно рассмотреть получение текущего пользователя из параметров сеанса — если данный параметр сеанса не установлен, то тоже будет выведена ошибка получения значения атрибута контекста, но в причине будет указана попытка получения неинициализированного значения параметра сеанса.
При возникновении данных ошибок значения атрибута в 1Св первую очередь следует проверить существование атрибута, к которому обращаются, затем проверить совпадение типов значений атрибута и присваиваемого ему значения, затем уже проверить права на установку либо чтение значения. Проверить, является ли дело в правах либо дать права на действия с атрибутом, можно, установив привилегированный режим для совершения действия с данным атрибутом, прописав перед строчкой с ошибкой УстановитьПривилегированныйРежим(Истина), после строчки — УстановитьПривилегированныйРежим(Ложь).
Специалист компании «Кодерлайн»
Александр Суворов
26.12.22 — 13:28
Добрый день.
Подскажите, пожалуйста, делаю заполнение ТЧ обработки через ПостроительОтчетов и получаю ошибку Ошибка при получении значения атрибута контекста (Результат).Ожидается выражение «ВЫБРАТЬ».
Причем в одной обработке работает, в другой эта ошибка, не могу понять где допустил ошибку.
В построителе текст запроса есть
ПередОткрытиемФормы
ТекстЗапроса = «ВЫБРАТЬ
| ПродажиОбороты.Контрагент,
| ПродажиОбороты.Контрагент.ИНН КАК ИНН,
| ПродажиОбороты.Номенклатура,
| ПродажиОбороты.Номенклатура.АЭ_ИдентификаторНаСайте КАК Идентификатор,
| ПродажиОбороты.ЗаказПокупателя КАК Заказ,
| ПродажиОбороты.ЗаказПокупателя.ДатаОтгрузки КАК ДатаНачала,
| ВЫБОР
| КОГДА ТИПЗНАЧЕНИЯ(ПродажиОбороты.ЗаказПокупателя) = ТИП(Документ.ЗаказПокупателя)
| ТОГДА ПродажиОбороты.ЗаказПокупателя.ДатаЗакрытияЗаказа
| ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| КОНЕЦ КАК ДатаКонца,
| ПродажиОбороты.Номенклатура.Наименование,
| ПродажиОбороты.Контрагент.Наименование
|{ВЫБРАТЬ
| Контрагент.*,
| ИНН,
| Номенклатура.*,
| Идентификатор,
| Заказ.*,
| ДатаНачала,
| ДатаКонца,
| НоменклатураНаименование,
| КонтрагентНаименование}
|ИЗ
| РегистрНакопления.Продажи.Обороты(&ДатаС, &ДатаПо, День, ) КАК ПродажиОбороты
|{ГДЕ
| ПродажиОбороты.Контрагент.*,
| ПродажиОбороты.Контрагент.ИНН КАК ИНН,
| ПродажиОбороты.Номенклатура.*,
| ПродажиОбороты.Номенклатура.АЭ_ИдентификаторНаСайте КАК ИдентификаторНаСайте,
| ПродажиОбороты.ЗаказПокупателя.ДатаОтгрузки КАК ДатаОтгрузки,
| (ВЫБОР
| КОГДА ТИПЗНАЧЕНИЯ(ПродажиОбороты.ЗаказПокупателя) = ТИП(Документ.ЗаказПокупателя)
| ТОГДА ПродажиОбороты.ЗаказПокупателя.ДатаЗакрытияЗаказа
| ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| КОНЕЦ) КАК ДатаКонца,
| ПродажиОбороты.ЗаказПокупателя.*}»;
// Заполним настройки построителя на основании запроса
ПостроительОтчета.Текст = ТекстЗапроса;
ПостроительОтчета.ЗаполнитьНастройки();
Далее делаю:
ПостроительОтчета.Параметры.Вставить(«ДатаС»,НачалоДня(ДатаС));
ПостроительОтчета.Параметры.Вставить(«ДатаПо»,КонецДня(ДатаПо));
ПостроительОтчета.Выполнить();
Выгрузка = ПостроительОтчета.Результат.Выгрузить();
Данные.Загрузить(Выгрузка);
Ошибка вылетает на этом моменте: Выгрузка = ПостроительОтчета.Результат.Выгрузить();
Ошибка при получении значения атрибута контекста (ТекущийПользователь)
bless18 |
|
||
---|---|---|---|
|
Ошибка при получении значения атрибута контекста (ТекущийПользователь): Попытка получения неинициализированного значения параметра сеанса
Пользователь = ПараметрыСеанса.ТекущийПользователь; по причине: Попытка получения неинициализированного значения параметра сеансаКод 1C v 8.х
Где происходит их инициализация? |
Yandex |
|
||
---|---|---|---|
E_Migachev |
|
||
---|---|---|---|
Когда в Общие — Параметры сеанса добавил ТекущийПользователь, то его нужно определять при загрузке:
так же в процедуре ПриНачалеРаботыСистемы пишешь что то типо: Код 1C v 8.х
Это работает при условии, что ИмяПользователя заданное в конфигураторе, равно Имени введенному в справочнике Пользователей в реквизит Код |
bless18 |
|
||
---|---|---|---|
А если не совпадают, можно как-нибудб привязать пользователя к сотруднику? |
E_Migachev |
|
||
---|---|---|---|
А лучше добавить процедуру в Модуль сеанса(Правой клавишей щелкаещь на названии конфигурации и выбираешь Открыть модуль сеанса)
В ней создаешь Процедура УстановкаПараметровСеанса () и в ней пишешь код который я предложил выше или так, Если не совпадают: Код 1C v 8.х
Эта процедура вызывается раньше чем ПриНачалеРаботыСистемы. Ну а дальше подставлять сопоставленное значение при создании соответствующего документа: Код 1C v 8.х
События модуля сеанса: |
bless18 |
|
||
---|---|---|---|
Спасибо вам огромное! Вы мне очень помогли! |
bless18 |
|
||
---|---|---|---|
Спасибо вам огромное! Вы мне очень помогли! |
E_Migachev |
|
||
---|---|---|---|
|
Пожалуйста |
Подсказка: Щелкнув по значку (справа от названия вопроса), вы получите список ответов на похожие вопросы! |
Использую обработку ВыгрузкаЗагрузкаДанныхXML82.epf все документы выгружаються нормально,а на одном при попытке выгрузить выдает ошибку {ВнешняяОбработка.ВыгрузкаЗагрузкаДанныхXML.МодульОбъекта}: Ошибка при получении значения атрибута контекста (Результат) РезультатЗапроса = ПостроительОтчета.Результат; по причине: по причине: вот что выдает Сообщить( ПостроительОтчета.Текст); » ВЫБРАТЬ Разрешенные _.* ИЗ Документ.АктыЭК КАК _ » Откуда в ошибка берет «<<?>>В КАК В,»?
Потому что «*». З.Ы. Псевдоним таблицы просто клевый. Постарайся, чтобы следующий разработчик не узнал, где ты живешь
З.Ы. Псевдоним таблицы просто клевый. Постарайся, чтобы следующий разработчик не узнал, где ты живешь а я тут причем я обработку скачал «ВыгрузкаЗагрузкаДанныхXML82.epf»
я думаю, что не стоило называть реквизит «В»
а в чем * виновата то? другие документы же выгружает к примеру с таким запросом ВЫБРАТЬ Разрешенные _.* ИЗ Документ.АктыМЭКСМО КАК _
да нашел в табличной части документа один реквезит так и называеться только вот теперь вопрос как нибудь можно это обойти? саму конфу изменить не могу, есть причины
написать запрос ручками, со своими алиасами полей
Тэги: 1С 8
Комментарии доступны только авторизированным пользователям
-
{Справочник.ПодразделенияОрганизаций.Форма.ФормаЭлемента(118)}: Ошибка при получении значения атрибута контекста (Предопределенный): У пользователя недостаточно прав на исполнение операции над базой данных.
Если Не СпособОтражения.Предопределенный Тогда
по причине:
У пользователя недостаточно прав на исполнение операции над базой данных.Как с этой ошибкой бороться. У роли есть права на Справочник.ПодразделенияОрганизаций.
-
Offline
1Cnica
Опытный в 1С- Регистрация:
- 13 фев 2009
- Сообщения:
- 416
- Симпатии:
- 0
- Баллы:
- 26
если можно, поставь полные права юзеру
у меня такие же проблемы с юзерами возникают, задолбалась уже колупаться в этих правах/ролях -
Offline
lazy
Модераторы
Команда форума
Модератор- Регистрация:
- 1 сен 2007
- Сообщения:
- 2.127
- Симпатии:
- 4
- Баллы:
- 29
1Cnica, я в шоке. Полагаю, что права пользователей сделаны отнюдь не для того, чтобы мучить 1Сников, или пользователей. А для того, чтобы назначить зоны ответственности пользователей, разграничить уровни доступа к информации.
Если всем подряд давать полные права — для маленькой организации с 3-мя сотрудниками это может быть и приемлемый вариант, то в остальных случаях — это прямой путь к полному концу обеда с вначале групповым изнасилованием 1Сника, а потом его увольнением…
-
Offline
BabySG
Администраторы
Команда форума
Администратор- Регистрация:
- 10 июн 2007
- Сообщения:
- 11.853
- Симпатии:
- 18
- Баллы:
- 29
Бороться только один — внимательно настраивать права.
-
Offline
vitaly_mnpz
Опытный в 1С- Регистрация:
- 15 фев 2009
- Сообщения:
- 267
- Симпатии:
- 0
- Баллы:
- 26
Добавьте пользователю роль «Отражение в регламентированном учете».
-
Offline
BabySG
Администраторы
Команда форума
Администратор- Регистрация:
- 10 июн 2007
- Сообщения:
- 11.853
- Симпатии:
- 18
- Баллы:
- 29
Кстати да — релиз какой? В 20-ке поменялись права…
-
Offline
AndreyNag
Опытный в 1С- Регистрация:
- 25 апр 2012
- Сообщения:
- 134
- Симпатии:
- 0
- Баллы:
- 26
После обновления в режиме слияния конфигурации УТ 10.3.2.11 до 10.3.18.4 не могу пробить чек ККМ. Ругается «ошибка при получении значения атрибута контекста ТекущийКасссир».
Куда ему стукнуть?
Спасибо за внимание.P.S. Решено загрузкой новой конфигурации без сравнения.