Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Использование Вып модуля (число прочтений - 1768 )
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Использование Вып модуля
24. Апреля 2008 :: 05:09
Печать  
Корректно ли пользоваться выполняемым модулем, если нет то почему ? Ситуация: на форме в реквизитах в формуле висит процедура ПриВыбореРеквизита("Контрагент"), и т.д. - назначение этой процедуры отработать некторые действия при выборе реквизита, Если пустой рекивизит то одни действия, если не пустой то другие, но в при открытии метод Форма.ПолучитьАтрибут(Контрагент) возвращает неопределенное значение (в послеоткрытия()  тоже самое) а если пользователь сохранил настройки формы отчета через кнопку, то отработать все равно нужно, вышел из положения такой функцией
Код
Выбрать все
//Вернет значение реквизита формы
Функция ПолучитьЗначениеРеквизита(НаименРеквизита)
	Модуль = СоздатьОбъект("ВыполняемыйМодуль");

	ТекстМод = Шаблон("
	|Функция ПолучитьАтрибут()
	|	Возврат [НаименРеквизита];
	|КонецФункции
	|");
	Модуль.РазрешитьИсключения();
	Модуль.НазначитьКонтекст(Контекст);
	Попытка
		Модуль.УстановитьМодуль(ТекстМод);
		Модуль.КомпилироватьИВыполнитьМодуль();
	Исключение
		Сообщить("Не вернуть атрибут. Сообщите программисту.");
		Возврат ""
	КонецПопытки;
	Возврат Модуль.ПолучитьАтрибут();
КонецФункции // ПолучитьЗначениеРеквизита(НаименРеквизита)
 

  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Использование Вып модуля
Ответ #1 - 24. Апреля 2008 :: 05:29
Печать  
Нифига не понял задачу Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
noprogrammer
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 465
Зарегистрирован: 16. Июня 2006
Re: Использование Вып модуля
Ответ #2 - 24. Апреля 2008 :: 06:03
Печать  
(ev-kov) А зачем вообще пользоваться "Форма.ПолучитьАтрибут(Контрагент)" ?!
Таким образом атрибут можно получат только для управления видимостью\доступностю, но как я понял у тебя другая задача.

Исходя из того что ты написал тебе нужно всего лишь при открытии отчета запустить процедурку ПриВыбореРеквизита("Контрагент") и то что пользователь сохранил настройку - ничего не меняет - значение атрибута контрагент у тебя уже будет.
  
Наверх
wwwICQ  
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Использование Вып модуля
Ответ #3 - 24. Апреля 2008 :: 06:36
Печать  
noprogrammer писал(а) 24. Апреля 2008 :: 06:03:
(ev-kov) А зачем вообще пользоваться "Форма.ПолучитьАтрибут(Контрагент)" ?!

ну так вообще то компактнее код, а значит при прочих равных предпочтительнее

noprogrammer писал(а) 24. Апреля 2008 :: 06:03:
Таким образом атрибут можно получат только для управления видимостью\доступностю, но как я понял у тебя другая задача.

Совершенно верно
noprogrammer писал(а) 24. Апреля 2008 :: 06:03:
Исходя из того что ты написал тебе нужно всего лишь при открытии отчета запустить процедурку ПриВыбореРеквизита("Контрагент") и то что пользователь сохранил настройку - ничего не меняет - значение атрибута контрагент у тебя уже будет.

так и делаю

Суть вопроса, выполняемый модуль тут уместен, не возникнет ли каких нить подводных камней которыя я не вижу?
вот код процедуры ПриВыбореРеквизита()
Код
Выбрать все
Процедура ПриВыбореРеквизита(НаименРеквизита)
	Если ПустоеЗначение(ПолучитьЗначениеРеквизита(НаименРеквизита)) = 1  Тогда
		ОчиститьРеквизит(НаименРеквизита);
	Иначе
		Если НаименРеквизита = "ВидДеятельности" Тогда
			Форма.кнСформировать.Доступность(1);
		ИначеЕсли НаименРеквизита = "Издание" Тогда
			Если СписокВыпусков.ТекущаяСтрока() > 0 Тогда
				ТекДата = окВыпусков.ТекущаяСтрока(),),2);
			КонецЕсли;

			Если ПустоеЗначение(ТекДата) = 1 Тогда
				ТекДата = РабочаяДата();
			КонецЕсли;

			ЗаполнитьСписокВыпусков(СписокВыпусков,ТекДата,Издание);

			Если вып = 0 Тогда
				Если СписокВыпусков1.ТекущаяСтрока() > 0 Тогда
					ТекДата = сокВыпусков1.ТекущаяСтрока(),),2);
				КонецЕсли;

				Если ПустоеЗначение(ТекДата) = 1 Тогда
					ТекДата = РабочаяДата();
				КонецЕсли;
				ЗаполнитьСписокВыпусков(СписокВыпусков1,ТекДата,Издание);
			КонецЕсли;

		ИначеЕсли НаименРеквизита = "Контрагент" Тогда
			ОчиститьРеквизит("Договор");

		ИначеЕсли НаименРеквизита = "Договор" Тогда
			УстановитьСоотвТекущуюСтрокуСписка(ОтборДог,"Договор");

		ИначеЕсли НаименРеквизита = "Менеджер" Тогда

		КонецЕсли;

	КонецЕсли;

КонецПроцедуры // ПриВыбореРеквизита(НаименРеквизита)

 



  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
noprogrammer
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 465
Зарегистрирован: 16. Июня 2006
Re: Использование Вып модуля
Ответ #4 - 24. Апреля 2008 :: 07:27
Печать  
(ev-kov)

Код
Выбрать все
Функция ПолучитьЗначениеАтрибутаФормы(стрАтрибут)
	ЭлементыФормы=СоздатьОбъект("АтрибутФормы");
	ЭлементыФормы.УстановитьАтрибут(Форма, стрАтрибут);
	Возврат ЭлементыФормы.Значение;
КонецФункции
//--------------------------------------------

Процедура ПослеОткрытия()
	Сообщить("Значение атрибуты формы <Контрагент> "+ПолучитьЗначениеАтрибутаФормы("Контрагент"));
КонецПроцедуры
//--------------------------------------------
 

  
Наверх
wwwICQ  
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Использование Вып модуля
Ответ #5 - 24. Апреля 2008 :: 07:35
Печать  
noprogrammer писал(а) 24. Апреля 2008 :: 07:27:
(ev-kov)

Код
Выбрать все
Функция ПолучитьЗначениеАтрибутаФормы(стрАтрибут)
	ЭлементыФормы=СоздатьОбъект("АтрибутФормы");
	ЭлементыФормы.УстановитьАтрибут(Форма, стрАтрибут);
	Возврат ЭлементыФормы.Значение;
КонецФункции
//--------------------------------------------

Процедура ПослеОткрытия()
	Сообщить("Значение атрибуты формы <Контрагент> "+ПолучитьЗначениеАтрибутаФормы("Контрагент"));
КонецПроцедуры
//--------------------------------------------
 



а так то оно компактнее, спасибо, хоть и через formeх


ЗЫ: надеюсь это работает стабильно
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать