Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Возможно ли? (число прочтений - 3530 )
mozer
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 324
Местоположение: Пермь
Зарегистрирован: 14. Января 2011
Пол: Мужской
Возможно ли?
01. Февраля 2012 :: 07:05
Печать  
Пишу обработку списка выбора на ТП.
Естественно хочу написать универсальную обработку для всех типов данных. Прописать самому типы и передать в качестве параметров не проблема, но хочу сделать что то вот такое
Код
Выбрать все
Процедура ПриНачалеВыбораЗначения(ИД,ФСО)
   ФСО = 0;
   СтруктураПараметров = СоздатьОбъект("Структура");
   СтруктураПараметров.Вставить("Тип","Справочник");
   СтруктураПараметров.Вставить("Вид","сфМагазины");
   ОткрытьФорму("Обработка.СписокВыбор",СтруктураПараметров);
КонецПроцедуры
 



Но хочется заменить вот эту часть на универсальную
Код
Выбрать все
СтруктураПараметров.Вставить("Тип","Справочник");
СтруктураПараметров.Вставить("Вид","сфМагазины");

 



Как можно получить тип объекта 1С из реквизита диалога?
  
Наверх
 
IP записан
 
Anatol
Senior Member
****
Отсутствует


тыц, пыц, тыц!!!

Сообщений: 412
Зарегистрирован: 24. Апреля 2009
Re: Возможно ли?
Ответ #1 - 01. Февраля 2012 :: 07:36
Печать  
Наверное АссоциативныйВектор тебе поможет...


Код
Выбрать все
Процедура КПДНоваяСтрока()

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

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

	ЗначениеВыбора = Сервис.ВыбратьЗначение(ВариантПодбора);

	Если ЗначениеВыбора <> 0 Тогда
	    //Откраваем подбор документов
		ПараметрыОтбора.Добавить(ЗначениеВыбора, "ВариантОтбора");
		ОткрытьПодбор("Обработка.ВСПодборРеализаций","",ПараметрыОтбора);

		Форма.Обновить(1);

	КонецЕсли;

КонецПроцедуры 

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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Возможно ли?
Ответ #2 - 01. Февраля 2012 :: 07:53
Печать  
Посмотреть Тип и Вид через АтрибутФормы , это ежели есть формекс, или через ТипЗначенияСтр() + Вид(), это ежели его нет..
+ПолучитьАтрибут()
  
Наверх
 
IP записан
 
mozer
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 324
Местоположение: Пермь
Зарегистрирован: 14. Января 2011
Пол: Мужской
Re: Возможно ли?
Ответ #3 - 01. Февраля 2012 :: 07:54
Печать  
Нет не то!
Мне нужно получить значение указанное в поле "ТИП" реквизита диалога.
Пример:
реквизит диалога 1 (поле ввода)
тип - "Справочник.сфМагазины"
реквизит диалога 2 (поле ввода)
тип - "Справочник.Фирмы"

так вот хочется написать под них одну обработку выбора универсальную! Как бы "ТИП" получить?
  
Наверх
 
IP записан
 
mozer
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 324
Местоположение: Пермь
Зарегистрирован: 14. Января 2011
Пол: Мужской
Re: Возможно ли?
Ответ #4 - 01. Февраля 2012 :: 07:56
Печать  
Eprst писал(а) 01. Февраля 2012 :: 07:53:
Посмотреть Тип и Вид через АтрибутФормы , это ежели есть формекс, или через ТипЗначенияСтр() + Вид(), это ежели его нет..
+ПолучитьАтрибут()

а вид как получить. Я ведь не могу знать какой ИД у реквидита?! знаешь подскажи
  
Наверх
 
IP записан
 
mozer
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 324
Местоположение: Пермь
Зарегистрирован: 14. Января 2011
Пол: Мужской
Re: Возможно ли?
Ответ #5 - 01. Февраля 2012 :: 08:06
Печать  
Код
Выбрать все
Процедура ПриНачалеВыбораЗначения(ИД,ФСО)
	ФСО = 0;

	  РасширениеФормы = СоздатьОбъект("РасширениеФормы");
	РасширениеФормы.УстановитьФорму(Форма);
	Атрибут = РасширениеФормы.ПолучитьАтрибут(ИД);
	Тип = Атрибут.ТипЗначенияСтр();

	СтруктураПараметров = СоздатьОбъект("Структура");
	СтруктураПараметров.Вставить("Тип",Тип );
	СтруктураПараметров.Вставить("Вид",???);//проблема здесь!!!
	ОткрытьФорму("Обработка.СправочникСписокВыбор",СтруктураПараметров);
КонецПроцедуры
 



Вот пример чего хочу! Только это написал и встал.  Печаль
  
Наверх
 
IP записан
 
mozer
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 324
Местоположение: Пермь
Зарегистрирован: 14. Января 2011
Пол: Мужской
Re: Возможно ли?
Ответ #6 - 01. Февраля 2012 :: 08:20
Печать  
mozer писал(а) 01. Февраля 2012 :: 08:06:
Код
Выбрать все
Процедура ПриНачалеВыбораЗначения(ИД,ФСО)
	ФСО = 0;

	  РасширениеФормы = СоздатьОбъект("РасширениеФормы");
	РасширениеФормы.УстановитьФорму(Форма);
	Атрибут = РасширениеФормы.ПолучитьАтрибут(ИД);
	Тип = Атрибут.ТипЗначенияСтр();

	СтруктураПараметров = СоздатьОбъект("Структура");
	СтруктураПараметров.Вставить("Тип",Тип );
	СтруктураПараметров.Вставить("Вид",???);//проблема здесь!!!
	ОткрытьФорму("Обработка.СправочникСписокВыбор",СтруктураПараметров);
КонецПроцедуры
 



Вот пример чего хочу! Только это написал и встал.  Печаль


ВСЕ РЕШИЛ ВСЕМ СПАСИБО!
ВОТ ГОТОВЫЙ КОД
Код
Выбрать все
Процедура ПриНачалеВыбораЗначения(ИД,ФСО)
	ФСО = 0;

	  РасширениеФормы = СоздатьОбъект("РасширениеФормы");
	РасширениеФормы.УстановитьФорму(Форма);
	Атрибут = РасширениеФормы.ПолучитьАтрибут(ИД);
	Тип = Атрибут.ТипЗначенияСтр();
	  Вид = Атрибут.Значение.Вид();

	СтруктураПараметров = СоздатьОбъект("Структура");
	СтруктураПараметров.Вставить("Тип",Тип );
	СтруктураПараметров.Вставить("Вид",Вид);
	ОткрытьФорму("Обработка.СправочникСписокВыбор",СтруктураПараметров);
КонецПроцедуры
 

  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Возможно ли?
Ответ #7 - 01. Февраля 2012 :: 08:51
Печать  
не забудь только, что чтатные атрибуты формы, такие как Наименование,Код,НомерДок,ДатаДок - не будут показывать Значение через атрибут формы у формекса
  
Наверх
 
IP записан
 
mozer
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 324
Местоположение: Пермь
Зарегистрирован: 14. Января 2011
Пол: Мужской
Re: Возможно ли?
Ответ #8 - 01. Февраля 2012 :: 10:21
Печать  
Eprst писал(а) 01. Февраля 2012 :: 08:51:
не забудь только, что чтатные атрибуты формы, такие как Наименование,Код,НомерДок,ДатаДок - не будут показывать Значение через атрибут формы у формекса

да мне только нужно было унифицировать выбор справочников
  
Наверх
 
IP записан
 
Galina Astahova
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 23. Апреля 2012
Re: Возможно ли?
Ответ #9 - 23. Апреля 2012 :: 10:40
Печать  
Спасибо за тему,  Улыбкаактуально ))))
  
Наверх
 
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Возможно ли?
Ответ #10 - 24. Апреля 2012 :: 02:21
Печать  
Ещё вариант, делался именно для формы выбора.
Код
Выбрать все
	//JohnyDeath 18.11.2006 {
	АтрФормы = СоздатьОбъект("АтрибутФормы");
	АтрФормы.УстановитьАтрибут(КонтекстФормы.Форма,ИдентификаторПоляВвода);
	ФормулаПоляВвода = СокрЛП(АтрФормы.Формула);
	Если Прав(ФормулаПоляВвода,1)<>";" Тогда
		ФормулаПоляВвода=ФормулаПоляВвода+";";
	КонецЕсли;
	// } JohnyDeath 18.11.2006
	АтрФормы.АвтоВыбор = 0;

	Модуль = СоздатьОбъект("ВыполняемыйМодуль");
	Модуль.УстановитьМодуль("
	|Функция ПолучитьЗначение()
	|	Возврат "+ИдентификаторПоляВвода+";
	|КонецФункции
	|
	|Процедура УстановитьЗначение(НовоеЗначение)
	|	"+ИдентификаторПоляВвода+" = НовоеЗначение;
	|	"+ФормулаПоляВвода+"  //JohnyDeath 18.11.2006
	|КонецПроцедуры
	|
	|Функция Тип()
	|	Возврат ТипЗначенияСтр("+ИдентификаторПоляВвода+");
	|КонецФункции
	|
	|Функция Вид()
	|	Попытка
	|		Возврат "+ИдентификаторПоляВвода+".Вид();
	|	Исключение
	|		Возврат """";
	|	КонецПопытки;
	|КонецФункции
	|");
	Модуль.НазначитьКонтекст(КонтекстФормы);
	Модуль.КомпилироватьМодуль();
	Модуль.ВыполнитьМодуль();

	Значение = Модуль.ПолучитьЗначение();
	Тип = Модуль.Тип();
	Вид = Модуль.Вид();

	...

	Модуль.УстановитьЗначение(НовЗнач);
 


сработает и на поле неопределенного типа, если задана типизация
метод УстановитьЗначение() также выполнитт и формулу, которая на поле выбора навешана.
http://www.1cpp.ru/forum/YaBB.pl?num=1155187084
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать