Ошибка при получении значения атрибута контекста текущиеданные

Текущие данные (управляемая форма) ☑ 0

gaur777

28.09.17

17:00

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

ТекущиеДанные = Элементы.ВходящиеПартии.ТекущиеДанные;

Теперь на управляемой выводит ошибку:

( Ошибка при получении значения атрибута контекста (ТекущиеДанные)

    ТекущиеДанные = Элементы.ВходящиеПартии.ТекущиеДанные;

по причине:

Текущие данные таблицы недоступны на сервере )

ВходящиеПартии — табличная часть

Вроде не сложно. Но как исправить не пойму

1

gaur777

28.09.17

17:01

На клиенте выполняю, пишет: … поле не является объектным типом

2

mxs089

28.09.17

17:02

получить по идентификатору

3

vicof

28.09.17

17:03

ВходящиеПартии не только имя табличной часть, но и имя элемента формы. Одна доступна на сервере, второй на клиенте.

4

vicof

28.09.17

17:03

части*

5

ribuh

28.09.17

17:07

Интересно, а всё же что быстрее, в конфигураторе поставить точку останова на проблемной строке и посмотреть в режиме отладки, что там есть и что можно использовать, или создать тута темку и узнать много нового, чаще всего не о вопросе, а о себе (неичего личного, просто интересно))))))

6

gaur777

28.09.17

17:08

(3) ну так и как быть?

выполняю вот на сервере

ТекущиеДанные = Объект.ВходящиеПартии.ТекущиеДанные;

Enterprise    =  ТекущиеДанные.Площадка;

Ошибка! Площадка одно из полей

7

vicof

28.09.17

17:11

ТекущиеДанные = Объект.ВходящиеПартии.ТекущиеДанные;

выполняй на клиенте

8

dezss

28.09.17

17:11

(6) у тч нет тек. данных…передавай их с клиента.

9

gaur777

28.09.17

17:14

(7) (8) — (1) прочитайте

10

gaur777

28.09.17

17:15

хотя задаю переменную

Перем ТекущиеДанные;

11

dezss

28.09.17

17:15

(9) что показывает отладка???

12

dezss

28.09.17

17:15

и вообще, строка какая-нибудь выделена?

13

vicof

28.09.17

17:16

«…поле не является объектным типом»

какое?

14

dezss

28.09.17

17:17

(12) т.к. при невыделенном ТекущиеДанные = Неопределено

15

gaur777

28.09.17

17:18

(11) как я могу проверить отладчиком если этой строке выходит ошибка?

16

gaur777

28.09.17

17:19

(12) (14) стоит условие

Если ТекущиеДанные = Неопределено Тогда

        Возврат;

КонецЕсли;

17

gaur777

28.09.17

17:20

(13) ну естественно первое которое выбирается в коде.

я же объясняю в обычном приложение всё работало

18

ribuh

28.09.17

17:23

(15) дык на этой строке точку останова поставить, и смотреть, что там………

19

gaur777

28.09.17

17:27

(18) текущиеданные — не является полем объектного типа

20

ribuh

28.09.17

17:30

(19) До текущих данных смотрим, что там есть

в Элементах смотрим что есть

в Объекте смотрим, что есть

ищем, где собака порылась, тьфу, блин, где есть то, что нам нужно…у Вас шансов намного больше, чем у советчиков тут — потому как всё перед глазами — нужно только найти, что хочется)))))

21

YAGolova

28.09.17

17:31

(19) Во общем, вам надо изменить в своей голове парадигму программирования. То что было разрешено в толстом клиенте на обычных формах — ниразу не разрешено в тонком. текущие данные у табличной части доступны только на клиенте

22

dezss

29.09.17

09:12

(15) блин, ну ты же прямо ПЕРЕД выполнением этой строки можешь посмотреть на значения всех используемых в ней сущностей!!!

23

gaur777

29.09.17

11:06

Просто объясните. Как в управляемой форме получить значение по выбранной строке

24

vicof

29.09.17

11:09

Значение чего?

25

oslokot

29.09.17

11:18

(0) Все должно работать, попробуй переименовать табличное поле, скорей всего проблема в (3)

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

(на клиенте)

26

gaur777

29.09.17

11:40

(25) дело в том, что текущиеданные отладчик показывает нормально. тоесть все поля табличной части там есть.

но дело такое, что поля которые я заполняю отрабатываются на сервере:

Функция ПодготовитьОбъект_ConsignorXDTO(ФабрикаВЕТИС,ПараметрыЗапроса)

    
    Consignor        = ФабрикаВЕТИС.Создать(«http://api.vetrf.ru/schema/cdm/cerberus/enterprise»;,  «BusinessMember»);

    Enterprise         = ФабрикаВЕТИС.Создать(«http://api.vetrf.ru/schema/cdm/cerberus/enterprise»;,  «Enterprise»);

    BusinessEntity     = ФабрикаВЕТИС.Создать(«http://api.vetrf.ru/schema/cdm/cerberus/enterprise»;,  «BusinessEntity»);

        
    Enterprise.uuid            = ТекущиеДанные.UUIDПлощадкиОтправителя;

    BusinessEntity.uuid        = ТекущиеДанные.UUIDХСОтправителя;

    
    Consignor.enterprise        = Enterprise;

    Consignor.businessEntity    = BusinessEntity;    

    
    Возврат Consignor;

    
КонецФункции

27

gaur777

29.09.17

11:40

поэтому значение текущиеданные не находит

28

oslokot

29.09.17

12:47

ну значит на сервере получай нужную строку  Объект.ВходящиеПартии[НомерТекСтроки] и обрабатывай

29

gaur777

29.09.17

14:05

(28) мне нужно не по номеру строки

а по выбранной строки

30

famnam

29.09.17

14:09

%НаКлиенте

ТекДанные = Элементы.ТЧ.ТекущиеДанные;

ОбработатьНаСервере(ТекДанные.ПолучитьИдентификатор());

&НаСервере

Процедура ОбработатьНаСервере(Идентификатор)

ТекДанные = Объект.ТЧ.НайтиПоИдентификатору(Идентификатор);

ТекДанные.Площадка = …;

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

Текущие данные таблицы недоступны на сервере

Автор kaidj, 22 ноя 2015, 12:59

0 Пользователей и 1 гость просматривают эту тему.

Доброго времени суток уважаемые гуру!!! Такая проблема:
Имеется табличная часть «Товары» Формы Документа «Продажа»
Её реквизиты:
— Номенклатура (СправочникСсылка.Номенклатура)
— Упаковка (СправочникСсылка.Упаковка)
— Количество (Число)
— ЦенаУпаковки (Число)
— Цена (Число)
Имеется справочник Упаковка
Имеется справочник Номенклатура с табличной частью «ЦенаЗаУпаковку»
реквизиты ТЧ:
— Упаковка (СправочникСсылка.Упаковка)
— Цена (Число)

Нужно при заполнении «Номенклатура», «Упаковка», «Количество» что бы автоматически заполнялись реквизиты:
— «ЦенаУпаковки» (из Справочник.Упаковка ТЧ ЦенаЗаУпаковку реквизит «Цена»)
— «Цена» (умножить автоматически заполненый реквизит «ЦенаУпаковки» на заполненый реквизит «Количество»)
в общем я под эту задачу наваял такой «код»

&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)
      ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
      ТекущаяСтрока.ЦенаУпаковки = НайтиНоменклатуру(ТекущаяСтрока.Номенклатура);
      ТекущаяСтрока.Цена = ТекущаяСтрока.ЦенаУпаковки * ТекущаяСтрока.Количество;
      // Вставить содержимое обработчика.
КонецПроцедуры
Функция НайтиНоменклатуру(Номенклатура)
      ТекущаяСтрока = Элементы.Товары.ТекущиеДанные.Упаковка;
      Запрос = новый Запрос;
      Запрос.Текст = «ВЫБРАТЬ
                     |      Номенклатура.ЦенаЗаУпаковку.(
                     |            Цена
                     |      )
                     |ИЗ
                     |      Справочник.Номенклатура КАК Номенклатура
                     |ГДЕ
                     |    Номенклатура.Ссылка = &Номенклатура
                     |И Номенклатура.ЦенаЗаУпаковку.Ссылка = &ТекущаяСтрока»;
        Запрос.УстановитьПараметр(«Номенклатура», Номенклатура);
        Результат = Запрос.Выполнить();
        Выборка = Результат.Выбрать();
              Если Выборка.Следующий() Тогда
              Возврат Выборка.Объем;
        КонецЕсли;
        Возврат 0; // или 1
КонецФункции

в итоге выдает ошибку:

{Документ.Продажа.Форма.ФормаДокумента.Форма(43)}: Ошибка при получении значения атрибута контекста (ТекущиеДанные)      ТекущаяСтрока = Элементы.Товары.ТекущиеДанные.Упаковка;по причине:Текущие данные таблицы недоступны на сервереТекущие данные таблицы недоступны на сервере


1) перед функцией поставить директиву компиляции &наСервереБезКонтекста.
2) первую строчку из функции убрать, номенклатура в параметрах передается.
3) что за «Объем» в выборке? вроде в запросе такого нет.

4) исправить то что выше и сказать на что ругается дальше =)


о. тока хотел начертать…

Добавлено: 22 ноя 2015, 21:12


Но самое интересное это передача файлов туда сюда!

Помог? Нажми — Спасибо :)
skype: Soprov1C


ваще жесть!

1. для поиска цены упаковки надо в функцию отправить не только номенклатуру, но и упаковку. а не получать ее (упаковку) внутри функции!
2. WTF???

Цитата: kaidj от 22 ноя 2015, 12:59Запрос.Текст = «ВЫБРАТЬ
                     |      Номенклатура.ЦенаЗаУпаковку.(
                     |            Цена
                     |      )
                     |ИЗ
                     |      Справочник.Номенклатура КАК Номенклатура
                     |ГДЕ
                     |    Номенклатура.Ссылка = &Номенклатура
                     |И Номенклатура.ЦенаЗаУпаковку.Ссылка = &ТекущаяСтрока»;
        Запрос.УстановитьПараметр(«Номенклатура», Номенклатура);

Получил помощь — скажи СПАСИБО.
Разобрался сам — расскажи другим.


А что в запросе можно функцию сразу писать?)))

Типа ПолучитьДанные(Док.Код) как Данные

» Номенклатура.ЦенаЗаУпаковку.(
                     |            Цена
                     |      )» Что это?)):lol:


Цитата: Sinsinmin от 23 ноя 2015, 08:40
А что в запросе можно функцию сразу писать?)))

Типа ПолучитьДанные(Док.Код) как Данные

» Номенклатура.ЦенаЗаУпаковку.(
                     |            Цена
                     |      )» Что это?)):lol:

скобки появились в конструкторе запроса (цена — это реквизит табличной части справочника)

Добавлено: 23 ноя 2015, 10:13


ну в общем как то так:

&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)
      ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
      Упаковка=Элементы.Товары.ТекущиеДанные.Упаковка;
      ТекущаяСтрока.ЦенаУпаковки = НайтиНоменклатуру(ТекущаяСтрока.Номенклатура,Упаковка);
      ТекущаяСтрока.Цена = ТекущаяСтрока.ЦенаУпаковки * ТекущаяСтрока.Количество;
      // Вставить содержимое обработчика.
КонецПроцедуры
Функция НайтиНоменклатуру(Номенклатура,ТекущаяСтрока)
      //ТекущаяСтрока = Элементы.Товары.ТекущиеДанные.Упаковка;
      Запрос = новый Запрос;
      Запрос.Текст = "ВЫБРАТЬ
                     |      Номенклатура.ЦенаЗаУпаковку.(
                     |            Цена
                     |      )
                     |ИЗ
                     |      Справочник.Номенклатура КАК Номенклатура
                     |ГДЕ
                     |    Номенклатура.Ссылка = &Номенклатура
                     |И Номенклатура.ЦенаЗаУпаковку.Ссылка = &ТекущаяСтрока";
        Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Запрос.УстановитьПараметр("ТекущаяСтрока", ТекущаяСтрока);
        Результат = Запрос.Выполнить();
        Выборка = Результат.Выбрать();
              Если Выборка.Следующий() Тогда
              Возврат Выборка.ЦенаЗаУпаковку.Цена;
        КонецЕсли;
        Возврат 0; // или 1
КонецФункции

ошибки в этом случае не выдает, но и не заполняет элемент строки «ЦенаУпаковки»

Добавлено: 23 ноя 2015, 11:04


ИТОГ вот такой:

&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)
      ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
      Упаковка=Элементы.Товары.ТекущиеДанные.Упаковка;
      ТекущаяСтрока.ЦенаУпаковки = НайтиНоменклатуру(ТекущаяСтрока.Номенклатура,Упаковка);
      ТекущаяСтрока.Цена = ТекущаяСтрока.ЦенаУпаковки * ТекущаяСтрока.Количество;
      // Вставить содержимое обработчика.
КонецПроцедуры
Функция НайтиНоменклатуру(Номенклатура,Упаковка)
      //ТекущаяСтрока = Элементы.Товары.ТекущиеДанные.Упаковка;
      Запрос = новый Запрос;
      Запрос.Текст = "ВЫБРАТЬ
                     |      Номенклатура.ЦенаЗаУпаковку.Цена
                     |   
                     |ИЗ
                     |      Справочник.Номенклатура КАК Номенклатура
                     |ГДЕ
                     |    Номенклатура.Ссылка = &Номенклатура
                     |И Номенклатура.ЦенаЗаУпаковку.Упаковка.Ссылка = &Упаковка";
        Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Запрос.УстановитьПараметр("Упаковка", Упаковка);
        Результат = Запрос.Выполнить();
        Выборка = Результат.Выбрать();
              Если Выборка.Следующий() Тогда
              Возврат Выборка.Цена;
        КонецЕсли;
        Возврат 0; // или 1
КонецФункции

ОШИБКА: {Документ.Продажа.Форма.ФормаДокумента.Форма(59)}: Поле объекта не обнаружено (Цена)
              Возврат Выборка.Цена;


«ВЫБРАТЬ
                     |      Номенклатура.ЦенаЗаУпаковку.Цена КАК Цена


Цитата: vitasw от 23 ноя 2015, 11:14
«ВЫБРАТЬ
                     |      Номенклатура.ЦенаЗаУпаковку.Цена КАК Цена

{Документ.Продажа.Форма.ФормаДокумента.Форма(15)}: Ошибка при вызове метода контекста (НайтиНоменклатуру)
  ТекущаяСтрока.ЦенаУпаковки = НайтиНоменклатуру(ТекущаяСтрока.Номенклатура,Упаковка);
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства ‘ret’:
   форма: Элемент
   имя: {http://v8.1c.ru/8.2/managed-application/modules}ret
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа ‘РезультатЗапроса’


ЛЮДИ!!! Опомнитесь!!! :xfbnsdfb:

kaidj, думайте, о том ЧТО вы делаете и ДЛЯ ЧЕГО!!!
програмировать — это не просто наваял запрос и гуляй Вася!

вот же…

&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)
      СтрокаТЧ = Элементы.Товары.ТекущиеДанные;
      СтрокаТЧ.ЦенаУпаковки = ПолучитьЦенуУпаковки(СтрокаТЧ.Номенклатура, СтрокаТЧ.Упаковка); //научитесь сразу давать методам логичные названия!
      СтрокаТЧ.Цена = СтрокаТЧ.ЦенаУпаковки * СтрокаТЧ.Количество;
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьЦенуУпаковки(Номенклатура, Упаковка)
      Запрос = новый Запрос;
      Запрос.Текст = "ВЫБРАТЬ
                     |      НоменклатураЦенаЗаУпаковку.Цена КАК Цена
                     |ИЗ
                     |      Справочник.Номенклатура.ЦенаЗаУпаковку КАК НоменклатураЦенаЗаУпаковку //в качестве основной таблицы сразу берем ТЧ ЦенаЗаУпаковку!
                     |ГДЕ
                     |    НоменклатураЦенаЗаУпаковку.Ссылка = &Номенклатура
                     |    И НоменклатураЦенаЗаУпаковку.Упаковка = &Упаковка";
        Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
        Запрос.УстановитьПараметр("Упаковка", Упаковка);
        РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Если ВыборкаДетальныеЗаписи.Следующий() Тогда
Возврат ВыборкаДетальныеЗаписи.Цена;
Иначе
Возврат 0;
КонецЕсли;
КонецФункции

как-то так. не проверял.

Получил помощь — скажи СПАСИБО.
Разобрался сам — расскажи другим.


Очень замечательно, что вы научились копипастить ошибки. А попробовать самому подумать/разобраться?
Результатом выполнения этого запроса = вложенный запрос, что естественно вызывает ошибку? Какую из ста тыщ пятьсот строк в таблице цен номенклатуры вы хотите получить?


Текущие данные (управляемая форма)

Я

gaur777

28.09.17 — 17:00

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

ТекущиеДанные = Элементы.ВходящиеПартии.ТекущиеДанные;

Теперь на управляемой выводит ошибку:

( Ошибка при получении значения атрибута контекста (ТекущиеДанные)

    ТекущиеДанные = Элементы.ВходящиеПартии.ТекущиеДанные;

по причине:

Текущие данные таблицы недоступны на сервере )

ВходящиеПартии — табличная часть

Вроде не сложно. Но как исправить не пойму

gaur777

1 — 28.09.17 — 17:01

На клиенте выполняю, пишет: … поле не является объектным типом

mxs089

2 — 28.09.17 — 17:02

получить по идентификатору

vicof

3 — 28.09.17 — 17:03

ВходящиеПартии не только имя табличной часть, но и имя элемента формы. Одна доступна на сервере, второй на клиенте.

vicof

4 — 28.09.17 — 17:03

части*

ribuh

5 — 28.09.17 — 17:07

Интересно, а всё же что быстрее, в конфигураторе поставить точку останова на проблемной строке и посмотреть в режиме отладки, что там есть и что можно использовать, или создать тута темку и узнать много нового, чаще всего не о вопросе, а о себе (неичего личного, просто интересно))))))

gaur777

6 — 28.09.17 — 17:08

(3) ну так и как быть?

выполняю вот на сервере

ТекущиеДанные = Объект.ВходящиеПартии.ТекущиеДанные;

Enterprise    =  ТекущиеДанные.Площадка;

Ошибка! Площадка одно из полей

vicof

7 — 28.09.17 — 17:11

ТекущиеДанные = Объект.ВходящиеПартии.ТекущиеДанные;

выполняй на клиенте

dezss

8 — 28.09.17 — 17:11

(6) у тч нет тек. данных…передавай их с клиента.

gaur777

9 — 28.09.17 — 17:14

(7) (8) — (1) прочитайте

gaur777

10 — 28.09.17 — 17:15

хотя задаю переменную

Перем ТекущиеДанные;

dezss

11 — 28.09.17 — 17:15

(9) что показывает отладка???

dezss

12 — 28.09.17 — 17:15

и вообще, строка какая-нибудь выделена?

vicof

13 — 28.09.17 — 17:16

«…поле не является объектным типом»

какое?

dezss

14 — 28.09.17 — 17:17

(12) т.к. при невыделенном ТекущиеДанные = Неопределено

gaur777

15 — 28.09.17 — 17:18

(11) как я могу проверить отладчиком если этой строке выходит ошибка?

gaur777

16 — 28.09.17 — 17:19

(12) (14) стоит условие

Если ТекущиеДанные = Неопределено Тогда

        Возврат;

КонецЕсли;

gaur777

17 — 28.09.17 — 17:20

(13) ну естественно первое которое выбирается в коде.

я же объясняю в обычном приложение всё работало

ribuh

18 — 28.09.17 — 17:23

(15) дык на этой строке точку останова поставить, и смотреть, что там………

gaur777

19 — 28.09.17 — 17:27

(18) текущиеданные — не является полем объектного типа

ribuh

20 — 28.09.17 — 17:30

(19) До текущих данных смотрим, что там есть

в Элементах смотрим что есть

в Объекте смотрим, что есть

ищем, где собака порылась, тьфу, блин, где есть то, что нам нужно…у Вас шансов намного больше, чем у советчиков тут — потому как всё перед глазами — нужно только найти, что хочется)))))

YAGolova

21 — 28.09.17 — 17:31

(19) Во общем, вам надо изменить в своей голове парадигму программирования. То что было разрешено в толстом клиенте на обычных формах — ниразу не разрешено в тонком. текущие данные у табличной части доступны только на клиенте

dezss

22 — 29.09.17 — 09:12

(15) блин, ну ты же прямо ПЕРЕД выполнением этой строки можешь посмотреть на значения всех используемых в ней сущностей!!!

gaur777

23 — 29.09.17 — 11:06

Просто объясните. Как в управляемой форме получить значение по выбранной строке

vicof

24 — 29.09.17 — 11:09

Значение чего?

oslokot

25 — 29.09.17 — 11:18

(0) Все должно работать, попробуй переименовать табличное поле, скорей всего проблема в (3)

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

(на клиенте)

gaur777

26 — 29.09.17 — 11:40

(25) дело в том, что текущиеданные отладчик показывает нормально. тоесть все поля табличной части там есть.

но дело такое, что поля которые я заполняю отрабатываются на сервере:

Функция ПодготовитьОбъект_ConsignorXDTO(ФабрикаВЕТИС,ПараметрыЗапроса)

    

    Consignor        = ФабрикаВЕТИС.Создать(«http://api.vetrf.ru/schema/cdm/cerberus/enterprise»;,  «BusinessMember»);

    Enterprise         = ФабрикаВЕТИС.Создать(«http://api.vetrf.ru/schema/cdm/cerberus/enterprise»;,  «Enterprise»);

    BusinessEntity     = ФабрикаВЕТИС.Создать(«http://api.vetrf.ru/schema/cdm/cerberus/enterprise»;,  «BusinessEntity»);

        

    Enterprise.uuid            = ТекущиеДанные.UUIDПлощадкиОтправителя;

    BusinessEntity.uuid        = ТекущиеДанные.UUIDХСОтправителя;

    

    Consignor.enterprise        = Enterprise;

    Consignor.businessEntity    = BusinessEntity;    

    
    Возврат Consignor;

    
КонецФункции

gaur777

27 — 29.09.17 — 11:40

поэтому значение текущиеданные не находит

oslokot

28 — 29.09.17 — 12:47

ну значит на сервере получай нужную строку  Объект.ВходящиеПартии[НомерТекСтроки] и обрабатывай

gaur777

29 — 29.09.17 — 14:05

(28) мне нужно не по номеру строки

а по выбранной строки

  

famnam

30 — 29.09.17 — 14:09

%НаКлиенте

ТекДанные = Элементы.ТЧ.ТекущиеДанные;

ОбработатьНаСервере(ТекДанные.ПолучитьИдентификатор());

&НаСервере

Процедура ОбработатьНаСервере(Идентификатор)

ТекДанные = Объект.ТЧ.НайтиПоИдентификатору(Идентификатор);

ТекДанные.Площадка = …;

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

Содержание:

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

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

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

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

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

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

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

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

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

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

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

Доброго времени суток уважаемый!

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

В случае со штукатуркой, у одного и того же элемента справочника, допустим Rotband (30кг)

меняется расход в зависимости от способа нанесения.

То есть существует 3 способа штукатурки, под плинтус, под правило и под маяк, в порядке увеличения.

Допустим расходы равны 6, 8,5 и 12кг на квадратный метр соответственно.

Напомню, что в предыдущих обсуждениях Вы помогли мне рассчитать и переносить в таблицу «работы со стенами» значения для определенных помещений при их добавлении… То есть теперь, моя задача, организовать расчет материала при различных видах работ. Поэтому я создаю таблицу следующего содержания..

Помещение — ссылка на справочник «Помещения» где хранятся названия «помещений»

Вид работы — ссылка на справочник «ВидыРаботСтены» где хранятся наименования возможных видов работ. Сделал справочник, что бы можно было дополнять в режиме Предприятие, если стоит сделать перечисление, и заранее указать все виды работ, прошу сообщить об этом..

Материал — ссылка на справочник «Номенклатура»  где по умолчанию должен подставлятся определенный материал, в зависимости от выбраного вида работ. Тут стоит отметить, что доступный материал для выбора должен быть только подходящий, то есть только штукатурка.. Вы уже советовали мне хранить эти значения в константе, однако как это использовать я не понимаю.. Поверьте, очень неудобно просить разжевать этот, видимо элементарный момент..

РабочаяПлощадь — Число, которое уже благодаря Вам, подставляется из соседней таблицы и доступно для редактирования, на случай комбинированых поверхностей (Допустим на 20и метровой кухне 12 ламинат и 8 плитка).

Расход — Число, которое я планировал брать из реквизита элемента справочника. Допустим для обойного клея это 0,8кг на кв.м, а длчя краски 1,5кг на кв.м, эти значения, я планировал заносить в справочник номенклатура и подставлять их в эту таблицу… Но вот тут то и встал вопрос о том, как быть со штукотуркой… Варианты, которые я смог подумать.. Это создание в справочнике 3х реквизитов, но востребованы они будут только в случае со штукатуркой, что хоть отджельный справочник для штукатурки создавай… Создал именно 3 разных ВидаРаботы ШтукатуркаПлинтус, ШтукатуркаПравило, ШтукатуркаМаяк. И подумал, что самое логичное, внедрить в расчет коэфициенты в духе 0,8, 1, 1,2… Но опять же возможно для других видов штукатурки, данный коэфициент будет не корректен. И как быть в этом случае, я совсем запутался в мыслях и не представляю. Самое логичное получается, на самом деле, создать отдельный справочник с 3мя необходимыми реквизитами?

Количество основного материала — число, которое будет получатся в результате умножения «рабочей площади в строке, на расход.

Стоимость работ — число, которое по плану будет братся из справочника и получатся в результате умножения на «рабочуюПлощадь» в зависимости от выбраного ВидаРаботы

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

Прошу поправить, если где то моя логика и выдуманый механизм, по Вашему мнению не правильны и помочь в реализации этого механизма на примере штукатурки, дальнейшие материалы я думаю без проблем смогу посчитать на этом примере!

Заранее благодарю вас Уважаемый СенСей! МирТрудМай! С наступающим праздником победы! Всех благ Вам и Вашим близким!

PS  Не знал как более корректно назвать тему данного обсуждения..

Ошибка при получении значения атрибута контекста (ТекущийПользователь)

bless18
06.04.2010 09:32 Прочитано: 49822

Ошибка при получении значения атрибута контекста (ТекущийПользователь): Попытка получения неинициализированного значения параметра сеанса
Пользователь = ПараметрыСеанса.ТекущийПользователь;
по причине:
Попытка получения неинициализированного значения параметра сеансаКод 1C v 8.х

 Процедура ПриНачалеРаботыСистемы()
Пользователь = ПараметрыСеанса.ТекущийПользователь;
Если обЗначениеНеЗаполнено(Пользователь.Сотрудник) Тогда
ИмяПользователя = СокрЛП(Пользователь.Наименование);
Иначе
ИмяПользователя = СокрЛП(Пользователь.Сотрудник.Наименование);
КонецЕсли;
Предупреждение("Здравствуйте уважаемый пользователь """+ИмяПользователя+"""
|Система готова к работе.", 3);
КонецПроцедуры

Где происходит их инициализация?

Yandex
Возможно, вас также заинтересует

Реклама на портале

E_Migachev
06.04.2010 09:48 Ответ № 1

Когда в Общие — Параметры сеанса добавил ТекущийПользователь, то его нужно определять при загрузке:
так же в процедуре ПриНачалеРаботыСистемы пишешь что то типо:
Код 1C v 8.х

 ИмяПользователя = ИмяПользователя();
Если Не ПустаяСтрока(ИмяПользователя) Тогда
ТекущийПользователь = Справочники.Пользователи.НайтиПоКоду(ИмяПользователя);
КонецЕсли;
ПараметрыСеанса.ТекущийПользователь = ТекущийПользователь;

Это работает при условии, что ИмяПользователя заданное в конфигураторе, равно Имени введенному в справочнике Пользователей в реквизит Код

bless18
06.04.2010 09:56 Ответ № 2

А если не совпадают, можно как-нибудб привязать пользователя к сотруднику?

E_Migachev
06.04.2010 09:57 Ответ № 3

А лучше добавить процедуру в Модуль сеанса(Правой клавишей щелкаещь на названии конфигурации и выбираешь Открыть модуль сеанса)

В ней создаешь Процедура УстановкаПараметровСеанса () и в ней пишешь код который я предложил выше или так, Если не совпадают:

Код 1C v 8.х

 Процедура УстановкаПараметровСеанса()
Спр = Справочники.Сотрудники;
ПараметрыСеанса.ТекущийПользователь=Спр.НайтиПоРеквизиту("Пользователь1С", ИмяПользователя());
КонецПроцедуры
//где Пользователь1С, это реквизит справочника сотрудники, и именем как вбито в конфигураторе

Эта процедура вызывается раньше чем ПриНачалеРаботыСистемы.

Ну а дальше подставлять сопоставленное значение при создании соответствующего документа:

Код 1C v 8.х

  Док.Пользователь=ПараметрыСеанса.Пользователь;   

События модуля сеанса:
Глобальный контекст
УстановкаПараметровСеанса (SessionParametersSetting)
Синтаксис:
УстановкаПараметровСеанса(<Требуемые параметры>)
Параметры:
<Требуемые параметры>
Тип: Массив; Неопределено. Массив устанавливаемых идентификаторов параметров сеанса, которые нужно инициализировать, если обработчик вызывается перед использованием неинициализированных параметров сеанса.
Неопределено, если обработчик события вызывается системой при начале сеанса или при захвате соединения из пула.
Описание:
Событие предназначено для инициализации параметров сеанса.
Вызывается системой:
при установке соединения с информационной базой или при захвате соединения с информационной базой из пула до вызова всех остальных обработчиков. Значение параметра «Параметры сеанса» — Неопределено;
перед фактическим использованием значений параметров сеанса, которые не были инициализированы ранее. В этом случае значением параметра «Параметры сеанса» является массив идентификаторов неинициализированных параметров сеанса, значения которых используются. Если после выполнения обработчика хотя бы один из перечисленных параметров сеанса остается неинициализированным, то возникает исключение.

bless18
06.04.2010 12:13 Ответ № 4

Спасибо вам огромное! Вы мне очень помогли!

bless18
06.04.2010 12:15 Ответ № 5

Спасибо вам огромное! Вы мне очень помогли!

E_Migachev
06.04.2010 15:44 Ответ № 6

Пожалуйста )

Подсказка: Для выделения Кода используйте (в редакторе).

Ошибка в 1С 8. Ошибка при получении значения атрибута контекста (ОсновнаяРоль), Недопустимо использование свойства ОсновнаяРоль

Описание ошибки:
Проблема стала возникать после того, как в серверную базу УТ 10.3 был добавлен функционал Библиотеки МДЛП. Ошибка не проявляла себя явно при работе в режиме 1С: Предприятие, но негативно влияла на выполнение некоторых регламентных заданий, так что они аварийно прерывались.

Найденные решения:

{ОбщийМодуль.Пользователи.Модуль(116)}: Ошибка при получении значения атрибута контекста (ОсновнаяРоль)
по причине:
Недопустимо использование свойства «ОсновнаяРоль»

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

1С 8 как исправить ошибку при получении значения атрибута контекста ОсновнаяРоль
Рис. 1. Пример ошибки «Ошибка при получении значения атрибута контекста (ОсновнаяРоль)» в регламентном задании «Наличие новых эд в сервисе ЭДО« 

Так же и в другом регламентном задании стала проявляться ошибка «Ошибка при получении значения атрибута контекста (ОсновнаяРоль) по причине: Недопустимо использование свойства «ОсновнаяРоль».


Рис. 2. Пример ошибки «Недопустимо использование свойства «ОсновнаяРоль» в регламентном задании «Выполнение обмена по сценарию…»

Удивителен тот факт, что код «Метаданные.ОсновнаяРоль» вполне нормальный. Т.е. конструкция вызывается в конфигураторе при конфигурировании как свойство объекта «Метаданные». Так же не возникает ошибок при проверка кода при сохранении изменений конфигурации. 

Нажатие на изображении увеличит его

Рис. 3. Причина ошибки в коде, конструкция «Метаданные.ОсновнаяРоль = Неопределено».

Релиз используемой платформы 1С в базе, в которой возникла проблема — 8.3.18.1741


Рис. 4. Сведения о конфигурации, версии платформы и параметры конфигурации.

Удивительно, что описание данного свойства «ОсновнаяРоль» отсутствует в Синтакс-помощнике. Хотя, как уже было коротко упомянуто, свойство «ОсновнаяРоль» глобального свойства «Метеданные» используется в библиотеке МДЛП. Исходно основное назначение библиотеки — для конфигураций, работающих в режиме управляемого приложения. Конфигурация 1С: Управление торговлей 10.3 работает в другом режиме — обычного приложения. Поэтому получается, что конструкция кода эксплуатируется в редко используемой библиотеке и ее работоспособность не совсем понятна в текущем релизе платформы.

В сети оказалось достаточно мало вспомогательной информации об этой ошибке. Из найденного, что может кому-то помочь — это обсуждение на форуме forum.1c.ru «После обновления на 2.0.15.8 выпадает ошибка: Недопустимо использование свойства «ОсновнаяРоль».

Поэтому возможно, но это только неподтвержденное предположение, что метод работает только в конфигурациях, работающих в режиме управляемого приложения, т.к. о нем отсутствует какая-либо информация в официальной методике — «Синтакс-помощнике». Поскольку упоминание проблемы с «ОсновнаяРоль» и ее актуальное решение по приведенной выше ссылке действует для конфигурации 1С: Деньги, которая работает исключительно в режиме обычного приложения (интерфейса).

1С 8 свойство метода метаданные конфигурации ОсновнаяРоль
Рис. 5. Отсутствие в «Синтакс-помощнике» описания метода «ОсновнаяРоль»

Поэтому решением данной проблемы стало изменение кода на конструкцию: Метаданные.ОсновныеРоли.Количество()

Нажатие на изображении увеличит его

Рис. 6. Устранение ошибки «Ошибка при получении значения атрибута контекста (ОсновнаяРоль)» заменой текста кода.

Таким образом код стал актуальным для исполнения и в дальнейшем не вызывал ошибку.

Оцените, помогло ли Вам предоставленное описание решения ошибки?




© www.azhur-c.ru 2014-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.

21-07-2022

Журавлев А.С.
(Сайт azhur-c.ru)

Konstantan

1 / 1 / 1

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

Сообщений: 74

1

Ошибка при получении атрибута значения контекста (Номенклатура)

11.10.2018, 12:33. Показов 5662. Ответов 3

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


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
40
41
42
43
44
Процедура УдалениеСтрокНажатие(Элемент)
    
    Запрос = Новый Запрос;  
    Запрос.УстановитьПараметр("Номенклатура",Номенклатура);
    Запрос.Текст =
    "ВЫБРАТЬ
    |   РеализацияТоваровУслугТовары.Ссылка
    |ИЗ
    |   Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    |ГДЕ
    |   РеализацияТоваровУслугТовары.Номенклатура = &Номенклатура";
    
    Выборка = Запрос.Выполнить();
    МассивТоваров=новый Массив; 
    Значения= Выборка.Выбрать();
    Пока Значения.Следующий() Цикл
        ссылка = Значения.ссылка ;
        ДокументОбъект = ссылка.ПолучитьОбъект();
        i=0;
        Для каждого ТекСтрока Из ДокументОбъект.Товары Цикл
            Если ТекСтрока.Номенклатура = Номенклатура Тогда
                МассивТоваров.Добавить(ТекСтрока);
                Сообщить("Значение: "+ ТекСтрока.Номенклатура +" подходит!"); 
                i=i+1
            Иначе
                Сообщить("Значение: "+ТекСтрока.Номенклатура+ " не подходит!");
            КонецЕсли
        КонецЦикла;
        Для  каждого ТекСтрокаМас Из    МассивТоваров Цикл
            Если Вопрос("Удалить строку со значением  " + ТекСтрокаМас.Номенклатура + "?" ,РежимДиалогаВопрос.ДаНет,15)=КодВозвратаДиалога.Да Тогда
                
                
                ДокументОбъект.Товары.Удалить(ТекСтрокаМас);
                
                
                Сообщить("Строка удалена!");
            Иначе
                Сообщить("Отмена удаления!");
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;
    
    
КонецПроцедуры

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

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

0

Тест

Эксперт 1С

383 / 162 / 56

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

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

11.10.2018, 12:44

2

В каком месте то ошибка происходит?

0

856 / 655 / 111

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

Сообщений: 2,410

11.10.2018, 13:36

3

Полный текст ошибки выложите

0

Эксперт 1С

841 / 604 / 211

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

Сообщений: 2,101

11.10.2018, 20:10

4

Лучший ответ Сообщение было отмечено GreenkA как решение

Решение

Konstantan, МассивТоваров не очищается перед обработкой следующего документа.

2

Не работает с 1с 8.2 Бухгалтерия

Модераторы: Дмитрий Юхтимовский, Лысиков Денис

Не работает с 1с 8.2 Бухгалтерия

Не работает с 1с 8.2 Бухгалтерия Версия 3.0, а 2.0 работает. После объедения выдает ошибку {ОбщийМодуль.ПользователиКлиентСервер.Модуль(22)}: Ошибка при получении значения атрибута контекста (ТекущийПользователь)
Возврат ?(ЗначениеЗаполнено(ПараметрыСеанса.ТекущийПользователь),
по причине:
Попытка получения неинициализированного значения параметров

tanksod
 
Сообщений: 9
Зарегистрирован: 24 фев 2014, 12:38

Re: Не работает с 1с 8.2 Бухгалтерия

Сообщение Лысиков Денис » 27 фев 2014, 13:16

Здравствуйте! Проверьте каким образом Вы объединили модуль сеанса. Не удалили ли Вы оттуда типовые процедуры по инициализации параметров сеансов.

Лысиков Денис
 
Сообщений: 86
Зарегистрирован: 11 фев 2013, 21:46

Re: Не работает с 1с 8.2 Бухгалтерия

Сообщение tanksod » 27 фев 2014, 14:42

теперь вышла ошибка.
МодульСеанса(11,7)}: Переменная не определена (ТребуемыеПараметры)
Если <<?>>ТребуемыеПараметры = Неопределено ИЛИ ТребуемыеПараметры.Найти(«APDEX_НастройкиЗамеров»)<>Неопределено Тогда (Проверка: Сервер)
{МодульСеанса(11,45)}: Переменная не определена (ТребуемыеПараметры)
Если ТребуемыеПараметры = Неопределено ИЛИ <<?>>ТребуемыеПараметры.Найти(«APDEX_НастройкиЗамеров»)<>Неопределено Тогда (Проверка: Сервер)
сам модуль сеанса
// СтандартныеПодсистемы
СтандартныеПодсистемыСервер.УстановкаПараметровСеанса(ИменаПараметровСеанса);
// Конец СтандартныеПодсистемы
// АПДЕКС

Если ТребуемыеПараметры = Неопределено ИЛИ ТребуемыеПараметры.Найти(«APDEX_НастройкиЗамеров»)<>Неопределено Тогда
ХранилищеЗначения = Новый ХранилищеЗначения(Новый Соответствие);
ПараметрыСеанса.APDEX_ТекущийЗамерВремени = ХранилищеЗначения;

APDEX_Настройки = APDEX_ОценкаПроизводительностиСерверВызовСервера.ПолучитьНастройки();
APDEX_НастройкиЗамеров = Новый Структура;
APDEX_НастройкиЗамеров.Вставить(«APDEX_ОтключитьЗамер»,APDEX_Настройки.APDEX_ОтключитьЗамер);
APDEX_НастройкиЗамеров.Вставить(«APDEX_МинимальноеВремяЗамера»,APDEX_Настройки.APDEX_МинимальноеВремяЗамера);
APDEX_НастройкиЗамеров.Вставить(«APDEX_ИдентификаторБазыAPDEX»,APDEX_Настройки.APDEX_ИдентификаторБазыAPDEX);
APDEX_НастройкиЗамеров.Вставить(«APDEX_СпособЗаписиЗамеров»,APDEX_Настройки.APDEX_СпособЗаписиЗамеров);

ПараметрыСеанса.APDEX_НастройкиЗамеров = Новый ФиксированнаяСтруктура(APDEX_НастройкиЗамеров);
КонецЕсли;

tanksod
 
Сообщений: 9
Зарегистрирован: 24 фев 2014, 12:38

Re: Не работает с 1с 8.2 Бухгалтерия

Сообщение Лысиков Денис » 28 фев 2014, 09:11

Если в типовой процедуре модуля сеансов не используется переменная ТребуемыеПараметры. тогда вообще удалите условие «Если ТребуемыеПараметры = Неопределено ИЛИ ТребуемыеПараметры.Найти(«APDEX_НастройкиЗамеров»)<>Неопределено Тогда» оставьте только следующий код:

ХранилищеЗначения = Новый ХранилищеЗначения(Новый Соответствие);
ПараметрыСеанса.APDEX_ТекущийЗамерВремени = ХранилищеЗначения;

APDEX_Настройки = APDEX_ОценкаПроизводительностиСерверВызовСервера.ПолучитьНастройки();
APDEX_НастройкиЗамеров = Новый Структура;
APDEX_НастройкиЗамеров.Вставить(«APDEX_ОтключитьЗамер»,APDEX_Настройки.APDEX_ОтключитьЗамер);
APDEX_НастройкиЗамеров.Вставить(«APDEX_МинимальноеВремяЗамера»,APDEX_Настройки.APDEX_МинимальноеВремяЗамера);
APDEX_НастройкиЗамеров.Вставить(«APDEX_ИдентификаторБазыAPDEX»,APDEX_Настройки.APDEX_ИдентификаторБазыAPDEX);
APDEX_НастройкиЗамеров.Вставить(«APDEX_СпособЗаписиЗамеров»,APDEX_Настройки.APDEX_СпособЗаписиЗамеров);

ПараметрыСеанса.APDEX_НастройкиЗамеров = Новый ФиксированнаяСтруктура(APDEX_НастройкиЗамеров);

Лысиков Денис
 
Сообщений: 86
Зарегистрирован: 11 фев 2013, 21:46

Re: Не работает с 1с 8.2 Бухгалтерия

Сообщение tanksod » 03 мар 2014, 09:46

спасибо большое. помагло :)

tanksod
 
Сообщений: 9
Зарегистрирован: 24 фев 2014, 12:38


Вернуться в APDEX — статистика длительности операций

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Содержание:

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

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

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

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

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

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

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

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

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

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

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

jediAlex

4 / 4 / 4

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

Сообщений: 638

1

Создать документ с данными выбранной строки ТЧ формы

31.10.2017, 11:39. Показов 7032. Ответов 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
&НаСервере
Процедура СформироватьФормуОВыдачеЗаданияНаСервере()
    // Вставить содержимое обработчика.
// Вставить содержимое обработчика.
    НачатьТранзакцию(РежимУправленияБлокировкойДанных.Автоматический);
 
    ИнформЛистокОВыдачеЗадания = Документы.ИнформационныйЛистокОВыдачеЗадания.СоздатьДокумент();
    ИнформЛистокОВыдачеЗадания.Дата = ТекущаяДата();
    ИнформЛистокОВыдачеЗадания.Объект =Объект.ШифрОбъекта ;
     ИнформЛистокОВыдачеЗадания.Предприятие=Объект.ПлощадкаСтроительства;
    ИнформЛистокОВыдачеЗадания.ОбъектныйГрафик = Объект.Ссылка;
    ИнформЛистокОВыдачеЗадания.ГруппаВыдающаяЗадание=Объект.Задания[НомерЗадания].ВыдающийОтдел;
    ИнформЛистокОВыдачеЗадания.ГруппаПолучающаяЗадание = Объект.Задания[НомерЗадания].ПринимающийОтдел;
    ИнформЛистокОВыдачеЗадания.СоставЗадания=Объект.Задания[НомерЗадания].Задание;
    ИнформЛистокОВыдачеЗадания.СрокПланируемый=Объект.Задания[НомерЗадания].ДатаВыдачиПлан;
    ИнформЛистокОВыдачеЗадания.СрокФактический=Объект.Задания[НомерЗадания].ДатаВыдачиФакт;
    ИнформЛистокОВыдачеЗадания.Стадия=Объект.Стадия;
     ИнформЛистокОВыдачеЗадания.ГИП=Объект.ГИП;  
    ИнформЛистокОВыдачеЗадания.Записать();
     
    ЗафиксироватьТранзакцию();
 
КонецПроцедуры

в результате документ формируется, но заполняется данными первой строки ТЧ документа «Объектьныйграфик». Как сделать так, чтобы документ заполнялся реквизитами выбранной строки? помогите пожалуйста.



0



polax

1965 / 1350 / 480

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

Сообщений: 5,853

31.10.2017, 12:10

2

1C
1
2
3
4
Данные = Элементы.Задания.ТекущиеДанные;
ИнформЛистокОВыдачеЗадания.ГруппаВыдающаяЗадание=Данные.ВыдающийОтдел;
ИнформЛистокОВыдачеЗадания.ГруппаПолучающаяЗадание = Данные.ПринимающийОтдел;
// и т.д.



0



4 / 4 / 4

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

Сообщений: 638

31.10.2017, 12:14

 [ТС]

3

это на клиенте. а на сервер как передать эти данные для записи в новый документ?



0



polax

1965 / 1350 / 480

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

Сообщений: 5,853

31.10.2017, 12:19

4

1C
1
2
3
4
5
6
7
8
9
10
&НаКлиенте
Процедура СоздатьДокумент(Команда)
Данные = Элементы.Задания.ТекущиеДанные;
СформироватьФормуОВыдачеЗаданияНаСервере(Данные);
КонецПроцедуры
 
&НаСервере
Процедура СформироватьФормуОВыдачеЗаданияНаСервере(Данные)
    // Вставить содержимое обработчика.
КонецПроцедуры



0



jediAlex

4 / 4 / 4

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

Сообщений: 638

31.10.2017, 12:22

 [ТС]

5

Попробовал так:

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
&НаСервере
Процедура СформироватьФормуОВыдачеЗаданияНаСервере()
    // Вставить содержимое обработчика.
// Вставить содержимое обработчика.
ТекущееЗадание=Элементы.Задания.ТекущиеДанные;
    НачатьТранзакцию(РежимУправленияБлокировкойДанных.Автоматический);
    ИнформЛистокОВыдачеЗадания = Документы.ИнформационныйЛистокОВыдачеЗадания.СоздатьДокумент();
    ИнформЛистокОВыдачеЗадания.Дата = ТекущаяДата();
    ИнформЛистокОВыдачеЗадания.Объект =Объект.ШифрОбъекта ;
     ИнформЛистокОВыдачеЗадания.Предприятие=Объект.ПлощадкаСтроительства;
    ИнформЛистокОВыдачеЗадания.ОбъектныйГрафик = Объект.Ссылка;
    ИнформЛистокОВыдачеЗадания.ГруппаВыдающаяЗадание=ТекущееЗадание.ВыдающийОтдел;
    ИнформЛистокОВыдачеЗадания.ГруппаПолучающаяЗадание = ТекущееЗадание.ПринимающийОтдел;
    ИнформЛистокОВыдачеЗадания.СоставЗадания=ТекущееЗадание.Задание;
    ИнформЛистокОВыдачеЗадания.СрокПланируемый=ТекущееЗадание.ДатаВыдачиПлан;
    ИнформЛистокОВыдачеЗадания.СрокФактический=ТекущееЗадание.ДатаВыдачиФакт; 
    ИнформЛистокОВыдачеЗадания.Стадия=Объект.Стадия;
     ИнформЛистокОВыдачеЗадания.ГИП=Объект.ГИП;   
    ИнформЛистокОВыдачеЗадания.Записать();
В результате ошибка:

{Документ.ОбъектныйГрафик.Форма.ФормаДокумента.Форма(164)}: Ошибка при получении значения атрибута контекста (ТекущиеДанные)
ТекущееЗадание=Элементы.Задания.ТекущиеДанные;
по причине:
Текущие данные таблицы недоступны на сервере



0



1965 / 1350 / 480

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

Сообщений: 5,853

31.10.2017, 12:23

6

jediAlex, Написал же как с клиента на сервер передать



0



jediAlex

4 / 4 / 4

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

Сообщений: 638

31.10.2017, 12:28

 [ТС]

7

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
&НаКлиенте
Процедура СформироватьФормуОВыдачеЗадания(Команда)
    ТекущееЗадание=Элементы.Задания.ТекущиеДанные();
//  НомерТекущегоЗадания=ТекущееЗадание.НомерСтроки;
    СформироватьФормуОВыдачеЗаданияНаСервере(ТекущееЗадание);
    КонецПроцедуры
&НаСервере
Процедура СформироватьФормуОВыдачеЗаданияНаСервере(ТекущееЗадание)
    // Вставить содержимое обработчика.
// Вставить содержимое обработчика.
ТекущееЗадание=Элементы.Задания.ТекущиеДанные;
    НачатьТранзакцию(РежимУправленияБлокировкойДанных.Автоматический);
    ИнформЛистокОВыдачеЗадания = Документы.ИнформационныйЛистокОВыдачеЗадания.СоздатьДокумент();
    ИнформЛистокОВыдачеЗадания.Дата = ТекущаяДата();
    ИнформЛистокОВыдачеЗадания.Объект =Объект.ШифрОбъекта ;
     ИнформЛистокОВыдачеЗадания.Предприятие=Объект.ПлощадкаСтроительства;
    ИнформЛистокОВыдачеЗадания.ОбъектныйГрафик = Объект.Ссылка;
    ИнформЛистокОВыдачеЗадания.ГруппаВыдающаяЗадание=ТекущееЗадание.ВыдающийОтдел;
    ИнформЛистокОВыдачеЗадания.ГруппаПолучающаяЗадание = ТекущееЗадание.ПринимающийОтдел;
    ИнформЛистокОВыдачеЗадания.СоставЗадания=ТекущееЗадание.Задание;
    ИнформЛистокОВыдачеЗадания.СрокПланируемый=ТекущееЗадание.ДатаВыдачиПлан;
    ИнформЛистокОВыдачеЗадания.СрокФактический=ТекущееЗадание.ДатаВыдачиФакт; 
    ИнформЛистокОВыдачеЗадания.Стадия=Объект.Стадия;
     ИнформЛистокОВыдачеЗадания.ГИП=Объект.ГИП;   
    ИнформЛистокОВыдачеЗадания.Записать();
        ЗафиксироватьТранзакцию();
    
КонецПроцедуры

ошибка:{Документ.ОбъектныйГрафик.Форма.ФормаДокумента.Форма(190)}: Метод объекта не обнаружен (ТекущиеДанные)
ТекущееЗадание=Элементы.Задания.ТекущиеДанные();



0



GreenkA

Эксперт 1С

3053 / 2000 / 524

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

Сообщений: 6,964

31.10.2017, 13:12

8

jediAlex, потому что на сервере не надо переопределять переменную ТекущееЗадание, плюс на сервер вы не передадите строку ТЧ, передавайте сразу все нужные реквизиты:

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
&НаКлиенте
Процедура СформироватьФормуОВыдачеЗадания(Команда)
    ТекущееЗадание=Элементы.Задания.ТекущиеДанные();
    //  НомерТекущегоЗадания=ТекущееЗадание.НомерСтроки;
    СформироватьФормуОВыдачеЗаданияНаСервере(ТекущееЗадание.ВыдающийОтдел, ТекущееЗадание.ПринимающийОтдел, ТекущееЗадание.Задание, ТекущееЗадание.ДатаВыдачиПлан, ТекущееЗадание.ДатаВыдачиФакт);
КонецПроцедуры
&НаСервере
Процедура СформироватьФормуОВыдачеЗаданияНаСервере(ВыдающийОтдел, ПринимающийОтдел, Задание, ДатаВыдачиПлан, ДатаВыдачиФакт)
    НачатьТранзакцию(РежимУправленияБлокировкойДанных.Автоматический);
    ИнформЛистокОВыдачеЗадания = Документы.ИнформационныйЛистокОВыдачеЗадания.СоздатьДокумент();
    ИнформЛистокОВыдачеЗадания.Дата = ТекущаяДата();
    ИнформЛистокОВыдачеЗадания.Объект = Объект.ШифрОбъекта ;
    ИнформЛистокОВыдачеЗадания.Предприятие = Объект.ПлощадкаСтроительства;
    ИнформЛистокОВыдачеЗадания.ОбъектныйГрафик = Объект.Ссылка;
    ИнформЛистокОВыдачеЗадания.ГруппаВыдающаяЗадание = ВыдающийОтдел;
    ИнформЛистокОВыдачеЗадания.ГруппаПолучающаяЗадание = ПринимающийОтдел;
    ИнформЛистокОВыдачеЗадания.СоставЗадания = Задание;
    ИнформЛистокОВыдачеЗадания.СрокПланируемый = ДатаВыдачиПлан;
    ИнформЛистокОВыдачеЗадания.СрокФактический = ДатаВыдачиФакт; 
    ИнформЛистокОВыдачеЗадания.Стадия = Объект.Стадия;
    ИнформЛистокОВыдачеЗадания.ГИП = Объект.ГИП;     
    ИнформЛистокОВыдачеЗадания.Записать();
    ЗафиксироватьТранзакцию();
КонецПроцедуры



0



jediAlex

4 / 4 / 4

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

Сообщений: 638

31.10.2017, 13:51

 [ТС]

9

сделал так:

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
&НаСервере
Процедура СформироватьФормуОВыдачеЗаданияНаСервере(ВыдающийОтдел,ПринимающийОтдел,Задание,ДатаВыдачиПлан)
    // Вставить содержимое обработчика.
// Вставить содержимое обработчика.
    НачатьТранзакцию(РежимУправленияБлокировкойДанных.Автоматический);
    ИнформЛистокОВыдачеЗадания = Документы.ИнформационныйЛистокОВыдачеЗадания.СоздатьДокумент();
    ИнформЛистокОВыдачеЗадания.Дата = ТекущаяДата();
    ИнформЛистокОВыдачеЗадания.Объект =Объект.ШифрОбъекта ;
     ИнформЛистокОВыдачеЗадания.Предприятие=Объект.ПлощадкаСтроительства;
    ИнформЛистокОВыдачеЗадания.ОбъектныйГрафик = Объект.Ссылка;
    ИнформЛистокОВыдачеЗадания.ГруппаВыдающаяЗадание=ВыдающийОтдел;
    ИнформЛистокОВыдачеЗадания.ГруппаПолучающаяЗадание = ПринимающийОтдел;
    ИнформЛистокОВыдачеЗадания.СоставЗадания=Задание;
    ИнформЛистокОВыдачеЗадания.СрокПланируемый=ДатаВыдачиПлан;
    ИнформЛистокОВыдачеЗадания.СрокФактический=Формат(ТекущаяДата(),"ДФ=dd.MM.yyyy"); 
    ИнформЛистокОВыдачеЗадания.Стадия=Объект.Стадия;
     ИнформЛистокОВыдачеЗадания.ГИП=Объект.ГИП;   
    ИнформЛистокОВыдачеЗадания.Записать();
        ЗафиксироватьТранзакцию();
    
КонецПроцедуры
&НаКлиенте
Процедура СформироватьФормуОВыдачеЗадания(Команда)
    ТекущееЗадание=Элементы.Задания.ТекущиеДанные();
    СформироватьФормуОВыдачеЗаданияНаСервере(ТекущееЗадание.ВыдающийОтдел,ТекущееЗадание.ПринимающийОтдел,ТекущееЗадание.Задание,ТекущееЗадание.ДатаВыдачиПлан);
    КонецПроцедуры

теперь ругается на строку

1C
1
ТекущееЗадание=Элементы.Задания.ТекущиеДанные();

{Документ.ОбъектныйГрафик.Форма.ФормаДокумента.Форма(189)}: Метод объекта не обнаружен (ТекущиеДанные)
ТекущееЗадание=Элементы.Задания.ТекущиеДанные();
что не так опять?



0



GreenkA

Эксперт 1С

3053 / 2000 / 524

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

Сообщений: 6,964

31.10.2017, 13:53

10

jediAlex, блин, не заметила у вас скобки. Это не метод, никаких скобок быть не должно:

1C
1
ТекущееЗадание=Элементы.Задания.ТекущиеДанные;



0



4 / 4 / 4

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

Сообщений: 638

31.10.2017, 13:58

 [ТС]

11

блиин, я уже сам туплю)))



0



Эксперт 1С

3053 / 2000 / 524

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

Сообщений: 6,964

31.10.2017, 13:59

12

jediAlex, нормально все) работает?



0



4 / 4 / 4

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

Сообщений: 638

31.10.2017, 14:06

 [ТС]

13

спасибо всем за помощь



0



IT_Exp

Эксперт

87844 / 49110 / 22898

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

Сообщений: 92,604

31.10.2017, 14:06

13

Понравилась статья? Поделить с друзьями:
  • Ошибка при подключении airpods к iphone
  • Ошибка при подключении к сети цивилизация 6
  • Ошибка при получении информации о контейнере vipnet csp
  • Ошибка при получении значения атрибута контекста workbooks
  • Ошибка при подключении airpods pro