Имя: Пароль:
1C
1С v8
Как реализовыать связи между контрагентами
0 2307861c
 
06.11.11
23:21
Нужно реализовать связи между контрагентами. Указываем Пупкин друг Иванова, а у Иванова друг Петров и когда заходим в карточку Пупкина то видим список Иванов, петров и друзья Петрова и друзья друзей Петрова... Вобщем если кратко то вот так. Кто-то делал подобное?
1 Armando
 
06.11.11
23:23
Ну сделай регистр сведений
2 МихаилМ
 
06.11.11
23:24
таблица перекрестных ссылок (рс)
3 2307861c
 
06.11.11
23:26
(1) То что регистр то понятно, а вот как данные быстро выбирать?
(2)А подробнее можно?
4 МихаилМ
 
06.11.11
23:30
ссылка1,ссылка2 измерения

+
доп индекс
ссылка2,ссылка1

или дубль записи
5 2307861c
 
06.11.11
23:33
(4)Честно говоря тяжело понять, а как потом тянуть данные что б всех вытянуло?
6 2307861c
 
06.11.11
23:34
(4)Я впринцепе сдела регистр сведений с измерениями Контрагент1, Тип связи, Контрагент 2
7 2307861c
 
06.11.11
23:35
А вто как правильно сделать алгоритм для вытяжки всех связей, вот это вопрос.
8 дущ
 
06.11.11
23:37
(7) какой же вопрос. Это на втором курсе института проходят. Называется "Рекурсивные алгоритмы". Одна масенькая процедура.
З.Ы. А прикольные у вас там "Одноклассники".
9 Evpatiy
 
06.11.11
23:38
(7) Как там... Все люди на планете знакомы через шестерых? Я это к тому что скорее всего можно ограничиться несколькими уровнями без ущерба для функционала.
10 дущ
 
06.11.11
23:40
(9) Ну да, кстати, если ограничиться каким-нибудь количеством вложений, то можно даже одним запросом их всех вынимать.
11 Evpatiy
 
06.11.11
23:43
+(10) И скорость выполнения будет тухнуть в геометрической прогрессии к объему данных при бесконечном количестве уровней.
12 Armando
 
06.11.11
23:44
(6) "Тип связи" тоже измерение? Сделай его ресурсом. Или у вас логика такая?
Академики со мной могут не согласится, но все же:
Проще всего делать двойную запись в регистр. Например,
Вася, Петя; Друзья
Петя, Вася; Друзья

И выбирать запросом типа
выбрать СвязиКонтрагентов.Контрагент2
из РестрСведений.СвязиКонтрагентов
где СвязиКонтрагентов.Контрагент1 = &Контрагент1
13 Armando
 
06.11.11
23:48
Извиняюсь, про "друзья друзей его друзей" не заметил(
14 МихаилМ
 
06.11.11
23:58
есть нет ограничений файловой
тупо пишите все комбинации
либо проверяйте максимальный уровень связей
и пишите его в константу например
и выбирайте с помощью N левых джоинов.

+ тогда проверка на зацикленность при записи.
15 Mikhail Volkov
 
07.11.11
00:03
(0) А партнеры в УТ11 не то?
16 2307861c
 
07.11.11
00:05
(15) Думаю что нет, здесь закручено.
17 2307861c
 
07.11.11
00:05
(14)Да походу так и буду делать
18 МишельЛагранж
 
07.11.11
00:06
ставь первичные связи между пупкиными (Пупкин - Иванов, Иванов - Петров и т.д.), и при открытии чего-там-тебе-нужно шерстишь всех кнтриков и нинизываешь цепочку "связей" (можно с указанием кто-кого друг).
19 acsent
 
07.11.11
00:06
Соцсеть: Контрагенты?
20 МишельЛагранж
 
07.11.11
00:08
это задание от 1С: кто еще не охвачен 1С? (будут правым соединением с базой МВД определять..)
21 дущ
 
07.11.11
00:21
(17) Ага, только если так делать, ты спроси вначале у заказчика не будет ли ситуации "А вот Иванов больше не дружит с Петровым"? По варианту в (14) раздружить их будет ой как тяжело.
22 2307861c
 
07.11.11
00:23
(21)Уже есть механизм раздруживания реквизит булево Актуальность Записи
23 2307861c
 
07.11.11
00:24
(21) Тоесть через левое соединение выбирать актуальные записи
24 МихаилМ
 
07.11.11
00:33
25 Diversus
 
07.11.11
00:44
Хранить в регистре сведений, использовать рекурсию при выборке данных.
Другой вариант сложно придумать...
26 2307861c
 
07.11.11
00:44
(24)Вот вроде неплохо расписано
27 Wingless
 
07.11.11
00:52
Какие нахер регистры, графы и n левых соединений...
Задача спокойно решается доработкой отчета по структуре подчиненности, чтобы для справочников умел работать.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn