1С 7.7 Для тех, кто программирует.
24.07.2009
18:08
#21
Нет. В документе ссылка на контрагента и данные будут взяты уже измененные. В этом и был смысл менять название контрагента при открытии документа.
27.07.2009
11:58
#22
Вроде все заработало... Только вот нужное "Наименование" Контрагента устанавливается в документе только со второго открытия этого документа??? В чем может быть дело?
27.07.2009
12:18
#23
Попробуйте обновить форму, после установки наименования.
А еще вопрос - вы при выходе из документа не возвращаете наименование назад?
А еще вопрос - вы при выходе из документа не возвращаете наименование назад?
29.07.2009
12:27
#24
Нет, при выходе из документа наименование не возвращается... А может эта обработка должна срабатывать не при событии "ПриОткрытии()" документа , а при событии "ПередОткрытием()", хотя в 7-ке вроде нет такой процедуры?
29.07.2009
13:43
#25
ПередОткрытием нет, а вот попробовать написать вызов изменения вне процедуры (в самом низу обычно) - это можно попробовать.
29.07.2009
15:32
#26
"Посмотрите код, плиз, может быть вы найдете ошибку?
Спр = СоздатьОбъект("Справочник.Контрагенты");
История = СоздатьОбъект("Периодический");
История.ИспользоватьОбъект("ПериодНаименование", Контрагент);
История.ВыбратьЗначения();
Пока История.ПолучитьЗначение() = 1 Цикл
ЗначенНовое = История.ЗначениеНаДату(ДатаДок);
КонецЦикла;
Список = СоздатьОбъект ("СписокЗначений");
Спр.ВыбратьЭлементы ();
Пока Спр.ПолучитьЭлемент() > 0 Цикл
Если Спр.НайтиЭлемент(Контрагент) = 1 тогда
Список.ДобавитьЗначение (Спр.ТекущийЭлемент());
КонецЕсли;
КонецЦикла;
Для Сч = 1 По Список.РазмерСписка () Цикл
Список.УстановитьЗначение(Сч,ЗначенНовое,,);
ПолученЗначен = Список.ПолучитьЗначение(Сч);
Спр.Наименование = ПолученЗначен;
Спр.Записать();
Форма.Обновить();
КонецЦикла;
"
Спр = СоздатьОбъект("Справочник.Контрагенты");
История = СоздатьОбъект("Периодический");
История.ИспользоватьОбъект("ПериодНаименование", Контрагент);
История.ВыбратьЗначения();
Пока История.ПолучитьЗначение() = 1 Цикл
ЗначенНовое = История.ЗначениеНаДату(ДатаДок);
КонецЦикла;
Список = СоздатьОбъект ("СписокЗначений");
Спр.ВыбратьЭлементы ();
Пока Спр.ПолучитьЭлемент() > 0 Цикл
Если Спр.НайтиЭлемент(Контрагент) = 1 тогда
Список.ДобавитьЗначение (Спр.ТекущийЭлемент());
КонецЕсли;
КонецЦикла;
Для Сч = 1 По Список.РазмерСписка () Цикл
Список.УстановитьЗначение(Сч,ЗначенНовое,,);
ПолученЗначен = Список.ПолучитьЗначение(Сч);
Спр.Наименование = ПолученЗначен;
Спр.Записать();
Форма.Обновить();
КонецЦикла;
"
29.07.2009
15:50
#27
"Вот это вы навернули 
Идея понятна, но зачем так сложно? Недостаточно было написать так?
Процедура ПриОткрытии()
Если ПустоеЗначение(Контрагент)=0 Тогда
Контрагенты=СоздатьОбъект("Справочник.Контрагенты");
Если Контрагенты.НайтиЭлемент(Контрагент)=1 Тогда
Контрагенты.Наименование=Контрагент.ПериодНаименование.Получить(ДатаДок);
Контрагенты.Записать();
Форма.Обновить();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
А вообще, работать, скорее всего не будет
Так как по идее все это надо вписывать не в ПриОткрытии(), а вне функций и процедур в самый низ модуля.
И вообще, к чему такие сложности? Зачем наименование постоянно перезаписывать? Сделали бы функцию в глобальном модуле ПолучитьНаименование(НужнаяДата) и вызывали бы ее в нужных ситуациях. Буху бы объяснили, что в справочнике наименование указано то, которое актуально на настоящий момент. А вот в разных печатных формах запрашивайте историю его изменения.
P.S. Если бы меня попросили реализовать задачу, связанную с хранением истории наименования, я бы сказал "документы печатать надо своевременно" и не стал бы коверкать типовую конфигурацию."
Идея понятна, но зачем так сложно? Недостаточно было написать так?
Процедура ПриОткрытии()
Если ПустоеЗначение(Контрагент)=0 Тогда
Контрагенты=СоздатьОбъект("Справочник.Контрагенты");
Если Контрагенты.НайтиЭлемент(Контрагент)=1 Тогда
Контрагенты.Наименование=Контрагент.ПериодНаименование.Получить(ДатаДок);
Контрагенты.Записать();
Форма.Обновить();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
А вообще, работать, скорее всего не будет
И вообще, к чему такие сложности? Зачем наименование постоянно перезаписывать? Сделали бы функцию в глобальном модуле ПолучитьНаименование(НужнаяДата) и вызывали бы ее в нужных ситуациях. Буху бы объяснили, что в справочнике наименование указано то, которое актуально на настоящий момент. А вот в разных печатных формах запрашивайте историю его изменения.
P.S. Если бы меня попросили реализовать задачу, связанную с хранением истории наименования, я бы сказал "документы печатать надо своевременно" и не стал бы коверкать типовую конфигурацию."
Читают тему
(гостей: 1)