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

Содержание:

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

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

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

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

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

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

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

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

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

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

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

Ошибка в 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)

Ошибка при получении значения атрибута контекста (ТекущийПользователь)

bless18
06.04.2010 09:32 Прочитано: 49821

Ошибка при получении значения атрибута контекста (ТекущийПользователь): Попытка получения неинициализированного значения параметра сеанса
Пользователь = ПараметрыСеанса.ТекущийПользователь;
по причине:
Попытка получения неинициализированного значения параметра сеансаКод 1C v 8.х

 Процедура ПриНачалеРаботыСистемы()
Пользователь = ПараметрыСеанса.ТекущийПользователь;
Если обЗначениеНеЗаполнено(Пользователь.Сотрудник) Тогда
ИмяПользователя = СокрЛП(Пользователь.Наименование);
Иначе
ИмяПользователя = СокрЛП(Пользователь.Сотрудник.Наименование);
КонецЕсли;
Предупреждение("Здравствуйте уважаемый пользователь """+ИмяПользователя+"""
|Система готова к работе.", 3);
КонецПроцедуры

Где происходит их инициализация?

Yandex
Возможно, вас также заинтересует

Реклама на портале

E_Migachev
06.04.2010 09:48 Ответ № 1

Когда в Общие — Параметры сеанса добавил ТекущийПользователь, то его нужно определять при загрузке:
так же в процедуре ПриНачалеРаботыСистемы пишешь что то типо:
Код 1C v 8.х

 ИмяПользователя = ИмяПользователя();
Если Не ПустаяСтрока(ИмяПользователя) Тогда
ТекущийПользователь = Справочники.Пользователи.НайтиПоКоду(ИмяПользователя);
КонецЕсли;
ПараметрыСеанса.ТекущийПользователь = ТекущийПользователь;

Это работает при условии, что ИмяПользователя заданное в конфигураторе, равно Имени введенному в справочнике Пользователей в реквизит Код

bless18
06.04.2010 09:56 Ответ № 2

А если не совпадают, можно как-нибудб привязать пользователя к сотруднику?

E_Migachev
06.04.2010 09:57 Ответ № 3

А лучше добавить процедуру в Модуль сеанса(Правой клавишей щелкаещь на названии конфигурации и выбираешь Открыть модуль сеанса)

В ней создаешь Процедура УстановкаПараметровСеанса () и в ней пишешь код который я предложил выше или так, Если не совпадают:

Код 1C v 8.х

 Процедура УстановкаПараметровСеанса()
Спр = Справочники.Сотрудники;
ПараметрыСеанса.ТекущийПользователь=Спр.НайтиПоРеквизиту("Пользователь1С", ИмяПользователя());
КонецПроцедуры
//где Пользователь1С, это реквизит справочника сотрудники, и именем как вбито в конфигураторе

Эта процедура вызывается раньше чем ПриНачалеРаботыСистемы.

Ну а дальше подставлять сопоставленное значение при создании соответствующего документа:

Код 1C v 8.х

  Док.Пользователь=ПараметрыСеанса.Пользователь;   

События модуля сеанса:
Глобальный контекст
УстановкаПараметровСеанса (SessionParametersSetting)
Синтаксис:
УстановкаПараметровСеанса(<Требуемые параметры>)
Параметры:
<Требуемые параметры>
Тип: Массив; Неопределено. Массив устанавливаемых идентификаторов параметров сеанса, которые нужно инициализировать, если обработчик вызывается перед использованием неинициализированных параметров сеанса.
Неопределено, если обработчик события вызывается системой при начале сеанса или при захвате соединения из пула.
Описание:
Событие предназначено для инициализации параметров сеанса.
Вызывается системой:
при установке соединения с информационной базой или при захвате соединения с информационной базой из пула до вызова всех остальных обработчиков. Значение параметра «Параметры сеанса» — Неопределено;
перед фактическим использованием значений параметров сеанса, которые не были инициализированы ранее. В этом случае значением параметра «Параметры сеанса» является массив идентификаторов неинициализированных параметров сеанса, значения которых используются. Если после выполнения обработчика хотя бы один из перечисленных параметров сеанса остается неинициализированным, то возникает исключение.

bless18
06.04.2010 12:13 Ответ № 4

Спасибо вам огромное! Вы мне очень помогли!

bless18
06.04.2010 12:15 Ответ № 5

Спасибо вам огромное! Вы мне очень помогли!

E_Migachev
06.04.2010 15:44 Ответ № 6

Пожалуйста )

Подсказка: Вы можете приложить к ответу файл или изображение щелкнув по значку или в редакторе.

Задача состоит в том что бы из УАТ взять информацию по машинам и запихать их в документ УПП. Это у меня все получилось. Но перед тем как начать поиск мне необходимо обновить справочник ПодразделенияОрганизации. Вот здесь у меня и не работает. Обработка не может создать справочник или не может записать его или не может пометить его на удоление.

Что не так

Процедура КоманднаяПанель3ЗагрузкаИзУАТ(Кнопка)

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

   СерверОбмена = «1cserver»;

   БазаОбмена = «Autotransport»;

   Логин = «Администратор»;

   Пароль = «123»;

   Попытка

       //Открытие = V8.Connect(«Srvr=»»»+СерверОбмена+»»»;Ref=»»»+БазаОбмена+»»»;Usr=»»»+Логин+»»»;Pwd=»»»+Пароль+»»»;»);  

       Открытие = V8.Connect(«File=»»D:V8avtotest»»;Usr=»»Администратор»»;Pwd=»»123″»;»);  

       

       НачДата = «20100101000000»;

       КонДата = «20100131235959»;

       //проверка подразделений

       ЗапросПод=Открытие.NewObject(«Запрос»);

       ЗапросПод.текст =    «ВЫБРАТЬ

                             |    ПодразделенияОрганизаций.Наименование,

                             |    ПодразделенияОрганизаций.Ссылка КАК Ссылка,

                             |    ПодразделенияОрганизаций.Код КАК Код,

                             |    ПодразделенияОрганизаций.Родитель КАК Родитель

                             |ИЗ

                             |    Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций

                             |УПОРЯДОЧИТЬ ПО

                             |    Код»;

       
       РезультатУАТ = ЗапросПод.Выполнить().Выгрузить();

       

       Рез = ПроверкаПодразделенийОрганизаций();

       СпрПодразделенияОрганизации = Открытие.Справочники.ПодразделенияОрганизаций;

       Для Ном = 15 По Рез.Количество() — 1 Цикл

           ПроверкаНаНаличиеВСистемеУАТ = РезультатУАТ.Найти(Рез.Получить(Ном).Код,»Код»);

           Если ПроверкаНаНаличиеВСистемеУАТ.Код = «» Тогда

               Нов = СпрПодразделенияОрганизации.СоздатьЭлемент();

               Нов.Наименование =Рез.Получить(Ном).Наименование;

               Нов.Родитель=Рез.Получить(Ном).Родитель;

               Нов.Записать();

           Иначе

               Если ПроверкаНаНаличиеВСистемеУАТ.Родитель = Рез.Получить(Ном).Родитель и ПроверкаНаНаличиеВСистемеУАТ.Наименование = Рез.Получить(Ном).Наименование Тогда

                   Сообщить(«Сущ»)

               Иначе

                   Открытие.Справочники.ПодразделенияОрганизаций.НайтиПоКоду(ПроверкаНаНаличиеВСистемеУАТ.Код).ПометкаУдаления = Истина;

                   

                   Нов = СпрПодразделенияОрганизации.СоздатьЭлемент();

                   Нов.Наименование =Рез.Получить(Ном).Наименование;

                   Нов.Родитель=Рез.Получить(Ном).Родитель;

                   Нов.Записать();

                   

               КонецЕсли;

           КонецЕсли;    

       КонецЦикла;

       //кон

       Запрос=Открытие.NewObject(«Запрос»);

       запрос.текст =    

       «ВЫБРАТЬ

       |    уатПутевойЛистЗадание.КоличествоЧасов,

       |    уатПутевойЛистЗадание.Ссылка.ТранспортноеСредство.Код,

       |    уатПутевойЛистЗадание.Ссылка.ТранспортноеСредство.Наименование

       |ИЗ

       |    Документ.уатПутевойЛист.Задание КАК уатПутевойЛистЗадание

       |ГДЕ

       |    уатПутевойЛистЗадание.Выполнено = &Истина

       |    И уатПутевойЛистЗадание.Ссылка.Дата МЕЖДУ &НачДата И &КонДата

       |    И уатПутевойЛистЗадание.Ссылка.Рассчитан = &Истина»;

       
       //|    И уатПутевойЛистЗадание.Подразделение = &Подразделение»;

       

       Запрос.УстановитьПараметр(«Подразделение»,ПодразделенияОрганизаций);

       Запрос.УстановитьПараметр(«Истина»,Истина);

       Запрос.УстановитьПараметр(«НачДата»,НачалоДня(НачДата));

       Запрос.УстановитьПараметр(«КонДата»,КонецДня(КонДата));

       тз = Запрос.Выполнить().Выгрузить();

       

   Исключение

       Предупреждение(«База данных не открыта!!!»);

       Возврат;

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

   Для Ном = 0 По тз.Количество() — 1 Цикл

       НовСтрока = ТС.Добавить();

       НовСтрока.ОС = Справочники.ОсновныеСредства.НайтиПоКоду(тз.Получить(Ном).ТранспортноеСредствоКод);

       НовСтрока.КоличествоЧасов = тз.Получить(Ном).КоличествоЧасов;

       НовСтрока.ЕдиницаИзмерения =Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду(«356»);

     КонецЦикла;

   
КонецПроцедуры

Функция  ПроверкаПодразделенийОрганизаций()

   Запрос = Новый Запрос;

   Запрос.Текст =

   «ВЫБРАТЬ

   |    ПодразделенияОрганизаций.Наименование,

   |    ПодразделенияОрганизаций.Ссылка КАК Ссылка,

   |    ПодразделенияОрганизаций.Код КАК Код,

   |    ПодразделенияОрганизаций.Родитель КАК Родитель

   |ИЗ

   |    Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций

   |

   |УПОРЯДОЧИТЬ ПО

   |    Код

   |ИТОГИ ПО

   |    Родитель ИЕРАРХИЯ»;

   Результат = Запрос.Выполнить().Выгрузить();

   Возврат Результат;

КонецФункции

Konstantan

1 / 1 / 1

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

Сообщений: 74

1

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

11.10.2018, 12:33. Показов 5662. Ответов 3

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


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
Процедура УдалениеСтрокНажатие(Элемент)
    
    Запрос = Новый Запрос;  
    Запрос.УстановитьПараметр("Номенклатура",Номенклатура);
    Запрос.Текст =
    "ВЫБРАТЬ
    |   РеализацияТоваровУслугТовары.Ссылка
    |ИЗ
    |   Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    |ГДЕ
    |   РеализацияТоваровУслугТовары.Номенклатура = &Номенклатура";
    
    Выборка = Запрос.Выполнить();
    МассивТоваров=новый Массив; 
    Значения= Выборка.Выбрать();
    Пока Значения.Следующий() Цикл
        ссылка = Значения.ссылка ;
        ДокументОбъект = ссылка.ПолучитьОбъект();
        i=0;
        Для каждого ТекСтрока Из ДокументОбъект.Товары Цикл
            Если ТекСтрока.Номенклатура = Номенклатура Тогда
                МассивТоваров.Добавить(ТекСтрока);
                Сообщить("Значение: "+ ТекСтрока.Номенклатура +" подходит!"); 
                i=i+1
            Иначе
                Сообщить("Значение: "+ТекСтрока.Номенклатура+ " не подходит!");
            КонецЕсли
        КонецЦикла;
        Для  каждого ТекСтрокаМас Из    МассивТоваров Цикл
            Если Вопрос("Удалить строку со значением  " + ТекСтрокаМас.Номенклатура + "?" ,РежимДиалогаВопрос.ДаНет,15)=КодВозвратаДиалога.Да Тогда
                
                
                ДокументОбъект.Товары.Удалить(ТекСтрокаМас);
                
                
                Сообщить("Строка удалена!");
            Иначе
                Сообщить("Отмена удаления!");
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;
    
    
КонецПроцедуры

Сначала выполняется удалет строки из первого документа потом на втором документе вылетает ошибка,что это значит помогите плиииз ничего не пойму

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

0

Тест

Эксперт 1С

383 / 162 / 56

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

Сообщений: 1,241

11.10.2018, 12:44

2

В каком месте то ошибка происходит?

0

856 / 655 / 111

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

Сообщений: 2,410

11.10.2018, 13:36

3

Полный текст ошибки выложите

0

Эксперт 1С

841 / 604 / 211

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

Сообщений: 2,101

11.10.2018, 20:10

4

Лучший ответ Сообщение было отмечено GreenkA как решение

Решение

Konstantan, МассивТоваров не очищается перед обработкой следующего документа.

2

  1. {Справочник.ПодразделенияОрганизаций.Форма.ФормаЭлемента(118)}: Ошибка при получении значения атрибута контекста (Предопределенный): У пользователя недостаточно прав на исполнение операции над базой данных.
    Если Не СпособОтражения.Предопределенный Тогда
    по причине:
    У пользователя недостаточно прав на исполнение операции над базой данных.

    Как с этой ошибкой бороться. У роли есть права на Справочник.ПодразделенияОрганизаций.

  2. Offline

    1Cnica
    Опытный в 1С

    Регистрация:
    13 фев 2009
    Сообщения:
    416
    Симпатии:
    0
    Баллы:
    26

    если можно, поставь полные права юзеру
    у меня такие же проблемы с юзерами возникают, задолбалась уже колупаться в этих правах/ролях :(

  3. Offline

    lazy
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29

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

    Если всем подряд давать полные права — для маленькой организации с 3-мя сотрудниками это может быть и приемлемый вариант, то в остальных случаях — это прямой путь к полному концу обеда с вначале групповым изнасилованием 1Сника, а потом его увольнением…

  4. Offline

    BabySG
    Администраторы
    Команда форума
    Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    18
    Баллы:
    29

    Бороться только один — внимательно настраивать права.

  5. Offline

    vitaly_mnpz
    Опытный в 1С

    Регистрация:
    15 фев 2009
    Сообщения:
    267
    Симпатии:
    0
    Баллы:
    26

    Добавьте пользователю роль «Отражение в регламентированном учете».

  6. Offline

    BabySG
    Администраторы
    Команда форума
    Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    18
    Баллы:
    29

    Кстати да — релиз какой? В 20-ке поменялись права…

  7. Offline

    AndreyNag
    Опытный в 1С

    Регистрация:
    25 апр 2012
    Сообщения:
    134
    Симпатии:
    0
    Баллы:
    26

    После обновления в режиме слияния конфигурации УТ 10.3.2.11 до 10.3.18.4 не могу пробить чек ККМ. Ругается «ошибка при получении значения атрибута контекста ТекущийКасссир».
    Куда ему стукнуть?
    Спасибо за внимание.

    P.S. Решено загрузкой новой конфигурации без сравнения.

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

Исправляем ситуацию

Чтобы избавиться от этого неприятного сообщения об ошибке при вызове метода контекста, следует понимать, что контекстом называют методы платформы 1С. Значит в определенной строке кода воспользовались методом с неверными параметрами или вызвали его не от того владельца. Всегда внимательно и полностью читайте сообщения об ошибках – часто в них содержится указание на строку и метод, вызвавший ошибку. Это поможет сэкономить время на отладку и поиск проблемного места в коде.

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


	 Запрос = Новый Запрос;
	 Запрос.Текст =
	         "ВЫБРАТЬ
	          |        Номенклатура.Ссылка КАК Ссылка,
	          |        Номенклатура.ВерсияДанных КАК ВерсияДанных,
	          |        Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
	          |        Номенклатура.Родитель КАК Родитель,
	          |        Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
	          |        Номенклатура.Код КАК Код,
	          |        Номенклатура.Наименование КАК Наименование,
	          |        Номенклатура.Артикул КАК Артикул,
	          |        Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	          |        Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
	          |        Номенклатура.Предопределенный КАК Предопределенный,
	          |        Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
	          |ИЗ
	          |        Справочник.Номенклатура КАК Номенклатура
	          |ГДЕ
	          |         ";
	 РезультатЗапроса = Запрос.Выполнить();
	 ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	 Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
	 КонецЦикла;

Рис.1 Запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора

Рис.1 Запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора

Приведенный текст ошибки программисту 1С скажет, что в модуле формы обработки «ЧтениеЗаписьXML на 152 строчке кода не может выполниться запрос. Причина в том, что на 17 строчке запроса нет чего-то, что ждал компилятор. Таким образом, чтобы убрать подобное сообщение, необходимо выяснить, что там должно быть и написать недостающий код.

Увидев вышеприведенный кусок кода, разработчик заметит, что в запросе есть служебное слово «ГДЕ», дающее сигнал 1С, что дальше будет условие. Но мы забыли дописать его и, естественно, система с помощью сообщения об ошибке спрашивает нас – «а где условие?». Чтобы исправить эту ситуацию необходимо либо убрать оператор «ГДЕ» из запроса, либо добавить условие.

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


	 Запрос = Новый Запрос;
	            Запрос.Текст =
	                       "ВЫБРАТЬ
	                        |          Номенклатура.Ссылка КАК Ссылка,
	                        |          Номенклатура.ВерсияДанных КАК ВерсияДанных,
	                        |          Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
	                        |          Номенклатура.Родитель КАК Родитель,
	                        |          Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
	                        |          Номенклатура.Код КАК Код,
	                        |          Номенклатура.Наименование КАК Наименование,
	                        |          Номенклатура.Артикул КАК Артикул,
	                        |          Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	                        |          Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
	                        |          Номенклатура.Предопределенный КАК Предопределенный,
	                        |          Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
	                        |ИЗ
	                        |          Справочник.Номенклатура КАК Номенклатура
	                        |ГДЕ
	                        |          НЕ Номенклатура.ЭтоГруппа ";
	 НужнаяГруппаЭлементов = Справочники.Номенклатура.НайтиПоНаименованию("Мебель");
	 РезультатЗапроса = Запрос.Выполнить();
	 ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	 Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
	 Сообщить(ВыборкаДетальныеЗаписи.Ссылка.ПринадлежитЭлементу("НужнаяГруппаЭлементов"));
	 КонецЦикла;

Рис.2 Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной

Рис.2 Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной

1С выдает настолько же информативное сообщение, из которого мы понимаем, что на 158 строке у 1 параметра неправильный тип. Но что же делать, если мы не знаем, какой тип должен быть? В этом нам поможет Синтакс-помощник, встроенный в платформу 1С.

Рис.3 Синтакс-помощник

Рис.3 Синтакс-помощник

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

Рис.4 Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает

Рис.4 Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает

Чаще всего причиной подобных ошибок выступают следующие факторы:

  1. Невнимательность;
  2. Отсутствие опыта или знаний;
  3. Несогласованность действий разработчиков друг с другом;
  4. Изменения в методах контекста в новых версиях платформы.

Но ошибки при разработке ПО случаются постоянно, поскольку иногда ошибаются даже специалисты с многолетним опытом. Самое главное – уметь исправлять их и учиться на них. Постепенно вы будете видеть сообщения об ошибках все реже и научитесь замечать подобные «опечатки» еще до запуска 1С.

Содержание:

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

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

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

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

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

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

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

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

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

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

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

Logo
MurCode

  • Форумы
  • Поиск
  • О проекте

У пользователя недостаточно прав

Mike222

Дата: 10.12.2009 17:27:03

Выдается следующая ошибка при попытке удалить один документ:

{Обработка.УниверсальныйЖурналДокументов.Форма.ОсновнаяФорма(471)}: Ошибка при получении значения атрибута контекста (ПометкаУдаления): У пользователя недостаточно прав на исполнение операции над базой данных.
Если ТекДок.ПометкаУдаления Тогда
по причине:
У пользователя недостаточно прав на исполнение операции над базой данных.

Данный документ не виден в журнале «Поступление товаров и услуг», видимо был удален, но где-то он подвис, но зато виден в журнале «Универсальный журнал документов». С этого журнала тоже не возможно что-либо с ним сделать, выдается та же ошибка.
Как можно эту запись удалить?

Господин ПЖ

Дата: 10.12.2009 17:30:42

зайти под админом

Mike222

Дата: 10.12.2009 17:37:21

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

Господин ПЖ

Дата: 10.12.2009 17:38:22

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

чота я не верю…

Господин ПЖ

Дата: 10.12.2009 17:39:16

хотя как вариант — в кнстантах стоит использование RLS на админах

Mike222

Дата: 10.12.2009 17:56:12

Тогда такой вопрос:
базу interbase *.gdb можно раскрыть ibexpert -том, а базу восьмерки можно как-то раскрыть? Имеется ли какой нибудь инструмент?

Господин ПЖ

Дата: 10.12.2009 17:59:07

Mike222
Тогда такой вопрос:
базу interbase *.gdb можно раскрыть ibexpert -том, а базу восьмерки можно как-то раскрыть? Имеется ли какой нибудь инструмент?

зачем? руками удалить и порушить все вокруг?

Сисой

Дата: 11.12.2009 11:53:40

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

Это не так.
Скорее всего, в конфигурацию добавляли свои типы документов. А права не назначили. Или RLS.
Можно сделать так: объявить привелегированный модуль, в нем запросом выбрать документы и выгрузить их реквизиты в ТЗ. ТЗ прочесть отладчиком или вывести на экран.
Если роль админская, можно заодно проверить наличие прав на объект.

Задача состоит в том что бы из УАТ взять информацию по машинам и запихать их в документ УПП. Это у меня все получилось. Но перед тем как начать поиск мне необходимо обновить справочник ПодразделенияОрганизации. Вот здесь у меня и не работает. Обработка не может создать справочник или не может записать его или не может пометить его на удоление.

Что не так

Процедура КоманднаяПанель3ЗагрузкаИзУАТ(Кнопка)

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

   СерверОбмена = «1cserver»;

   БазаОбмена = «Autotransport»;

   Логин = «Администратор»;

   Пароль = «123»;

   Попытка

       //Открытие = V8.Connect(«Srvr=»»»+СерверОбмена+»»»;Ref=»»»+БазаОбмена+»»»;Usr=»»»+Логин+»»»;Pwd=»»»+Пароль+»»»;»);  

       Открытие = V8.Connect(«File=»»D:V8avtotest»»;Usr=»»Администратор»»;Pwd=»»123″»;»);  

       
       НачДата = «20100101000000»;

       КонДата = «20100131235959»;

       //проверка подразделений

       ЗапросПод=Открытие.NewObject(«Запрос»);

       ЗапросПод.текст =    «ВЫБРАТЬ

                             |    ПодразделенияОрганизаций.Наименование,

                             |    ПодразделенияОрганизаций.Ссылка КАК Ссылка,

                             |    ПодразделенияОрганизаций.Код КАК Код,

                             |    ПодразделенияОрганизаций.Родитель КАК Родитель

                             |ИЗ

                             |    Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций

                             |УПОРЯДОЧИТЬ ПО

                             |    Код»;

       
       РезультатУАТ = ЗапросПод.Выполнить().Выгрузить();

       
       Рез = ПроверкаПодразделенийОрганизаций();

       СпрПодразделенияОрганизации = Открытие.Справочники.ПодразделенияОрганизаций;

       Для Ном = 15 По Рез.Количество() — 1 Цикл

           ПроверкаНаНаличиеВСистемеУАТ = РезультатУАТ.Найти(Рез.Получить(Ном).Код,»Код»);

           Если ПроверкаНаНаличиеВСистемеУАТ.Код = «» Тогда

               Нов = СпрПодразделенияОрганизации.СоздатьЭлемент();

               Нов.Наименование =Рез.Получить(Ном).Наименование;

               Нов.Родитель=Рез.Получить(Ном).Родитель;

               Нов.Записать();

           Иначе

               Если ПроверкаНаНаличиеВСистемеУАТ.Родитель = Рез.Получить(Ном).Родитель и ПроверкаНаНаличиеВСистемеУАТ.Наименование = Рез.Получить(Ном).Наименование Тогда

                   Сообщить(«Сущ»)

               Иначе

                   Открытие.Справочники.ПодразделенияОрганизаций.НайтиПоКоду(ПроверкаНаНаличиеВСистемеУАТ.Код).ПометкаУдаления = Истина;

                   
                   Нов = СпрПодразделенияОрганизации.СоздатьЭлемент();

                   Нов.Наименование =Рез.Получить(Ном).Наименование;

                   Нов.Родитель=Рез.Получить(Ном).Родитель;

                   Нов.Записать();

                   
               КонецЕсли;

           КонецЕсли;    

       КонецЦикла;

       //кон

       Запрос=Открытие.NewObject(«Запрос»);

       запрос.текст =    

       «ВЫБРАТЬ

       |    уатПутевойЛистЗадание.КоличествоЧасов,

       |    уатПутевойЛистЗадание.Ссылка.ТранспортноеСредство.Код,

       |    уатПутевойЛистЗадание.Ссылка.ТранспортноеСредство.Наименование

       |ИЗ

       |    Документ.уатПутевойЛист.Задание КАК уатПутевойЛистЗадание

       |ГДЕ

       |    уатПутевойЛистЗадание.Выполнено = &Истина

       |    И уатПутевойЛистЗадание.Ссылка.Дата МЕЖДУ &НачДата И &КонДата

       |    И уатПутевойЛистЗадание.Ссылка.Рассчитан = &Истина»;

       
       //|    И уатПутевойЛистЗадание.Подразделение = &Подразделение»;

       
       Запрос.УстановитьПараметр(«Подразделение»,ПодразделенияОрганизаций);

       Запрос.УстановитьПараметр(«Истина»,Истина);

       Запрос.УстановитьПараметр(«НачДата»,НачалоДня(НачДата));

       Запрос.УстановитьПараметр(«КонДата»,КонецДня(КонДата));

       тз = Запрос.Выполнить().Выгрузить();

       
   Исключение

       Предупреждение(«База данных не открыта!!!»);

       Возврат;

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

   Для Ном = 0 По тз.Количество() — 1 Цикл

       НовСтрока = ТС.Добавить();

       НовСтрока.ОС = Справочники.ОсновныеСредства.НайтиПоКоду(тз.Получить(Ном).ТранспортноеСредствоКод);

       НовСтрока.КоличествоЧасов = тз.Получить(Ном).КоличествоЧасов;

       НовСтрока.ЕдиницаИзмерения =Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду(«356»);

     КонецЦикла;

   
КонецПроцедуры

Функция  ПроверкаПодразделенийОрганизаций()

   Запрос = Новый Запрос;

   Запрос.Текст =

   «ВЫБРАТЬ

   |    ПодразделенияОрганизаций.Наименование,

   |    ПодразделенияОрганизаций.Ссылка КАК Ссылка,

   |    ПодразделенияОрганизаций.Код КАК Код,

   |    ПодразделенияОрганизаций.Родитель КАК Родитель

   |ИЗ

   |    Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций

   |

   |УПОРЯДОЧИТЬ ПО

   |    Код

   |ИТОГИ ПО

   |    Родитель ИЕРАРХИЯ»;

   Результат = Запрос.Выполнить().Выгрузить();

   Возврат Результат;

КонецФункции

  1. {Справочник.ПодразделенияОрганизаций.Форма.ФормаЭлемента(118)}: Ошибка при получении значения атрибута контекста (Предопределенный): У пользователя недостаточно прав на исполнение операции над базой данных.
    Если Не СпособОтражения.Предопределенный Тогда
    по причине:
    У пользователя недостаточно прав на исполнение операции над базой данных.

    Как с этой ошибкой бороться. У роли есть права на Справочник.ПодразделенияОрганизаций.


  2. 1Cnica

    Offline

    1Cnica
    Опытный в 1С

    Регистрация:
    13 фев 2009
    Сообщения:
    416
    Симпатии:
    0
    Баллы:
    26

    если можно, поставь полные права юзеру
    у меня такие же проблемы с юзерами возникают, задолбалась уже колупаться в этих правах/ролях :(


  3. lazy

    Offline

    lazy
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29

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

    Если всем подряд давать полные права — для маленькой организации с 3-мя сотрудниками это может быть и приемлемый вариант, то в остальных случаях — это прямой путь к полному концу обеда с вначале групповым изнасилованием 1Сника, а потом его увольнением…


  4. BabySG

    Offline

    BabySG
    Администраторы
    Команда форума
    Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    18
    Баллы:
    29

    Бороться только один — внимательно настраивать права.


  5. vitaly_mnpz

    Offline

    vitaly_mnpz
    Опытный в 1С

    Регистрация:
    15 фев 2009
    Сообщения:
    267
    Симпатии:
    0
    Баллы:
    26

    Добавьте пользователю роль «Отражение в регламентированном учете».


  6. BabySG

    Offline

    BabySG
    Администраторы
    Команда форума
    Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    18
    Баллы:
    29

    Кстати да — релиз какой? В 20-ке поменялись права…


  7. AndreyNag

    Offline

    AndreyNag
    Опытный в 1С

    Регистрация:
    25 апр 2012
    Сообщения:
    134
    Симпатии:
    0
    Баллы:
    26

    После обновления в режиме слияния конфигурации УТ 10.3.2.11 до 10.3.18.4 не могу пробить чек ККМ. Ругается «ошибка при получении значения атрибута контекста ТекущийКасссир».
    Куда ему стукнуть?
    Спасибо за внимание.

    P.S. Решено загрузкой новой конфигурации без сравнения.


1C-pro.ru - форум по 1С:Предприятию 7.7, 8.0, 8.1, 8.2, 8.3

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