Доброе время суток!
Вопрос в принципе в том, что при выгрузке данных через штатный механизм (Выполнить обмен), т.е. создание настройки обмена и правил выгрузки, выдает ощибки. В частности:
«{Обработка.ОбменДаннымиXML.МодульОбъекта(14326)}: Ошибка при установке значения атрибута контекста (НомерПринятого)
Свойство не может быть изменено для предопределенного узла.»
Для пробы я просто выгружаю справочник сотрудники по правилу выгрузки
Если обмен делать, непосредственно через «Обработка.ОбменДаннымиXML», выдается совсем другая неприятная ошибка:
«Ошибка при вызове метода контекста (УдалитьРегистрациюИзменений): Недопустимое значение параметра (параметр номер ‘1’)»
В обоих случаях выгрузку осуществляю через непосредственное подсоединение к базе.
Подскажите что тут не так. Если выгружать через Универсальную обработку, — все проходит на ура.
Необходимость возникла, потому что нужно выгружать с некоторой периодичностью.
Спасибо
Содержание:
1. Ошибка при установке значения атрибута контекста
2. Ошибка при получении значения атрибута контекста
Одной из наиболее частых ошибок исполнения кода 1С являются ошибки, связанные с установкой реквизита либо получением реквизита через точку, либо ошибка при вызове функции или процедуры через точку. Все данные объекты являются атрибутами информационных объектов-владельцев, к которым они принадлежат. Рассмотрим примеры таких ошибок и причины их возникновения.
1. Ошибка при установке значения атрибута контекста
Ошибка при установке значения атрибута контекста говорит нам о невозможности присвоить выбранное значение определенному атрибуту информационного объекта. Вызвано это либо несовпадением типа атрибута и присваиваемого ей значения, отсутствием возможности присвоить значение выбранному атрибуту, так как его можно только читать, но не записывать в него, отсутствием прав у текущего пользователя на запись значений в данный атрибут. Например, в реквизит «ДатаДокумента» с типом «Дата» пытаемся записать строку, в реквизит с типом данных ссылки на документ пытаемся записать не ссылку, а объект, полученный по ссылке, что невозможно из-за несоответствия типов, что приводит к ошибке установки значения атрибута.
Другой пример – проходя циклом выборку запроса, пытаемся в колонку выборки записать значение, что невозможно, так как значения выборки запроса можно только считывать, а для того, чтобы можно было полученные из запроса данные изменять в коде, нужно пользоваться не выборкой, а выгружать результат запроса в таблицу значений, в таком случае в цикле по ней можно будет менять значения в колонках, но только на значения, соответствующие типу колонки. Либо у пользователя, под которым выполняется код, нет прав на изменение даты документа, при попытке записать в данный реквизит новую дату, будет выведено сообщение об ошибке установке значения, но в причине будет указано отсутствие прав у пользователя.
2. Ошибка при получении значения атрибута контекста
Ошибка при получении значения атрибута контекста указывает на невозможность прочитать значение атрибута объекта в силу его отсутствия, либо отсутствия прав на его чтение. Например, обращение к несуществующему реквизиту объекта, несуществующему полю выборки из запроса, несуществующему свойству элемента формы и т.п. Так же как пример можно рассмотреть получение текущего пользователя из параметров сеанса — если данный параметр сеанса не установлен, то тоже будет выведена ошибка получения значения атрибута контекста, но в причине будет указана попытка получения неинициализированного значения параметра сеанса.
При возникновении данных ошибок значения атрибута в 1Св первую очередь следует проверить существование атрибута, к которому обращаются, затем проверить совпадение типов значений атрибута и присваиваемого ему значения, затем уже проверить права на установку либо чтение значения. Проверить, является ли дело в правах либо дать права на действия с атрибутом, можно, установив привилегированный режим для совершения действия с данным атрибутом, прописав перед строчкой с ошибкой УстановитьПривилегированныйРежим(Истина), после строчки — УстановитьПривилегированныйРежим(Ложь).
Специалист компании «Кодерлайн»
Александр Суворов
-
Подскажите, пожалуйста, что за ошибка:
При создании настройки обмена во второй информационной базе возникли ошибки: {Обработка.ПомощникСозданияОбменаДанными.МодульОбъекта(861)}: Ошибка при установке значения атрибута контекста (НомерОтправленного) НовыйУзел.НомерОтправленного = 0; по причине: Свойство не может быть изменено для предопределенного узла
Я не раз настраивал синхронизацию, но такое впервые.
Как я пытался решить проблему:- Обновил базы — результат тот же;
- Заменил правила на более новые — результат тот же.
Обмен между ЗУП 3.0.25 и БП 3.0.43
-
Оказалось, что при создании обмена 1с не создавала узел, да ещё и префиксы («коды» узлов) не совпадали. Возможно, что до меня кто-то начудил.
В общем, создал узлы вручную, указал коды как префиксы ИБ (на всякий пожарный), далее воспользовался помощником создания синхронизации и всё заработало!
Закрывайте
Воспроизводится и в портативных:
{ВнешняяОбработка.ирВыгрузкаЗагрузкаДанныхЧерезФайл.МодульОбъекта(170)}: Ошибка при установке значения атрибута контекста (Отправитель)
ОбъектБД.ОбменДанными.Отправитель = УзелОтправитель;
по причине:
Свойство не доступно для плана обмена
Для воспроизведения достаточно выгрузить один узел любого плана обмена в файл (Я делал это через ДС —> Подбор и обработка объектов —> Выгрузка в файл), затем в инструменте «Выгрузка/загрузка данных через файл» попытаться загрузить данные из полученного ранее файла.
Замечу, что для свойства «ОбменДанными.Получатели», которое также недоступно для узлов планов обмена, в ирОбщий заплатка (или как это правильнее назвать?) имеется:
Код
Попытка
Получатели = ОбменДанными.Получатели;
Исключение
// Элемент плана обмена в 8.3.5+
Получатели = Неопределено;
КонецПопытки;
Я сделал по аналогии.
Было:
Код
ОбъектБД.ОбменДанными.Отправитель = УзелОтправитель;
Стало:
Код
Попытка
Отправитель = ОбъектБД.ОбменДанными.Отправитель;
Исключение
// Элемент плана обмена в 8.3.5+
Отправитель = Неопределено;
КонецПопытки;
Если Отправитель <> Неопределено Тогда
ОбъектБД.ОбменДанными.Отправитель = УзелОтправитель;
КонецЕсли;
Heltarion 2 / 2 / 0 Регистрация: 21.11.2011 Сообщений: 57 |
||||
1 |
||||
02.12.2011, 11:18. Показов 9193. Ответов 11 Метки нет (Все метки)
Добрый день! ТПП — «табличное поле правил», в ней уже занесены некотрые значения из XML Код процедуры:
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 |
СохранитьНажатие(Элемент) это событие формы В МодулеОбъекта создал функцию «Процедура СохранитьВЭксель(ТПП) Экспорт»
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 минуты Так работает, но если я поставлю Дело в том что «стр.НоменклатураБазы» — это справочник ссылка, если у нее текстовый тип то программа глотает и записывает.
0 |
19 / 18 / 1 Регистрация: 15.11.2011 Сообщений: 54 |
|
02.12.2011, 12:22 |
6 |
чет вы мудрено делаете.
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 |
|||
Рабочий код:
0 |