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