Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Чтение дополнительно реквизита в обработчике "Перед Обработкой"
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Конфигурация "1С:Конвертация данных"
Hunterok
Конфигурация БП 1.2

Создал для документа дополнительный реквизит, тип "Булево". В обработчике "Перед Обработкой" правила регистрации документа вставил такой код

КодСвойства = "001";
Свойство = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоКоду(КодСвойства);
Фильтр = новый Структура("Объект,Свойство",Источник.Ссылка,Свойство);
ЗначениеНеВыгружать = РегистрыСведений.ЗначенияСвойствОбъектов.Получить(Фильтр);
Если ЗначениеНеВыгружать = Истина Тогда
   Отказ = Истина;
КонецЕсли;


В итоге независимо от значения дополнительного реквизита документы не регистрируются для обмена. Подскажите что не так в коде. При этом для проверки я просто вставил практически такой же код (Источник.Ссылка-->ЭтотОбъект.Ссылка) в модуль формы документа с выводом сообщения в котором показывается значение доп. реквизита - все работает нормально.
logist
Откройте синтаксис помощник, и посмотрите, что возвращает Получить() у Регистрасведений. Думаю, откроете для себя что-то новое wink.gif

p.s. и про отладчик почитайте wink.gif
Hunterok
Цитата(logist @ 17.02.14, 9:10) необходимо зарегистрироваться для просмотра ссылки
Откройте синтаксис помощник, и посмотрите, что возвращает Получить() у Регистрасведений. Думаю, откроете для себя что-то новое wink.gif

p.s. и про отладчик почитайте wink.gif

Программированием 1С я начал интересоваться только недавно. Меня друг попросил на одной фирме помочь ему с этим. Что такое отладчик - я знаю, но я не знаю как пользоваться отладчиком для правил регистрации. Синтаксис помощник я смотрел, но по Региструсведений ничего интересного для себя не нашел, может не там искал.
Знаете, не хочу здесь описывать свои проблемы и нехватку времени на изучение всего сразу, но хочу сказать вот что: если это форум для обсуждения и помощи, то хотелось бы получить именно ПОМОЩЬ. Я не зашел сюда и не сказал "Дайте мне готовый код". Я потратил кучу времени что бы разобраться, перегуглил кучу информации и не смог своими силами разобраться. Да, я знаю, что лезть туда, перед чем нужно выучить более простые вещи - это не совсем правильно, но я согласился помочь и не хочу отступать. Потому, если у вас есть что сказать по делу - так напишите по делу. А показать какой вы умный, а кто-то глупый - это дело не сложное, хотя в уровне ваших знаний я не сомневаюсь.
Vofka
Може как-то так:

КодСвойства = "001";
Свойство = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоКоду(КодСвойства);
Фильтр = новый Структура("Объект,Свойство",Источник.Ссылка,Свойство);
Данные = РегистрыСведений.ЗначенияСвойствОбъектов.Получить(Фильтр);
Если Данные.ЗначениеНеВыгружать = Истина Тогда
   Отказ = Истина;
КонецЕсли;
logist
Цитата(Hunterok @ 17.02.14, 10:52) необходимо зарегистрироваться для просмотра ссылки
а кто-то глупый

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

Что такое тип Структура и Тип Булево думаю объяснять не надо. У вас идет сравнение не совместимых типов, поскольку структура не Истина, то в условии всегда будет Ложь.
Hunterok
Цитата(logist @ 17.02.14, 11:15) необходимо зарегистрироваться для просмотра ссылки
Что такое тип Структура и Тип Булево думаю объяснять не надо. У вас идет сравнение не совместимых типов, поскольку структура не Истина, то в условии всегда будет Ложь.

Спасибо за более конструктивный ответ. Я просматривал куски кода на разных форумах и таким вот методом сложил этот. Но почему данный код нормально работает в модуле формы документа Приходный кассовый ордер? Для проверки, в процедуру я добавил вот такой код:
Процедура ПриОткрытии()
    КодСвойства = "001";
    СвойствоВыгружать = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоКоду(КодСвойства);
    Фильтр = новый Структура("Объект,Свойство",ЭтотОбъект.Ссылка,СвойствоВыгружать);
    Результат = РегистрыСведений.ЗначенияСвойствОбъектов.Получить(Фильтр);
    Сообщить(Результат.Значение);

В итоге при открытии документа, в котором на доп реквизите стоит галочка, я получаю сообщение "Да", на котором не стоит, соответственно, ничего не получаю.

Vofka, Все равно не работает. Мне кажется, что кроме возможных прочих ошибок проблема может быть в Источник.Ссылка. Я не уверен, что это правильная ссылка для получения значения из РегистраСведений.
logist
Цитата(Hunterok @ 17.02.14, 11:36) необходимо зарегистрироваться для просмотра ссылки
Для проверки, в процедуру я добавил вот такой код:

Ну так, это правильный код, выше же писали совсем другой.
Разница, видите:
Цитата(Hunterok @ 17.02.14, 0:02) необходимо зарегистрироваться для просмотра ссылки
Если ЗначениеНеВыгружать = Истина Тогда

Цитата(Hunterok @ 17.02.14, 11:36) необходимо зарегистрироваться для просмотра ссылки
Результат.Значение

Ardi
Цитата(Hunterok @ 17.02.14, 11:43) необходимо зарегистрироваться для просмотра ссылки
на котором не стоит, соответственно, ничего не получаю.

Потому что автоматом запись в базе не создаётся.
Она создаётся если мы вносим значение Истина\Ложь.
Соответственно будет 3 варианта - истина, ложь, нет записи.

Я тут подумал - подозреваю что регистрация нового объекта будет происходить всегда. Так как новый объект будет записываться до того как появится запись в регистре сведений.
(Но нужно проверять)
Hunterok
Цитата(logist @ 17.02.14, 11:45) необходимо зарегистрироваться для просмотра ссылки
Ну так, это правильный код, выше же писали совсем другой.
Разница, видите:

Все, я понял, спасибо. Переписал в обработчике код, теперь работает отлично.
КодСвойства = "001";
Свойство = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоКоду(КодСвойства);
Фильтр = новый Структура("Объект,Свойство",Объект.Ссылка,Свойство);
Результат = РегистрыСведений.ЗначенияСвойствОбъектов.Получить(Фильтр);
Если Результат.Значение = Истина Тогда
   Отказ = Истина;
КонецЕсли;


Все-таки правильно Объект.Ссылка а не Источник.Ссылка

Всем огромное спасибо за помощь! Дали почувствовать, что не зря потратил столько времени.
logist
Цитата(Hunterok @ 17.02.14, 12:11) необходимо зарегистрироваться для просмотра ссылки
Все-таки правильно Объект.Ссылка а не Источник.Ссылка

это зависит от того, где вызывается код.

// В порядке занудства, не люблю когда много текста
//Если Результат.Значение = Истина Тогда
//   Отказ = Истина;
//КонецЕсли;
Отказ = Результат.Значение;
Vofka
Цитата(logist @ 17.02.14, 12:55) необходимо зарегистрироваться для просмотра ссылки
// В порядке занудства, не люблю когда много текста
//Если Результат.Значение = Истина Тогда
//   Отказ = Истина;
//КонецЕсли;
Отказ = Результат.Значение;

Потенциально опасный код, который может вываливаться с ошибкой. См. пост 8.

И я в порядке занудства добавлю, что лицензии на буквы в алфавите - предоставляются бесплатно smile.gif .
logist
Цитата(Vofka @ 17.02.14, 13:40) необходимо зарегистрироваться для просмотра ссылки
Потенциально опасный код

Точно smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.