1С 7.7 Для тех, кто программирует.

Новая тема
Показывать по 10 20 40 сообщений
Нет. В документе ссылка на контрагента и данные будут взяты уже измененные. В этом и был смысл менять название контрагента при открытии документа.
Вроде все заработало... Только вот нужное "Наименование" Контрагента устанавливается в документе только со второго открытия этого документа??? В чем может быть дело?
Попробуйте обновить форму, после установки наименования.
А еще вопрос - вы при выходе из документа не возвращаете наименование назад?
Нет, при выходе из документа наименование не возвращается... А может эта обработка должна срабатывать не при событии "ПриОткрытии()" документа , а при событии "ПередОткрытием()", хотя в 7-ке вроде нет такой процедуры?
ПередОткрытием нет, а вот попробовать написать вызов изменения вне процедуры (в самом низу обычно) - это можно попробовать.
"Посмотрите код, плиз, может быть вы найдете ошибку?

Спр = СоздатьОбъект("Справочник.Контрагенты");
История = СоздатьОбъект("Периодический");
История.ИспользоватьОбъект("ПериодНаименование", Контрагент);
       История.ВыбратьЗначения();  
Пока История.ПолучитьЗначение() = 1 Цикл
ЗначенНовое = История.ЗначениеНаДату(ДатаДок);  
КонецЦикла;  
         

Список = СоздатьОбъект ("СписокЗначений");
Спр.ВыбратьЭлементы ();
Пока Спр.ПолучитьЭлемент() > 0 Цикл
Если    Спр.НайтиЭлемент(Контрагент) = 1 тогда    

  Список.ДобавитьЗначение (Спр.ТекущийЭлемент());
 
КонецЕсли;
КонецЦикла;

  Для Сч = 1 По Список.РазмерСписка () Цикл  

Список.УстановитьЗначение(Сч,ЗначенНовое,,);
ПолученЗначен = Список.ПолучитьЗначение(Сч);
       Спр.Наименование =  ПолученЗначен;  
Спр.Записать();  
Форма.Обновить();


 КонецЦикла;
"
"Вот это вы навернули :)
Идея понятна, но зачем так сложно? Недостаточно было написать так?

Процедура ПриОткрытии()
  Если ПустоеЗначение(Контрагент)=0 Тогда
     Контрагенты=СоздатьОбъект("Справочник.Контрагенты");
     Если Контрагенты.НайтиЭлемент(Контрагент)=1 Тогда
        Контрагенты.Наименование=Контрагент.ПериодНаименование.Получить(ДатаДок);
        Контрагенты.Записать();
        Форма.Обновить();
     КонецЕсли;
  КонецЕсли;
КонецПроцедуры



А вообще, работать, скорее всего не будет :) Так как по идее все это надо вписывать не в ПриОткрытии(), а вне функций и процедур в самый низ модуля.

И вообще, к чему такие сложности? Зачем наименование постоянно перезаписывать? Сделали бы функцию в глобальном модуле ПолучитьНаименование(НужнаяДата) и вызывали бы ее в нужных ситуациях. Буху бы объяснили, что в справочнике наименование указано то, которое актуально на настоящий момент. А вот в разных печатных формах запрашивайте историю его изменения.

P.S. Если бы меня попросили реализовать задачу, связанную с хранением истории наименования, я бы сказал "документы печатать надо своевременно" и не стал бы коверкать типовую конфигурацию."
"Сохраняй элементы справочника таким образом:

Пока Спр.ПолучитьЭлемент() = 1 Цикл
Если Спр.ЭтоГруппа() = 1 Тогда
 Если Спр1.НайтиЭлемент(Спр.ТекущийЭлемент()) = 1 Тогда
  Спр1.Наименование = Врег(Спр.ПолнНаименование);
  Спр1.Записать();
 КонецЕсли;
КонецЕсли;
КонецЦикла;

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

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