Содержание:
1. Ошибка при установке значения атрибута контекста
2. Ошибка при получении значения атрибута контекста
Одной из наиболее частых ошибок исполнения кода 1С являются ошибки, связанные с установкой реквизита либо получением реквизита через точку, либо ошибка при вызове функции или процедуры через точку. Все данные объекты являются атрибутами информационных объектов-владельцев, к которым они принадлежат. Рассмотрим примеры таких ошибок и причины их возникновения.
1. Ошибка при установке значения атрибута контекста
Ошибка при установке значения атрибута контекста говорит нам о невозможности присвоить выбранное значение определенному атрибуту информационного объекта. Вызвано это либо несовпадением типа атрибута и присваиваемого ей значения, отсутствием возможности присвоить значение выбранному атрибуту, так как его можно только читать, но не записывать в него, отсутствием прав у текущего пользователя на запись значений в данный атрибут. Например, в реквизит «ДатаДокумента» с типом «Дата» пытаемся записать строку, в реквизит с типом данных ссылки на документ пытаемся записать не ссылку, а объект, полученный по ссылке, что невозможно из-за несоответствия типов, что приводит к ошибке установки значения атрибута.
Другой пример – проходя циклом выборку запроса, пытаемся в колонку выборки записать значение, что невозможно, так как значения выборки запроса можно только считывать, а для того, чтобы можно было полученные из запроса данные изменять в коде, нужно пользоваться не выборкой, а выгружать результат запроса в таблицу значений, в таком случае в цикле по ней можно будет менять значения в колонках, но только на значения, соответствующие типу колонки. Либо у пользователя, под которым выполняется код, нет прав на изменение даты документа, при попытке записать в данный реквизит новую дату, будет выведено сообщение об ошибке установке значения, но в причине будет указано отсутствие прав у пользователя.
2. Ошибка при получении значения атрибута контекста
Ошибка при получении значения атрибута контекста указывает на невозможность прочитать значение атрибута объекта в силу его отсутствия, либо отсутствия прав на его чтение. Например, обращение к несуществующему реквизиту объекта, несуществующему полю выборки из запроса, несуществующему свойству элемента формы и т.п. Так же как пример можно рассмотреть получение текущего пользователя из параметров сеанса — если данный параметр сеанса не установлен, то тоже будет выведена ошибка получения значения атрибута контекста, но в причине будет указана попытка получения неинициализированного значения параметра сеанса.
При возникновении данных ошибок значения атрибута в 1Св первую очередь следует проверить существование атрибута, к которому обращаются, затем проверить совпадение типов значений атрибута и присваиваемого ему значения, затем уже проверить права на установку либо чтение значения. Проверить, является ли дело в правах либо дать права на действия с атрибутом, можно, установив привилегированный режим для совершения действия с данным атрибутом, прописав перед строчкой с ошибкой УстановитьПривилегированныйРежим(Истина), после строчки — УстановитьПривилегированныйРежим(Ложь).
Специалист компании «Кодерлайн»
Александр Суворов
Маленький Вопросик
19.07.10
✎
07:19
Народ есть вопрос по конфигурированию:
На форме есть элемент ТабличноеПоле — по умолчанию — принимает данные такие : СправочникСписок.Банки.
Возможно ли при нажатие кнопки — сделать, чтобы тип занчения был другой — например СправочникСписок.Контрагенты???
Подозреваю, что это делать как-то так, но не получается пока что???
ЭлементыФормы.ТабличноеПоле1.ТипЗначения =…..
Подскажите как сделать?
chelentano
19.07.10
✎
07:21
(0) зачем?
Маленький Вопросик
19.07.10
✎
07:24
чтобы в одном поле получать разные таблицы.
Мимохожий Однако
19.07.10
✎
07:33
Составной тип получается указать?
DmitrO
19.07.10
✎
08:21
да вообще не вопрос, есть даже два способа.
1.Через свойство ТП Данные
1.1. делаем два реквизита формы:
Банки тип: СправочникСписок.Банки
Контрагенты тип: СправочникСписок.Контрагенты
1.2 когда надо включить банки такой код:
ЭлементыФормы.ТабличноеПоле1.Данные = «Банки»;
ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
когда надо включить контрагентов такой код:
ЭлементыФормы.ТабличноеПоле1.Данные = «Контрагенты»;
ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
все.
2.Через свойство ТипЗначения. В этом случае у ТП реквизит Данные должен быть пустой (что можно сделать как программно так и в конфигураторе):
2.1 когда надо включить банки такой код:
ЭлементыФормы.ТабличноеПоле1.ТипЗначения = Новый ОписаниеТипов(«СправочникСписок.Банки»);
ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
когда надо включить контрагентов такой код:
ЭлементыФормы.ТабличноеПоле1.ТипЗначения = Новый ОписаниеТипов(«СправочникСписок.Контрагенты»);
ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
все.
Метод СоздатьКолонки вызывается для наглядности, в реальной задаче может быть заменен кодом создания колонок. Возможно сочетание двух способов.
Маленький Вопросик
19.07.10
✎
09:34
(4) во спасибо! оно!!!
Aprobator
19.07.10
✎
09:35
(0) баян — уже несколько раз на мисте было.
Маленький Вопросик
19.07.10
✎
16:11
{Обработка.РабочийСтол.Форма.ФормаРабочегоСтола(11)}: Ошибка при установке значения атрибута контекста (ТипЗначения): Нельзя изменять тип связанного с данными элемента формы
ЭлементыФормы.ТабличноеПоле1.ТипЗначения = Новый ОписаниеТипов(«СправочникСписок.СерииНоменклатуры»);
по причине:
Нельзя изменять тип связанного с данными элемента формы
Aprobator
19.07.10
✎
16:14
да — там в СП прописано, если связано с данными, то ТипЗначения — тока чтение. Используй первый способ.
Маленький Вопросик
19.07.10
✎
16:20
ЭлементыФормы.ТабличноеПоле1.ТипЗначения = Новый ОписаниеТипов(«СправочникСписок.СерииНоменклатуры»);
ЭлементыФормы.ТабличноеПоле1.ОбновитьСтроки();
я вот так делаю…
Aprobator
19.07.10
✎
16:23
(9) это второй способ, а не первый.
Маленький Вопросик
19.07.10
✎
16:31
(10) первый тоже выдал ошибку
{Обработка.РабочийСтол.Форма.ФормаРабочегоСтола(13)}: Ошибка при установке значения атрибута контекста (Данные): Неправильный путь к данным
ЭлементыФормы.ТабличноеПоле1.Данные = «СерииНоменклатуры»;
по причине:
Неправильный путь к данным
Aprobator
19.07.10
✎
17:16
(11) ну дык реквизита формы с таким именем нету.
Маленький Вопросик
19.07.10
✎
19:34
(12) в том то и дело, что есть Дата = СправочникСписок.СерииНоменклатуры
Dmitrii
19.07.10
✎
19:51
(7) Читай внимательно (4): «В этом случае у ТП реквизит Данные должен быть ПУСТОЙ»
А он у тебя явно заполнен.
Dmitrii
19.07.10
✎
19:52
(11) в строке
ЭлементыФормы.ТабличноеПоле1.Данные = «СерииНоменклатуры»;
ковычки не нужны. СерииНоменклатуры — это имя реквизита формы, тип которого должен быть СправочникСписок.СерииНоменклатуры.
Маленький Вопросик
19.07.10
✎
20:15
{Обработка.РабочийСтол.Форма.ФормаРабочегоСтола(13)}: Ошибка при установке значения атрибута контекста (Данные): Неправильный путь к данным
ЭлементыФормы.ТабличноеПоле1.Данные = СерииНоменклатуры;
по причине:
Неправильный путь к данным
DmitrO
19.07.10
✎
20:26
Свойство ТП Данные имеет тип Строка. Ковычки нужны. В (15) написан правильный код. Если он не работает, значит нет реквизита формы с таким именем.
Маленький Вопросик
19.07.10
✎
20:33
блин, я уже несколько часов бьюсь — кто-нить может дать вменяемый ответ? или ссылочку на пример???
Dmitrii
19.07.10
✎
20:40
(17) Извиняюсь. Был не прав
(18) >> кто-нить может дать вменяемый ответ?
Уже целых два дали в (4)….
DmitrO
19.07.10
✎
20:41
А у меня работает. Какой тебе надо еще пример? Ты знаешь что такое реквизит формы?
DmitrO
19.07.10
✎
20:43
(18) прокомментируй подробнее что ты имел в виду в (13). Я вот не могу понять что ты хотел сказать.
Маленький Вопросик
19.07.10
✎
21:00
Конечно! Закладка «Реквизиты» — по 13 — создаю Реквизит Дата с типом «СправочникСписок.СерииНоменклатуры»
DmitrO
19.07.10
✎
22:31
вот ведь а..
Ну тогда и записывай имя реквизита в данные ТП:
ЭлементыФормы.ТабличноеПоле1.Данные = «Дата»;
ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
// Реквизиты
ДобавляемыеРеквизиты = Новый Массив;
ИмяТаблицы = "КомандыДополнительныхОбработок";
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяТаблицы, Новый ОписаниеТипов("ТаблицаЗначений")));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Ссылка", Новый ОписаниеТипов("СправочникСсылка.ДополнительныеОтчетыИОбработки"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ВариантЗапуска", Новый ОписаниеТипов("ПеречислениеСсылка.СпособыВызоваДополнительныхОбработок"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ИмяЭлемента", Новый ОписаниеТипов("Строка"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Представление", Новый ОписаниеТипов("Строка"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Идентификатор", Новый ОписаниеТипов("Строка"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ЭтоОтчет", Новый ОписаниеТипов("Булево"), ИмяТаблицы));
Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
//реквизит
ИмяЭлемента = "Добавлен" + ИндексЭлемента;
Реквизит = Новый РеквизитФормы(ИмяЭлемента, ОписаниеТипов);
ДобавляемыеРеквизиты.Добавить(Реквизит);
ИзменитьРеквизиты(ДобавляемыеРеквизиты);
//команда печать
ИмяКомандыПечать = "ДобавленПечать" + ИндексЭлемента;
КомандаПечать = Команды.Добавить(ИмяКомандыПечать);
КомандаПечать.Действие = "ПечатьДокумента";
КомандаПечать.Подсказка = НСтр("ru = 'Печать документа...'");
//элемент формы
//Родитель = Элементы.ГруппаСформированныеДокументы;
Элемент = Элементы.Добавить(ИмяЭлемента, Тип("ПолеФормы"), ЭлементГруппа);
Элемент.Вид = ВидПоляФормы.ПолеНадписи;
Элемент.ПутьКДанным = ИмяЭлемента;
Элемент.Гиперссылка = Истина;
Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
ЭтаФорма[ИмяЭлемента] = Документ;
//кнопка печать
ИмяЭлементаПечать = "ДобавленПечать" + ИндексЭлемента;
ЭлементПечать = Элементы.Добавить(ИмяЭлементаПечать, Тип("КнопкаФормы"), ЭлементГруппа);
ЭлементПечать.Картинка = БиблиотекаКартинок.Печать;
ЭлементПечать.Отображение = ОтображениеКнопки.Картинка;
ЭлементПечать.ИмяКоманды = ИмяКомандыПечать;
Содержание:
1. Ошибка при установке значения атрибута контекста
2. Ошибка при получении значения атрибута контекста
Одной из наиболее частых ошибок исполнения кода 1С являются ошибки, связанные с установкой реквизита либо получением реквизита через точку, либо ошибка при вызове функции или процедуры через точку. Все данные объекты являются атрибутами информационных объектов-владельцев, к которым они принадлежат. Рассмотрим примеры таких ошибок и причины их возникновения.
1. Ошибка при установке значения атрибута контекста
Ошибка при установке значения атрибута контекста говорит нам о невозможности присвоить выбранное значение определенному атрибуту информационного объекта. Вызвано это либо несовпадением типа атрибута и присваиваемого ей значения, отсутствием возможности присвоить значение выбранному атрибуту, так как его можно только читать, но не записывать в него, отсутствием прав у текущего пользователя на запись значений в данный атрибут. Например, в реквизит «ДатаДокумента» с типом «Дата» пытаемся записать строку, в реквизит с типом данных ссылки на документ пытаемся записать не ссылку, а объект, полученный по ссылке, что невозможно из-за несоответствия типов, что приводит к ошибке установки значения атрибута.
Другой пример – проходя циклом выборку запроса, пытаемся в колонку выборки записать значение, что невозможно, так как значения выборки запроса можно только считывать, а для того, чтобы можно было полученные из запроса данные изменять в коде, нужно пользоваться не выборкой, а выгружать результат запроса в таблицу значений, в таком случае в цикле по ней можно будет менять значения в колонках, но только на значения, соответствующие типу колонки. Либо у пользователя, под которым выполняется код, нет прав на изменение даты документа, при попытке записать в данный реквизит новую дату, будет выведено сообщение об ошибке установке значения, но в причине будет указано отсутствие прав у пользователя.
2. Ошибка при получении значения атрибута контекста
Ошибка при получении значения атрибута контекста указывает на невозможность прочитать значение атрибута объекта в силу его отсутствия, либо отсутствия прав на его чтение. Например, обращение к несуществующему реквизиту объекта, несуществующему полю выборки из запроса, несуществующему свойству элемента формы и т.п. Так же как пример можно рассмотреть получение текущего пользователя из параметров сеанса — если данный параметр сеанса не установлен, то тоже будет выведена ошибка получения значения атрибута контекста, но в причине будет указана попытка получения неинициализированного значения параметра сеанса.
При возникновении данных ошибок значения атрибута в 1Св первую очередь следует проверить существование атрибута, к которому обращаются, затем проверить совпадение типов значений атрибута и присваиваемого ему значения, затем уже проверить права на установку либо чтение значения. Проверить, является ли дело в правах либо дать права на действия с атрибутом, можно, установив привилегированный режим для совершения действия с данным атрибутом, прописав перед строчкой с ошибкой УстановитьПривилегированныйРежим(Истина), после строчки — УстановитьПривилегированныйРежим(Ложь).
Специалист компании «Кодерлайн»
Александр Суворов
ТабличноеПоле — данные |
Я |
МаленькийВопросик
19.07.10 — 07:19
Народ есть вопрос по конфигурированию:
На форме есть элемент ТабличноеПоле — по умолчанию — принимает данные такие : СправочникСписок.Банки.
Возможно ли при нажатие кнопки — сделать, чтобы тип занчения был другой — например СправочникСписок.Контрагенты???
Подозреваю, что это делать как-то так, но не получается пока что???
ЭлементыФормы.ТабличноеПоле1.ТипЗначения =…..
Подскажите как сделать?
chelentano
1 — 19.07.10 — 07:21
(0) зачем?
МаленькийВопросик
2 — 19.07.10 — 07:24
чтобы в одном поле получать разные таблицы.
МимохожийОднако
3 — 19.07.10 — 07:33
Составной тип получается указать?
DmitrO
4 — 19.07.10 — 08:21
да вообще не вопрос, есть даже два способа.
1.Через свойство ТП Данные
1.1. делаем два реквизита формы:
Банки тип: СправочникСписок.Банки
Контрагенты тип: СправочникСписок.Контрагенты
1.2 когда надо включить банки такой код:
ЭлементыФормы.ТабличноеПоле1.Данные = «Банки»;
ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
когда надо включить контрагентов такой код:
ЭлементыФормы.ТабличноеПоле1.Данные = «Контрагенты»;
ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
все.
2.Через свойство ТипЗначения. В этом случае у ТП реквизит Данные должен быть пустой (что можно сделать как программно так и в конфигураторе):
2.1 когда надо включить банки такой код:
ЭлементыФормы.ТабличноеПоле1.ТипЗначения = Новый ОписаниеТипов(«СправочникСписок.Банки»);
ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
когда надо включить контрагентов такой код:
ЭлементыФормы.ТабличноеПоле1.ТипЗначения = Новый ОписаниеТипов(«СправочникСписок.Контрагенты»);
ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
все.
Метод СоздатьКолонки вызывается для наглядности, в реальной задаче может быть заменен кодом создания колонок. Возможно сочетание двух способов.
МаленькийВопросик
5 — 19.07.10 — 09:34
(4) во спасибо! оно!!!
Aprobator
6 — 19.07.10 — 09:35
(0) баян — уже несколько раз на мисте было.
МаленькийВопросик
7 — 19.07.10 — 16:11
{Обработка.РабочийСтол.Форма.ФормаРабочегоСтола(11)}: Ошибка при установке значения атрибута контекста (ТипЗначения): Нельзя изменять тип связанного с данными элемента формы
ЭлементыФормы.ТабличноеПоле1.ТипЗначения = Новый ОписаниеТипов(«СправочникСписок.СерииНоменклатуры»);
по причине:
Нельзя изменять тип связанного с данными элемента формы
Aprobator
8 — 19.07.10 — 16:14
да — там в СП прописано, если связано с данными, то ТипЗначения — тока чтение. Используй первый способ.
МаленькийВопросик
9 — 19.07.10 — 16:20
ЭлементыФормы.ТабличноеПоле1.ТипЗначения = Новый ОписаниеТипов(«СправочникСписок.СерииНоменклатуры»);
ЭлементыФормы.ТабличноеПоле1.ОбновитьСтроки();
я вот так делаю…
Aprobator
10 — 19.07.10 — 16:23
(9) это второй способ, а не первый.
МаленькийВопросик
11 — 19.07.10 — 16:31
(10) первый тоже выдал ошибку
{Обработка.РабочийСтол.Форма.ФормаРабочегоСтола(13)}: Ошибка при установке значения атрибута контекста (Данные): Неправильный путь к данным
ЭлементыФормы.ТабличноеПоле1.Данные = «СерииНоменклатуры»;
по причине:
Неправильный путь к данным
Aprobator
12 — 19.07.10 — 17:16
(11) ну дык реквизита формы с таким именем нету.
МаленькийВопросик
13 — 19.07.10 — 19:34
(12) в том то и дело, что есть Дата = СправочникСписок.СерииНоменклатуры
Dmitrii
14 — 19.07.10 — 19:51
(7) Читай внимательно (4): «В этом случае у ТП реквизит Данные должен быть ПУСТОЙ»
А он у тебя явно заполнен.
Dmitrii
15 — 19.07.10 — 19:52
(11) в строке
ЭлементыФормы.ТабличноеПоле1.Данные = «СерииНоменклатуры»;
ковычки не нужны. СерииНоменклатуры — это имя реквизита формы, тип которого должен быть СправочникСписок.СерииНоменклатуры.
МаленькийВопросик
16 — 19.07.10 — 20:15
{Обработка.РабочийСтол.Форма.ФормаРабочегоСтола(13)}: Ошибка при установке значения атрибута контекста (Данные): Неправильный путь к данным
ЭлементыФормы.ТабличноеПоле1.Данные = СерииНоменклатуры;
по причине:
Неправильный путь к данным
DmitrO
17 — 19.07.10 — 20:26
Свойство ТП Данные имеет тип Строка. Ковычки нужны. В (15) написан правильный код. Если он не работает, значит нет реквизита формы с таким именем.
МаленькийВопросик
18 — 19.07.10 — 20:33
блин, я уже несколько часов бьюсь — кто-нить может дать вменяемый ответ? или ссылочку на пример???
Dmitrii
19 — 19.07.10 — 20:40
(17) Извиняюсь. Был не прав
(18) >> кто-нить может дать вменяемый ответ?
Уже целых два дали в (4)….
DmitrO
20 — 19.07.10 — 20:41
А у меня работает. Какой тебе надо еще пример? Ты знаешь что такое реквизит формы?
DmitrO
21 — 19.07.10 — 20:43
(18) прокомментируй подробнее что ты имел в виду в (13). Я вот не могу понять что ты хотел сказать.
МаленькийВопросик
22 — 19.07.10 — 21:00
Конечно! Закладка «Реквизиты» — по 13 — создаю Реквизит Дата с типом «СправочникСписок.СерииНоменклатуры»
DmitrO
23 — 19.07.10 — 22:31
вот ведь а..
Ну тогда и записывай имя реквизита в данные ТП:
ЭлементыФормы.ТабличноеПоле1.Данные = «Дата»;
ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
Код 1C v 8.3
// Реквизиты
ДобавляемыеРеквизиты = Новый Массив;
ИмяТаблицы = "КомандыДополнительныхОбработок";
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяТаблицы, Новый ОписаниеТипов("ТаблицаЗначений")));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Ссылка", Новый ОписаниеТипов("СправочникСсылка.ДополнительныеОтчетыИОбработки"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ВариантЗапуска", Новый ОписаниеТипов("ПеречислениеСсылка.СпособыВызоваДополнительныхОбработок"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ИмяЭлемента", Новый ОписаниеТипов("Строка"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Представление", Новый ОписаниеТипов("Строка"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Идентификатор", Новый ОписаниеТипов("Строка"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ЭтоОтчет", Новый ОписаниеТипов("Булево"), ИмяТаблицы));
Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
//реквизит
ИмяЭлемента = "Добавлен" + ИндексЭлемента;
Реквизит = Новый РеквизитФормы(ИмяЭлемента, ОписаниеТипов);
ДобавляемыеРеквизиты.Добавить(Реквизит);
ИзменитьРеквизиты(ДобавляемыеРеквизиты);
//команда печать
ИмяКомандыПечать = "ДобавленПечать" + ИндексЭлемента;
КомандаПечать = Команды.Добавить(ИмяКомандыПечать);
КомандаПечать.Действие = "ПечатьДокумента";
КомандаПечать.Подсказка = НСтр("ru = 'Печать документа...'");
//элемент формы
//Родитель = Элементы.ГруппаСформированныеДокументы;
Элемент = Элементы.Добавить(ИмяЭлемента, Тип("ПолеФормы"), ЭлементГруппа);
Элемент.Вид = ВидПоляФормы.ПолеНадписи;
Элемент.ПутьКДанным = ИмяЭлемента;
Элемент.Гиперссылка = Истина;
Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
ЭтаФорма[ИмяЭлемента] = Документ;
//кнопка печать
ИмяЭлементаПечать = "ДобавленПечать" + ИндексЭлемента;
ЭлементПечать = Элементы.Добавить(ИмяЭлементаПечать, Тип("КнопкаФормы"), ЭлементГруппа);
ЭлементПечать.Картинка = БиблиотекаКартинок.Печать;
ЭлементПечать.Отображение = ОтображениеКнопки.Картинка;
ЭлементПечать.ИмяКоманды = ИмяКомандыПечать;
Gectar 0 / 0 / 0 Регистрация: 10.08.2016 Сообщений: 18 |
||||
1 |
||||
1C 8.x (тонкий) Ошибка при указании ПутьКДанным в программно созданной таблице10.08.2016, 13:34. Показов 58100. Ответов 7 Метки нет (Все метки)
Переделываю форму документа КорректировкаЗаписейРегистров под управляемое приложение. Если вручную из реквизитов на форму документа перетащить нужное движение по регистру никаких проблем не возникает: создается таблица, добавляются колонки. Для таблицы регистра бухгалтерии Хозрасчетный свойство ПутьКДанным заполняется значением «Объект.Движения.Хозрасчетный». Но если я программно создаю таблицу и пытаюсь присвоить этому свойству это же значение,
то выскакивает «ошибка при установке значения атрибута контекста (ПутьКДанным)» по причине Недопустимое значение. Из-за чего тут ошибка? Пробовал привязывать к созданной таблице табличную часть документа ТаблицаРегистровНакопления — свойству ПутьКДанным присвоил значение «Объект.ТаблицаРегистровНакопления», потом программно же создал колонки таблице, указал ПутьКДанным для них и все отработало без нареканий. 0 |
Dethmontt Модератор 3724 / 2918 / 575 Регистрация: 10.03.2011 Сообщений: 11,491 Записей в блоге: 1 |
||||
11.08.2016, 01:57 |
2 |
|||
По моему Движения это свойство типа ДокументОбъект и оно не конвертируется на клиента Добавлено через 13 минут Добавлено через 1 минуту Добавлено через 58 секунд
0 |
0 / 0 / 0 Регистрация: 10.08.2016 Сообщений: 18 |
|
11.08.2016, 10:56 [ТС] |
3 |
Движения это свойство типа ДокументОбъект и оно не конвертируется на клиента Это так, но я же не с этим свойством связываю таблицу. Тип свойства Движения — КоллекцияДвижений. Содержит эта коллекция наборы записей регистров. С одним из таких наборов я и пытаюсь связать таблицу, ведь наборы вполне себе конвертируются на клиенте. Добавлено через 7 минут
Нужно создавать свой НаборЗаписей (реквизит формы) устанавливать отбор и к нему привязывать ТаблицуФормы Как вариант я тоже думал так сделать, но хотелось бы как-то напрямую к данным, чтобы потом не заморачиваться с обработкой добавления/удаления/изменения записей. В обычном приложении именно напрямую к данным и идет привязка, вот и в управляемом надеялся сделать также. Добавлено через 19 минут
И программно получить доступ на форме к свойству движения не получиться ибо они ни где не хранятся. Вот тут я может и не до конца понял вашу мысль, но движения по конкретной номенклатуре хранятся в документе, форму которого я и пытаюсь открыть. 0 |
Модератор 3724 / 2918 / 575 Регистрация: 10.03.2011 Сообщений: 11,491 Записей в блоге: 1 |
|
11.08.2016, 11:01 |
4 |
Gectar, форма и документ это разные сущности! Добавлено через 2 минуты 1. На сервере происходит чтение из БД документа (ДокументОбъект) Добавлено через 49 секунд
Как вариант я тоже думал так сделать, но хотелось бы как-то напрямую к данным, чтобы потом не заморачиваться с обработкой добавления/удаления/изменения записей. Придется именно так и сохранение тоже придется делать самому 1 |
0 / 0 / 0 Регистрация: 10.08.2016 Сообщений: 18 |
|
11.08.2016, 11:11 [ТС] |
5 |
Я может сейчас и ступлю с этим вопросом, но почему же тогда все работает при ручном перетаскивании того же самого набора записей регистра из движений на форму — таблица создается, колонки добавляются, ПутьКДанным прописывается, работет все чин чинарем и не нужно никаких промежуточных реквизитов? 0 |
Модератор 3724 / 2918 / 575 Регистрация: 10.03.2011 Сообщений: 11,491 Записей в блоге: 1 |
|
11.08.2016, 11:25 |
6 |
работет все чин чинарем и не нужно никаких промежуточных реквизитов? потому что платформа все делает за НАС многе оскрывая от наших глазок =))) 0 |
0 / 0 / 0 Регистрация: 10.08.2016 Сообщений: 18 |
|
25.08.2016, 17:38 [ТС] |
7 |
Оказалось такие сложности совершенно ни к чему, как в общем-то с самого начала и думал. Нужно было просто в настройках реквизитов поставить галочку «Использовать всегда» Миниатюры
0 |
0 / 0 / 0 Регистрация: 10.08.2016 Сообщений: 18 |
|
25.08.2016, 17:40 [ТС] |
8 |
Тогда приведенный в самом начале код работает без проблем. 0 |
ошибка при входе для нового пользователя
Автор annaStar, 31 авг 2017, 04:29
0 Пользователей и 1 гость просматривают эту тему.
при запуске нового пользователя с базовыми правами выводится ошибка: {ОбщийМодуль.ВДГБ_ОбщийМодульСЛКСервер.Модуль(38)}: Ошибка при установке значения атрибута контекста (ВДГБ_ЗапущенМенеджерЛицензий)
ПараметрыСеанса.ВДГБ_ЗапущенМенеджерЛицензий = МенеджерЛицензийЗапущен;
по причине:
Нарушение прав доступа!
как поступить?
1С:Предприятие 8.3 (8.3.8.2027)
Это означает, что в ролях, доступных пользователю нет доступа на установку значения в параметр сеанса «ВДГБ_ЗапущенМенеджерЛицензий».
Либо дорабатывайте роль, либо найдите ту, в которой будет установлен доступ.
Ничего не знаю, но иногда могу произнести праведную чушь)
Очевидно что ругается у пользователя, что нет прав, на то что делается при запуске программы.
Необходимо дать нужные права пользователю
Помог, нажми спасибо. Не помог, нажми спасибо
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google
Не хочется терять время на проверку, но роль «Базовые права» никогда ни в каой конфигурации не давала пользователю права входа в базу.
Она применяется в дополнение и в сочетании с другими ролями
Skip to content
При программном изменении формы может возникнуть ошибка:
Нельзя изменять поле, содержащее объект данных формы
Ошибка возникает при следующем коде:
&НаКлиенте Процедура ПробитьЧек(Команда) ПробитьЧекНаСервере(Объект); КонецПроцедуры &НаСервере Процедура ПробитьЧекНаСервере(Док) ОбщийМодуль.ЗаписатьВБазуДокумент(Док); КонецПроцедуры |
В параметре процедуры
ПробитьЧекНаСервере() мы передаем данные формы с типом
ДанныеФормыКоллекция, и потом на сервере пытаемся их изменить.
Даже если эти данные мы не меняем внутри процедуры, 1С на всякий случай ругнется.
Параметр
Док процедуры
ПробитьЧекНаСервере передается по ссылке, а значит при завершении процедуры этот параметр возвращается и пытается присвоиться реквизиту, что запрещено.
Если объект не планируется изменять в процедуре
ПробитьЧекНаСервере(), то достаточно скопировать реквизит во временную переменную, которая не является реквизитом и поэтому без проблем “возвратится” обратно из процедуры.
&НаКлиенте Процедура ПробитьЧек(Команда) ДокКопия = Объект; ПробитьЧекНаСервере(ДокКопия); КонецПроцедуры |
Тот же самый эффект можно получить просто указав в объявлении процедуры ключевое слово
Знач и передавать в качестве параметра изначальный реквизит
Объект, без использования
ДокКопия:
&НаКлиенте Процедура ПробитьЧек(Команда) ПробитьЧекНаСервере(Объект); КонецПроцедуры &НаСервере Процедура ПробитьЧекНаСервере(Знач ТожеДокКопия) ОбщийМодуль.ЗаписатьВБазуДокумент(ТожеДокКопия); КонецПроцедуры |
Однако, если объект в процедуре
ПробитьЧекНаСервере() планируется изменять, то нужно использовать копирование реквизита во временную переменную и добавить вызов
КопироватьДанныеФормы:
&НаКлиенте Процедура ПробитьЧек(Команда) ДокКопия = Объект; ПробитьЧекНаСервере(ДокКопия); КопироватьДанныеФормы(ДокКопия, Объект); КонецПроцедуры |
Просмотров:
3 735
Gectar 0 / 0 / 0 Регистрация: 10.08.2016 Сообщений: 18 |
||||
1 |
||||
1C 8.x (тонкий) Ошибка при указании ПутьКДанным в программно созданной таблице10.08.2016, 13:34. Показов 60170. Ответов 7 Метки нет (Все метки)
Переделываю форму документа КорректировкаЗаписейРегистров под управляемое приложение. Если вручную из реквизитов на форму документа перетащить нужное движение по регистру никаких проблем не возникает: создается таблица, добавляются колонки. Для таблицы регистра бухгалтерии Хозрасчетный свойство ПутьКДанным заполняется значением «Объект.Движения.Хозрасчетный». Но если я программно создаю таблицу и пытаюсь присвоить этому свойству это же значение,
то выскакивает «ошибка при установке значения атрибута контекста (ПутьКДанным)» по причине Недопустимое значение. Из-за чего тут ошибка? Пробовал привязывать к созданной таблице табличную часть документа ТаблицаРегистровНакопления — свойству ПутьКДанным присвоил значение «Объект.ТаблицаРегистровНакопления», потом программно же создал колонки таблице, указал ПутьКДанным для них и все отработало без нареканий.
0 |
Dethmontt Модератор 3769 / 2952 / 586 Регистрация: 10.03.2011 Сообщений: 11,628 Записей в блоге: 1 |
||||
11.08.2016, 01:57 |
2 |
|||
По моему Движения это свойство типа ДокументОбъект и оно не конвертируется на клиента Добавлено через 13 минут Добавлено через 1 минуту Добавлено через 58 секунд
0 |
0 / 0 / 0 Регистрация: 10.08.2016 Сообщений: 18 |
|
11.08.2016, 10:56 [ТС] |
3 |
Движения это свойство типа ДокументОбъект и оно не конвертируется на клиента Это так, но я же не с этим свойством связываю таблицу. Тип свойства Движения — КоллекцияДвижений. Содержит эта коллекция наборы записей регистров. С одним из таких наборов я и пытаюсь связать таблицу, ведь наборы вполне себе конвертируются на клиенте. Добавлено через 7 минут
Нужно создавать свой НаборЗаписей (реквизит формы) устанавливать отбор и к нему привязывать ТаблицуФормы Как вариант я тоже думал так сделать, но хотелось бы как-то напрямую к данным, чтобы потом не заморачиваться с обработкой добавления/удаления/изменения записей. В обычном приложении именно напрямую к данным и идет привязка, вот и в управляемом надеялся сделать также. Добавлено через 19 минут
И программно получить доступ на форме к свойству движения не получиться ибо они ни где не хранятся. Вот тут я может и не до конца понял вашу мысль, но движения по конкретной номенклатуре хранятся в документе, форму которого я и пытаюсь открыть.
0 |
Модератор 3769 / 2952 / 586 Регистрация: 10.03.2011 Сообщений: 11,628 Записей в блоге: 1 |
|
11.08.2016, 11:01 |
4 |
Gectar, форма и документ это разные сущности! Добавлено через 2 минуты 1. На сервере происходит чтение из БД документа (ДокументОбъект) Добавлено через 49 секунд
Как вариант я тоже думал так сделать, но хотелось бы как-то напрямую к данным, чтобы потом не заморачиваться с обработкой добавления/удаления/изменения записей. Придется именно так и сохранение тоже придется делать самому
1 |
0 / 0 / 0 Регистрация: 10.08.2016 Сообщений: 18 |
|
11.08.2016, 11:11 [ТС] |
5 |
Я может сейчас и ступлю с этим вопросом, но почему же тогда все работает при ручном перетаскивании того же самого набора записей регистра из движений на форму — таблица создается, колонки добавляются, ПутьКДанным прописывается, работет все чин чинарем и не нужно никаких промежуточных реквизитов?
0 |
Модератор 3769 / 2952 / 586 Регистрация: 10.03.2011 Сообщений: 11,628 Записей в блоге: 1 |
|
11.08.2016, 11:25 |
6 |
работет все чин чинарем и не нужно никаких промежуточных реквизитов? потому что платформа все делает за НАС многе оскрывая от наших глазок =)))
0 |
0 / 0 / 0 Регистрация: 10.08.2016 Сообщений: 18 |
|
25.08.2016, 17:38 [ТС] |
7 |
Оказалось такие сложности совершенно ни к чему, как в общем-то с самого начала и думал. Нужно было просто в настройках реквизитов поставить галочку «Использовать всегда» Миниатюры
0 |
0 / 0 / 0 Регистрация: 10.08.2016 Сообщений: 18 |
|
25.08.2016, 17:40 [ТС] |
8 |
Тогда приведенный в самом начале код работает без проблем.
0 |