Имя: Пароль:
1C
 
Поиск схожих документов по товарам
,
0 odines
 
17.08.16
14:14
Есть документ, в нем тч Товары. Как найти документы, которые схожи по товарам на 80%? т.е. 80% товаров в 1ом документе, есть в 80% 2го документа...может запросом как-то можно...почитал про хэш - ясности не прибавилось.
1 В тылу врага
 
17.08.16
14:16
То есть пересечение множеств товаров должно быть не менее 80% от объединения?
2 mkalimulin
 
17.08.16
14:19
Когда-то делал так:
        тз=текзаказ.спецификация.выгрузить(,"товар,количество");
        тз.Колонки.Добавить("связь1");
        тз.ЗаполнитьЗначения(1,"связь1");
        тз.Колонки.Добавить("связь2");
        тз.ЗаполнитьЗначения(0,"связь2");
        выб=документы.ЗаказПокупателя.Выбрать(датаначала);
        пока выб.Следующий() цикл
            если (выб.Спецификация.Количество()=0) или (тз.количество()=0) тогда
                доля=0;
            иначе    
                т1=тз.скопировать();
                т2=выб.Спецификация.Выгрузить(,"Товар,Количество");
                для каждого стр из т2 цикл
                    нстр=т1.добавить();
                    нстр.товар=стр.товар;
                    нстр.количество=стр.количество;
                    нстр.связь1=0;
                    нстр.связь2=1;
                конеццикла;
                сч1=0;
                сч2=0;
                сч3=0;
                т1.свернуть("товар,количество","связь1,связь2");
                для каждого стр из т1 цикл
                    если (стр.связь1>0) и (стр.связь2=0) тогда
                        сч1=сч1+1;
                    иначеесли (стр.связь2>0) и (стр.связь1=0) тогда
                        сч2=сч2+1;
                    иначе
                        сч3=сч3+1;
                    конецесли;    
                конеццикла;
                
                доля=мин(сч3/(сч3+сч1),сч3/(сч3+сч2));
            конецесли;
            если доля>=ПроцентСовпадения/100 тогда
                рез.добавить(выб.Ссылка);
            конецесли;    
        конеццикла;
3 odines
 
17.08.16
14:19
(1) вроде как, ну допустим
1 док:
груша
яблоко
вишня

2 док:
груша
яблоко
арбуз
дыня

3 док
груша
дыня
яблоко
вишня

1 и 3 - похожи, 1 и 2 - тоже но только по 2м позициям...
т.е. задача найти схожие тч по номенклатуре
4 odines
 
17.08.16
14:23
(2) ты вроде как берешь спеку и ищешь ее в заказах, а мне надо между заказами поискать - эталона нет как такового...это и ломает мозг...
5 RomanYS
 
17.08.16
14:27
(0) соедини ТЧ саму с собой по номенклатура = номенклатура и ссылка > ссылка, а потом группируй и считай строки.
6 odines
 
17.08.16
14:28
(1) или проще - найти все доки, у которых по 3 позиции совпадают, если в доке меньше 3х - их не рассматриваем...
7 odines
 
17.08.16
14:28
(5) вот да, наверно поможет, попробую...
8 sergeev-ag-1977
 
17.08.16
14:34
(3) считай ковариацию ...
9 odines
 
17.08.16
14:38
(5) чет не то?

ВЫБРАТЬ
    ЗаказТовары.Номенклатура КАК Номенклатура,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЗаказТовары.Ссылка) КАК Ссылка,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЗаказТовары1.Ссылка) КАК Ссылка1
ИЗ
    Документ.Заказ.Товары КАК ЗаказТовары
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.Заказ.Товары КАК ЗаказТовары1
        ПО ЗаказТовары.Номенклатура = ЗаказТовары1.Номенклатура
            И ЗаказТовары.Ссылка > ЗаказТовары1.Ссылка

СГРУППИРОВАТЬ ПО
    ЗаказТовары.Номенклатура

УПОРЯДОЧИТЬ ПО
    Номенклатура
10 sergeev-ag-1977
 
17.08.16
14:45
Давай начнем с постановки - тогда и понятно будет что делать.
80% товара что бы совпали - это как ?

1) Товар1  100 шт   100 руб.
   Товар2    1 шт     1 руб.

2) Товар1    1 шт     1 руб.
   Товар3  100 шт   100 руб.

- на сколько %% они совпадают ? А если так:

1) Товар1  100 шт    100 руб.
   Товар2    1 шт      1 руб.

2) Товар1  100 шт     100 руб.
   Товар3    1 шт 100 000 руб.

Тут как ?
Что будет основой ковариации - ЕИ или сумма ?
11 sergeev-ag-1977
 
17.08.16
14:46
А подсчет ковариации простой - полное соединение и отношение совпадений к общей части заказа. Как слева, так и справа.
12 sergeev-ag-1977
 
17.08.16
14:48
Перемножаем левую и правую.
13 odines
 
17.08.16
14:50
(10) блин эталон у меня все таки есть, снимается задача, всем спасибо
14 odines
 
17.08.16
14:51
в (2) как раз то что нужно
15 В тылу врага
 
17.08.16
14:59
ВЫБРАТЬ РАЗЛИЧНЫЕ
    ЗаказПокупателяТовары.Ссылка КАК Ссылка,
    ЗаказПокупателяТовары.Номенклатура
ПОМЕСТИТЬ ТЗ
ИЗ
    Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары
ГДЕ
    ЗаказПокупателяТовары.Ссылка.Дата >= &Дата
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТЗ.Ссылка КАК Ссылка,
    КОЛИЧЕСТВО(ТЗ.Номенклатура) КАК Количество
ПОМЕСТИТЬ ТЗСвернуто
ИЗ
    ТЗ КАК ТЗ

СГРУППИРОВАТЬ ПО
    ТЗ.Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТЗ1.Ссылка КАК Ссылка1,
    ТЗ2.Ссылка КАК Ссылка2
ИЗ
    ТЗ КАК ТЗ1
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТЗ КАК ТЗ2
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТЗСвернуто КАК ТЗСвернуто2
            ПО ТЗ2.Ссылка = ТЗСвернуто2.Ссылка
        ПО ТЗ1.Ссылка > ТЗ2.Ссылка
            И ТЗ1.Номенклатура = ТЗ2.Номенклатура
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТЗСвернуто КАК ТЗСвернуто1
        ПО ТЗ1.Ссылка = ТЗСвернуто1.Ссылка

СГРУППИРОВАТЬ ПО
    ТЗ1.Ссылка,
    ТЗ2.Ссылка,
    ТЗСвернуто1.Количество,
    ТЗСвернуто2.Количество

ИМЕЮЩИЕ
    КОЛИЧЕСТВО(*) >= 0.8 * (ТЗСвернуто1.Количество + ТЗСвернуто2.Количество - КОЛИЧЕСТВО(*))
16 odines
 
17.08.16
15:11
(15) мегахит! спасибо, работает!
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.