метод УстановитьАтрибут()

Тема в разделе "1C и всё что с ней связано", создана пользователем cbat, 24 ноя 2008.

  1. cbat

    cbat Гость

    Всем привет!
    При попытке вызова след метода:

    Код (Text):
    ТекРег.УстановитьАтрибут("Номенклатура", НовоеЗначение);
    вылетает ошибка:
    Данная операция устанавливает новый атрибут НовоеЗначение для измерения Номенклатура регистра ТекРег. В чем может быть проблема никак не могу понять, а 1С не в состоянии дать более исчерпывающую информацию кроме как "Действие недоступно!"?
     
  2. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    А БЫЛО ЛИ СДЕЛАНО ПРЕДВАРИТЕЛЬНО
    ТекРег= CreateObject("Register.Остатки"); // или какой-то там регистр ?
    Если да, работать будет 100% !
     
  3. cbat

    cbat Гость

    да, конечно было:

    Код (Text):
            ТекРег = СоздатьОбъект("Регистр.ТестРег");
    ТекРег.ВыбратьДвиженияДокумента(Док);
    Пока ТекРег.ПолучитьДвижение()=1 Цикл
    Если ТекРег.ПолучитьАтрибут("Номенклатура") = СтароеЗначение Тогда
    ТекРег.УстановитьАтрибут("Номенклатура", НовоеЗначение); // ошибка: Действие не доступно!
    КонецЕсли;
    конецЦикла;
    Странно для меня то, что метод ПолучитьАтрибут() работает. А вот УстановитьАтрибут() совершенно не хочет, выдавая ошибку "Действие не доступно!"
     
  4. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Интересно - мож быть дело в том что запускается не из модуля документа? а то действия по изменению регистров возможны вроде только из него.
     
  5. cbat

    cbat Гость

    метод регистра УстановитьАтрибут() не обязательно использовать в модуле документа.
    А вообще я пробовал и в модуле документа и обработкой - результат один - вылетает с ошибкой. :)
     
  6. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Ну что я могу сказать...
    тут вариантов совсем немного:
    1. Либо наименование атрибута задано неверно.
    2. Либо значение пытаетесь не того типа запихать.
    3. Либо все творите НЕ в модуле проведения документа.
    Всякие там СоздатьОбъект тут не при чем.
    Движения по регистру могут быть произведены исключительно в модуле документа. Ну или прямым запросами, но крайне сложно.
    Теоретически, в вашем случае, если рассматривать контекст модуля проведения, должно быть так:
    Код (Text):
    ТекРег = СоздатьОбъект("Регистр.ТестРег");
    ТекРег.ВыбратьДвиженияДокумента(Док);
    Пока ТекРег.ПолучитьДвижение()=1 Цикл
    Если ТекРег.ПолучитьАтрибут("Номенклатура") = СтароеЗначение Тогда
    Регистр.ТестРег.УстановитьАтрибут("Номенклатура", НовоеЗначение);
    Иначе
    //тут какие-то действия
    КонецЕсли;
    Регистр.ТестРег.ДвижениеПриход...
    конецЦикла;
     
  7. cbat

    cbat Гость

    Эти варианты я в первую очередь проверил:
    1) исключено, так как в ином случае не выполнялось бы условие "Если ТекРег.ПолучитьАтрибут("Номенклатура") = СтароеЗначение Тогда"
    2) тоже исключено, так как я пытался даже так написать "Регистр.ТестРег.УстановитьАтрибут("Номенклатура", СтароеЗначение);" - тот же результат.
    3) именно в модуле проведения, т е код выглядит таким образом:
    Код (Text):
    Процедура ОбработкаПроведения()
    ТекРег = СоздатьОбъект("Регистр.ТестРег");
    ТекРег.ВыбратьДвиженияДокумента(Док);
    Пока ТекРег.ПолучитьДвижение()=1 Цикл
    Если ТекРег.ПолучитьАтрибут("Номенклатура") = СтароеЗначение Тогда
    ТекРег.УстановитьАтрибут("Номенклатура", НовоеЗначение); // ошибка: Действие не доступно!
    КонецЕсли;
    конецЦикла;
    конецПроцедуры
    галочка "оперативный учет" в документе выставлена.
    :)
     
  8. cbat

    cbat Гость

    В общем проблема решилась заменой
    Код (Text):
    ТекРег.УстановитьАтрибут("Номенклатура", НовоеЗначение);
    на
    Код (Text):
    Регистр.ТестРег.УстановитьАтрибут("Номенклатура", НовоеЗначение);
    Не пойму какой смысл тогда было предоставлять пользователю доступ к методу через объект(в данном случае ТекРег) если он все равно нигде не работает.
     
  9. has

    has Гость

    видимо просто не работает через СоздатьОбъект()
     
  10. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    has
    Ну так а я в своем коде разве что-то иное написал?
    cbat
    Решилось у вас именно так как я и написал! Внимательней надо читать то, что вам пишут.
    Я еще раз повторюсь: движения в регистр (установку значений реквизитов и т.д.) делает документ. Для регистров, созданных через СоздатьОбъект допускается ТОЛЬКО чтение значений.
     
  11. has

    has Гость

    vitfil Неправильно прочитал просто ;)
     
  12. cbat

    cbat Гость

    vitfil Действительно, не заметил
     
Загрузка...

Поделиться этой страницей