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

Содержание:

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

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

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

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

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

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

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

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

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

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

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

Как забрать с почтового сервера отправленные письма.

Я
   Zixxx

22.04.12 — 17:55

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

   Wobland

1 — 22.04.12 — 17:58

(0) а они там есть?

   Zixxx

2 — 22.04.12 — 18:03

(1) Да

   andrewks

3 — 22.04.12 — 18:14

на некоторых серваках есть опция соответствующая. или IMAP.

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

   ДенисЧ

4 — 22.04.12 — 18:22

На почтовом сервере (если это smtp) по нормальному нет этих отправленных.

   Zixxx

5 — 22.04.12 — 18:24

Есть IMAP, но не могу найти как правильно прописать его протокол для «Отправленных», «Send» не подходит видимо…

ПараметрыIMAP = Новый Структура;

ПараметрыIMAP.Вставить(«Send», Истина);

Почта    = Новый ИнтернетПочта;

Почта.Подключиться(Профиль, ПараметрыIMAP);

   kod263

6 — 22.04.12 — 18:33

интересно

мне для отправленных пришлось создать специальный ящик и в него посылать скрытую копию

   Zixxx

7 — 22.04.12 — 18:35

Должно быть как-то так

Почта    = Новый ИнтернетПочта;

Почта.Подключиться(Профиль, ПротоколИнтернетПочты.IMAP);

Почта.ТекущийПочтовыйЯщик = «answered»;

НаборПисем = Почта.Выбрать(Ложь);

Но валиться при установки текущего почтового ящика «answered»

  

Zixxx

8 — 22.04.12 — 19:48

Удалось победить только для входящих…

Почта    = Новый ИнтернетПочта;

Почта.Подключиться(Профиль, ПротоколИнтернетПочты.IMAP);

Почта.ТекущийПочтовыйЯщик = «inbox»;

НаборПисем = Почта.Выбрать(Ложь);

Админы сказали что папка исходящие «sent», но при установки Почта.ТекущийПочтовыйЯщик = «sent»; получаю «Ошибка при установке значения атрибута контекста (ТекущийПочтовыйЯщик)»… :(

Помогите пожалуйста начинающему пользователю Платформы 1С 8.2.
Вот такая проблемка
Процедура ОбработкаПроведения(Отказ, Режим)

Движения.ОстаткиМатериалов.Записывать = Истина;
Движения.СтоимостьМатериалов.Записывать = Истина;
Движения.Продажи.Записывать = Истина;
Движения.Управленческий.Записывать = Истина;

//Создать менеджер временных таблиц.
МенеджерВТ = Новый МенеджерВременныхТаблиц;

Запрос = Новый Запрос;

//Укажем, какойменеджер временных таблиц использует этот запрос.
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;

Запрос.Текст =
«ВЫБРАТЬ
|ОказаниеУслугиПереченьНоменклатуры.Номенклатура,
|ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры,
|ОказаниеУслугиПереченьНоменклатуры.НаборСвойств,
|СУММА(ОказаниеУслугиПереченьНоменклатуры.Количество) КАК КоличествоВДокументе,
|СУММА(ОказаниеУслугиПереченьНоменклатуры.Сумма) КАК СуммаВДокументе
|ПОМЕСТИТЬ НоменклатураДокумента
|ИЗ
|Документ.ОказаниеУслуги.ПереченьНоменклатуры КАК ОказаниеУслугиПереченьНоменклатуры
|ГДЕ
|ОказаниеУслугиПереченьНоменклатуры.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
|ОказаниеУслугиПереченьНоменклатуры.Номенклатура,
|ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры,
|ОказаниеУслугиПереченьНоменклатуры.НаборСвойств»;

Запрос.УстановитьПараметр(«Ссылка», Ссылка);

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

Запрос2 = Новый Запрос;
Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос2.Текст = «ВЫБРАТЬ
|НоменклатураДокумента.Номенклатура,
|НоменклатураДокумента.ВидНоменклатуры,
|НоменклатураДокумента.НаборСвойств,
|НоменклатураДокумента.КоличествоВДокументе,
|НоменклатураДокумента.СуммаВДокументе,
|ЕСТЬNULL(СтоимостьМатериаловОстатки.СтоимостьОстаток, 0) КАК Стоимость,
|ЕСТЬNULL(ОстаткиМатериаловОстатки.КоличествоОстаток, 0) КАК Количество
|ИЗ
|НоменклатураДокумента КАК НоменклатураДокумента
|ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьМатериалов.Остатки(
|,
|Материал В
|(ВЫБРАТЬ
|НоменклатураДокумента.Номенклатура
|ИЗ
|НоменклатураДокумента)) КАК СтоимостьМатериаловОстатки
|ПО НоменклатураДокумента.Номенклатура = СтоимостьМатериаловОстатки.Материал
|ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки(
|,
|Материал В
|(ВЫБРАТЬ
|НоменклатураДокумента.Номенклатура
|ИЗ
|НоменклатураДокумента)) КАК ОстаткиМатериаловОстатки
|ПО НоменклатураДокумента.Номенклатура = ОстаткиМатериаловОстатки.Материал»;

//Установим необходимость блокировки данных в регистрах
//СтоимостьМатериалов и ОстаткиМатериалов.
Движения.СтоимостьМатериалов.БлокироватьДляИзменения = Истина;
Движения.ОстаткиМатериалов.БлокироватьДляИзменения = Истина;

//Запишем пустые наборы записей, чтобы читать остатки без учета данных в документе.
Движения.СтоимостьМатериалов.Записать();
Движения.ОстаткиМатериалов.Записать();

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

//Если надо посмотреть результат запроса
//ТЗ = Результат.Выгрузить();

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

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

Если ВыборкаДетальныеЗаписи.Количество = 0 Тогда
СтоимостьМатериала = 0;
Иначе СтоимостьМатериала = ВыборкаДетальныеЗаписи.Стоимость / ВыборкаДетальныеЗаписи.Количество;
КонецЕсли;

Если ВыборкаДетальныеЗаписи.ВидНоменклатуры=Перечисления.ВидыНоменклатуры.Материал Тогда
//регистр ОстаткиМатериалов Расход
Движение = Движения.ОстаткиМатериалов.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура;
Движение.НаборСвойств = ВыборкаДетальныеЗаписи.НаборСвойств;
Движение.Склад = Склад;
Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе;

// регистр СтоимостьМатериалов Расход
Движение = Движения.СтоимостьМатериалов.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура;
Движение.Стоимость = ВыборкаДетальныеЗаписи.КоличествоВДокументе*СтоимостьМатериала;

// Регистр Управленческий
// Первая проводка:Д 62 (ДебиторскаяЗадолженность) — К 90 (Капитал) Розничная сумма
Движение = Движения.Управленческий.Добавить();
Движение.СчетДт = ПланыСчетов.Основной.ДебиторскаяЗадолженность;
Движение.СчетКт = ПланыСчетов.Основной.Капитал;
Движение.Период = Дата;
Движение.Сумма = ВыборкаДетальныеЗаписи.СуммаВДокументе;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Клиенты] = Клиент;
// Вторая проводка: Д 90 (Капитал) — К 41 (Товары) — себестоимость
Движение = Движения.Управленческий.Добавить();
Движение.СчетДт = ПланыСчетов.Основной.Капитал;
Движение.СчетКт = ПланыСчетов.Основной.Товары;
Движение.Период = Дата;
Движение.Сумма = СтоимостьМатериала*ВыборкаДетальныеЗаписи.КоличествоВДокументе;
Движение.КоличествоКт = ВыборкаДетальныеЗаписи.КоличествоВДокументе;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Материалы] = ВыборкаДетальныеЗаписи.Номенклатура;
КонецЕсли;

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

Движения.Записать();
Если Режим = РежимПроведенияДокумента.Оперативный Тогда

//Проверить отрицательные остатки.
Запрос3 = Новый Запрос;
Запрос3.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос3.Текст = «ВЫБРАТЬ
|ОстаткиМатериаловОстатки.Материал,
|ОстаткиМатериаловОстатки.НаборСвойств,
|ОстаткиМатериаловОстатки.КоличествоОстаток
|ИЗ
|РегистрНакопления.ОстаткиМатериалов.Остатки(
|,
|(Материал, НаборСвойств) В
|(ВЫБРАТЬ
|НоменклатураДокумента.Номенклатура,
|НоменклатураДокумента.НаборСвойств
|ИЗ
|НоменклатураДокумента)
|И Склад = &Склад) КАК ОстаткиМатериаловОстатки
|ГДЕ
|ОстаткиМатериаловОстатки.КоличествоОстаток < 0″;
Запрос3.УстановитьПараметр(«Склад», Склад);

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

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = «Лей» + Строка(- ВыборкаДетальныеЗаписи.КоличествоОстаток) + » единиц материала Лей «»» + ВыборкаДетальныеЗаписи.Материал =»»»»;
Сообщение.Сообщить();
Отказ = Истина;

КонецЦикла;
КонецЕсли;
КонецПроцедуры
Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс)

Префикс = Обмен.ПолучитьПрефиксНомера();

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

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
Если ТипЗнч(ДанныеЗаполнения) = Тип(«СправочникСсылка.Клиенты») Тогда
// Заполнение шапки
Клиент = ДанныеЗаполнения.Ссылка;
ОбъектОснование = ДанныеЗаполнения.Ссылка;
КонецЕсли;
КонецПроцедуры
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)

ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти(«ПереченьНоменклатуры.НаборСвойств»));
Индекс = 0;

Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл
Индекс = Индекс + 1;

Если ТекСтрокаПереченьНоменклатуры.Номенклатура.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Материал Тогда

Если Не ЗначениеЗаполнено(ТекСтрокаПереченьНоменклатуры.НаборСвойств) Тогда
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = «В строке » + Индекс + » списка Перечень номенклатуры не заполнена колонка Набор свойств»;
Сообщение.Поле = «ПереченьНоменклатуры[» + Строка(Индекс — 1) + «].НаборСвойств»;
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Сообщить();
Отказ = Истина;
КонецЕсли;

КонецЕсли;

КонецЦикла;

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

{Документ.ОказаниеУслуги.МодульОбъекта(166)}: Ошибка при установке значения атрибута контекста (Текст)
Сообщение.Текст = «Лей» + Строка(- ВыборкаДетальныеЗаписи.КоличествоОстаток) + » единиц материала Лей «»» + ВыборкаДетальныеЗаписи.Материал =»»»»;
по причине:
Несоответствие типов
Несоответствие типов

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

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

Ошибка при получении значения атрибута контекста (ТекущийПользователь): Попытка получения неинициализированного значения параметра сеанса
Пользователь = ПараметрыСеанса.ТекущийПользователь;
по причине:
Попытка получения неинициализированного значения параметра сеансаКод 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

Пожалуйста )

Подсказка: Для быстрого поиска ответов — используйте ‘Поиск’

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