Еще раз о дополнительных реквизитах и дополнительных сведениях

06.04.24

Задачи пользователя - Адаптация типовых решений

Дополнительные реквизиты и сведения существуют давно. Задумка очень хорошая. Суть этих механизмов понятна всем. По этому поводу написано много. Что тут можно сказать нового? Однако бес, как всегда, в деталях. Как создавали реквизиты в объектах типовых конфигураций, так и продолжаем это делать. Почему это происходит? За всех сказать не могу. Могу рассуждать только на своем примере. Являясь убежденным практиком, одно могу сказать вполне определенно. Если что-то на практике недостаточно удобно, то останется оно главным образом в теории... Если не приложить немного усилий.

Мне приходится активно перемещаться между различными конфигурациями, занимаясь их поддержкой и развитием. Встречаются разные случаи, но есть и много общего. Дополнительные реквизиты и сведения, наряду с использованием расширений, являются мощным инструментом сохранения типовых конфигураций в виде, пригодном для частого обновления. Однако, на практике, почти всегда встречается одно и то же. Расширения часто либо не используются по причине "потом не разобраться", либо наблюдается другая крайность - на каждую задачу свое расширение. Это тема отдельной статьи. Сейчас говорим о дополнительных реквизитах и сведениях.

Буду говорить о себе, потому что только о себе можно сказать наверняка. Почему, зная об этом механизме, я продолжал создавать реквизиты в конфигурации? Скажу прямо. Потому, что такова реальность. К сожалению, производством качественного и структурированного кода удается заняться далеко не всегда. Основную часть времени занимаемся судорожным производством *овнокода за очень ограниченный промежуток времени.

Со стороны заказчика требования по сохранению конфигурации в явном виде поступают не часто. Временами в постоянном цейтноте возникает даже некое злорадное чувство. Типа - получи, что хотел.

Как в таких условиях сохранить чувство собственного достоинства, уважение к себе и не навредить? Для себя выход вижу только один. Эффективно использовать БСП и создавать свои библиотеки там, где БСП "недорабатывает".

 

Теперь, к делу. Много раз внимательно читал модули БСП, предназначенные для работы с дополнительными реквизитами и сведениями. Возможно, у меня плохо со зрением, но впечатление сложилось вполне определенное. Много корректного кода. Но реального набора функций, позволяющих программно работать со свойствами так же удобно, как с реквизитами объекта нет. ИМХО - прослеживается ориентация на интерактивные средства. Все направлено на то, чтобы наглядно представить наборы свойств на форме, создав иллюзию у пользователя, что он работает с обычными реквизитами.

Само по себе - это замечательно. Только, на мой взгляд, забыли о программистах, от которых собственно и зависит - будут ли активно использоваться свойства или нет. Возможно, предполагалось, что программисты способны позаботиться о себе сами. Ну, значит так тому и быть.

Практика, как известно - критерий истины. В данном случае, критерий прост. Если в момент выбора "Что использовать?" новый реквизит в конфе или дополнительное свойство, ты выбираешь свойство, значит средства работы со свойствами, которыми ты располагаешь, достаточно удобны. Если создаешь реквизит объекта, то тебе надо задуматься над своим инструментарием.

Однажды мне надоело выбирать, и я написал маленькую библиотечку. С тех пор всегда ее пользую и выбираю свойства не задумываясь. В этом нет никакого открытия Америки. Примеров подобных функций в сети много. Возможно, более корректных. Это тоже говорит о том, что тема актуальна и пишу я не зря. Надо просто собраться с духом и поместить эти функции в модуль, который всегда под рукой. И тогда сразу кое-что изменится в подходах к расширению возможностей конфигурации. Привожу свои варианты функций из практических соображений. Пользуюсь ими давно. Никогда не подводили. Уже привык им доверять.

Сам я больше тяготею к использованию дополнительных сведений. Причем, без наборов. В основном использую их для хранения данных порождаемых программой. Поэтому работа с дополнительными реквизитами представлена в библиотеке беднее. Дописывать свежее не стал. Предлагаю только проверенный код. Каждый может доработать под свои нужды сам. Основная цель была не накормить, а научить ловить рыбу. Сорри.

 

Все функции приведены и описаны в тексте ниже:

1. Собственно - свойство. Суть этой функции в том, чтобы не только получить свойство по имени, но и создать его при отсутствии. Для создания нужно явно указать тип. Можно было создать строку по умолчанию, но остановился на этом варианте. Для большего контроля. Удобство удобством, но и случайное создание свойства из-за ошибки в имени ни к чему.

// Универсальная функция. Получает ссылку на свойство по имени. В случае отсутствия, если задан тип, создает свойство. 
// ИмяСвойства 			- (Строка) Для поиска и создания, при отсутствии.
// ТипЗначения 			- (Описание типов) Для создания нового свойства, при отсутствии.
// НаборСвойств 		- (СправочникСсылка.НаборыДополнительныхРеквизитовИСведений) Для включения в набор.
// НаименованиеСвойства - (Строка) Для назначения или изменения наименования и заголовка.
Функция ПолучитьСоздатьСвойство(ИмяСвойства, ТипЗначения = Неопределено, Комментарий = "", ЭтоДополнительноеСведение = Истина, 
								НаборСвойств = Неопределено, НаименованиеСвойства = "") Экспорт
	
	Свойство = Неопределено;
	
	СоздатьСвойство = Ложь;
	
	Запрос = Новый Запрос();
	Запрос.УстановитьПараметр("ИмяСвойства", ИмяСвойства);
	Запрос.Текст = 	
	"ВЫБРАТЬ
	|	ДополнительныеРеквизитыИСведения.Ссылка КАК Ссылка
	|ИЗ
	|	ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения
	|ГДЕ
	|	ДополнительныеРеквизитыИСведения.Имя = &ИмяСвойства
	|	И НЕ ДополнительныеРеквизитыИСведения.ПометкаУдаления";
	
	Выборка = Запрос.Выполнить().Выбрать();
	Если Выборка.Следующий() Тогда
		Свойство = Выборка.Ссылка;
	Иначе
		Если Не ТипЗначения = Неопределено Тогда
			СоздатьСвойство = Истина;
		КонецЕсли;
	КонецЕсли;
	
	Если СоздатьСвойство Или ЗначениеЗаполнено(НаименованиеСвойства) И Не Свойство.Наименование = НаименованиеСвойства Тогда
		Попытка
			Если СоздатьСвойство Тогда
				СвойствоОбъект = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.СоздатьЭлемент();
			Иначе
				СвойствоОбъект = Свойство.ПолучитьОбъект();
			КонецЕсли;
			СвойствоОбъект.Наименование = ?(ЗначениеЗаполнено(НаименованиеСвойства), НаименованиеСвойства, ИмяСвойства);  
			СвойствоОбъект.Имя = ИмяСвойства;
			СвойствоОбъект.Доступен = Истина;
			СвойствоОбъект.ТипЗначения = ТипЗначения;
			СвойствоОбъект.ЭтоДополнительноеСведение = ЭтоДополнительноеСведение;
			СвойствоОбъект.Комментарий = Комментарий;
			СвойствоОбъект.Заголовок = СвойствоОбъект.Наименование;
			СвойствоОбъект.ДополнительныеЗначенияИспользуются = Истина;
			СвойствоОбъект.Виден = Истина;
			СвойствоОбъект.НаборСвойств = НаборСвойств;
			СвойствоОбъект.Записать();
			Свойство = СвойствоОбъект.Ссылка;
			Если СоздатьСвойство И ЗначениеЗаполнено(НаборСвойств) Тогда
				ИмяТабчасти = ?(ЭтоДополнительноеСведение, "ДополнительныеСведения", "ДополнительныеРеквизиты");
				ИмяРеквизитаКоличества = ?(ЭтоДополнительноеСведение, "КоличествоСведений", "КоличествоРеквизитов");
				Если НаборСвойств[ИмяТабчасти].Найти(Свойство, "Свойство") = Неопределено Тогда
					НаборОбъект = НаборСвойств.ПолучитьОбъект();
					ТабЧасть = НаборОбъект[ИмяТабчасти];
					НоваяСтрока = ТабЧасть.Добавить();
					НоваяСтрока.Свойство = Свойство;
					НаборОбъект[ИмяРеквизитаКоличества] = ТабЧасть.Количество();
					НаборОбъект.Записать();
				КонецЕсли;
			КонецЕсли;
		Исключение
		КонецПопытки;
	КонецЕсли;
	
	Возврат Свойство;
	
КонецФункции

2. Работа со значением свойства.

&НаСервере
Процедура ПримерыВызова(ТаблицаОбъектов) Экспорт  
	
	//Для пакетной обработки или создания свойства
	Свойство = ПолучитьСоздатьСвойство("УИД_НашегоДокумента", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(36))); 
	Для Каждого СтрокаТЗ Из ТаблицаОбъектов Цикл
		УИД = ПолучитьУстановитьЗначениеСвойства(Свойство, СтрокаТЗ.СсылкаНаОбъект);
		НовыйУИД = СтрЗаменить(УИД, "1", "2");
		Результат = ПолучитьУстановитьЗначениеСвойства(Свойство, СтрокаТЗ.СсылкаНаОбъект, НовыйУИД);
	КонецЦикла;    
	
	//Для разового вызова
	Если ТаблицаОбъектов.Количество() > 0 Тогда
		УИД = ПолучитьУстановитьЗначениеСвойства("УИД_НашегоДокумента", ТаблицаОбъектов[0].СсылкаНаОбъект);
		НовыйУИД = СтрЗаменить(УИД, "1", "2");
		Результат = ПолучитьУстановитьЗначениеСвойства("УИД_НашегоДокумента", ТаблицаОбъектов[0].СсылкаНаОбъект, НовыйУИД);
	КонецЕсли;
	
КонецПроцедуры   

&НаСервере
// Универсальная функция. Получает значение свойства. При заполненном параметре ЗначениеСвойства может свойство установить. 
// Свойство - Либо свойство (ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения), либо Имя (строка)
// СсылкаНаОбъект - Объект в регистре сведений "ДополнительныеСведения"
// ЗначениеСвойства - Значение, передаваемое для установки.
Функция ПолучитьУстановитьЗначениеСвойства(Свойство_Или_Имя, СсылкаНаОбъект, ЗначениеСвойства = Неопределено) Экспорт
	
	Ответ = Неопределено;
	
	Если ТипЗнч(Свойство_Или_Имя) = Тип("Строка") Тогда
		Свойство = ПолучитьСоздатьСвойство(Свойство_Или_Имя);
	Иначе
		Свойство = Свойство_Или_Имя;
	КонецЕсли;
	
	Если Не Свойство = Неопределено Тогда
		Попытка
			МЗ = РегистрыСведений.ДополнительныеСведения.СоздатьМенеджерЗаписи();
			МЗ.Объект = СсылкаНаОбъект;
			МЗ.Свойство = Свойство;
			МЗ.Прочитать();
			Если Не МЗ.Выбран() Или (Не ЗначениеСвойства = Неопределено И Не МЗ.Значение = ЗначениеСвойства) Тогда
				Если Не ЗначениеСвойства = Неопределено Тогда
					МЗ.Объект = СсылкаНаОбъект;
					МЗ.Свойство = Свойство;
					МЗ.Значение = ЗначениеСвойства;
					МЗ.Записать();
				КонецЕсли;
			КонецЕсли;
			Если ЗначениеЗаполнено(МЗ.Значение) Тогда
				Ответ = МЗ.Значение;
			КонецЕсли;
		Исключение
		КонецПопытки;	
	КонецЕсли;
	
	Возврат Ответ;
	
КонецФункции

3. Локализация объекта по уникальному значению свойства.

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

&НаСервере
// Универсальная функция. Получает объект определенного типа по уникальному значению свойства.
// Свойство - Либо свойство (ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения), либо Имя (строка)
// ЗначениеСвойства - значение, передаваемое для поиска объекта.
// ИмяМетаданные - Имя метаданных ("Документ.ЗаказКлиента"). Сильно ускоряет запрос.
Функция ПолучитьОбъектПоЗначениюСвойства(Свойство_Или_Имя, ЗначениеСвойства, ИмяМетаданные) Экспорт
	
	Ответ = Неопределено;
	
	Если ТипЗнч(Свойство_Или_Имя) = Тип("Строка") Тогда
		Свойство = ПолучитьСоздатьСвойство(Свойство_Или_Имя);
	Иначе
		Свойство = Свойство_Или_Имя;
	КонецЕсли;
	
	Если Не Свойство = Неопределено Тогда
	
		Запрос = Новый Запрос();
		Запрос.Текст = 
		"ВЫБРАТЬ
		|	ДополнительныеСведения.Объект КАК Объект,
		|	ДополнительныеСведения.Свойство КАК Свойство,
		|	ДополнительныеСведения.Значение КАК Значение
		|ИЗ
		|	РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
		|ГДЕ
		|	ДополнительныеСведения.Значение = &ЗначениеСвойства
		|	И ДополнительныеСведения.Свойство = &Свойство
		|	И ДополнительныеСведения.Объект ССЫЛКА Справочник.Номенклатура";
		
		
		Запрос.Текст = СтрЗаменить(Запрос.Текст, "Справочник.Номенклатура", ИмяМетаданные);
		
		Запрос.УстановитьПараметр("Свойство", Свойство);
		Запрос.УстановитьПараметр("ЗначениеСвойства", ЗначениеСвойства);
		Выборка = Запрос.Выполнить().Выбрать();
		Если Выборка.Следующий() Тогда
			Ответ = Выборка.Объект;
		КонецЕсли;  
		
	КонецЕсли;
	
	Возврат Ответ;
	
КонецФункции

4. Создание дополнительного реквизита в наборе.

// Создает в базе дополнительный реквизит в наборе, по значению переданных на вход параметров.
// При отсутствии создает набор по имени
// ИмяСвойства 					- (Строка) Для поиска (создания при отсутствии) свойства.
// ТипЗначения 					- (Описание типов) Для создания нового свойства, при отсутствии.
// НаименованиеНабора 			- (Строка) Для поиска (создания при отсутствии) набора свойств 
//									и для включения дополнительного реквизита в набор.
// ИмяПредопределенногоНабора 	- Для проявления вновь созданного набора в списке. 
// 									Для полноценного использования (видимости в форме) 
//									его придется сделать предопределенным.
// МассивЗначений 				- Массив строковых значений, если хотим сделать перечисление 
//									на основе справочника "ЗначенияСвойствОбъектов".
// НаименованиеСвойства 		- (Строка) (если хотим, чтобы наименование и заголовок реквизита отличались от имени)
Процедура СоздатьДопРеквизит(ИмяСвойства, ТипЗначения, НаименованиеНабора, ИмяПредопределенногоНабора = "", 
							 МассивЗначений = Неопределено, НаименованиеСвойства = "") Экспорт 

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

	Если ЗначениеЗаполнено(ИмяПредопределенногоНабора) И Не Набор.ИмяПредопределенногоНабора = ИмяПредопределенногоНабора Тогда
	    НаборДополнительныхРеквизитов = Набор.ПолучитьОбъект();
		НаборДополнительныхРеквизитов.ИмяПредопределенногоНабора = ИмяПредопределенногоНабора;
		НаборДополнительныхРеквизитов.Записать();
	КонецЕсли;
	
	Свойство = ПолучитьСоздатьСвойство(ИмяСвойства, ТипЗначения, , Ложь, Набор, НаименованиеСвойства);  
	
	Если Не Свойство = Неопределено И Не МассивЗначений = Неопределено Тогда
		
			ТаблицаНужныхЗначений = Новый ТаблицаЗначений();
		    ТаблицаНужныхЗначений.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(100)));
			Для Сч = 1 По МассивЗначений.Количество() Цикл
			    ТаблицаНужныхЗначений.Добавить();
			КонецЦикла; 
		    ТаблицаНужныхЗначений.ЗагрузитьКолонку(МассивЗначений, "Наименование");
			
			ЗапросЗначения = Новый Запрос();
			ЗапросЗначения.УстановитьПараметр("Владелец", Свойство);
			ЗапросЗначения.УстановитьПараметр("ТаблицаНужныхЗначений", ТаблицаНужныхЗначений);
			ЗапросЗначения.Текст = "ВЫБРАТЬ
			                       |	ТаблицаНужныхЗначений.Наименование КАК Наименование
			                       |ПОМЕСТИТЬ ТаблицаНужныхЗначений
			                       |ИЗ
			                       |	&ТаблицаНужныхЗначений КАК ТаблицаНужныхЗначений
			                       |;
			                       |
			                       |////////////////////////////////////////////////////////////////////////////////
			                       |ВЫБРАТЬ
			                       |	ТаблицаНужныхЗначений.Наименование КАК Наименование
			                       |ИЗ
			                       |	ТаблицаНужныхЗначений КАК ТаблицаНужныхЗначений
			                       |		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
			                       |		ПО ТаблицаНужныхЗначений.Наименование = ЗначенияСвойствОбъектов.Наименование
			                       |			И (ЗначенияСвойствОбъектов.Владелец = &Владелец)
			                       |ГДЕ
			                       |	ЗначенияСвойствОбъектов.Наименование ЕСТЬ NULL"; 
			
			Результат = ЗапросЗначения.Выполнить();
			Если Не Результат.Пустой() Тогда 
				Выборка = Результат.Выбрать();
				Пока Выборка.Следующий() Цикл
					НовоеЗначение = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
					НовоеЗначение.Владелец = Свойство;
					НовоеЗначение.Наименование = Выборка.Наименование;
					НовоеЗначение.Записать();
				КонецЦикла;
			КонецЕсли;  
		
	КонецЕсли;
	
КонецПроцедуры 

5. Напоследок, пример использования. Создание необходимых свойств (при отсутствии) при запуске обработки. Пример из моей публикации по СДЭК.

&НаСервере
Процедура СоздатьНеобходимыеДопСвойстваПриИхОтсутствии() Экспорт   
	
	ТипЗначения = Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(36));
	ПолучитьСоздатьСвойство("СДЭК_КодПВЗ", ТипЗначения, , , , "Код ПВЗ СДЭК"); 
	ПолучитьСоздатьСвойство("СДЭК_КодТарифа", ТипЗначения, , , , "Код тарифа СДЭК"); 
	ПолучитьСоздатьСвойство("СДЭК_УИД", ТипЗначения, , , , "УИД от СДЭК"); 
	ПолучитьСоздатьСвойство("СДЭК_УИД_ШК", ТипЗначения, , , , "УИД ШК от СДЭК"); 
	ПолучитьСоздатьСвойство("СДЭК_ИД", ТипЗначения, , , , "Account"); 
	ПолучитьСоздатьСвойство("СДЭК_ApiKey", ТипЗначения, , , , "Secure password"); 
	ПолучитьСоздатьСвойство("СДЭК_Сайт", ТипЗначения, , , , "Сайт"); 
	ПолучитьСоздатьСвойство("СДЭК_ВерсияAPI", ТипЗначения, , , , "Версия"); 
	
	ТипЗначения = Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(500));
	ПолучитьСоздатьСвойство("СДЭК_ОшибкиЗапроса", ТипЗначения, , , , "Сообщение СДЭК"); 
	ПолучитьСоздатьСвойство("СДЭК_URL_ШК", ТипЗначения, , , , "URL ШК СДЭК"); 
	
	ТипЗначения = Новый ОписаниеТипов("Булево");
	ПолучитьСоздатьСвойство("Это_СДЭК", ТипЗначения, , , , "Признак СДЭК"); 
	
	ТипЗначения = Новый ОписаниеТипов("Число");
	ПолучитьСоздатьСвойство("СДЭК_Порт", ТипЗначения, , , , "Порт"); 
	ПолучитьСоздатьСвойство("СДЭК_Вес", ТипЗначения, , , , "Вес"); 
	ПолучитьСоздатьСвойство("СДЭК_Глубина", ТипЗначения, , , , "Глубина"); 
	ПолучитьСоздатьСвойство("СДЭК_Ширина", ТипЗначения, , , , "Ширина"); 
	ПолучитьСоздатьСвойство("СДЭК_Высота", ТипЗначения, , , , "Высота"); 
	
КонецПроцедуры

Ну вот и все. Спасибо за внимание. Надеюсь, что публикация будет полезной и кого-нибудь на что-нибудь сподвигнет. Удачи.

Дополнительные свойства сведения реквизиты типовая конфигурация практика БСП программирование механизмы инструмент

См. также

Табличная часть в доп. реквизитах и формирование таблиц в шаблоне docx для 1С:ДО 3.0

Адаптация типовых решений Платформа 1С v8.3 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    4653    9    5    

18

Расширение для 1С:УНФ. Автоматическое снятие резервов в Заказах покупателей

Логистика, склад и ТМЦ Адаптация типовых решений Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Мы доработали УНФ, чтобы она автоматически отменяла старые резервы и не мешала эффективно продавать.

7200 руб.

02.08.2023    3065    4    0    

20

БСП. Добавляем отчет в меню Отчеты

БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Добавим новый отчет в меню нового документа средствами БСП.

02.04.2024    3137    John_d    10    

89
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. quazare 3606 11.05.22 09:10 Сейчас в теме
Это ваши функции?
Странно, что вы решили не использовать для этого стандартный функционал модулей типовых - "управление свойствами"
chemezov; Revachol; +2 Ответить
2. user1374747 204 11.05.22 09:36 Сейчас в теме
Вы будете смеяться. Пробовал. И убеждал себя, что это хорошо и правильно. Но, такой гипноз не помог. Критерий не сработал. Я привел те варианты, после которых отказался от создания реквизитов. Вот такая магия. Я же сказал - пишу о себе. Только ИМХО. Возможно, у других - по другому.
6. psa247 17 27.06.22 10:06 Сейчас в теме
(2) Отличная статья, сам недавно удо хался с программным созданием. На стратью случайно зашел )). Про стандартный функционал - поддержу. Там черт ногу сломит и мне он не подошел, уже не помню из-за чего, в итоге тоже писал код
3. quazare 3606 11.05.22 09:43 Сейчас в теме
(2) да я не говорю, что это плохо

Главное, чтобы у вас это работало. я вот тоже раньше думал - напишу кучу собственных функций и буду использовать их повсеместно, затем я про некоторые забыл и изобретал их заново по несколько раз.

Потом, решил, буду работать только через БСП.

За публикацию - вам плюс.
4. user1374747 204 11.05.22 09:52 Сейчас в теме
Спасибо. Согласен. Тоже проходил это. Собственные функции устаревают. БСП потихоньку движется. Кто не пользует ее, тот многое теряет. Этот подход пригоден только изредка. Доп. реквиты и сведения как раз такой случай. Наши патроны, на мой взгляд, немного заблудились и непохоже, что этот пробел скоро заполнится. Немного помог.
5. opus70 73 11.05.22 10:27 Сейчас в теме
(1) штатные хороши но обычно очень очень плохо документированы и очень запутанные в своей логике
это касается практически всего штатного API от 1с прям зло так и хочется всех придушит после разборки штатных методов
chemezov; user1852458; psa247; Рамзес; +4 Ответить
7. psa247 17 27.06.22 10:07 Сейчас в теме
(5) вот, точно сказано. иногда быстрее самому запрограммировать, чем разобраться в их функционале, который не всегда обеспечивает универсальность. А чтобы переделать под себя - надо ковырять километры их кода
8. Pryanishnikov_Vladimir 13.09.22 15:07 Сейчас в теме
Тут нет разбора чего-то действительно корпоративного масштаба, а там все плохо. Сделайте запрос с отборами и соединениями по скажем 15и доп. реквизитам, все это по таблице скажем ЗаказКлиента из УТ с периодом в год за который например поступило 800тыс документов. Если к этому добавить что значением доп. реквизита может быть строка - все улетает в космос Индексацию по значению доп реквизита сделать невозможно, потому что в типах значений есть строка неограниченной длины. К этому добавим длинные скатерти соединений в запросе и картинка уже совем не радужная.... намного проще в таких масштабах делать нормальные реквизиты в конфе...
Serg2000mr; +1 Ответить
9. user1374747 204 14.09.22 08:46 Сейчас в теме
Общих решений в реальной жизни вообще не бывает. Все решения, в той или иной мере, частные. А любое частное решение имеет набор условий, в которых его целесообразно применять.

Возможно, я некорректно выразился в статье. Я против создания нетиповых реквизитов."без нужды". В данном случае, у Вас очевидно есть нужда и ситуация выходит за рамки условий применения данного решения. 1С вообще не самая производительная платформа.

Речь шла о том, что изменения в типовых конфигурация - не есть хорошо. И если есть возможность этого избежать, то надо этим пользоваться. А если эта возможность слегка недоработана, то надо это исправить.Чтобы решение о добавлении реквизитов принималось по принципу "так лучше", а не "так проще"".
10. 1ckorolev 30.10.22 01:55 Сейчас в теме
11. Svetlana_E 5 31.10.22 18:23 Сейчас в теме
Спасибо! Почти сдалась уже - надо было загрузить большое количество доп. свойств в справочник ОC, никак не получалось. А ввести вручную за срок, который дали, было просто нереально. Уже решила, что завтра придется расстраивать бухгалтера, но наткнулась на вашу статью!!! Просто везение. Уж в Excel-то она мне набьет, а я теперь смогу загрузить ей все! Огромное спасибо!!!!!
12. user1374747 204 31.10.22 19:06 Сейчас в теме
Вам спасибо за отзыв. Нет ничего приятнее, чем помогать другим.
Еще одного вылечил. В этом, собственно, и была цель публикации.
Svetlana_E; +1 Ответить
13. Svetlana_E 5 31.10.22 19:29 Сейчас в теме
(12) у меня вопрос: вроде все получается, но свойства создаются с пометкой удаления. Все равно все работает, и в инвентарную карточку они попадают, но как-то это меня смущает.
Прикрепленные файлы:
14. Svetlana_E 5 31.10.22 20:09 Сейчас в теме
(13) "ремонт" и "Объем диска" созданы не программно, а вручную через карточку ОС
15. user1374747 204 31.10.22 22:15 Сейчас в теме
(13) Не стоит переживать по этому поводу. Это не пометка удаления. Это такой забавный визуальный эффект, который говорит о том, что данные свойства привязаны к объекту, но не входят в набор, связанный с объектом. Также, в этом случае, пользователю не удастся ввести эти свойства интерактивно.
Чтобы это преодолеть, нужно привязать свойства к набору. Программно это можно было сделать при создании свойства, использовав параметр "НаборСвойств".
Это не трудно сделать и сейчас, воспользовавшись функцией "ПолучитьСоздатьСвойство" в режиме изменения наименования и указав предопределенный набор свойств, привязанный к справочнику (задаем другое наименование и заполняем параметр "НаборСвойств").
gmw; Созинов; Svetlana_E; +3 Ответить
16. Svetlana_E 5 01.11.22 04:57 Сейчас в теме
17. Svetlana_E 5 26.11.22 12:12 Сейчас в теме
Хочу отметить еще один огромный плюс такого подхода. Чисто практического применения.
Чтобы было понятней - напишу подробней.
Бюджетная организация. Приют. Деньги на ОС только через гранты различных фондов. Руководство этих фондов потом требуют мыслимые и немыслимые отчеты. В том числе инвентарные карточки на каждое ОС, где вместо требуемых по закону основных характеристик, заставляют очень подробно описывать эти ОС и у каждого свои, неповторяющиеся у других,свойства. А это как раз и есть "дополнительные сведения".
Стандартный механизм БГУ требует сначала создать это свойство в наборах, а потом уже в карточке ОС выбрать это свойство и присвоить ему значение. Представляете, а если эти свойства(по названию) почти не повторяются????? Каждый раз перебирать сотни свойств с надеждой, что что-то такое ты уже вводил.
Данные же функции позволили привязать свойство непосредственно к ОС, минуя наборы. Это в десятки раз проще и быстрее.

Вывод. Может задумка 1С изначально и была красивой, но на практике оказалась не всегда удобной. Да, наш случай не типичен. Но это тоже работа с дополнительными свойствами.
Так что, Михаил, еще раз огромное спасибо!
18. user1893512 12.01.23 10:52 Сейчас в теме
Здравствуйте, Михаил! Предложенный вами метод работы со свойствами, пожалуй, становится единственным. 1С закрыла доступ к документации БСП и ко многой другой. У меня имеется купленная стандартная конфигурация и активная подписка ИТС, но для доступа к документации этого оказывается мало!
19. virs 23.01.23 18:06 Сейчас в теме
Спасибо очень полезная статья.
Оставьте свое сообщение