Имя: Пароль:
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 левых соединений...
Задача спокойно решается доработкой отчета по структуре подчиненности, чтобы для справочников умел работать.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.