Содержание:
1. Ошибка при установке значения атрибута контекста
2. Ошибка при получении значения атрибута контекста
Одной из наиболее частых ошибок исполнения кода 1С являются ошибки, связанные с установкой реквизита либо получением реквизита через точку, либо ошибка при вызове функции или процедуры через точку. Все данные объекты являются атрибутами информационных объектов-владельцев, к которым они принадлежат. Рассмотрим примеры таких ошибок и причины их возникновения.
1. Ошибка при установке значения атрибута контекста
Ошибка при установке значения атрибута контекста говорит нам о невозможности присвоить выбранное значение определенному атрибуту информационного объекта. Вызвано это либо несовпадением типа атрибута и присваиваемого ей значения, отсутствием возможности присвоить значение выбранному атрибуту, так как его можно только читать, но не записывать в него, отсутствием прав у текущего пользователя на запись значений в данный атрибут. Например, в реквизит «ДатаДокумента» с типом «Дата» пытаемся записать строку, в реквизит с типом данных ссылки на документ пытаемся записать не ссылку, а объект, полученный по ссылке, что невозможно из-за несоответствия типов, что приводит к ошибке установки значения атрибута.
Другой пример – проходя циклом выборку запроса, пытаемся в колонку выборки записать значение, что невозможно, так как значения выборки запроса можно только считывать, а для того, чтобы можно было полученные из запроса данные изменять в коде, нужно пользоваться не выборкой, а выгружать результат запроса в таблицу значений, в таком случае в цикле по ней можно будет менять значения в колонках, но только на значения, соответствующие типу колонки. Либо у пользователя, под которым выполняется код, нет прав на изменение даты документа, при попытке записать в данный реквизит новую дату, будет выведено сообщение об ошибке установке значения, но в причине будет указано отсутствие прав у пользователя.
2. Ошибка при получении значения атрибута контекста
Ошибка при получении значения атрибута контекста указывает на невозможность прочитать значение атрибута объекта в силу его отсутствия, либо отсутствия прав на его чтение. Например, обращение к несуществующему реквизиту объекта, несуществующему полю выборки из запроса, несуществующему свойству элемента формы и т.п. Так же как пример можно рассмотреть получение текущего пользователя из параметров сеанса — если данный параметр сеанса не установлен, то тоже будет выведена ошибка получения значения атрибута контекста, но в причине будет указана попытка получения неинициализированного значения параметра сеанса.
При возникновении данных ошибок значения атрибута в 1Св первую очередь следует проверить существование атрибута, к которому обращаются, затем проверить совпадение типов значений атрибута и присваиваемого ему значения, затем уже проверить права на установку либо чтение значения. Проверить, является ли дело в правах либо дать права на действия с атрибутом, можно, установив привилегированный режим для совершения действия с данным атрибутом, прописав перед строчкой с ошибкой УстановитьПривилегированныйРежим(Истина), после строчки — УстановитьПривилегированныйРежим(Ложь).
Специалист компании «Кодерлайн»
Александр Суворов
26.12.22 — 13:28
Добрый день.
Подскажите, пожалуйста, делаю заполнение ТЧ обработки через ПостроительОтчетов и получаю ошибку Ошибка при получении значения атрибута контекста (Результат).Ожидается выражение «ВЫБРАТЬ».
Причем в одной обработке работает, в другой эта ошибка, не могу понять где допустил ошибку.
В построителе текст запроса есть
ПередОткрытиемФормы
ТекстЗапроса = «ВЫБРАТЬ
| ПродажиОбороты.Контрагент,
| ПродажиОбороты.Контрагент.ИНН КАК ИНН,
| ПродажиОбороты.Номенклатура,
| ПродажиОбороты.Номенклатура.АЭ_ИдентификаторНаСайте КАК Идентификатор,
| ПродажиОбороты.ЗаказПокупателя КАК Заказ,
| ПродажиОбороты.ЗаказПокупателя.ДатаОтгрузки КАК ДатаНачала,
| ВЫБОР
| КОГДА ТИПЗНАЧЕНИЯ(ПродажиОбороты.ЗаказПокупателя) = ТИП(Документ.ЗаказПокупателя)
| ТОГДА ПродажиОбороты.ЗаказПокупателя.ДатаЗакрытияЗаказа
| ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| КОНЕЦ КАК ДатаКонца,
| ПродажиОбороты.Номенклатура.Наименование,
| ПродажиОбороты.Контрагент.Наименование
|{ВЫБРАТЬ
| Контрагент.*,
| ИНН,
| Номенклатура.*,
| Идентификатор,
| Заказ.*,
| ДатаНачала,
| ДатаКонца,
| НоменклатураНаименование,
| КонтрагентНаименование}
|ИЗ
| РегистрНакопления.Продажи.Обороты(&ДатаС, &ДатаПо, День, ) КАК ПродажиОбороты
|{ГДЕ
| ПродажиОбороты.Контрагент.*,
| ПродажиОбороты.Контрагент.ИНН КАК ИНН,
| ПродажиОбороты.Номенклатура.*,
| ПродажиОбороты.Номенклатура.АЭ_ИдентификаторНаСайте КАК ИдентификаторНаСайте,
| ПродажиОбороты.ЗаказПокупателя.ДатаОтгрузки КАК ДатаОтгрузки,
| (ВЫБОР
| КОГДА ТИПЗНАЧЕНИЯ(ПродажиОбороты.ЗаказПокупателя) = ТИП(Документ.ЗаказПокупателя)
| ТОГДА ПродажиОбороты.ЗаказПокупателя.ДатаЗакрытияЗаказа
| ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| КОНЕЦ) КАК ДатаКонца,
| ПродажиОбороты.ЗаказПокупателя.*}»;
// Заполним настройки построителя на основании запроса
ПостроительОтчета.Текст = ТекстЗапроса;
ПостроительОтчета.ЗаполнитьНастройки();
Далее делаю:
ПостроительОтчета.Параметры.Вставить(«ДатаС»,НачалоДня(ДатаС));
ПостроительОтчета.Параметры.Вставить(«ДатаПо»,КонецДня(ДатаПо));
ПостроительОтчета.Выполнить();
Выгрузка = ПостроительОтчета.Результат.Выгрузить();
Данные.Загрузить(Выгрузка);
Ошибка вылетает на этом моменте: Выгрузка = ПостроительОтчета.Результат.Выгрузить();
0 / 0 / 0 Регистрация: 27.06.2011 Сообщений: 7 |
|
1 |
|
27.06.2011, 15:22. Показов 3700. Ответов 7
{Отчет.РасчетныеЛисткиОрганизаций(691)}: Ошибка при получении значения атрибута контекста (Результат) по причине: после перехода с 8.1 на 8.2 выдает такую ошибку что делать подскажите
0 |
0 / 0 / 0 Регистрация: 09.11.2010 Сообщений: 29 |
|
27.06.2011, 15:55 |
2 |
Тут телепатов нет, какая конфигурация?
0 |
0 / 0 / 0 Регистрация: 27.06.2011 Сообщений: 7 |
|
27.06.2011, 16:07 [ТС] |
3 |
конфигурация зарплата и управление персоналом ТаблицаРезультатаЗапроса = ПостроительОтчетов.Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИер архией); СведенияОВидахРасчета = Новый Соответствие; указывает что тут ошибка Добавлено через 47 секунд
0 |
0 / 0 / 0 Регистрация: 09.11.2010 Сообщений: 29 |
|
27.06.2011, 16:08 |
4 |
А релиз какой? Может стоит обновиться?
0 |
0 / 0 / 0 Регистрация: 27.06.2011 Сообщений: 7 |
|
27.06.2011, 16:18 [ТС] |
5 |
1С:Предприятие 8.2 (8.2.13.219) Добавлено через 3 минуты
0 |
308 / 308 / 1 Регистрация: 16.01.2011 Сообщений: 1,073 |
|
27.06.2011, 16:30 |
6 |
Ошибка выполнения запроса ясно же пишет
0 |
0 / 0 / 0 Регистрация: 27.06.2011 Сообщений: 7 |
|
27.06.2011, 16:35 [ТС] |
7 |
права полные
0 |
308 / 308 / 1 Регистрация: 16.01.2011 Сообщений: 1,073 |
|
27.06.2011, 16:40 |
8 |
я верю только своим глазам
0 |
Использую обработку ВыгрузкаЗагрузкаДанныхXML82.epf все документы выгружаються нормально,а на одном при попытке выгрузить выдает ошибку {ВнешняяОбработка.ВыгрузкаЗагрузкаДанныхXML.МодульОбъекта}: Ошибка при получении значения атрибута контекста (Результат) РезультатЗапроса = ПостроительОтчета.Результат; по причине: по причине: вот что выдает Сообщить( ПостроительОтчета.Текст); » ВЫБРАТЬ Разрешенные _.* ИЗ Документ.АктыЭК КАК _ » Откуда в ошибка берет «<<?>>В КАК В,»?
Потому что «*». З.Ы. Псевдоним таблицы просто клевый. Постарайся, чтобы следующий разработчик не узнал, где ты живешь
З.Ы. Псевдоним таблицы просто клевый. Постарайся, чтобы следующий разработчик не узнал, где ты живешь а я тут причем я обработку скачал «ВыгрузкаЗагрузкаДанныхXML82.epf»
я думаю, что не стоило называть реквизит «В»
а в чем * виновата то? другие документы же выгружает к примеру с таким запросом ВЫБРАТЬ Разрешенные _.* ИЗ Документ.АктыМЭКСМО КАК _
да нашел в табличной части документа один реквезит так и называеться только вот теперь вопрос как нибудь можно это обойти? саму конфу изменить не могу, есть причины
написать запрос ручками, со своими алиасами полей
Тэги: 1С 8
Комментарии доступны только авторизированным пользователям
Ошибка при получении значения атрибута контекста (ТекущийПользователь)
bless18 |
|
||
---|---|---|---|
|
Ошибка при получении значения атрибута контекста (ТекущийПользователь): Попытка получения неинициализированного значения параметра сеанса
Пользователь = ПараметрыСеанса.ТекущийПользователь; по причине: Попытка получения неинициализированного значения параметра сеансаКод 1C v 8.х
Где происходит их инициализация? |
Yandex |
|
||
---|---|---|---|
|
E_Migachev |
|
||
---|---|---|---|
|
Когда в Общие — Параметры сеанса добавил ТекущийПользователь, то его нужно определять при загрузке:
так же в процедуре ПриНачалеРаботыСистемы пишешь что то типо: Код 1C v 8.х
Это работает при условии, что ИмяПользователя заданное в конфигураторе, равно Имени введенному в справочнике Пользователей в реквизит Код |
bless18 |
|
||
---|---|---|---|
|
А если не совпадают, можно как-нибудб привязать пользователя к сотруднику? |
E_Migachev |
|
||
---|---|---|---|
|
А лучше добавить процедуру в Модуль сеанса(Правой клавишей щелкаещь на названии конфигурации и выбираешь Открыть модуль сеанса)
В ней создаешь Процедура УстановкаПараметровСеанса () и в ней пишешь код который я предложил выше или так, Если не совпадают: Код 1C v 8.х
Эта процедура вызывается раньше чем ПриНачалеРаботыСистемы. Ну а дальше подставлять сопоставленное значение при создании соответствующего документа: Код 1C v 8.х
События модуля сеанса: |
bless18 |
|
||
---|---|---|---|
|
Спасибо вам огромное! Вы мне очень помогли! |
bless18 |
|
||
---|---|---|---|
|
Спасибо вам огромное! Вы мне очень помогли! |
E_Migachev |
|
||
---|---|---|---|
|
Пожалуйста |
Подсказка: Щелникни по Имени пользователя напротив ответа, и тем самым покажешь, что сообщение адресовано ему. |