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

Содержание:

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

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

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

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

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

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

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

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

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

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

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

Конвертация, перенос дополнительных реквизитов номенклатуры

Я
   mxs089

24.12.14 — 14:54

при переносе дополнительных реквизитов (свойств) как перенести тип значения свойства?

   DionisSergeevich

1 — 24.12.14 — 14:56

доп реквизиты в рс хранятся на сколько я помню. его и переноси

   mxs089

2 — 24.12.14 — 14:59

в ут 11.1

   mxs089

3 — 24.12.14 — 15:01

значения хранятся в таблице номенклатуры

   mxs089

4 — 24.12.14 — 15:01

тип определяется в плане видов характеристик

   mxs089

5 — 24.12.14 — 15:01

конвертации как сказать, в метаданных нет поля типданных

   DionisSergeevich

6 — 24.12.14 — 15:08

(3) Да ладно. Да не верю

   DionisSergeevich

7 — 24.12.14 — 15:09

СвойстваОбъектов рс не?

   mxs089

8 — 24.12.14 — 15:10

не, сейчас это табличная часть справочника номенклатура

   mxs089

9 — 24.12.14 — 15:11

суть вопроса, не значения перетянуть а тип значения свойства

   mxs089

10 — 24.12.14 — 15:11

тип значения элемента плана вида характеристик

   DionisSergeevich

11 — 24.12.14 — 15:12

(8) ПКО для ПВХ есть?

   mxs089

12 — 24.12.14 — 15:13

да, есть

   DionisSergeevich

13 — 24.12.14 — 15:14

ТипЗначения является стандартным реквизитом ПВХ, в ПКО для ПВХ есть ПКС «ТипЗначения»?

   mxs089

14 — 24.12.14 — 15:22

нет

   mxs089

15 — 24.12.14 — 15:23

в том то все и дело, в упор не вижу, а в запросе это поле присутствует (консольЗапросов)

   DionisSergeevich

16 — 24.12.14 — 15:23

(14) Ты знаешь что делать)

   DionisSergeevich

17 — 24.12.14 — 15:24

или не знаешь?

   mxs089

18 — 24.12.14 — 15:24

как нить через параметр?

   DionisSergeevich

19 — 24.12.14 — 15:28

(18) фуфуфу. нельзя так измываться.

Добавляй ПКС «ТипЗначения». Если в свойствах не видишь такого — загрузи структуру конфигурации (если ты загрузил только правила то структуры конфигураций создались только в части используемых в правилах объектов и свойств а не полностью)

   mxs089

20 — 24.12.14 — 15:58

структуру конфигурации загружал

   mxs089

21 — 24.12.14 — 15:58

ничего не изменилось

   vicof

22 — 24.12.14 — 15:59

В ПКЗ заглядывал?

   Бригада бронепоезда

23 — 24.12.14 — 16:02

делай для пвх отдельное пко и подсовывай его реквизиты ТЧ

   DionisSergeevich

24 — 24.12.14 — 16:04

(20) нет свойства «ТипЗначения»?

   mxs089

25 — 24.12.14 — 16:06

нет, скрин прислать?

   mxs089

26 — 24.12.14 — 16:07

(23) что? какой ТЧ?

   mxs089

27 — 24.12.14 — 16:08

(22) да, на стороне источника только Контрагент

   mxs089

28 — 24.12.14 — 16:08

выгрузка из УТ 10.2 в УТ 11.1

   DionisSergeevich

29 — 24.12.14 — 16:09

(25) В правилах самих указаны 2 конфигурации, ты их перезагрузил (предварительно выгрузив из базы УТ обработкой)? Что-то мне подсказывает что нет, ни фига ты не сделал этого.

   mxs089

30 — 24.12.14 — 16:09

тип значения удалось передать через параметр таким способом:

Значение = ЗначениеВСтрокуВнутр(Источник.ТипЗначения.Типы());

после загрузки при присвоении ошибка

ОписаниеОшибки         =  Ошибка при установке значения атрибута контекста (ТипЗначения): Тип не является подмножеством типа значений плана видов характеристик

   mxs089

31 — 24.12.14 — 16:10

(29) изначально у меня не было правил, делал выгрузку метаданных

   mxs089

32 — 24.12.14 — 16:10

(30) тип строка, разная длина …

   Бригада бронепоезда

33 — 24.12.14 — 16:12

(26) табличная часть, где свойства хранятся

   Бригада бронепоезда

34 — 24.12.14 — 16:13

а по-хорошему — берешь типовые правила УТ11 — БП 3.0, смотришь как там и не паришься

   DionisSergeevich

35 — 24.12.14 — 16:18

ЩАс загружу у себя — посмотрю

   DionisSergeevich

36 — 24.12.14 — 16:35

да, не выгружает. сейчас посмотрю

   DionisSergeevich

37 — 24.12.14 — 16:54

все, сделал. ЩАс покажу

   DionisSergeevich

38 — 24.12.14 — 16:56

В обработках MD82Exp и MD83Exp в модуле объекта в процедуре ВыгрузитьОбъекты:

после

«Для каждого Объект из Метаданные[ИмяОбъекта] Цикл

        
        ВыгрузитьОбъект(Объект, ПрефиксИмени);»

добавляешь следующий код:

«Если Объект.Имя = «СвойстваОбъектов» Тогда

        
            Родитель = «00000000-0000-0000-0000-000000000000»;

            
            Свойство = Новый Структура(«Имя, Синоним, Комментарий, Тип»);

        
            Свойство.Имя = «ТипЗначения»;

            Свойство.Синоним = «»;

            Свойство.Комментарий = «»;

            Свойство.Тип = Новый ОписаниеТипов(«Тип»);

            
            ВыгрузитьСвойство(Свойство, «Свойство», Родитель);

        
        КонецЕсли;»

   mxs089

39 — 24.12.14 — 17:00

супер конечно, но что то мне подсказывает, что сделано это не просто так, это как выгрузка регистров накопления

   mxs089

40 — 24.12.14 — 17:00

но большое спасибо за помощь!

   DionisSergeevich

41 — 24.12.14 — 17:03

Сделано это т.к. не было необходимости. Стандартные реквизиты выгружаются в процедуре «ВыгрузитьОсновныеСвойства(Объект)» — туда можно было бы вставить и это свойство. Но я не стал разбираться — все жде разовая потребность. У меня после загрузки конфигурации обновленной обработкой появилось свойство «ТипЗначения». Саму выгрузку не проверял. Отпишись как сделаешь — интересно просто

   ИсчадиеADO

42 — 24.12.14 — 17:04

(30) все правильно. через параметр. а устанавливаешь его при загрузке объекта пвх. он же орет, что в пвх такрй тип недоступен

   DionisSergeevich

43 — 24.12.14 — 17:13

(40) Я проверил. Грузится все хорошо)

  

DionisSergeevich

44 — 24.12.14 — 17:52

(40) Получилось?

Содержание:

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

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

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

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

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

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

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

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

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

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

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



1 февраля, 2017
21 апреля, 2017

Дано

  • 1С конфигурация бухгалтерия предприятия 2.0
  • Ошибка печати ПКО (приходный кассовый ордер):

{ОбщаяФорма.ФормаПечати.Форма(18)}: Ошибка при установке значения атрибута контекста

   ЭлементыФормы.ПолеДокумента.ПолеСверху

по причине:

Несоответствие типов

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

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

  • в конфигураторе видно, что система пытается выполнить строчку кода:

ЭлементыФормы.ПолеДокумента.ПолеСверху          = ПечатныйДокумент.ПолеСверху;

  • в отладке видно, что обе переменные типа “Число”,
  • синтакс-помощник говорит что:

ТабличныйДокумент (SpreadsheetDocument)

ПолеСверху (TopMargin)

Использование:

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

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

Решение

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

Дополнено 2017.04.10

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

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

Показывать по
10
20
40
сообщений

Новая тема

Ответить

Михаил80

Дата регистрации: 31.01.2012
Сообщений: 3

«Ну подскажите как исправить ошибку?<br>{Документ.ИК_БезвозмездноеПолучение.Форма.ФормаДокумента(300)} : Ошибка при установке значения атрибута контекста (Видимость)<br>ЭлементыФормы.ОсновныеСредства.Колонки.АмортизационнаяГруппа.Видимость= ВестиПоАналитике;<br>по причине: Несоответствие типов»

ZhAmAn

Дата регистрации: 23.12.2010
Сообщений: 1333

«Яблоко=Апельсин;<br>Вот что у вас,а должно быть яблоко=истина;»

Михаил80

Дата регистрации: 31.01.2012
Сообщений: 3

«И где ошибка?<br> <br>Процедура ДоступностьЭлементов()<br> Если ПоступлениеМЗ Тогда<br> ЭлементыФормы.Панель1.Страницы.МатериальныеЗапасы.Видимость = Истина;<br> ЭлементыФормы.Панель1.Страницы.ОсновныеСредства.Видимость = Ложь;<br> Иначе<br> ЭлементыФормы.Панель1.Страницы.МатериальныеЗапасы.Видимость = Ложь;<br> ЭлементыФормы.Панель1.Страницы.ОсновныеСредства.Видимость = Истина;<br> Если УчетНПА Тогда<br> ЭлементыФормы.ОсновныеСредства.Колонки.ГрупповойУчет.Видимость                   = Ложь;<br> ЭлементыФормы.ОсновныеСредства.Колонки.АмортизационнаяГруппа.Видимость       = Ложь;<br> ЭлементыФормы.ОсновныеСредства.Колонки.КодПоОКОФ.Видимость                   = Ложь;<br> ЭлементыФормы.ОсновныеСредства.Колонки.СуммаАмортизации.Видимость             = Ложь;<br> ЭлементыФормы.ОсновныеСредства.Колонки.СчетАмортизации.Видимость             = Ложь;<br> ЭлементыФормы.ОсновныеСредства.Колонки.КОСГУСчетаАмортизации.Видимость       = Ложь;<br> ЭлементыФормы.ОсновныеСредства.Колонки.КОСГУСчетаЗатрат.Видимость             = Ложь;<br> ЭлементыФормы.ОсновныеСредства.Колонки.НачислятьАмортизацию.Видимость            = Ложь;<br> ЭлементыФормы.ОсновныеСредства.Колонки.ОстСрокПолезногоИспользования.Видимость = Ложь;<br> ЭлементыФормы.ОсновныеСредства.Колонки.ПорядокПогашенияСтоимости.Видимость       = Ложь;<br> ЭлементыФормы.ОсновныеСредства.Колонки.СпособНачисленияАмортизации.Видимость = Ложь;<br> ЭлементыФормы.ОсновныеСредства.Колонки.СрокПолезногоИспользования.Видимость      = Ложь;<br> ЭлементыФормы.ОсновныеСредства.Колонки.СчетУчетаЗатрат.Видимость             = Ложь;<br> ЭлементыФормы.ОсновныеСредства.Колонки.СубконтоСчетаЗатрат2.Видимость            = Ложь;<br> ЭлементыФормы.ОсновныеСредства.Колонки.СубконтоСчетаЗатрат3.Видимость            = Ложь;<br> ЭлементыФормы.ОсновныеСредства.Колонки.СубконтоСчетаЗатрат4.Видимость            = Ложь;<br> Иначе<br> ЭлементыФормы.ОсновныеСредства.Колонки.ГрупповойУчет.Видимость                   = Истина;<br> ЭлементыФормы.ОсновныеСредства.Колонки.АмортизационнаяГруппа.Видимость       = ВестиПоАналитике;<br> ЭлементыФормы.ОсновныеСредства.Колонки.КодПоОКОФ.Видимость                   = ВестиПоАналитике;<br> ЭлементыФормы.ОсновныеСредства.Колонки.СрокПолезногоИспользования.Видимость      = ВестиПоАналитике;<br> ЭлементыФормы.ОсновныеСредства.Колонки.СуммаАмортизации.Видимость             = Истина;<br> ЭлементыФормы.ОсновныеСредства.Колонки.СчетАмортизации.Видимость             = Истина;<br> ЭлементыФормы.ОсновныеСредства.Колонки.КОСГУСчетаАмортизации.Видимость       = Истина;<br> ЭлементыФормы.ОсновныеСредства.Колонки.ОстСрокПолезногоИспользования.Видимость = ВестиПоАналитике;<br> ЭлементыФормы.ОсновныеСредства.Колонки.ПорядокПогашенияСтоимости.Видимость       = ВестиПоАналитике;<br> ЭлементыФормы.ОсновныеСредства.Колонки.СпособНачисленияАмортизации.Видимость = ВестиПоАналитике;<br> ЭлементыФормы.ОсновныеСредства.Колонки.НачислятьАмортизацию.Видимость            = НачислятьАмортизациюКазны;<br> ЭлементыФормы.ОсновныеСредства.Колонки.СчетУчетаЗатрат.Видимость             = НачислятьАмортизациюКазны;<br> ЭлементыФормы.ОсновныеСредства.Колонки.КОСГУСчетаЗатрат.Видимость             = НачислятьАмортизациюКазны;<br> ЭлементыФормы.ОсновныеСредства.Колонки.СубконтоСчетаЗатрат2.Видимость            = НачислятьАмортизациюКазны;<br> ЭлементыФормы.ОсновныеСредства.Колонки.СубконтоСчетаЗатрат3.Видимость            = НачислятьАмортизациюКазны;<br> ЭлементыФормы.ОсновныеСредства.Колонки.СубконтоСчетаЗатрат4.Видимость            = НачислятьАмортизациюКазны;<br> КонецЕсли;<br> ЭлементыФормы.ОсновныеСредства.Колонки.ДатаВводаВЭксплуатацию.Видимость       = ВестиПоАналитике;<br> ЭлементыФормы.ОсновныеСредства.Колонки.ФактическийСрокЭкспл.Видимость            = ВестиПоАналитике;<br> ЭлементыФормы.ОсновныеСредства.Колонки.ИнвНомер.Видимость                        = ВестиПоАналитике;<br> КонецЕсли;»

ZhAmAn

Дата регистрации: 23.12.2010
Сообщений: 1333

Что такое ВестиПоАналитике?отладчиком смотрел что там?

Михаил80

Дата регистрации: 31.01.2012
Сообщений: 3

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

Денис (САМАРА)

Дата регистрации: 09.04.2008
Сообщений: 8351

ZhAmAn

Дата регистрации: 23.12.2010
Сообщений: 1333

я знаю что такое аналитика,конкретно скажи что за переменная!

Денис (САМАРА)

Дата регистрации: 09.04.2008
Сообщений: 8351

А что это за документ такой «ИК_БезвозмездноеПолучение» и откуда он взялся в БП?

ZhAmAn

Дата регистрации: 23.12.2010
Сообщений: 1333

Показывать по
10
20
40
сообщений

Heltarion

2 / 2 / 0

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

Сообщений: 57

1

02.12.2011, 11:18. Показов 8369. Ответов 11

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


Добрый день!
Посмотрите пожалуйста. Есть в обработке таблица значений, в которую я выгружаю данные их XML, после этого я корректирую таблицу и хочу чтобы программа сохранила ее в новый документ эксель. Для этого я создал процедуру «Процедура СохранитьНажатие(Элемент) Экспорт». При сохранении выскакивает: «Ошибка при установке значения атрибута контекста (Value)». Насколько я понимаю, программе не нравится тип значения, который я передаю.
Переменные:

ТПП — «табличное поле правил», в ней уже занесены некотрые значения из XML
НоменклатураЗагрузки, НоменклатураБазы — имена столбцов ТПП
СтолбЗагр, СтолбБаз — столбцы в экселе

Код процедуры:

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
СтолбЗагр = 1;
СтолбБаз = 2;
 
Если ИнициализацияЭкселя() Тогда
      Книга = Excel.WorkBooks.Add();
      Sheet = Книга.Sheets(1);
    
      Для каждого стр из ТПП Цикл
              Sheet.Cells(стр,СтолбЗагр).Value=стр.НоменклатураЗагрузки;
              Sheet.Cells(стр,СтолбБаз).Value=стр.НоменклатураБазы;
      КонецЦикла;
 
      Попытка
              Книга.SaveAs("F:1CBaseВнешнии обработкиправила.xls");
      Исключение
              Сообщить(ОписаниеОшибки()+" Файл не сохранен!");
              Возврат;
      КонецПопытки;
КонецЕсли;
Сообщить("Готово");

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

0

308 / 308 / 1

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

Сообщений: 1,073

02.12.2011, 11:32

2

СохранитьНажатие(Элемент) это событие формы
в этой процедуре пропиши вызов другой процедуры, например СохранитьВЭксель();
саму же процедуру СохранитьВЭксель() добавь в модуль объекта и сделай её экспортной. Вставь свой код представленный выше.
обращение из формы будет ЭтотОбъект.СохранитьВЭксель();

1

2 / 2 / 0

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

Сообщений: 57

02.12.2011, 11:56

 [ТС]

3

СохранитьНажатие(Элемент) это событие формы
в этой процедуре пропиши вызов другой процедуры, например СохранитьВЭксель();
саму же процедуру СохранитьВЭксель() добавь в модуль объекта и сделай её экспортной. Вставь свой код представленный выше.
обращение из формы будет ЭтотОбъект.СохранитьВЭксель();

В МодулеОбъекта создал функцию «Процедура СохранитьВЭксель(ТПП) Экспорт»
Прописал в ней тотже код, что выше. В событии формы написал: ЭтотОбъект.СохранитьВЭксель(ТПП);
Выскочила ошибка: Ошибка при вызове метода контекста (Cells)
Что я нетак сделал?

0

308 / 308 / 1

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

Сообщений: 1,073

02.12.2011, 12:10

4

процедуру ИнициализацияЭкселя() тоже закинь в модуль объекта
СохранитьВЭксель(ТПП), параметр ТПП скорее всего не нужен

1

2 / 2 / 0

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

Сообщений: 57

02.12.2011, 12:19

 [ТС]

5

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

Добавлено через 4 минуты
Проблема вот в чем:
Sheet.Cells(стр,СтолбЗагр).Value=1;
Sheet.Cells(стр,СтолбБаз).Value=2;

Так работает, но если я поставлю
Sheet.Cells(стр,СтолбБаз).Value=стр.НоменклатураБа зы;
Выдает ошибку «Ошибка при установке значения атрибута контекста (Value)».

Дело в том что «стр.НоменклатураБазы» — это справочник ссылка, если у нее текстовый тип то программа глотает и записывает.

0

19 / 18 / 1

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

Сообщений: 54

02.12.2011, 12:22

6

чет вы мудрено делаете.
У вас не правильно указывается адресс ячейки в cell. Если стр — это коллекция или массив записей, то он не может нести в себе номер ячейки.
Не знаком с 1C, но програмлю в Excel и делаю выгрузки из других систем.

1

2 / 2 / 0

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

Сообщений: 57

02.12.2011, 12:28

 [ТС]

7

В данный момент ему не нравится присваемое значение к ячейке экселя (если я правильно понимаю сообщение «Ошибка при установке значения атрибута контекста (Value)» )

Причем если тип значения строка, то он его получает без вопросо, если тип значения СправочникССсылка, то он руегается на «Ошибка при установке значения атрибута контекста (Value)».

Я просто не понимаю как обратиться к такому типу переменных чтобы получить значение типа строка.

0

19 / 18 / 1

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

Сообщений: 54

02.12.2011, 12:30

8

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

1

308 / 308 / 1

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

Сообщений: 1,073

02.12.2011, 12:30

9

стр.НоменклатураБазы.Наименование например

1

2 / 2 / 0

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

Сообщений: 57

02.12.2011, 12:32

 [ТС]

10

стр.НоменклатураБазы — это уже есть наименование интересующего меня поля (имя столбца), в некотрых случаях можно писать: стр.НоменклатураБазы.Значение, но это нетот случай

Добавлено через 56 секунд
Спасибо вам большое, вы меня на правильный путь направили, мне сейчас только понять как получить значение из данного элемента

0

308 / 308 / 1

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

Сообщений: 1,073

02.12.2011, 12:34

11

значение из Excel?

1

Heltarion

2 / 2 / 0

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

Сообщений: 57

02.12.2011, 12:43

 [ТС]

12

Рабочий код:

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
32
33
34
35
36
37
38
39
Функция ИнициализацияЭкселя()
 
    //Пытаемся подключиться к Excel
    Попытка
        Excel = новый COMОбъект("Excel.Application");
        Сообщить("=====> Загрузка производится через MS Excel...");
        Возврат Истина;
    Исключение
        Возврат Ложь                
    КонецПопытки;     
    
КонецФункции
 
 
Процедура СохранитьНажатие(Элемент) Экспорт
    СтолбЗагр = 1; // задаю номер столбца№1 в эксель
    СтолбБаз = 2;  // задаю номер столбца№2 в эксель
    
    Если ИнициализацияЭкселя() Тогда
        Книга = Excel.WorkBooks.Add(); // создал новый документ
        Sheet = Книга.Sheets(1);          // открыл страницу 1
   
// цикл для заполнения таблицы эксель данными из табличного поля (по двум полям)     
        Для каждого стр из ТПП Цикл
            Sheet.Cells(стр,СтолбЗагр).Value=стр.НоменклатураЗагрузки;
            Sheet.Cells(стр,СтолбБаз).Value=стр.НоменклатураБазы.Наименование;
        КонецЦикла;
 
//выполняю сохранение документа       
        Попытка
            Книга.SaveAs("F:1CBaseВнешнии обработкиправила12.xlsx");
        Исключение
            Сообщить(ОписаниеОшибки()+" Файл не сохранен!");
            Возврат;
        КонецПопытки;
    КонецЕсли;
    Книга.Application.Quit();
    Сообщить("Готово");
КонецПроцедуры

0

Код 1C v 8.3

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

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

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

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

//команда печать
ИмяКомандыПечать = "ДобавленПечать" + ИндексЭлемента;
КомандаПечать = Команды.Добавить(ИмяКомандыПечать);
КомандаПечать.Действие = "ПечатьДокумента";
КомандаПечать.Подсказка = НСтр("ru = 'Печать документа...'");

//элемент формы
//Родитель                     = Элементы.ГруппаСформированныеДокументы;
Элемент                      = Элементы.Добавить(ИмяЭлемента, Тип("ПолеФормы"), ЭлементГруппа);
Элемент.Вид                  = ВидПоляФормы.ПолеНадписи;
Элемент.ПутьКДанным          = ИмяЭлемента;
Элемент.Гиперссылка          = Истина;
Элемент.ПоложениеЗаголовка   = ПоложениеЗаголовкаЭлементаФормы.Нет;

ЭтаФорма[ИмяЭлемента] = Документ;

//кнопка печать
ИмяЭлементаПечать = "ДобавленПечать" + ИндексЭлемента;
ЭлементПечать = Элементы.Добавить(ИмяЭлементаПечать, Тип("КнопкаФормы"), ЭлементГруппа);
ЭлементПечать.Картинка = БиблиотекаКартинок.Печать;
ЭлементПечать.Отображение = ОтображениеКнопки.Картинка;
ЭлементПечать.ИмяКоманды = ИмяКомандыПечать;

Есть внешняя обработка, на ней расположен табличный документ. Одной из колонок я хочу присвоить тип — справочник «Номенклатура», чтобы можно было по щелчку мышкой выбирать из справочника номенклатуру и помещать конкретное значение номенклатуры в ячейку табличного документа. Делаю вот такой код, но выходит ошибка: {Форма.Форма.Форма}: Ошибка при установке значения атрибута контекста (ТипЗначения)

да, всё верно, не соответствует тип, присваиваемый ТипуЗначения

Новый ОписаниеТипов(Тип(«тралялял»));

НовыйЭлементФормы = Элементы.Добавить(«Табличка»+Колонка.Имя, Тип(«ПолеФормы»), ЭлементТЗ);

Сделал так: Но выходит снова ошибка: {Форма.Форма.Форма}: Ошибка при вызове конструктора (ОписаниеТипов) по причине: Несоответствие типов (параметр номер ‘1’)

Скажем так, я не могу до конца понять прочитанное в СП в отношении типов)

Спасибо, теперь получилось:-)

Тэги:

Комментарии доступны только авторизированным пользователям

Доброго времени суток, уважаемые коллеги! В этой статье рассмотрены некоторые кусочки кода, который часто нужны на разных этапах разработки программного кода 1С. Здесь собраны некоторые примеры, которые использовались в разных задачах, с которыми мне пришлось столкнуться. Кроме того, есть статья о примерах программирования в версии 7.7 и отдельная статья по примерам работы с табличным полем. Итак, приступим!

  1. Как правильно реализовать цикл с постусловием?
  2. Как реализовать цикл с уменьшающимся счетчиком?
  3. Как получить название документа (аналог метода 1С 7.7 Вид())?
  4. Как узнать имеет ли текущий пользователь определённую роль?
  5. Как программно формируются кнопки печати документов в 1С:Предприятие 8.2?
  6. Как сделать запись в журнал регистрации 1С:Предприятие 8?
  7. Как правильно сделать выбор из составного типа данных?
  8. Как узнать тип объекта 1С8?
  9. Как открыть выпадающий список около элемента управления формы?
  10. Как программно переключить страницу (закладку) на «Панели»?
  11. Как активизировать элемент формы?
  12. Как обратиться к текущей странице формы, если на форму не помещён элемент управления формы «Панель»?
  13. Как установить значение в поле ввода в табличной части документа?
  14. Как правильно удалить строки из текстового файла с помощью встроенного языка системы 1С8?
  15. Как в 1С8 получить из строки с разделителями определённую подстроку по её позиции?
  16. Как проверить существует ли реквизит справочника 1с8?
  17. Как перебрать субконто счёта?
  18. Как устранить ошибку: Тип не является подмножеством типа значений плана видов характеристик?

Как правильно реализовать цикл с постусловием?

Повторять = Истина;
Пока Повторять Цикл
	А=А+1;
	Повторять = (А<10);
КонецЦикла;

Благодаря переменной Повторять наш цикл выполнится хотя бы один раз.

Как реализовать цикл с уменьшающимся счетчиком?

Вариант 1.

Зн1 = 100;
Зн2 = 1;
Сч=Зн1;
Пока Сч>=Зн2 Цикл
	Сч=Сч-1;
КонецЦикла;

Вариант 2.

Вариант 2.
Для Сч = -Зн1 По -Зн2 Цикл
	// Чтобы получить положительную величину,
	// если вдруг Сч станет положительным.
	СчЗн = Макс(Сч, -Сч);
КонецЦикла;

Как получить название документа (аналог метода 1С 7.7 Вид())?

ДокументСсылка.Метаданные().Имя;
// получаем: УвольнениеИзОрганизаций
ДокументСсылка.Метаданные().ПолноеИмя();
// получаем: Документ.УвольнениеИзОрганизаций

Как узнать имеет ли текущий пользователь определённую роль?

Используйте функцию сеанса работы «РольДоступна» (IsInRole), которая определяет доступность указанной роли текущему пользователю:

Если Не РольДоступна("ПравоАдминистрирования") Тогда
    Сообщить("Роль «Право администрирования» не доступна!");
КонецЕсли;

Или используйте следующую функцию:

Функция ПравоАдмина()
	Для Каждого РольМетаданных из Метаданные.Роли Цикл
		ИмяРоли = РольМетаданных.Имя;
		Если ИмяРоли = "ПравоАдминистрирования" Тогда
			Код = СокрЛП(глТекущийПользователь.Код);
			Юзер = ПользователиИнформационнойБазы.НайтиПоИмени(Код);
			Возврат Юзер.Роли.Содержит(РольМетаданных);
		КонецЕсли;
	КонецЦикла;
КонецФункции // ПравоАдмина()

Как программно формируются кнопки печати документов в 1С:Предприятие 8.2?

  1. В модуле формы документа в процедурах ПередОткрытием, ПослеЗаписи, ОсновныеДействияФормыУстановитьПечатьПоУмолчанию добавляют вызов процедуры УстановитьКнопкиПечати.
  2. Процедура УстановитьКнопкиПечати находится модуле формы документа. В этой процедуре и происходят основные действия по формированию кнопок печати. Обратим внимание, что из нее происходит вызов функции ПолучитьДеревоМакетовПечати.
  3. Функция ПолучитьДеревоМакетовПечати получает список макетов конфигурации и внешних макетов. Для этого во втором параметре этой процедуры вызывается функция ПолучитьСтруктуруПечатныхФорм, а в ее теле функция ДобавитьВДеревоМакетовДополнительныеФормы.
  4. Процедура ПолучитьСтруктуруПечатныхФорм возвращает структуру с внутренними печатными формами. Пример:
    // Возвращает доступные варианты печати документа
    //
    // Вовращаемое значение:
    //  Струткура, каждая строка которой соответствует одному из вариантов печати
    //  
    Функция ПолучитьСтруктуруПечатныхФорм() Экспорт
        СтруктураМакетов = Новый Структура;
        СтруктураМакетов.Вставить("ПереченьЦен","Перечень цен");
        СтруктураМакетов.Вставить("Ценники", "Ценники на товары");
        СтруктураМакетов.Вставить("ПечатьДвеЦены", "Две цены");
        Возврат СтруктураМакетов;
    КонецФункции // ПолучитьСписокПечатныхФорм()
  5. С помощью процедуры ДобавитьВДеревоМакетовДополнительныеФормы получаются дополнительные печатные формы из справочника «ВнешниеОбработки».
  6. В модуле объекта документа, в процедуре Печать() добавляются условия, обрабатывающее идентификатор новой печатной формы:
    // Процедура осуществляет печать документа. Можно направить печать на
    // экран или принтер, а также распечатать необходмое количество копий.
    // Название макета печати передается в качестве параметра,
    // по переданному названию находим имя макета в соответствии.
    //
    // Параметры:
    //  НазваниеМакета - строка, название макета.
    //
    Процедура Печать(ИмяМакета, КоличествоЭкземпляров = 1, НаПринтер = Ложь) Экспорт
    
    	...
    
    	Если ИмяМакета = "ПереченьЦен" Тогда
    		ТабДокумент = ПечатьДокумента();
    	ИначеЕсли ИмяМакета = "Ценники" Тогда
    		Попытка  			
    			ТабДокумент = ПечатьЦенников(); 			
    		Исключение
    			Предупреждение("Нет прав доступа!");		
    		КонецПопытки;	
    	ИначеЕсли ИмяМакета = "ПечатьДвеЦены" Тогда
    		ТабДокумент = ПечатьДокументаДвеЦены();		
    	КонецЕсли;
    	...	
    	
    КонецПроцедуры // Печать()
    

Как сделать запись в журнал регистрации 1С:Предприятие 8?

Процедура РегистрСведенийСписокДополнительныеУслугиПередУдалением(Элемент)
	ТС = Элемент.ТекущаяСтрока;
	Комментарий = "Код: " + ТС.Код +
		    ". Номенклатура: " + ТС.Номенклатура +
		    ". Вид наценки: " + ТС.ВидНаценки;
	ЗаписьЖурналаРегистрации("Данные.Удаление",
		УровеньЖурналаРегистрации.Информация,
		Метаданные.РегистрыСведений.ДополнительныеУслуги,
		РежимТранзакцииЗаписиЖурналаРегистрации.Независимая,
		Комментарий);
КонецПроцедуры

Как правильно сделать выбор из составного типа данных?

Процедура УслугиПунктОтправкиНачалоВыбора(Элемент, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	МассивТипов = Новый Массив();
	МассивТипов.Добавить(Тип("СправочникСсылка.НаселённыеПункты"));
	ОписаниеТипов = Новый ОписаниеТипов(МассивТипов);
	ЭлементыФормы.Услуги.Колонки.ПунктОтправки.
	ЭлементУправления.ОграничениеТипа = ОписаниеТипов;
	
	// Первый вариант
	ЭлементыФормы.Услуги.Колонки.ПунктОтправки.ЭлементУправления.Значение =
	ОписаниеТипов.ПривестиЗначение(
	ЭлементыФормы.Услуги.Колонки.ПунктОтправки.ЭлементУправления.Значение);
	
	// Второй вариант
	ОписаниеТипов.ПривестиЗначение(
	ЭлементыФормы.Услуги.ТекущаяСтрока.ПунктОтправки);
	
КонецПроцедуры

Как узнать тип объекта 1С8?

Если ТипЗнч(ТекОбъект) = Тип("СправочникСсылка.Номенклатура") Тогда
	...
КонецЕсли;

Если ТипЗнч(ТекОбъект) = Тип("Строка") Тогда
	...
КонецЕсли;

Как программно переключить страницу (закладку) на «Панели»?

Панель1 = ЭлементыФормы.Панель1;
Панель1.ТекущаяСтраница = Панель1.Страницы.Страница2;
Панель1.ТекущаяСтраница = Панель1.Страницы["Страница2"];

Как открыть выпадающий список около элемента управления формы?

Воспользуемся методом формы ВыбратьИзМеню(<СписокЗначений>, <ЭлементФормы>):

//выведем пользователю список вариантов, 
//для ввода СФ около элемента управления «Кнопка»
СписокДействийВводСФ = Новый СписокЗначений();
СписокДействийВводСФ.Добавить("ВвестиНовыйСчетФактуру", "Ввести новый счет-фактуру");
СписокДействийВводСФ.Добавить("ДополнитьСуществующийСчетФактуру", "Дополнить существующий счет-фактуру");
// ФормаДокумента.ТекущийЭлемент - 
//Элемент, около которого открывается список 
ВыбранныйВариантВводаСФ = ФормаДокумента.ВыбратьИзМеню(СписокДействийВводСФ, ФормаДокумента.ТекущийЭлемент);
Если ВыбранныйВариантВводаСФ = Неопределено Тогда
	Возврат;
КонецЕсли;

Если ВыбранныйВариантВводаСФ.Значение = "ВвестиНовыйСчетФактуру" Тогда
	...
КонецЕсли;

Как активизировать элемент формы?

Воспользуйтесь свойством «ТекущийЭлемент» объекта «Форма».

Если НЕ ЗначениеЗаполнено(Ответственный) Тогда
	Предупреждение("Сначала заполните поле: Ответственный!", 3);
	ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.Ответственный;
КонецЕсли;

Как обратиться к текущей странице формы, если на форму не помещён элемент управления формы «Панель»?

У формы есть свойство «Панель», обращаемся через него.

ЭтаФорма.Панель.ТекущаяСтраница = ...

Пример использования:

ПанельФормы = ЭтаФорма.Панель;
СтраницыФормы = ПанельФормы.Страницы;
Если ПанельФормы.ТекущаяСтраница = СтраницыФормы.Страница1 Тогда
      //Мы на первой странице
      . . .
ИначеЕсли ПанельФормы.ТекущаяСтраница = СтраницыФормы.Страница2 Тогда
      //Мы на второй странице
      . . .
Иначе //Мы на последней странице
      . . .
КонецЕсли;

Как установить значение в поле ввода в табличной части документа?

У нас есть документ, в котором табличная часть «Состав» содержит реквизит «Автомобиль» типа «СправочникСсылка.ТранспортныеСредства». Нужно, чтобы рядом стоящее поле ввода «НомерАвтомобиля» заполнялось значением из реквизита «Автомобиль.ГосНомер».

Установленное значение в поле ввода «НомерАвтомобиля» в табличной части документа

Как установить значение в поле ввода «НомерАвтомобиля» для каждой строки табличной части? В обработчике событий ПриПолученииДанных табличной часть «Состав» напишем следующий код:

Процедура СоставПриПолученииДанных(Элемент, ОформленияСтрок)
	Для каждого ОформлениеСтроки из ОформленияСтрок цикл
		ВычисленноеЗначение =
		ОформлениеСтроки.Ячейки.Автомобиль.Значение.ГосНомер;
		Оформлениестроки.Ячейки.НомерАвтомобиля.
		УстановитьТекст(ВычисленноеЗначение);
	КонецЦикла
КонецПроцедуры

Как правильно удалить строки из текстового файла с помощью встроенного языка системы 1С8?

Предположим, нужно удалить все строки из текста, которые содержат слово «1С».

Процедура УдалитьСтрокиТекста()
	ТекстДок = Новый ТекстовыйДокумент;
	ТекстДок.Прочитать("Текст.txt");
	Сч = 1;
	Пока Сч < ТекстДок.КоличествоСтрок() Цикл
		Строка = ТекстДок.ПолучитьСтроку(Сч);
		Если Найти(Строка, "1С") > 0 Тогда
			ТекстДок.УдалитьСтроку(Сч);
		Иначе  // Благодаря этой переменной мы 
			// не пропускаем строки в тексте
			Сч = Сч + 1;
		КонецЕсли;
	КонецЦикла;
	ТекстДок.Записать("Текст.txt");
КонецПроцедуры

Подобная процедура для правильного удаления строк таблицы значений описана тут. Также можете взглянуть на реализацию удаления строк в текстовом файле на PHP.

Как в 1С8 получить из строки с разделителями определённую подстроку по её позиции?

Для решения этой задачи используем функцию ПолучитьСтр():

//******************************************************************************
// ПолучитьСтр(знач ГдеИщем, Ном = 1, Р = ",")
//
// Параметры: 
//  знач ГдеИщем - строка, Ном = 1 - число, Р = "," - строка
//
// Возвращаемое значение:
//  Строка
//
// Описание:
//  Возвращает подстроку под номером Ном из строки ГдеИщем с разделителями Р  
//  
Функция ПолучитьСтр(знач ГдеИщем, Ном = 1, Р = ";")
	Ном1 = Число(Ном);
	Поз=Найти(ГдеИщем,Р);
	Если (Поз = 0) Тогда Возврат ГдеИщем;КонецЕсли;
	Стр1=Лев(ГдеИщем,Поз-1);
	Если Ном1 = 1 Тогда Возврат Стр1;КонецЕсли;
	СчетчикЦикла = 0;
	Для СчетчикЦикла = 2 По Ном1 Цикл
		ГдеИщем=Сред(ГдеИщем,Поз+1,СтрДлина(ГдеИщем)-Поз);
		Поз=Найти(ГдеИщем,Р);
		Если (Поз = 0) Тогда Возврат ГдеИщем;КонецЕсли;
		Стр=Лев(ГдеИщем,Поз-1);
		Если Ном1 = СчетчикЦикла Тогда Возврат Стр;КонецЕсли;
	КонецЦикла;
КонецФункции // ПолучитьСтр()

Пример использования:

НужнаяСтрока = "1С,PHP,Delphi,HTML,CSS";
Сообщить(ПолучитьСтр(НужнаяСтрока, 3, ","));

В окно служебных сообщений будет выведена подстрока «Delphi». Чтобы посмотреть как работает эта функция вы можете скачать внешнюю обработку здесь.

Пример работы функции ПолучитьСтр() в обработке 1С8

Посмотрите как реализована работа такой же функции в 1С 7.7.

Как проверить существует ли реквизит справочника 1с8?

СтатьяЗатрат.Метаданные().Реквизиты.Найти("ПринятиеКНалоговомуУчету") <> Неопределено

Как перебрать субконто счёта?

Процедура ПолучитьСубконтоСчета(Счет)
	ВидыСубконто = Счет.ВидыСубконто;
	Для Каждого ВидСубконто Из ВидыСубконто Цикл
		Сообщить(ВидСубконто.ВидСубконто);
	КонецЦикла;
КонецПроцедуры

Как устранить ошибку: Тип не является подмножеством типа значений плана видов характеристик?

При попытке перенести данные из одной базы в другую возникла ошибка:

Ошибка при установке значения атрибута контекста (ТипЗначения): 
Тип не является подмножеством типа значений плана видов характеристик

Не переносилось число с длиной 18 и точностью 6 (18.6) из базы источника, так как было установлена длина 15, точность 3 (15.3) в базе приемнике. Чтобы решить данную проблему, нужно в текущем плане видов характеристик изменить длину и точность с 15.3 на 18.6 в диалоге редактирования типа данных.


ПОДПИСКА

Понравилась статья? Поделить с друзьями:
  • Ошибка при установке значения атрибута контекста текущийпочтовыйящик
  • Ошибка при установке значения атрибута контекста текущийпользователь несоответствие типов
  • Ошибка при установке значения атрибута контекста текущаястрока
  • Ошибка при установке значения атрибута контекста текст
  • Ошибка при установке значения атрибута контекста сессия