Имя: Пароль:
1C
1С v8
Алгоритм поиска совпадающих договоров
0 Oz11
 
29.01.12
16:19
Ребята, помогите идеями. есть задача, при записи договора контрагента проверять его на совпадение по некоторым свойствам с уже записанными договорами и не записывать в случае нахождения хотя бы одного договора с такими свойствами. конфа УТП. у договоров есть свойства, которые можно создавать через ПланВидовХарактеристик и писать в регистр сведений. был дописан регистр сведений в котором можно настроить какие свойства необходимо проверять при записи договора. (причем все разбито по группам, то есть можно настроить условия проверки, например, так: ((Свойство1 И Свойство2) ИЛИ Свойство3). Свойство1 и Свойство2 относятся к первой группе, СВойство3 - к второй. выходит что внутри групп свойства проверяются через И, группы между собой через ИЛИ). при реализации всей этой ахинеи дошел до того что имею таблицу значений с колонками = названию свойств, и строками с уже записанными договорами, у которых значение свойства совпадает со значением свойства у договора который проверяем при записи:
Свойство1   Свойство2   СвойствоН
ссылка11    ссылка21    ссылкаН1
ссылка12    ссылка22    ссылкаН2
ссылка1М    ссылка2М    ссылкаНМ
выходит такая таблица. (Н - порядковый номер свойства, М - порядковый номер уже имеющегося в системе договора).
теперь вопрос, как имея условие проверки, например, Свойство1 + Свойство2 ИЛИ Свойство3, проверить можно ли записывать договор?
сам думал как-то запросом это делать, но решил спросить совета. может есть другое решение или какие-то идеи.
1 IamAlexy
 
29.01.12
16:25
пляя.. как у тебя так получается.. вроде все слова знакомые а хренпоймешь что ты там понаписал...
2 IamAlexy
 
29.01.12
16:27
запросом, запросом...
делается все просто...

добавляешь в запрос параметры типа:

выбор когда а=&значение1 тогда истина иначе ложь конец как СовпадениеПоПараметруА

выбор когда b=&значение2 тогда истина иначе ложь конец как СовпадениеПоПараметруБ


ну и сколько там у тебя этих условий..
на выходе получаешь таблицу совпадений.. ну и далее сортируй ее и выводи пользователю...
3 Oz11
 
29.01.12
16:27
(1) талант. )))
4 Oz11
 
29.01.12
16:28
(2) что-то не пойму что передавать в эти параметры.
5 IamAlexy
 
29.01.12
16:29
еп.. у тебя есть справочник договоры.

делаешь к нему запрос тупо по справончику и добалвяешь новые поля в запрос как я написал в (3) передавая в параметры запроса те реквизиты по которым тебе поиск нужен...

если на совпадение номера то равенство..
если на вхождение наименование то в поле не равенство а подобно ставь...
6 Oz11
 
29.01.12
16:32
задачу проверки совпадения реквизитов я уже реализовал. сейчас задача проверять свойства.
7 IamAlexy
 
29.01.12
16:33
(6) в чем принципиальная разница?
в том что запрос не к справочнику а к значениям свойств?
8 Oz11
 
29.01.12
16:39
(7) сейчас пробую немного переделать таблицу. хочу сделать так: Договор (ссылка) и Свойство - это колонки. а потом ее запросом тягать. а то выходит что мне несколько раз нужно будет перебирать регистр сведений (ЗначенияСвойств), когда заполняю таблицу и когда ищу совпадения. а так у меня на выходе уже есть таблица, в которой есть все договора у которых свойства совпадают, а тут их будет гарантировано меньше чем в регистре.
9 Oz11
 
29.01.12
16:48
тут наверное вопрос больше в том как выстроить итоговую таблицу так чтобы потом в ней можно было просто найти нужный договор по заданным условиям. сейчас уже есть идея сделать таблицу вида: колонки (Договор, Свойство1, Свойство2, .... , СвойствоН), потом ее свернуть как-то по договору и тогда из нее запросом выбирать данные.
10 IamAlexy
 
29.01.12
16:50
(9) зачем?

сделай запрос выводящий все значения свойств договоров (договор там кстати владелец)

затем по этим значениям ровно так же как по реквизитам договора пройдись
там где есть совпадения - иерархия по владельцу и вывод на экран

все...
11 Oz11
 
29.01.12
17:06
(10) подумал и таки да. то что вы предлагаете действительно самый логичный вариант. спасибо за совет. но я сейчас добился формирования таблицы, как описал в (9) и свернул ее уже. попробую свой способ и отпишусь.
12 Oz11
 
29.01.12
18:58
все таки сделал так как описал в (11). вариант (10) выглядит логичней, но помоему работать будет дольше. хотя я могу ошибаться.
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.