gifts2017

Универсальный механизм поиска связанных объектов для 1С 8.1

Опубликовал Артур Чколян (sondarium) в раздел Программирование - Практика программирования

Механизм поиска связанных объектов в виде встраиваемой обработки

 

Обработку встраиваете в любую конфигурацию.

На входе принимается объект по типу ДокументСсылка, либо СправочникСсылка (не проверял).

Обращение к экспортному методу возвращает ТЗ связанных объектов со структурой подчинения. Открытие обработки показывает дерево связанных объектов.

Поиск связанных объектов выполняется одним запросом.

 

Обновлено 2-апр-2014.

Спасибо unoDosTres за совет!

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Обработка (обновлено 02-апр-2014)
.epf 8,04Kb
02.04.14
119
.epf 8,04Kb 119 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Артур Аюханов (artbear) 31.10.10 16:33
2. Артур Чколян (sondarium) 31.10.10 20:47
Вообще, это просто интересно было сделать - и в этом причина появления на свет сего создания.
А зачем встраивать... Ну, например, есть своя конфа. И вы хотите, чтобы при распроведении документов, выдавались предупреждение о невозможности распроведения и структура связанных с этим документом объектов. Вот для этого и понадобится этот зверёныш.
3. Эстер Коган (e.kogan) 01.11.10 11:16
А как с кольцевыми ссылками работает?
4. Игорь Исхаков (Ish_2) 01.11.10 12:21
(3) Дерево с кольцевыми ссылками (зацикливание при рекурсии) - тема интересная.
При очень большом количестве элементов (например, "разузлование" номенклатуры) - так и вовсе очень интересная. Требует совсем других подходов.
Скоро мы рассмотрим это чудо и как с ним бороться.
5. Артур Чколян (sondarium) 01.11.10 13:17
С кольцевыми ссылками всё нормально работает. Упреждающий алгоритм прост: в результат добавляются только уникальные сочетания объект-мама. Посему хвостик к исходном объекту у кольца будет, а вот дальше дерево не проростёт.
6. Борис Скворцов (gaglo) 02.11.10 11:04
Описание обработки так кратко - похвально, конечно, но ...


На экране возникло изображение венерианина - руки в боки, ноги широко расставлены. Он поднял руку с шестью растопыренными пальцами.
- Все пьют воду. Вода полезна. Вода необходима для жизни. Напиток "Витси" тоже полезен. Бутылка "Витси" стоит четыре фала. Все.


Прошу, короче, расширить.
Как соотносится сей механизм с имеющимся в УПП выводом структуры подчиненности документов? Возможные ответы:
- мой быстрее.
- мой работает и с элементами справочников.
- мой не только показывает, а еще выдает отдельно ТЗ со структурой связанных объектов
- эх, если бы я знал, что подобный механизм уже есть...
7. Артур Чколян (sondarium) 02.11.10 12:09
Ахаха :D Классный коммент! Конечно, я знаю про механизм в ут/упп. Там тоже запросом сделано, только структура чуть более разветлённая (на несколько общих модулей раскинуты функции). Я считаю главным достоинством своей штуки то, что она проще. Меньше объектов, легче изменять, легче встраивать в неизвестную конфу. А насчёт других достоинств и недостатков не уверен, но не стану сильно удивляться, если таковые найдутся.
8. Борис Скворцов (gaglo) 02.11.10 12:16
(6) Немного поисследовал.

Механизм работает на документах быстрее встроенного в УПП, но за счет того, что не обрабатывает ссылки из строк табличных частей (в УПП это частое явление), а только из реквизитов. Ну и дерево получается короче (ниже?).

Встроенный в УПП механизм работает сразу и на подчиненные документы, и на родительские. ИМХО это удобно, хотя и не всегда нужно.

Динамически построенный запрос становится "двусмысленным" по синтаксису и оттого невыполнимым, когда попадается реквизит чего-то с именем Объект:
ВЫБРАТЬ Объект.Ссылка Как Ссылка
ИЗ Справочник.ХранилищеДополнительнойИнформации КАК Объект
ГДЕ Объект.Объект = &ВходСсылка
Но это совсем легко поправить.
9. uno dos (unoDosTres) 02.04.14 10:48
я не знаю конечно, но может и работала эта обработка, но там есть функция
Функция ВернутьОбщийТип(ВходящееЗначение)
	
	Если Найти(ТипЗнч(ВходящееЗначение), "Справочник ссылка") Тогда
		Возврат "Справочник";
	ИначеЕсли Найти(ТипЗнч(ВходящееЗначение), "Документ ссылка") Тогда
		Возврат "Документ";
	КонецЕсли;
	
	Возврат Неопределено;
	
КонецФункции
...Показать Скрыть


Где ВходящееЗначение это ДокументСсылка и использовать ВстроеннуюФункцию Найти(ТипЗнч(ВходящееЗначение), "Документ ссылка") здесь безполезно потому что первый параметр должен быть строковым, а иначе будет на выходе всегда 0, и в результате дерево структуры выходить не будет, так что без доработки я что-то не знаю как это будет работать, либо я чего-то недопонял

10. uno dos (unoDosTres) 02.04.14 14:18
в догонку к (9) надо было как то так в той функции писать

Функция ВернутьОбщийТип(ВходящееЗначение)
Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(ВходящееЗначение)) Тогда
		//это спрвочник
		Возврат "Справочник";
ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(ВходящееЗначение)) Тогда
		//это документ
		Возврат "Документ";
КонецЕсли            ;
Возврат Неопределено;
КонецФункции
...Показать Скрыть
11. Артур Чколян (sondarium) 02.04.14 16:24
(10) unoDosTres, спасибо, поправил!
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа