&НаКлиенте
Процедура КомандаДляКнопок(Элемент)
Кнопка = ЭтаФорма.ТекущийЭлемент;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = «Нажата «+Кнопка.Имя;
Сообщение.Сообщить();
КонецПроцедуры
&НаСервере
Процедура СоздатьКнопкиНаСервере();
ОбъектН = Новый COMОбъект(«Scripting.FileSystemObject»);
Индекс = 1;
Для Каждого Drive Из ОбъектН.Drives Цикл
Если Drive.DriveType = 1 Тогда
Имя = «Кнопка»+Индекс;
НоваяКнопка = Элементы.Добавить(Имя,Тип(«КнопкаФормы»),Элементы.Группа5);
НоваяКнопка.Вид = ВидКнопкиФормы.ОбычнаяКнопка;
НоваяКнопка.Заголовок = «Drive.path»;
НоваяКнопка.ИмяКоманды = «КомандаДляКнопок»;
Индекс = Индекс + 1;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Пишет
{Форма.Форма.Форма(55)}: Ошибка при установке значения атрибута контекста (ИмяКоманды)
НоваяКнопка.ИмяКоманды = «КомандаДляКнопок»;
по причине:
Недопустимое значение
не могу поняь почему
Содержание:
1. Ошибка при установке значения атрибута контекста
2. Ошибка при получении значения атрибута контекста
Одной из наиболее частых ошибок исполнения кода 1С являются ошибки, связанные с установкой реквизита либо получением реквизита через точку, либо ошибка при вызове функции или процедуры через точку. Все данные объекты являются атрибутами информационных объектов-владельцев, к которым они принадлежат. Рассмотрим примеры таких ошибок и причины их возникновения.
1. Ошибка при установке значения атрибута контекста
Ошибка при установке значения атрибута контекста говорит нам о невозможности присвоить выбранное значение определенному атрибуту информационного объекта. Вызвано это либо несовпадением типа атрибута и присваиваемого ей значения, отсутствием возможности присвоить значение выбранному атрибуту, так как его можно только читать, но не записывать в него, отсутствием прав у текущего пользователя на запись значений в данный атрибут. Например, в реквизит «ДатаДокумента» с типом «Дата» пытаемся записать строку, в реквизит с типом данных ссылки на документ пытаемся записать не ссылку, а объект, полученный по ссылке, что невозможно из-за несоответствия типов, что приводит к ошибке установки значения атрибута.
Другой пример – проходя циклом выборку запроса, пытаемся в колонку выборки записать значение, что невозможно, так как значения выборки запроса можно только считывать, а для того, чтобы можно было полученные из запроса данные изменять в коде, нужно пользоваться не выборкой, а выгружать результат запроса в таблицу значений, в таком случае в цикле по ней можно будет менять значения в колонках, но только на значения, соответствующие типу колонки. Либо у пользователя, под которым выполняется код, нет прав на изменение даты документа, при попытке записать в данный реквизит новую дату, будет выведено сообщение об ошибке установке значения, но в причине будет указано отсутствие прав у пользователя.
2. Ошибка при получении значения атрибута контекста
Ошибка при получении значения атрибута контекста указывает на невозможность прочитать значение атрибута объекта в силу его отсутствия, либо отсутствия прав на его чтение. Например, обращение к несуществующему реквизиту объекта, несуществующему полю выборки из запроса, несуществующему свойству элемента формы и т.п. Так же как пример можно рассмотреть получение текущего пользователя из параметров сеанса — если данный параметр сеанса не установлен, то тоже будет выведена ошибка получения значения атрибута контекста, но в причине будет указана попытка получения неинициализированного значения параметра сеанса.
При возникновении данных ошибок значения атрибута в 1Св первую очередь следует проверить существование атрибута, к которому обращаются, затем проверить совпадение типов значений атрибута и присваиваемого ему значения, затем уже проверить права на установку либо чтение значения. Проверить, является ли дело в правах либо дать права на действия с атрибутом, можно, установив привилегированный режим для совершения действия с данным атрибутом, прописав перед строчкой с ошибкой УстановитьПривилегированныйРежим(Истина), после строчки — УстановитьПривилегированныйРежим(Ложь).
Специалист компании «Кодерлайн»
Александр Суворов
Изучаю программирование. Что прочесть, чтобы сделать управляемую форму с компонентами, создаваемыми программно?
Что я сделал:
1. Создал чистую конфигурацию
2. Создал обработку
3. Создал форму
4. Внес в модуль формы код
1C | ||
|
5. Сохранил конфигурацию, обновил конфигурацию базы данных
6. Начал отладку.
7. Открыл созданную обработку — там нет ничего, пустота, только крестик и кнопка еще.
Что я делаю не так?
Я надеюсь, так можно.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
Код 1C v 8.3
// Реквизиты
ДобавляемыеРеквизиты = Новый Массив;
ИмяТаблицы = "КомандыДополнительныхОбработок";
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяТаблицы, Новый ОписаниеТипов("ТаблицаЗначений")));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Ссылка", Новый ОписаниеТипов("СправочникСсылка.ДополнительныеОтчетыИОбработки"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ВариантЗапуска", Новый ОписаниеТипов("ПеречислениеСсылка.СпособыВызоваДополнительныхОбработок"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ИмяЭлемента", Новый ОписаниеТипов("Строка"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Представление", Новый ОписаниеТипов("Строка"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Идентификатор", Новый ОписаниеТипов("Строка"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ЭтоОтчет", Новый ОписаниеТипов("Булево"), ИмяТаблицы));
Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
//реквизит
ИмяЭлемента = "Добавлен" + ИндексЭлемента;
Реквизит = Новый РеквизитФормы(ИмяЭлемента, ОписаниеТипов);
ДобавляемыеРеквизиты.Добавить(Реквизит);
ИзменитьРеквизиты(ДобавляемыеРеквизиты);
//команда печать
ИмяКомандыПечать = "ДобавленПечать" + ИндексЭлемента;
КомандаПечать = Команды.Добавить(ИмяКомандыПечать);
КомандаПечать.Действие = "ПечатьДокумента";
КомандаПечать.Подсказка = НСтр("ru = 'Печать документа...'");
//элемент формы
//Родитель = Элементы.ГруппаСформированныеДокументы;
Элемент = Элементы.Добавить(ИмяЭлемента, Тип("ПолеФормы"), ЭлементГруппа);
Элемент.Вид = ВидПоляФормы.ПолеНадписи;
Элемент.ПутьКДанным = ИмяЭлемента;
Элемент.Гиперссылка = Истина;
Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
ЭтаФорма[ИмяЭлемента] = Документ;
//кнопка печать
ИмяЭлементаПечать = "ДобавленПечать" + ИндексЭлемента;
ЭлементПечать = Элементы.Добавить(ИмяЭлементаПечать, Тип("КнопкаФормы"), ЭлементГруппа);
ЭлементПечать.Картинка = БиблиотекаКартинок.Печать;
ЭлементПечать.Отображение = ОтображениеКнопки.Картинка;
ЭлементПечать.ИмяКоманды = ИмяКомандыПечать;
Ошибка при установке значения атрибута контекста (Формат)
Автор AnnaZ., 06 авг 2015, 20:49
0 Пользователей и 1 гость просматривают эту тему.
Здравствуйте.Возникает проблема с процедурой.Вроде бы синтаксис верен,но выдает ошибку:
Ошибка
{Документ.ЗаявкаНаПлатеж.Форма.ФормаДокумента.Форма(278)}: Ошибка при установке значения атрибута контекста (Формат)
ЭлементыФормы.СуммаПоДокументу.Формат = ПрочитатьПараметрыПрописи(Валюта.ПараметрыПрописиНаРусском);//строка на которую ругается
по причине:
Недопустимое значение параметра (параметр номер ‘1’)
Код:
Процедура ПриОткрытии()
мКолонкиОКДП = ЭлементыФормы.РашифровкаПоОКДП.Колонки;
Если ЭтоНовый() Тогда
ДатаДок = ТекущаяДата();
Подразделение = ПараметрыСеанса.Подразделение.Ссылка;
НомерЧисловой = ПолучитьНовыйНомерЗаявки(ПараметрыСеанса.Подразделение,ДатаДок);
Номер = ПараметрыСеанса.Подразделение.ПрефиксЗаявокНаПлатеж + Строка(НомерЧисловой);
Исполнитель = Справочники.Исполнители.НайтиПоРеквизиту(«ИмяПользователяИБ»,Строка(ПользователиИнформационнойБазы.ТекущийПользователь()));
Если Подписи.Количество() = 0 Тогда // Проверка от копирования
Для каждого Согласующий Из Подразделение.Согласование Цикл
Подпись = Подписи.Добавить();
Подпись.Должность = Согласующий.Должность;
Подпись.ФамилияИО = Согласующий.ФамилияИО;
КонецЦикла;
КонецЕсли;
// Если происходит копирование
Если Валюта = Справочники.Валюты.ПустаяСсылка() Тогда
Валюта = Справочники.Валюты.РоссийскийРубль.Ссылка;
КонецЕсли;
ЭлементыФормы.РашифровкаПоОКДП.Колонки.Сумма.Формат = ПрочитатьПараметрыПрописи(Валюта.ПараметрыПрописиНаРусском);
ЭлементыФормы.СуммаПоДокументу.Формат = ПрочитатьПараметрыПрописи(Валюта.ПараметрыПрописиНаРусском);//строка на которую ругается
Иначе // Курс на изменение документа
ЭлементыФормы.СуммаПоДокументу.Формат = ПрочитатьПараметрыПрописи(Валюта.ПараметрыПрописиНаРусском);
ЭлементыФормы.РашифровкаПоОКДП.Колонки.Сумма.Формат = ПрочитатьПараметрыПрописи(Валюта.ПараметрыПрописиНаРусском);
КонецЕсли;
ДоступностьИзмененияРасчетногоСчета();
КонецПроцедуры
Ну, а где код процедуры ПрочитатьПараметрыПрописи?
Цитата: vitasw от 07 авг 2015, 09:52
Ну, а где код процедуры ПрочитатьПараметрыПрописи?
Функция ПрочитатьПараметрыПрописи(ПараметрыПрописиНаРусском)
СтрокаПараметров = СтрЗаменить(ПараметрыПрописиНаРусском, «,», Символы.ПС);
Возврат «ЧДЦ=» + СокрЛП(СтрПолучитьСтроку(СтрокаПараметров, 9));
КонецФункции
А что отладчик говорит?
Как правило, параметры прописи, которые достаются из спр. валют относятся к строковому представлению. Ну и странно что такой сложный код только для того чтобы задать число символов дробной части.
Цитата: vitasw от 07 авг 2015, 11:16
А что отладчик говорит?
Как правило, параметры прописи, которые достаются из спр. валют относятся к строковому представлению. Ну и странно что такой сложный код только для того чтобы задать число символов дробной части.
Я в 1с новичок.А по работе требуют перенести базу из версии 8.1 на 8.2
В предыдущей версии форма прекрасно работает с таким кодом.Если вы поможете упростить код,буду очень признательна.
Если честно, что-то конкретное даже не возьмусь советовать. Я не понимаю что вообще творится и зачем. Приведенный код — это что-то в высшей степени ОЧЕНЬ для меня непонятное. Начиная с необходимости задания формата элементов формы(??? и не очень понятно это элемент формы или просто надпись) и заканчивая вопросами оптимальности выполнения кода.
Разве что могу посоветовать почитать в СП про Формат.
Теги:
- Форум 1С
- ►
Форум 1С — ПРЕДПРИЯТИЕ 8.0 8.1 8.2 8.3 8.4 - ►
Конфигурирование, программирование в 1С Предприятие 8 - ►
Ошибка при установке значения атрибута контекста (Формат)
Похожие темы (5)
Поиск
Ошибка «Недопустимое значение» при установке имени команды
Ошибка возникает в момент установки команды в кнопке — при отсутствии ее в командах формы
Подробная ошибка
Проверки:
- Проверить имя команды на предмет наличия опечатки
- При отсутствии, добавить саму команду и ее обработчик, тогда ошибка выходить не будет
Команды/Команды формы/Добавить, задать «Имя» и обработчик в поле «Действие»
Потребитель и вправду может все еще воображать, что его действия отвечают его собственным потребностям об удовлетворении своих запросов. Однако суждение это, поверхностное и весьма приблизительное, является следствием иллюзий, сложившихся в процессе управления его желаниями.
Изучаю программирование. Что прочесть, чтобы сделать управляемую форму с компонентами, создаваемыми программно?
Что я сделал:
1. Создал чистую конфигурацию
2. Создал обработку
3. Создал форму
4. Внес в модуль формы код
1C | ||
|
5. Сохранил конфигурацию, обновил конфигурацию базы данных
6. Начал отладку.
7. Открыл созданную обработку — там нет ничего, пустота, только крестик и кнопка еще.
Что я делаю не так?
Я надеюсь, так можно.
Пишет {Форма.Форма.Форма}: Ошибка при установке значения атрибута контекста (ИмяКоманды) по причине: Недопустимое значение не могу поняь почему
Команда <> обработчик команды.
Ты тотал коммандер на 1С пишешь что ли?
Я руки пристроил к тому месту к которому их пристраивать не стоит) И не могу оторваться. А так да.
Это что кнопки с серверными дисками получаются?
НоваяКнопка.ИмяКоманды = Новый Действие(«КомандаДляКнопок»);
Да, создал команду, заработало
Тэги: 1С 8
Комментарии доступны только авторизированным пользователям