&НаКлиенте
Процедура КомандаДляКнопок(Элемент)
Кнопка = ЭтаФорма.ТекущийЭлемент;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = «Нажата «+Кнопка.Имя;
Сообщение.Сообщить();
КонецПроцедуры
&НаСервере
Процедура СоздатьКнопкиНаСервере();
ОбъектН = Новый COMОбъект(«Scripting.FileSystemObject»);
Индекс = 1;
Для Каждого Drive Из ОбъектН.Drives Цикл
Если Drive.DriveType = 1 Тогда
Имя = «Кнопка»+Индекс;
НоваяКнопка = Элементы.Добавить(Имя,Тип(«КнопкаФормы»),Элементы.Группа5);
НоваяКнопка.Вид = ВидКнопкиФормы.ОбычнаяКнопка;
НоваяКнопка.Заголовок = «Drive.path»;
НоваяКнопка.ИмяКоманды = «КомандаДляКнопок»;
Индекс = Индекс + 1;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Пишет
{Форма.Форма.Форма(55)}: Ошибка при установке значения атрибута контекста (ИмяКоманды)
НоваяКнопка.ИмяКоманды = «КомандаДляКнопок»;
по причине:
Недопустимое значение
не могу поняь почему
Ошибка «Недопустимое значение» при установке имени команды
Ошибка возникает в момент установки команды в кнопке — при отсутствии ее в командах формы
Подробная ошибка
Проверки:
- Проверить имя команды на предмет наличия опечатки
- При отсутствии, добавить саму команду и ее обработчик, тогда ошибка выходить не будет
Команды/Команды формы/Добавить, задать «Имя» и обработчик в поле «Действие»
Об идеалах нации можно судить по ее рекламе.
// Реквизиты
ДобавляемыеРеквизиты = Новый Массив;
ИмяТаблицы = "КомандыДополнительныхОбработок";
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяТаблицы, Новый ОписаниеТипов("ТаблицаЗначений")));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Ссылка", Новый ОписаниеТипов("СправочникСсылка.ДополнительныеОтчетыИОбработки"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ВариантЗапуска", Новый ОписаниеТипов("ПеречислениеСсылка.СпособыВызоваДополнительныхОбработок"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ИмяЭлемента", Новый ОписаниеТипов("Строка"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Представление", Новый ОписаниеТипов("Строка"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Идентификатор", Новый ОписаниеТипов("Строка"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ЭтоОтчет", Новый ОписаниеТипов("Булево"), ИмяТаблицы));
Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
//реквизит
ИмяЭлемента = "Добавлен" + ИндексЭлемента;
Реквизит = Новый РеквизитФормы(ИмяЭлемента, ОписаниеТипов);
ДобавляемыеРеквизиты.Добавить(Реквизит);
ИзменитьРеквизиты(ДобавляемыеРеквизиты);
//команда печать
ИмяКомандыПечать = "ДобавленПечать" + ИндексЭлемента;
КомандаПечать = Команды.Добавить(ИмяКомандыПечать);
КомандаПечать.Действие = "ПечатьДокумента";
КомандаПечать.Подсказка = НСтр("ru = 'Печать документа...'");
//элемент формы
//Родитель = Элементы.ГруппаСформированныеДокументы;
Элемент = Элементы.Добавить(ИмяЭлемента, Тип("ПолеФормы"), ЭлементГруппа);
Элемент.Вид = ВидПоляФормы.ПолеНадписи;
Элемент.ПутьКДанным = ИмяЭлемента;
Элемент.Гиперссылка = Истина;
Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
ЭтаФорма[ИмяЭлемента] = Документ;
//кнопка печать
ИмяЭлементаПечать = "ДобавленПечать" + ИндексЭлемента;
ЭлементПечать = Элементы.Добавить(ИмяЭлементаПечать, Тип("КнопкаФормы"), ЭлементГруппа);
ЭлементПечать.Картинка = БиблиотекаКартинок.Печать;
ЭлементПечать.Отображение = ОтображениеКнопки.Картинка;
ЭлементПечать.ИмяКоманды = ИмяКомандыПечать;
Содержание:
1. Что означает ошибка при получении значения атрибута контекста?
2. Диагностика ошибки в конфигурации программы 1С: Предприятие
3. Устранение ошибки при получении атрибута контекста в системе программы 1С
1. Что означает ошибка при получении значения атрибута контекста?
Ошибка при получении значения атрибута контекста может появляться после того, как в информационную базу сервера добавят библиотеку. Само наличие ошибки внутри системы программы «1С: Предприятие» глобально никак не влияет, однако, при её наличии, могут быть неполадки во время исполнения регламентных задач.
Ошибка при получении значения атрибута контекста означает то, что значение атрибута прочесть нельзя так как, оно отсутствует (или нет прав на чтение данного атрибута). К примеру, это может быть некое обращение к полю выборки внутри запроса, которой не существует или к элементу формы, которого не существует и так далее. Примером появления такой ошибки также может быть получение нынешнего юзера через параметры внутри сеанса, а именно: если этот параметр не был выставлен, то на экране появится ошибка о том, что невозможно получить значение атрибута контекста, однако, причиной ошибки будет названо то, что была попытка получить значение параметра в сеансе, которое не было инициализировано.
2. Диагностика ошибки в конфигурации программы 1С: Предприятие
При возникновении ошибки может, например, возникнуть окно, где, помимо текста ошибки, будет содержаться строка «Недопустимо использование свойства «ОсновнаяРоль». При этом, сама ошибка может не сразу выявиться, а только тогда, когда регламентное фоновое задание 1С начинало постоянно прерываться. Это выглядит таким образом:
Наличие новых эд в сервисе ЭДО
При этом, эта ошибка может проявляться для различных регламентных заданий, в том числе, для атрибута контекста «ОсновнаяРоль», где будет описано, что нельзя использовать это свойство. Это демонстрируется далее:
Выполнение обмена по сценарию: Сценарий синхронизации для Бухгалтерия МФ 3.0
Однако, если обратиться к программному коду 1С «Метаданные.ОсновнаяРоль», то ошибок в нём не будет. Получаем, что вся модель запрашивается внутри конфигуратора в разрезе свойства объекта «Метаданные». Если же отдельно проверять программный код 1С во время внесения изменений, то там аналогично не будет обнаружено ошибок, как показано на скриншоте далее:
Общий модуль Пользователи: Модуль
При этом всём, замечено, что, чаще всего, ошибка значения атрибута 1С проявляется в версии 1С 8.3.18.1741, далее можно увидеть окно с отображением данной версии:
О программе
Важно, что описания самого свойства «ОсновнаяРоль» нет внутри синтаксис-помощника. Это свойство задействовано внутри библиотеки системы МДЛП, суть которой в том, что она может помогать делать из управляемой конфигурации обычную. Именно из-за этого выходит так, что само строение программного кода 1С используется в почти не актуальной библиотеке.
3. Устранение ошибки при получении атрибута контекста в системе программы 1С
Когда выявляется подобная ошибка по значению атрибута, то сначала нужно сверить наличие атрибута, к которому происходит обращение, после чего, нужно убедиться в том, что тип атрибута и значения, которое ему присваивают, совпадают.
Если ни то, ни то не помогло, то нужно проверить ещё и права на чтение атрибутов и установку значений для них. Для этого способа нужно выставить режим привилегированного типа – это можно сделать прописав перед строкой, которая содержит ошибку, строку «УстановитьПривилегированныйРежим(Истина)», после строки «УстановитьПривилегированныйРежим(Ложь)».
В случае, когда и этот способ не помог, то следует обратиться к следующему.
Чтобы сделать так, чтобы ошибка значения атрибута 1С пропала и не мешала выполнению регламентных задач – необходимо скорректировать программный код 1С на строку «Метаданные.ОсновныеРоли.Количество()», как демонстрируется на скриншоте с примером ниже:
Общий модуль Пользователи: Модуль
После таких манипуляций, получаем, что ошибки больше не возникает.
В данной статье было описано то, как и в каких случаях внутри конфигурации системы 1С появляется ошибка значения атрибута, а также выявлено какие способы существуют для её устранения.
Специалист компании «Кодерлайн»
Айдар Фархутдинов
Дано
- 1С конфигурация бухгалтерия предприятия 2.0
- Ошибка печати ПКО (приходный кассовый ордер):
{ОбщаяФорма.ФормаПечати.Форма(18)}: Ошибка при установке значения атрибута контекста ЭлементыФормы.ПолеДокумента.ПолеСверху по причине: Несоответствие типов
Анализ проблемы
На первый взгляд все ужасно:
- в конфигураторе видно, что система пытается выполнить строчку кода:
ЭлементыФормы.ПолеДокумента.ПолеСверху = ПечатныйДокумент.ПолеСверху;
- в отладке видно, что обе переменные типа “Число”,
- синтакс-помощник говорит что:
ТабличныйДокумент (SpreadsheetDocument) ПолеСверху (TopMargin) Использование: Чтение и запись.
То есть ПолеСверху доступно для записи и обе переменные типа число и все тут корректно, но система говорит “Несоответствие типов” – полный бред.
Решение
На решение проблемы натолкнула фраза “Ошибка при установке значения атрибута контекста”, значит что-то не так с доступом.
Оказалось в базе нет ни одного пользователя и работа осуществлялась под пользователем НеАвторизован. После создания пользователя с необходимыми правами все заработало.
Дополнено 2017.04.10
Проблема повторилась, но уже при печати РТУ и с использованием уже настроенной учетной записи.
Помогло создание нового пользователя с такими же правами доступа. То есть нового создаем, старого удаляем и после этого все работает.