Необъяснимое поведение 1С (7.7)

Новая тема
Показывать по 10 20 40 сообщений
"При закрытии документа формируется другой документ и периодически возникает такая ошибка:
ТовЦена=Товар.Розн_Цена.Получить(ПолучитьТА()); : {Документ.РасходнаяДолг.Форма.Модуль(256)}: Значение не представляет агрегатный объект (Получить)
Вот кусок кода:
Если Краски.НайтиПоНаименованию("Краски",0)=1 Тогда //Отрабатывает нормально
ВыбратьСтроки();
Пока ПолучитьСтроку()>0 Цикл
   Если Товар.ПринадлежитГруппе(Краски)=0 Тогда//Отсев работает
Продолжить;
КонецЕсли;
ТовЦена=Товар.Розн_Цена.Получить(ПолучитьТА());//Здесь ошибка (строка 256)
Если ТовЦена<>ДокЦена Тогда
   //В удорожание!
ДокУд.НоваяСтрока();
ДокУд.Товар=Товар;
Если ТовЦена=Товар.Розн_Цена.Получить(ПолучитьТА()); обернуть в Попытка Исключение КонецПопытки, то товар в новый документ попадает, но переменная ТовЦена = 0.
Почему так происходит?"
А какая у Вас конфигурация?
Похоже, что-то нетиповое.
Скорее всего реквизит Розн_Цена - не Периодический и к нему невозможно применить метод Получить()
Проверьте!
"обычно это бывает если где то по алгоритму перед этим вызывалось:
Товар.ИспользоватьДату(КакаяТоДата);

после этого к цене надо образаться не Товар.Розн_Цена.Получить(КакаяТоДата); , а просто Товар.Розн_Цена"
"Конфигурация не типовая, на основе ТиС.
Реквизит Розн_Цена периодический, проверял и уже не один раз использовал конструкцию типа
Товар.Розн_Цена.Получить(...); в других местах все работает нормально и даже здесь 1С не всегда спотыкается. "
В процедуре ПриЗакрытии данный вызов не использовал и во всем модуле его нет. Нет даже в модуле проведения. Буду отслеживать вызовы процедур и функций глобального модуля.
А можно ли как-то отследить был ли использован метод ИспользоватьДату? Или просто оборачивать в Попытка Исключение ... и при не удачном выполнении Товар.Розн_Цена.Получить( использовать в секции Исключение Товар.Розн_Цена?
"Придумал следующую конструкцию:
Если ТипЗначенияСтр(Товар.Розн_Цена)="Число"  Тогда
   ТовЦена=Товар.Розн_Цена;
Иначе
ТовЦена=Товар.Розн_Цена.Получить(ПолучитьТА());
КонецЕсли;
Буду гонять...
"
"Поможет или нет.
спр=СоздатьОбъект("Справочник.Номенклатура");
спр.ИспользоватьДату(рабочаядата());
стНДС=спр.СтавкаНДС;

сообщить(стНДС);

спр=СоздатьОбъект("Справочник.Номенклатура");
ст2=спр.СтавкаНДС.Получить(рабочаяДата());
сообщить(ст2);

т е если мы заново создаем объект  то действие ИспользоватьДату прекращается."
Возможно и поможет, но смысл у меня другой.
Сравнить цену товара в документе и реальную цену и в случае расхождений создать другой документ.
"Если я правильно поняла, то первоначально программа ругалась на  метод Получить(). Определили что это бывает когда к справочнику применялся метод ИспользоватьДату(). Вы искали это во всех модулях и не нашли. Проблема стала как "снять" этот метод.

т е если перед вашим сравнением было
товар=СоздатьОбъекут("Справочник.Товары");
то метод получить() должен работать.

P.S. Еще сообщение об ошибки при ПОлучить() после ИспользоватьДату()
<Поле агрегатного объекта не обнаружено (ПОлучить)>

у вас в примере другое.
<Значение не представляет агрегатный объект (Получить)> -
такое сообщение бывает когда обращаются к реквизиту котороый не периодический."
Искал почти во всех модулях... процедуру проведения из глобального модуля разбирать не стал.
Да в описанной Вами конструкции метод Получить() работать будет, но созданием объекта типа Справочник... для сброса эффекта метода ИспользоватьДату() считаю излишнем (энтропия...).
P.S. Текст сообщений брал не из табло, из комментария к событию в конфигураторе. "Поле агрегатного объекта не обнаружено (Получить)..." пишется в табло, но сам не видел, у меня лично данного сбоя не было.

Читают тему
(гостей: 1)

Быстрый переход