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



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Написал полязняшку мож кому сгодится
04. Сентября 2008 :: 08:34
Печать  
Использую в документах, при очистке/смене реквизита(общего/шапки ) типа справочник, если в документе есть другие реквизиты тип которых подчиненный справочник справочнику очищаемого реквизита.
Код
Выбрать все
//очищает реквизиты типа справочник.ххх которые подчинены типу реквизита ИмяРеквизита,
//ИмяРеквизита - наименование реквизита с типом справочник.ххх
Процедура глОчиститьПодчиненныеРеквизиты(Конт,ВидДокумента,ИмяРеквизита) Экспорт
	Попытка
		ЭтоДок = ?(ПустоеЗначение(Конт.НазваниеДокумента) = 0,1,1)
	Исключение
		ЭтоДок = 0;
		Возврат;
	КонецПопытки;

	ПолныйТипВидСпр = "";
	//проверка входных данных
	Если ПустоеЗначение(ИмяРеквизита) = 0 Тогда
		Если (Метаданные.ОбщийРеквизитДокумента(ИмяРеквизита).Выбран() = 1)
			или(Метаданные.Документ(ВидДокумента).РеквизитШапки(ИмяРеквизита).Выбран() = 1) Тогда
				Попытка
					Если (Метаданные.ОбщийРеквизитДокумента(ИмяРеквизита).Тип = "Справочник") Тогда
						ПолныйТипВидСпр = "Справочник." + ПолныйТипВидСпр + Метаданные.ОбщийРеквизитДокумента(ИмяРеквизита).Вид;
					КонецЕсли;
				Исключение
					Попытка
						Если Метаданные.Документ(ВидДокумента).РеквизитШапки(ИмяРеквизита).Тип = "Справочник" Тогда
							ПолныйТипВидСпр = "Справочник." + Метаданные.Документ(ВидДокумента).РеквизитШапки(ИмяРеквизита).Вид
						КонецЕсли;
					Исключение
					КонецПопытки;
				КонецПопытки;
				//ПолныйТипВидСпр = п = етаданные.ОбщийРеквизитДокумента(ИмяРеквизита).Вид);
		КонецЕсли;
	КонецЕсли;
	Если ПолныйТипВидСпр = "" Тогда
		Возврат;
	КонецЕсли;
	//очистка
	//общие реквизиты
	for ж=1 to Метаданные.ОбщийРеквизитДокумента()
	do
		if Метаданные.ОбщийРеквизитДокумента(ж).Тип = "Справочник" then
			Попытка
				if ) = 1 then
					if дентификатор() = ПолныйТипВидСпр then
						Конт.УстановитьАтрибут(Метаданные.ОбщийРеквизитДокумента(ж).Идентификатор ;
						//Сообщить("очищен " +Метаданные.ОбщийРеквизитДокумента(ж).Идентификатор);
					endif
				endif
			Исключение
			КонецПопытки;
		endif;
	EndDo;
	//реквизиты шапки
	for жж=1 to Метаданные.Документ(ВидДокумента).РеквизитШапки()
	Do
		Попытка
			if ладелец.Выбран() = 1 then
				if ладелец.ПолныйИдентификатор() = ПолныйТипВидСпр then
					ификатор Шапки(жж).Вид));
					//Сообщить("очищен " +Метаданные.Документ(ВидДокумента).РеквизитШапки(жж).Идентификатор);
				endif;
			endif;
		Исключение
		КонецПопытки;
	EndDo;

КонецПроцедуры //ОчиститьПодчиненныеРеквизиты(Конт,ВидДокумента,ИмяРеквизита) 



Например распространенная пара реквизитов Контрагент, Договор
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
PVR
God Member
*****
Отсутствует



Сообщений: 622
Зарегистрирован: 19. Ноября 2007
Пол: Мужской
Re: Написал полязняшку мож кому сгодится
Ответ #1 - 04. Сентября 2008 :: 09:44
Печать  
Может и пригодится Улыбка
Зачем передавать Конт и ВидДокумента, ведь из контекста можем получить ВидДокумента !?
И очень не нравится мешанина из рус. и англ. операторов!
« Последняя редакция: 04. Сентября 2008 :: 11:12 - PVR »  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Написал полязняшку мож кому сгодится
Ответ #2 - 04. Сентября 2008 :: 11:09
Печать  
А что такое Конт.НазваниеДокумента ??
Это же не универсально Печаль
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Написал полязняшку мож кому сгодится
Ответ #3 - 05. Сентября 2008 :: 01:38
Печать  
artbear писал(а) 04. Сентября 2008 :: 11:09:
А что такое Конт.НазваниеДокумента ??
Это же не универсально Печаль


Поскольку процедура нацелена только на документы, то в чем же неуниверсальность ?
А применил для того чтобы по контексту не записанного элемента бд можно было определить документ это или нет. Есть другой вариант ?
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Написал полязняшку мож кому сгодится
Ответ #4 - 05. Сентября 2008 :: 03:30
Печать  
ev-kov писал(а) 05. Сентября 2008 :: 01:38:
artbear писал(а) 04. Сентября 2008 :: 11:09:
А что такое Конт.НазваниеДокумента ??
Это же не универсально Печаль


Поскольку процедура нацелена только на документы, то в чем же неуниверсальность ?
А применил для того чтобы по контексту не записанного элемента бд можно было определить документ это или нет. Есть другой вариант ?

Неуниверсальность в том, что нету у документов стандартного реквизита "НазваниеДокумента" Печаль
А определить, что контекст это документ, просто - Конт.ДатаДок в попытке.
Если исключения нет, это документ.
И никаких левых реквизитов Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Написал полязняшку мож кому сгодится
Ответ #5 - 05. Сентября 2008 :: 04:21
Печать  
artbear писал(а) 05. Сентября 2008 :: 03:30:
ev-kov писал(а) 05. Сентября 2008 :: 01:38:
artbear писал(а) 04. Сентября 2008 :: 11:09:
А что такое Конт.НазваниеДокумента ??
Это же не универсально Печаль


Поскольку процедура нацелена только на документы, то в чем же неуниверсальность ?
А применил для того чтобы по контексту не записанного элемента бд можно было определить документ это или нет. Есть другой вариант ?

Неуниверсальность в том, что нету у документов стандартного реквизита "НазваниеДокумента" Печаль
А определить, что контекст это документ, просто - Конт.ДатаДок в попытке.
Если исключения нет, это документ.
И никаких левых реквизитов Улыбка

Тут вы сэр не правы, название документа это не реквизит документа, это свойство КОНТЕКСТА документа, у справочника его нет и т.д.
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
Thor
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 82
Зарегистрирован: 12. Июля 2006
Re: Написал полязняшку мож кому сгодится
Ответ #6 - 05. Сентября 2008 :: 08:06
Печать  
ev-kov писал(а) 05. Сентября 2008 :: 04:21:
Тут вы сэр не правы, название документа это не реквизит документа, это свойство КОНТЕКСТА документа, у справочника его нет и т.д.

Прочитав сообщение, очень удивился. Неужели  не заметил такое важное свойство?
Решил проверить. В процедуре ПриОткрытии() написал следующее:
Код
Выбрать все
Сообщить(глВзятьКонтекст(Контекст).НазваниеДокумента); 


Ан нет, чуда не произошло. Программа выдала вполне ожидаемый результат:
Код
Выбрать все
Сообщить(глВзятьКонтекст(Контекст).НазваниеДокумента);
{Документ.ПредварительныйСчет.Форма.Модуль(2795)}: Поле агрегатного объекта не обнаружено (НазваниеДокумента) 


Напрашивается следующий вывод: или я не умею готовить  Улыбка упомянутое свойство, или уважаемый ev-kov что-то путает. Рискну предположить, что "НазваниеДокумента" - общий реквизит документа.

Предложение artbear универсально на все 100%. Более того, подобный подход я встречал в конфигурации Rocket Launcher (поправьте, если неправильно написал) - перенос данных по OLE. Там для того, чтобы определить, со значением какого типа приходится работать, в блоке Попытка-КонецПопытки вывался атрибут или метод объекта, уникальный только для объектов этого типа: например, для справочника "Код", для документа - "НомерДок" и т.д.
  
Наверх
ICQ  
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Написал полязняшку мож кому сгодится
Ответ #7 - 05. Сентября 2008 :: 08:27
Печать  
Thor писал(а) 05. Сентября 2008 :: 08:06:
ev-kov писал(а) 05. Сентября 2008 :: 04:21:
Тут вы сэр не правы, название документа это не реквизит документа, это свойство КОНТЕКСТА документа, у справочника его нет и т.д.

Прочитав сообщение, очень удивился. Неужели  не заметил такое важное свойство?
Решил проверить. В процедуре ПриОткрытии() написал следующее:
Код
Выбрать все
Сообщить(глВзятьКонтекст(Контекст).НазваниеДокумента); 


Ан нет, чуда не произошло. Программа выдала вполне ожидаемый результат:
Код
Выбрать все
Сообщить(глВзятьКонтекст(Контекст).НазваниеДокумента);
{Документ.ПредварительныйСчет.Форма.Модуль(2795)}: Поле агрегатного объекта не обнаружено (НазваниеДокумента) 


Напрашивается следующий вывод: или я не умею готовить  Улыбка упомянутое свойство, или уважаемый ev-kov что-то путает. Рискну предположить, что "НазваниеДокумента" - общий реквизит документа.

Предложение artbear универсально на все 100%. Более того, подобный подход я встречал в конфигурации Rocket Launcher (поправьте, если неправильно написал) - перенос данных по OLE. Там для того, чтобы определить, со значением какого типа приходится работать, в блоке Попытка-КонецПопытки вывался атрибут или метод объекта, уникальный только для объектов этого типа: например, для справочника "Код", для документа - "НомерДок" и т.д.


Давайте разберемся в чем дело.Вызов процедуры делаю из модуля формы :
Код
Выбрать все
глОчиститьПодчиненныеРеквизиты(Контекст,Вид(),"Издание"); 

у контекста переданного таким образом есть св-во "НазваниеДокумента" общего реквизита естественно такого нет в конфе.
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Написал полязняшку мож кому сгодится
Ответ #8 - 05. Сентября 2008 :: 08:32
Печать  
artbear писал(а) 05. Сентября 2008 :: 03:30:
ev-kov писал(а) 05. Сентября 2008 :: 01:38:
artbear писал(а) 04. Сентября 2008 :: 11:09:
А что такое Конт.НазваниеДокумента ??
Это же не универсально Печаль


Поскольку процедура нацелена только на документы, то в чем же неуниверсальность ?
А применил для того чтобы по контексту не записанного элемента бд можно было определить документ это или нет. Есть другой вариант ?

Неуниверсальность в том, что нету у документов стандартного реквизита "НазваниеДокумента" Печаль
А определить, что контекст это документ, просто - Конт.ДатаДок в попытке.
Если исключения нет, это документ.
И никаких левых реквизитов Улыбка


вариант конечно проще моего, спасибо
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Написал полязняшку мож кому сгодится
Ответ #9 - 05. Сентября 2008 :: 09:01
Печать  
НазваниеДокумента - это реквизит диалога типа SATIC во всех штатных документах в комплексной конфигурации
Очень довольный
  
Наверх
ICQ  
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Написал полязняшку мож кому сгодится
Ответ #10 - 05. Сентября 2008 :: 10:02
Печать  
dnp писал(а) 05. Сентября 2008 :: 09:01:
НазваниеДокумента - это реквизит диалога типа SATIC во всех штатных документах в комплексной конфигурации
Очень довольный

мда, тупанул, спасибо что поправили
LOL

ЗЫ: конфа самописка, но на форме есть такое реквизит, вспомнил
  

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