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

Содержание:

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

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

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

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

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

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

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

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

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

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

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

Ошибка при установке значения атрибута контекста (СписокВыбора)

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

Полная ошибка

Ошибка при установке значения атрибута контекста (СписокВыбора)
ЭлементыФормы.Поставщик.СписокВыбора = КЭШируемые.СписокПоставщиков(Контрагент);
по причине:
Несоответствие типов

Скриншот:oshibka-ustanovki-spiska-vybora

Причина: В функции, которая формировала данный список (КЭШируемые.СписокПоставщиков()) отсутствовал возврат значения.


В экспериментальных целях:

передал значение с типом «Массив»  — текст ошибки не поменялся.

В итоге переписал на более универсальный метод ЗагрузитьЗначения() самого элемента диалога:

ЭлементыФормы.Поставщик.СписокВыбора.ЗагрузитьЗначения(КЭШируемые.СписокПоставщиков(Контрагент));

Нулевую рекламную идею можно помножить на миллион долларов – все равно получится нуль.





Дано

  • 1С конфигурация бухгалтерия предприятия 2.0
  • Ошибка печати ПКО (приходный кассовый ордер):
{ОбщаяФорма.ФормаПечати.Форма(18)}: Ошибка при установке значения атрибута контекста
   ЭлементыФормы.ПолеДокумента.ПолеСверху
по причине:
Несоответствие типов

Анализ проблемы

На первый взгляд все ужасно:

  • в конфигураторе видно, что система пытается выполнить строчку кода:
ЭлементыФормы.ПолеДокумента.ПолеСверху          = ПечатныйДокумент.ПолеСверху;
  • в отладке видно, что обе переменные типа “Число”,
  • синтакс-помощник говорит что:
ТабличныйДокумент (SpreadsheetDocument)
ПолеСверху (TopMargin)
Использование:

Чтение и запись.

То есть ПолеСверху доступно для записи и обе переменные типа число и все тут корректно, но система говорит “Несоответствие типов” – полный бред.

Решение

На решение проблемы натолкнула фраза “Ошибка при установке значения атрибута контекста”, значит что-то не так с доступом.
Оказалось в базе нет ни одного пользователя и работа осуществлялась под пользователем НеАвторизован. После создания пользователя с необходимыми правами все заработало.

Дополнено 2017.04.10

Проблема повторилась, но уже при печати РТУ и с использованием уже настроенной учетной записи.

Помогло создание нового пользователя с такими же правами доступа. То есть нового создаем, старого удаляем и после этого все работает.

Неверный тип значения Отбор на табличном поле ☑ 0

evorle145

28.09.15

16:59

Мужики, всю башку сломал уже, но не пойму почему процедура

Процедура УстановитьОтборНаОбластьДанных(Элемент, ЭлементФормыПраваДоступаПользователей) Экспорт

    Если ЗначениеНеЗаполнено(Элемент.ТекущиеДанные) Тогда

        ЭлементФормыПраваДоступаПользователей.ОтборСтрок.ОбластьДанных.Значение = Перечисления.НаборПравПользователей.ПустаяСсылка();

    Иначе

        //ЭлементФормыПраваДоступаПользователей.ОтборСтрок.ОбластьДанных.ВидСравнения  = ВидСравнения.Равно; //это пробовал, не помогло

        ЭлементФормыПраваДоступаПользователей.ОтборСтрок.ОбластьДанных.Значение = Элемент.ТекущиеДанные;

    КонецЕсли;

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

выдает ошибку {ОбщийМодуль.НастройкаПравДоступа(168)}: Ошибка при установке значения атрибута контекста (Значение)

        ЭлементФормыПраваДоступаПользователей.ОтборСтрок.ОбластьДанных.Значение = Элемент.ТекущиеДанные;

по причине:

Неверный тип значения

Вид сравнения стоит. Тип «Элемент.ТекущиеДанные» — ПеречислениеСсылка.НаборПравПользователей. Тип ЭлементФормыПраваДоступаПользователей.ОтборСтрок.ОбластьДанных.Значение — точно такой же! Но устанавливаться отбор в упор не хочет…

1

evorle145

28.09.15

17:01

Лефмихалыч, родной, выручайте. Все происходит по Администратором.

2

Лефмихалыч

28.09.15

17:02

кэш продуй

3

vicof

28.09.15

17:03

кэш?

4

evorle145

28.09.15

17:05

Столько уважаемых людей в списке просматривающих, что, право, мне даже стыдно за свой казус..

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

Базу только развернул и сразу эта ошибка, кэш чист должен быть.

5

evorle145

28.09.15

17:09

(2) , продул, чтоб не думалось. Не помогло.

Конфа «Управление торговлей», редакция 10.2 (10.2.6.4) на платформе 1С:Предприятие 8.3 (8.3.6.2237). Это по идее это тут не причем…

6

Лефмихалыч

28.09.15

17:12

(5) как продул?

7

evorle145

28.09.15

17:15

(6) Тут все удалил C:\Users\Админ\AppData

8

Nuobu

28.09.15

17:17

(5) Какой тип у Элемент.ТекущиеДанные;?

9

evorle145

28.09.15

17:18

(8) Копию из отладчика: Элемент.ТекущиеДанные    Кладовщик    ПеречислениеСсылка.НаборПравПользователей

10

evorle145

28.09.15

17:19

ЭлементФормыПраваДоступаПользователей.ОтборСтрок.ОбластьДанных.Значение        ПеречислениеСсылка.НаборПравПользователей

11

Лефмихалыч

28.09.15

17:19

(7) надоб ыло базу удалить из списка и добавить заново. Кэш ест ьеще в Local

12

evorle145

28.09.15

17:19

вот, копировал. Видно то типы совпадают на 100%

13

evorle145

28.09.15

17:21

(11) , Сделал. Но не помогло. Я об этом способе помнил, просто я ж только что ее развернул, поэтому и думал, что это не поможет..

14

Nuobu

28.09.15

17:47

(13) Пустую ссылку можешь присвоить?

15

evorle145

28.09.15

17:48

Друзья, проблему решил, но в чем дело было так и не понял.

Код изменил на

Процедура УстановитьОтборНаОбластьДанных(Элемент, ЭлементФормыПраваДоступаПользователей) Экспорт

    Если ЗначениеНеЗаполнено(Элемент.ТекущиеДанные) Тогда

        ЭлементФормыПраваДоступаПользователей.ОтборСтрок.ОбластьДанных.Значение = Перечисления.НаборПравПользователей.ПустаяСсылка();

    Иначе

        ЭлементТекущиеДанные = Элемент.ТекущиеДанные;

        ЭлементФормыПраваДоступаПользователей.ОтборСтрок.ОбластьДанных.Значение = ЭлементТекущиеДанные;

    КонецЕсли;

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

И заработало! Но надо же понять! Почему присваивать значение Элемент.ТекущиеДанные нельзя, а ЭлементТекущиеДанные = Элемент.ТекущиеДанные вот так уже можно?

16

igork1966

28.09.15

18:32

(15)

Посмотри ТипЗнч(ЭлементТекущиеДанные)

И ТипЗнч(Элемент.ТекущиеДанные)

17

igork1966

28.09.15

18:35

(16) + ТипЗнч(ЭлементФормыПраваДоступаПользователей.ОтборСтрок.ОбластьДанных.Значение)

Содержание:

1.      Что означает ошибка при получении значения атрибута контекста?

2.      Диагностика ошибки в конфигурации программы 1С: Предприятие

3.      Устранение ошибки при получении атрибута контекста в системе программы 1С  

1.      Что означает ошибка при получении значения атрибута контекста?

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

Ошибка при получении значения атрибута контекста означает то, что значение атрибута прочесть нельзя так как, оно отсутствует (или нет прав на чтение данного атрибута). К примеру, это может быть некое обращение к полю выборки внутри запроса, которой не существует или к элементу формы, которого не существует и так далее. Примером появления такой ошибки также может быть получение нынешнего юзера через параметры внутри сеанса, а именно: если этот параметр не был выставлен, то на экране появится ошибка о том, что невозможно получить значение атрибута контекста, однако, причиной ошибки будет названо то, что была попытка получить значение параметра в сеансе, которое не было инициализировано.  

2.      Диагностика ошибки в конфигурации программы 1С: Предприятие

При возникновении ошибки может, например, возникнуть окно, где, помимо текста ошибки, будет содержаться строка «Недопустимо использование свойства «ОсновнаяРоль». При этом, сама ошибка может не сразу выявиться, а только тогда, когда регламентное фоновое задание 1С начинало постоянно прерываться. Это выглядит таким образом:

1s atributy konteksta.png

Наличие новых эд в сервисе ЭДО

При этом, эта ошибка может проявляться для различных регламентных заданий, в том числе, для атрибута контекста «ОсновнаяРоль», где будет описано, что нельзя использовать это свойство. Это демонстрируется далее:

atributy konteksta.png

Выполнение обмена по сценарию: Сценарий синхронизации для Бухгалтерия МФ 3.0

Однако, если обратиться к программному коду 1С «Метаданные.ОсновнаяРоль», то ошибок в нём не будет. Получаем, что вся модель запрашивается внутри конфигуратора в разрезе свойства объекта «Метаданные». Если же отдельно проверять программный код 1С во время внесения изменений, то там аналогично не будет обнаружено ошибок, как показано на скриншоте далее:

atributy konteksta 1s.png

Общий модуль Пользователи: Модуль

При этом всём, замечено, что, чаще всего, ошибка значения атрибута 1С проявляется в версии 1С 8.3.18.1741, далее можно увидеть окно с отображением данной версии:

atributy konteksta v 1s.png

О программе

Важно, что описания самого свойства «ОсновнаяРоль» нет внутри синтаксис-помощника. Это свойство задействовано внутри библиотеки системы МДЛП, суть которой в том, что она может помогать делать из управляемой конфигурации обычную. Именно из-за этого выходит так, что само строение программного кода 1С используется в почти не актуальной библиотеке.  

3.      Устранение ошибки при получении атрибута контекста в системе программы 1С

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

Если ни то, ни то не помогло, то нужно проверить ещё и права на чтение атрибутов и установку значений для них. Для этого способа нужно выставить режим привилегированного типа – это можно сделать прописав перед строкой, которая содержит ошибку, строку «УстановитьПривилегированныйРежим(Истина)», после строки «УстановитьПривилегированныйРежим(Ложь)».


В случае, когда и этот способ не помог, то следует обратиться к следующему.

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

sintaksis pomoshchnik.png

Общий модуль Пользователи: Модуль

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

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

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

Айдар Фархутдинов

Понравилась статья? Поделить с друзьями:

Интересное по теме:

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

  • Добавить комментарий

    ;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: