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

Содержание:

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

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

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

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

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

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

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

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

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

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

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

ТабличноеПоле — данные ☑ 0

Маленький Вопросик

19.07.10

07:19

Народ есть вопрос по конфигурированию:

На форме есть элемент ТабличноеПоле — по умолчанию — принимает данные такие : СправочникСписок.Банки.

Возможно ли при нажатие кнопки — сделать, чтобы тип занчения был другой — например СправочникСписок.Контрагенты???

Подозреваю, что это делать как-то так, но не получается пока что???

ЭлементыФормы.ТабличноеПоле1.ТипЗначения =…..

Подскажите как сделать?

1

chelentano

19.07.10

07:21

(0) зачем?

2

Маленький Вопросик

19.07.10

07:24

чтобы в одном поле получать разные таблицы.

3

Мимохожий Однако

19.07.10

07:33

Составной тип получается указать?

4

DmitrO

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) во спасибо! оно!!!

6

Aprobator

19.07.10

09:35

(0) баян — уже несколько раз на мисте было.

7

Маленький Вопросик

19.07.10

16:11

{Обработка.РабочийСтол.Форма.ФормаРабочегоСтола(11)}: Ошибка при установке значения атрибута контекста (ТипЗначения): Нельзя изменять тип связанного с данными элемента формы

   ЭлементыФормы.ТабличноеПоле1.ТипЗначения = Новый ОписаниеТипов(«СправочникСписок.СерииНоменклатуры»);

по причине:

Нельзя изменять тип связанного с данными элемента формы

8

Aprobator

19.07.10

16:14

да —  там в СП прописано, если связано с данными, то ТипЗначения — тока чтение. Используй первый способ.

9

Маленький Вопросик

19.07.10

16:20

ЭлементыФормы.ТабличноеПоле1.ТипЗначения = Новый ОписаниеТипов(«СправочникСписок.СерииНоменклатуры»);

ЭлементыФормы.ТабличноеПоле1.ОбновитьСтроки();

я вот так делаю…

10

Aprobator

19.07.10

16:23

(9) это второй способ, а не первый.

11

Маленький Вопросик

19.07.10

16:31

(10) первый тоже выдал ошибку :(

{Обработка.РабочийСтол.Форма.ФормаРабочегоСтола(13)}: Ошибка при установке значения атрибута контекста (Данные): Неправильный путь к данным

ЭлементыФормы.ТабличноеПоле1.Данные = «СерииНоменклатуры»;

по причине:

Неправильный путь к данным

12

Aprobator

19.07.10

17:16

(11) ну дык реквизита формы с таким именем нету.

13

Маленький Вопросик

19.07.10

19:34

(12) в том то и дело, что есть Дата  = СправочникСписок.СерииНоменклатуры

14

Dmitrii

19.07.10

19:51

(7) Читай внимательно (4): «В этом случае у ТП реквизит Данные должен быть ПУСТОЙ»

А он у тебя явно заполнен.

15

Dmitrii

19.07.10

19:52

(11) в строке

ЭлементыФормы.ТабличноеПоле1.Данные = «СерииНоменклатуры»;

ковычки не нужны. СерииНоменклатуры — это имя реквизита формы, тип которого должен быть СправочникСписок.СерииНоменклатуры.

16

Маленький Вопросик

19.07.10

20:15

{Обработка.РабочийСтол.Форма.ФормаРабочегоСтола(13)}: Ошибка при установке значения атрибута контекста (Данные): Неправильный путь к данным

ЭлементыФормы.ТабличноеПоле1.Данные = СерииНоменклатуры;

по причине:

Неправильный путь к данным

17

DmitrO

19.07.10

20:26

Свойство ТП Данные имеет тип Строка. Ковычки нужны. В (15) написан правильный код. Если он не работает, значит нет реквизита формы с таким именем.

18

Маленький Вопросик

19.07.10

20:33

блин, я уже несколько часов бьюсь — кто-нить может дать вменяемый ответ? или ссылочку на пример???

19

Dmitrii

19.07.10

20:40

(17) Извиняюсь. Был не прав :)

(18) >> кто-нить может дать вменяемый ответ?

Уже целых два дали в (4)….

20

DmitrO

19.07.10

20:41

А у меня работает. Какой тебе надо еще пример? Ты знаешь что такое реквизит формы?

21

DmitrO

19.07.10

20:43

(18) прокомментируй подробнее что ты имел в виду в (13). Я вот не могу понять что ты хотел сказать.

22

Маленький Вопросик

19.07.10

21:00

Конечно! Закладка «Реквизиты» — по 13 — создаю Реквизит Дата с типом «СправочникСписок.СерииНоменклатуры»

23

DmitrO

19.07.10

22:31

:) вот ведь а..

Ну тогда и записывай имя реквизита в данные ТП:

ЭлементыФормы.ТабличноеПоле1.Данные = «Дата»;

ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();

Код 1C v 8.3

 // Реквизиты
ДобавляемыеРеквизиты = Новый Массив;

ИмяТаблицы = "КомандыДополнительныхОбработок";
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяТаблицы, Новый ОписаниеТипов("ТаблицаЗначений")));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Ссылка", Новый ОписаниеТипов("СправочникСсылка.ДополнительныеОтчетыИОбработки"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ВариантЗапуска", Новый ОписаниеТипов("ПеречислениеСсылка.СпособыВызоваДополнительныхОбработок"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ИмяЭлемента", Новый ОписаниеТипов("Строка"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Представление", Новый ОписаниеТипов("Строка"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Идентификатор", Новый ОписаниеТипов("Строка"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ЭтоОтчет", Новый ОписаниеТипов("Булево"), ИмяТаблицы));

Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);

//реквизит
ИмяЭлемента = "Добавлен" + ИндексЭлемента;
Реквизит = Новый РеквизитФормы(ИмяЭлемента, ОписаниеТипов);
ДобавляемыеРеквизиты.Добавить(Реквизит);
ИзменитьРеквизиты(ДобавляемыеРеквизиты);

//команда печать
ИмяКомандыПечать = "ДобавленПечать" + ИндексЭлемента;
КомандаПечать = Команды.Добавить(ИмяКомандыПечать);
КомандаПечать.Действие = "ПечатьДокумента";
КомандаПечать.Подсказка = НСтр("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

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


Студворк — интернет-сервис помощи студентам

Переделываю форму документа КорректировкаЗаписейРегистров под управляемое приложение. Если вручную из реквизитов на форму документа перетащить нужное движение по регистру никаких проблем не возникает: создается таблица, добавляются колонки. Для таблицы регистра бухгалтерии Хозрасчетный свойство ПутьКДанным заполняется значением «Объект.Движения.Хозрасчетный». Но если я программно создаю таблицу и пытаюсь присвоить этому свойству это же значение,

1C
1
2
НоваяТЧ = Элементы.Добавить("Таблица"+СтрокаТаблицыРегистров.Имя,Тип("ТаблицаФормы"), НоваяСтраница); //НоваяСтраница - элем. формы на котором создаю таблицу
НоваяТЧ.ПутьКДанным = "Объект.Движения.Хозрасчетный";

то выскакивает «ошибка при установке значения атрибута контекста (ПутьКДанным)» по причине Недопустимое значение. Из-за чего тут ошибка?

Пробовал привязывать к созданной таблице табличную часть документа ТаблицаРегистровНакопления — свойству ПутьКДанным присвоил значение «Объект.ТаблицаРегистровНакопления», потом программно же создал колонки таблице, указал ПутьКДанным для них и все отработало без нареканий.

0

Dethmontt

Модератор

Эксперт 1С

3724 / 2918 / 575

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

Сообщений: 11,491

Записей в блоге: 1

11.08.2016, 01:57

2

По моему Движения это свойство типа ДокументОбъект и оно не конвертируется на клиента

Добавлено через 13 минут
И программно получить доступ на форме к свойству движения не получиться ибо они ни где не хранятся.

Добавлено через 1 минуту
Нужно создавать свой НаборЗаписей (реквизит формы) устанавливать отбор и к нему привязывать ТаблицуФормы

Добавлено через 58 секунд
Примерчик

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
&НаСервере
Процедура СоздатьРеквизитыФормыНаборовЗаписейРегистров()
 
    ДобавляемыеРеквизиты = Новый Массив;
    УдаляемыеРеквизиты   = Новый Массив;
    
    Для каждого СтрокаРегистра Из СписокРегистров Цикл
        
        ИмяРеквизита = СтрокаРегистра.ИмяРегистра + "НаборЗаписей";
        ТипРеквизита  = Новый ОписаниеТипов(СтрокаРегистра.ВидРегистра + "НаборЗаписей." + СтрокаРегистра.ИмяРегистра);
        НовыйРеквизит = Новый РеквизитФормы(ИмяРеквизита, ТипРеквизита, , , Истина);
        ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);
        
    КонецЦикла;
    
    Если ДобавляемыеРеквизиты.Количество() > 0 Тогда
        ИзменитьРеквизиты(ДобавляемыеРеквизиты, УдаляемыеРеквизиты);
    КонецЕсли;
 
КонецПроцедуры
 
&НаСервере
Процедура АктивироватьНаборыЗаписей()
    Для Каждого СтрокаРегистра Из СписокРегистров Цикл 
        ИмяРеквизита = СтрокаРегистра.ИмяРегистра + "НаборЗаписей";
        НаборЗаписей = РеквизитФормыВЗначение(ИмяРеквизита);
        НаборЗаписей.Отбор.Регистратор.Установить(Документ);
        НаборЗаписей.Прочитать();
        ЗначениеВРеквизитФормы(НаборЗаписей, ИмяРеквизита);
    КонецЦикла;
КонецПроцедуры

0

0 / 0 / 0

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

Сообщений: 18

11.08.2016, 10:56

 [ТС]

3

Цитата
Сообщение от Dethmontt
Посмотреть сообщение

Движения это свойство типа ДокументОбъект и оно не конвертируется на клиента

Это так, но я же не с этим свойством связываю таблицу. Тип свойства Движения — КоллекцияДвижений. Содержит эта коллекция наборы записей регистров. С одним из таких наборов я и пытаюсь связать таблицу, ведь наборы вполне себе конвертируются на клиенте.

Добавлено через 7 минут

Цитата
Сообщение от Dethmontt
Посмотреть сообщение

Нужно создавать свой НаборЗаписей (реквизит формы) устанавливать отбор и к нему привязывать ТаблицуФормы

Как вариант я тоже думал так сделать, но хотелось бы как-то напрямую к данным, чтобы потом не заморачиваться с обработкой добавления/удаления/изменения записей. В обычном приложении именно напрямую к данным и идет привязка, вот и в управляемом надеялся сделать также.

Добавлено через 19 минут

Цитата
Сообщение от Dethmontt
Посмотреть сообщение

И программно получить доступ на форме к свойству движения не получиться ибо они ни где не хранятся.

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

0

Модератор

Эксперт 1С

3724 / 2918 / 575

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

Сообщений: 11,491

Записей в блоге: 1

11.08.2016, 11:01

4

Gectar, форма и документ это разные сущности!

Добавлено через 2 минуты
Как появляется реквизит ОБЪЕКТ в форме документа

1. На сервере происходит чтение из БД документа (ДокументОбъект)
2. Свойства ДокументОбъект,а копируются в реквизит Объект формы
3. ДокументОбъект уничтожается

Добавлено через 49 секунд

Цитата
Сообщение от Gectar
Посмотреть сообщение

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

Придется именно так и сохранение тоже придется делать самому

1

0 / 0 / 0

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

Сообщений: 18

11.08.2016, 11:11

 [ТС]

5

Я может сейчас и ступлю с этим вопросом, но почему же тогда все работает при ручном перетаскивании того же самого набора записей регистра из движений на форму — таблица создается, колонки добавляются, ПутьКДанным прописывается, работет все чин чинарем и не нужно никаких промежуточных реквизитов?

0

Модератор

Эксперт 1С

3724 / 2918 / 575

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

Сообщений: 11,491

Записей в блоге: 1

11.08.2016, 11:25

6

Цитата
Сообщение от Gectar
Посмотреть сообщение

работет все чин чинарем и не нужно никаких промежуточных реквизитов?

потому что платформа все делает за НАС многе оскрывая от наших глазок =)))

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


Не хочется терять время на проверку, но роль «Базовые права» никогда ни в каой конфигурации не давала пользователю права входа в базу.

Она применяется в дополнение и в сочетании с другими ролями


  • 1с ошибка при установке значения атрибута контекста commandtext нет поименованных аргументов
  • 1с ошибка при создании каталога указан недопустимый путь
  • 1с ошибка при создании информационной базы этот хост неизвестен
  • 1с ошибка при создании информационной базы сервер 1с предприятия не обнаружен
  • 1с ошибка при создании информационной базы не обнаружена установленная версия 1с предприятия
  • 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

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


    Студворк — интернет-сервис помощи студентам

    Переделываю форму документа КорректировкаЗаписейРегистров под управляемое приложение. Если вручную из реквизитов на форму документа перетащить нужное движение по регистру никаких проблем не возникает: создается таблица, добавляются колонки. Для таблицы регистра бухгалтерии Хозрасчетный свойство ПутьКДанным заполняется значением «Объект.Движения.Хозрасчетный». Но если я программно создаю таблицу и пытаюсь присвоить этому свойству это же значение,

    1C
    1
    2
    
    НоваяТЧ = Элементы.Добавить("Таблица"+СтрокаТаблицыРегистров.Имя,Тип("ТаблицаФормы"), НоваяСтраница); //НоваяСтраница - элем. формы на котором создаю таблицу
    НоваяТЧ.ПутьКДанным = "Объект.Движения.Хозрасчетный";

    то выскакивает «ошибка при установке значения атрибута контекста (ПутьКДанным)» по причине Недопустимое значение. Из-за чего тут ошибка?

    Пробовал привязывать к созданной таблице табличную часть документа ТаблицаРегистровНакопления — свойству ПутьКДанным присвоил значение «Объект.ТаблицаРегистровНакопления», потом программно же создал колонки таблице, указал ПутьКДанным для них и все отработало без нареканий.



    0



    Dethmontt

    Модератор

    Эксперт 1С

    3769 / 2952 / 586

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

    Сообщений: 11,628

    Записей в блоге: 1

    11.08.2016, 01:57

    2

    По моему Движения это свойство типа ДокументОбъект и оно не конвертируется на клиента

    Добавлено через 13 минут
    И программно получить доступ на форме к свойству движения не получиться ибо они ни где не хранятся.

    Добавлено через 1 минуту
    Нужно создавать свой НаборЗаписей (реквизит формы) устанавливать отбор и к нему привязывать ТаблицуФормы

    Добавлено через 58 секунд
    Примерчик

    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
    
    &НаСервере
    Процедура СоздатьРеквизитыФормыНаборовЗаписейРегистров()
     
        ДобавляемыеРеквизиты = Новый Массив;
        УдаляемыеРеквизиты   = Новый Массив;
        
        Для каждого СтрокаРегистра Из СписокРегистров Цикл
            
            ИмяРеквизита = СтрокаРегистра.ИмяРегистра + "НаборЗаписей";
            ТипРеквизита  = Новый ОписаниеТипов(СтрокаРегистра.ВидРегистра + "НаборЗаписей." + СтрокаРегистра.ИмяРегистра);
            НовыйРеквизит = Новый РеквизитФормы(ИмяРеквизита, ТипРеквизита, , , Истина);
            ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);
            
        КонецЦикла;
        
        Если ДобавляемыеРеквизиты.Количество() > 0 Тогда
            ИзменитьРеквизиты(ДобавляемыеРеквизиты, УдаляемыеРеквизиты);
        КонецЕсли;
     
    КонецПроцедуры
     
    &НаСервере
    Процедура АктивироватьНаборыЗаписей()
        Для Каждого СтрокаРегистра Из СписокРегистров Цикл 
            ИмяРеквизита = СтрокаРегистра.ИмяРегистра + "НаборЗаписей";
            НаборЗаписей = РеквизитФормыВЗначение(ИмяРеквизита);
            НаборЗаписей.Отбор.Регистратор.Установить(Документ);
            НаборЗаписей.Прочитать();
            ЗначениеВРеквизитФормы(НаборЗаписей, ИмяРеквизита);
        КонецЦикла;
    КонецПроцедуры



    0



    0 / 0 / 0

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

    Сообщений: 18

    11.08.2016, 10:56

     [ТС]

    3

    Цитата
    Сообщение от Dethmontt
    Посмотреть сообщение

    Движения это свойство типа ДокументОбъект и оно не конвертируется на клиента

    Это так, но я же не с этим свойством связываю таблицу. Тип свойства Движения — КоллекцияДвижений. Содержит эта коллекция наборы записей регистров. С одним из таких наборов я и пытаюсь связать таблицу, ведь наборы вполне себе конвертируются на клиенте.

    Добавлено через 7 минут

    Цитата
    Сообщение от Dethmontt
    Посмотреть сообщение

    Нужно создавать свой НаборЗаписей (реквизит формы) устанавливать отбор и к нему привязывать ТаблицуФормы

    Как вариант я тоже думал так сделать, но хотелось бы как-то напрямую к данным, чтобы потом не заморачиваться с обработкой добавления/удаления/изменения записей. В обычном приложении именно напрямую к данным и идет привязка, вот и в управляемом надеялся сделать также.

    Добавлено через 19 минут

    Цитата
    Сообщение от Dethmontt
    Посмотреть сообщение

    И программно получить доступ на форме к свойству движения не получиться ибо они ни где не хранятся.

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



    0



    Модератор

    Эксперт 1С

    3769 / 2952 / 586

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

    Сообщений: 11,628

    Записей в блоге: 1

    11.08.2016, 11:01

    4

    Gectar, форма и документ это разные сущности!

    Добавлено через 2 минуты
    Как появляется реквизит ОБЪЕКТ в форме документа

    1. На сервере происходит чтение из БД документа (ДокументОбъект)
    2. Свойства ДокументОбъект,а копируются в реквизит Объект формы
    3. ДокументОбъект уничтожается

    Добавлено через 49 секунд

    Цитата
    Сообщение от Gectar
    Посмотреть сообщение

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

    Придется именно так и сохранение тоже придется делать самому



    1



    0 / 0 / 0

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

    Сообщений: 18

    11.08.2016, 11:11

     [ТС]

    5

    Я может сейчас и ступлю с этим вопросом, но почему же тогда все работает при ручном перетаскивании того же самого набора записей регистра из движений на форму — таблица создается, колонки добавляются, ПутьКДанным прописывается, работет все чин чинарем и не нужно никаких промежуточных реквизитов?



    0



    Модератор

    Эксперт 1С

    3769 / 2952 / 586

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

    Сообщений: 11,628

    Записей в блоге: 1

    11.08.2016, 11:25

    6

    Цитата
    Сообщение от Gectar
    Посмотреть сообщение

    работет все чин чинарем и не нужно никаких промежуточных реквизитов?

    потому что платформа все делает за НАС многе оскрывая от наших глазок =)))



    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



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