|
Комбинация номенклатуры в документах | ☑ | ||
---|---|---|---|---|
0
PiNHeaD
11.07.16
✎
16:05
|
Добрый день
Есть такая задача. Определить сколько раз встречается комбинации номенклатуры в документе определенного типа, за указанный период. Например: Люди покупают болт и гайку. Так вот надо определить за этот месяц сколько раз покупали в одном заказе срезу и болт и гайку. Вот думаю над запросом. Что то не выходит никак. Не наталкнете на мысль? Спасибо |
|||
31
Garykom
гуру
11.07.16
✎
17:19
|
(30) Надеюсь поймешь что если сделать через (25) то оно будет "где угодно работать", даже там где нету OLAP и прочих анализов данных.
И умея это врукопашную разобраться и сделать через анализы или скд это меньше часа |
|||
32
Serg_1960
11.07.16
✎
17:44
|
в УТ-11 нечто подобно нужное автору называется "Номенклатура, продаваемая совместно"
|
|||
33
Serg_1960
11.07.16
✎
17:49
|
Погуглил. Ссылка старая, но достаточно и этого(см. с 1:45)
https://www.youtube.com/watch?v=7Gpw4u6kVWo |
|||
34
Ildarovich
11.07.16
✎
19:11
|
Вот тут http://catalog.mista.ru/public/336783/ есть пример запроса, который решает в точности эту задачу. Статья называется "Расчет хэш-функции в запросе".
|
|||
35
PiNHeaD
12.07.16
✎
10:37
|
Я посмотрел анализ данных. Он в принципе анализирует и выводит цифирьки. Но мне дико не нравиться, когда все происходит "за ширмой 1С". поэтому для себя напишу еще "врукопашную" как посоветовал (31) . Еще раз спасибо всем за помощь. Всем "жирных" клиентов и маленькой дебиторки))))
|
|||
36
Ildarovich
12.07.16
✎
11:58
|
(35) Мне непонятно почему вы не хотите использовать готовый запрос из примера 2 в ссылке в (34).
Там я решаю именно эту задачу. Суть решения в том, что код каждой позиции номенклатуры из документа преобразуется в некоторое число (хэш). Хэши всей номенклатуры документа арифметически складываются. В результате образуется хэш набора - некоторое уникальное для каждого набора номенклатуры число. Оно не зависит от порядка номенклатуры из-за сложения. Этот хэш дает возможность посчитать число документов отгрузки с одинаковым набором номенклатуры, выбрать самые популярные наборы и так далее. Все делается быстро и исключительно запросом. |
|||
37
impulse9
12.07.16
✎
12:19
|
ВЫБРАТЬ
ТоварыНаСкладахОбороты.Номенклатура КАК Номенклатура, ТоварыНаСкладахОбороты.Регистратор КАК Регистратор ПОМЕСТИТЬ ТЧ ИЗ РегистрНакопления.ТоварыНаСкладах.Обороты(, , Регистратор, ) КАК ТоварыНаСкладахОбороты ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТЧ.Регистратор КАК Регистратор, ТЧ.Номенклатура КАК Номенклатура, ТЧ1.Номенклатура КАК Номенклатура1 ПОМЕСТИТЬ ВременнаяТаблица ИЗ ТЧ КАК ТЧ ЛЕВОЕ СОЕДИНЕНИЕ ТЧ КАК ТЧ1 ПО (ТЧ.Регистратор = ТЧ1.Регистратор И ТЧ.Номенклатура <> ТЧ1.Номенклатура) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВременнаяТаблица.Номенклатура КАК Номенклатура, ВременнаяТаблица.Номенклатура1 КАК Номенклатура1, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВременнаяТаблица.Регистратор) КАК Регистратор ИЗ ВременнаяТаблица КАК ВременнаяТаблица СГРУППИРОВАТЬ ПО ВременнаяТаблица.Номенклатура, ВременнаяТаблица.Номенклатура1 |
|||
38
impulse9
12.07.16
✎
12:20
|
Можно по другому регистру, или с отбором вида документа, просто для примера привел
|
|||
39
Garykom
гуру
12.07.16
✎
13:12
|
(36) Интересное решение но это же обычные битовые маски и операции с ними.
Иначе называется симхеш (SimHash algorithm, introduced by Charikar and is patented by Google) http://matpalm.com/resemblance/simhash/ и используется для очень быстрого сравнения текстовых документов между собой на похожесть. |
|||
40
DomovoiNaStraze Pravo
12.07.16
✎
13:22
|
В (2) все сказали, зачем изобретать велосипеды?
Интересно что сделал автор? |
|||
41
mistеr
12.07.16
✎
13:37
|
(34) Здесь не точно такая же задача, как в твоем примере. Ты берешь полный состав документа, а ТС нужны часто встречающиеся *пары* позиций.
|
|||
42
Ildarovich
12.07.16
✎
15:09
|
(41) Для пар позиций изначально нет вообще никакой проблемы: достаточно соединить табличные части по ссылке на документ и посчитать сколько раз встретилась каждая пара. Это запрос с одним соединением и одной группировкой. Разве что на два не забыть поделить.
|
|||
43
Ildarovich
12.07.16
✎
15:12
|
+(42) да вот в (37) это решение, там не хватает деления на два и временная таблица не особо нужна.
|
|||
44
PiNHeaD
12.07.16
✎
15:43
|
(36) Из-за уважения я изучу Ваш мануал, просто сейчас он мне с трудом дается.
(40)Я впринципе получил данные из АнализДанных, но решил еще "врукопашную" перепахать используя пример (25) |
|||
45
PiNHeaD
12.07.16
✎
16:16
|
(25) Не вариант. При выборке в год. У меня обработка выполняется уже 20 минут.
|
|||
46
PiNHeaD
12.07.16
✎
16:18
|
(42) Пробовал так. Не помогло.
|
|||
47
DomovoiNaStraze Pravo
12.07.16
✎
16:18
|
(45)Запрос быстрее циклов, даже не стоит пробовать циклами.
|
|||
48
PiNHeaD
12.07.16
✎
16:35
|
(37) Выдал какие то данные. Только вот что получилось. АнализДанных показал мне максимум 6 случаев совпадения. А запрос вывел огромную таблицу. Кому верить?
|
|||
49
Garykom
гуру
12.07.16
✎
16:39
|
(48) Проверь вручную но чую (37) косячит
(47) Давайте не будем сравнивать ж с пальцем, запрос берет данные из регистра оборотов а циклы из доков, натравить циклы на запрос с группировкой из оборотов и что будет? Или попробуйте запросом по докам по ТЧ прогуляться а потом уже. И еще а оно в равных условиях то запущено или запрос на сервере с sql сервером а циклы на клиенте с данными с того же сервера? А нет желания на файловой запустить или хотя бы &НаСервере ? |
|||
50
PiNHeaD
12.07.16
✎
16:44
|
(49) База файловая
|
|||
51
Garykom
гуру
12.07.16
✎
17:01
|
(50) А по сколько в среднем позиций номенклатуры в накладных? Большие накладные или маленькие?
|
|||
52
DomovoiNaStraze Pravo
12.07.16
✎
17:34
|
(49)Ну попробуй запросом обойти ТЧ доков и циклами.
|
|||
53
Garykom
гуру
12.07.16
✎
18:00
|
(52) http://catalog.mista.ru/public/158235/
Просто запросопейсатели не умеют "циклы писать"... в этом то и трабла офигенная |
|||
54
Garykom
гуру
12.07.16
✎
18:03
|
(53)+ Трабла что если строчек в ТЧ доков очень дофига то вложенный цикл по ТЧ будет слегка тормозить и в этом случае как раз желателен метод "битовых масок" по 0 (отсутствие) и 1 (присутствие) для каждого вида номенклатуры в ТЧ дока.
|
|||
55
Garykom
гуру
12.07.16
✎
18:16
|
(54) А еще когда циклу двойную делаем никаких переборов самих ТЧ доков, сначала данные нужные из ТЧ дока в ТЗ и уже циклы по ТЗ!
|
|||
56
DomovoiNaStraze Pravo
13.07.16
✎
09:55
|
(53)Охохох... Сделайте задачу 2 способами и узнаете как оно в жизни.
|
|||
57
Garykom
гуру
13.07.16
✎
11:04
|
(56) могу тоже самое посоветовать
Моя подобное уже много раз делать разными способами и когда лучше запросами а когда нет Параллельно в несколько потоков запросы точно лучше )) |
|||
58
PiNHeaD
13.07.16
✎
11:05
|
(51) Накладные небольшие по 3-5 позиций.
(56) Я так и делаю. Даже тремя вариантами. Один запросом, один анализом данных и еще один циклами. И с секундомером сижу)))) Пока надо обиться что бы все 3 варианта выдавали один результат |
|||
59
PiNHeaD
13.07.16
✎
11:07
|
(58) я имею ввиду что бы в отчете один и тот же результат был. а то у меня все три отчета 3 разных варианта показывают)))
|
|||
60
DomovoiNaStraze Pravo
13.07.16
✎
11:52
|
(57)В соседней ветке я уже увидел как вы пишите. Теперь понятно почему вы сделали склонение к циклам перед запросами в данной задаче. Вы лучше перепроверьте свои знания.
|
|||
61
PiNHeaD
13.07.16
✎
11:57
|
(57) Циклами моя задача очень долго выполняется((((
|
|||
62
Ildarovich
13.07.16
✎
12:18
|
(58) Запросом вот этим
ВЫБРАТЬ 1 Позиция, 1 ЧленРяда
или другим? |
|||
63
PiNHeaD
13.07.16
✎
12:36
|
(62) Вот этим (37)
|
|||
64
PiNHeaD
13.07.16
✎
12:55
|
(62) Запрос пишет ошибку Неизвестный параметр "Подстрока"
ВЫБРАТЬ Ссылка, ПОДСТРОКА(Аргумент, Позиция, 1) КАК СимволКода, ЧленРяда ПОМЕСТИТЬ ОтдельныеСимволы ИЗ ИсходныеДанные, СтепеннойРяд |
|||
65
Ildarovich
13.07.16
✎
13:08
|
(64) Очень странно. Только что проверил. У меня и в 8.2 УТ10.3 и в 8.3 БП3 работает вот в таком виде:
ВЫБРАТЬ 1 Позиция, 1 ЧленРяда
В (62) там УПОРЯДОЧИТЬ лишнее было (забыл стереть вместе с ПЕРВЫЕ 5), но ПОДСТРОКА - это функция языка запросов, как он ее параметром считает?
- В консоли запрос выполняете? |
|||
66
DrZombi
гуру
13.07.16
✎
13:23
|
(0) Под комбинацией подразумевается полный состав номенклатуры по документу?
|
|||
67
PiNHeaD
13.07.16
✎
13:49
|
(66) Не по конкретному документу, а по всем документам за период анализа. Нужно понять сколько раз повторяется какая-либо комбинация номенклатуры.
|
|||
68
PiNHeaD
13.07.16
✎
13:50
|
(65) Да, в консоли)))
|
|||
69
PiNHeaD
13.07.16
✎
13:52
|
(65) Не в консоли тоже самое
|
|||
70
Ildarovich
13.07.16
✎
13:56
|
(68) Скажите на какой конфигурации, на какой платформе выполняете, скопируйте обратно сюда уже свой вариант запроса. Возможно, после обработки конструктором что-то вмешивается.
|
|||
71
PiNHeaD
13.07.16
✎
14:00
|
(65) код был числовым)))
|
|||
72
Ildarovich
13.07.16
✎
14:18
|
С числовым кодом все ГОРАЗДО проще, там многие преобразования не нужны. Достаточно хэш набора в документе получить запросом
ВЫБРАТЬ Ссылка, СУММА(2498015937 * Номенклатура.Код) КАК Хэш ПОМЕСТИТЬ ВыходныеДанные ИЗ Документ.РеализацияТоваровУслуг.Товары СГРУППИРОВАТЬ ПО Ссылка Это будет первый из оставшихся трех запросов. Еще нужно взять предпоследний и последний.
Вот так примерно: ВЫБРАТЬ Ссылка, СУММА(2498015937 * Номенклатура.Код) КАК Хэш
|
|||
73
PiNHeaD
13.07.16
✎
14:47
|
(72) Спасибо. Но это тзапрос мне показывает сколько раз та или иная номенклатура появляется в документах. А меня интересует именно комбинация данных. То есть. покупают люди пюре с котлетой. Так вот сколько за период попалось в документах сразу и пюре и котлета.
|
|||
74
KODin1C
13.07.16
✎
14:54
|
(0) Тебе надо для конкретного значения "болт и гайка" или вообще найти наимболее часто встречающиеся соопутсвующие товары.
|
|||
75
DomovoiNaStraze Pravo
13.07.16
✎
14:56
|
(74)Ему надо конкретно, чтоб он задал параметры двух номенклатур и анализ выдал ответ. (хз правда сегодня может двух, завтра целого набора :) )
|
|||
76
KODin1C
13.07.16
✎
15:03
|
(75) Вроде все просто
ВЫБРАТЬ ВложенныйЗапрос.КоличествоДокументов ИЗ (ВЫБРАТЬ СУММА(1) КАК КоличествоДокументов ИЗ (ВЫБРАТЬ РеализацияТоваровУслугТовары.Ссылка КАК Документ, СУММА(1) КАК КоличествоНоменклатурыИзСписка ИЗ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары ГДЕ РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ &НачПер И &КонПер И РеализацияТоваровУслугТовары.Номенклатура В ИЕРАРХИИ(&спНоменклатурыБолтИГайка) СГРУППИРОВАТЬ ПО РеализацияТоваровУслугТовары.Ссылка) КАК ВложенныйЗапрос ГДЕ ВложенныйЗапрос.КоличествоНоменклатурыИзСписка = &РазмерСпискаНоменклатурыДляБолтаиГайкиРавноДвум) КАК ВложенныйЗапрос |
|||
77
KODin1C
13.07.16
✎
15:04
|
(76) Раве что отработать вариант, что одна и та же номенклатура встречается два раза, тогда надо свернуть еще раз.
|
|||
78
PiNHeaD
13.07.16
✎
15:06
|
(74) мне надо найти всевозможные комбинации
|
|||
79
DomovoiNaStraze Pravo
13.07.16
✎
15:07
|
(78)Вы лучше уточните задачу) А лучше на примере с данными)
|
|||
80
тарам пам пам
13.07.16
✎
15:11
|
для 2-х номенклатур запрос простой:
ВЫБРАТЬ РеализацияТоваровУслугТовары.Номенклатура, РеализацияТоваровУслугТовары1.Номенклатура КАК Номенклатура1, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РеализацияТоваровУслугТовары.Ссылка) КАК Количество ИЗ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары1 ПО РеализацияТоваровУслугТовары.Ссылка = РеализацияТоваровУслугТовары1.Ссылка СГРУППИРОВАТЬ ПО РеализацияТоваровУслугТовары.Номенклатура, РеализацияТоваровУслугТовары1.Номенклатура |
|||
81
KODin1C
13.07.16
✎
15:15
|
(78) Все возможные комбинации из 2х номеклатур или может и более?
|
|||
82
Garykom
гуру
13.07.16
✎
15:19
|
(61) сделай уже сначала запрос а потом уже циклы в памяти по результам запроса
|
|||
83
Garykom
гуру
13.07.16
✎
15:21
|
(80) ты главное не предлагай ТСу терь этот запрос в циклах по всем сочетаниям номенклатуры выполнять :)
|
|||
84
PiNHeaD
13.07.16
✎
15:22
|
Хорошо. постараюсь объяснить на примере.
У нас питаются люди. Делают заказ на кухню. 1 Заказ: Пюре+Котлета; 2 Заказ: Макароны+Курица; 3 Заказ: Пюре+Курица; 4 Заказ: Салат+Морс; 5 Заказ: Котлета+Пюре; 6 Заказ: Рис+Котлета; 7 Заказ: Салат+Макароны+Курица+морс. Анализ: Пюре+котлета - 2 документа; Макароны+Курица - 2 документа. Вывод: С пюре чаще всего берут котлету, а с макаронами курицу |
|||
85
Garykom
гуру
13.07.16
✎
15:24
|
(84) Анализ малополезный, нужно добавить суммы общие по заказам и средний чек.
|
|||
86
PiNHeaD
13.07.16
✎
15:26
|
(85) Пока потребность в этом отчете. Дальше будем расширять и всевозможные фильтры и смены и сезонность. да много чего. Надо модель заложить сначала)))
|
|||
87
KODin1C
13.07.16
✎
15:30
|
(84) Искать сочетания только из двух продуктов или более?
|
|||
88
Garykom
гуру
13.07.16
✎
15:30
|
(86) Смотри для решения задачи есть всего два варианта:
1. Берем по очереди все "пары номенклатуры" и считаем для каждой пары в сколько доках оно встретилось 3. Берем и перебираем все доки (не обязательно сами можно и из оборотного регистра по регистратору) и ТЧ в них. При этом составляем все "пары внутри дока" и для каждой пары ищем/пишем результат в один общий большой список результатов. |
|||
89
Garykom
гуру
13.07.16
✎
15:31
|
(88) *3. то 2.
|
|||
90
Это_mike
13.07.16
✎
15:32
|
(85) а это уже работа для подсистемы аналитики, но не для обхода циклами
|
|||
91
Garykom
гуру
13.07.16
✎
15:32
|
(88)+ По сути если меню небольшое и сочетаний мало то вариант 1 обгонит вариант 2.
Но вариант 2 более универсальный в случае "большого меню" когда много возможных сочетаний. |
|||
92
Это_mike
13.07.16
✎
15:33
|
(91) вариант 2 весгда обгонит
|
|||
93
тарам пам пам
13.07.16
✎
15:35
|
(83) Шта? Какие циклы вообще? Этот запрос уже все пары и выбирает, из него кросс-таблицу в СКД сделать - два действия (добавить отборы по дате и "проведен" и собственно настроить отчет).
|
|||
94
Garykom
гуру
13.07.16
✎
15:35
|
(90) Еще один забаненный )) проявился
Скажи что может подсистема аналитики и что нельзя сделать циклами причем с лучшим результатом по скорости/качеству? Время разработки пусть неучитываем ибо оно несравнимо мало со временем/частотой использования отчетов. А вот иногда что можно кодом (циклами, запросами и т.д.) подсистема аналитики нифуя не могет )) |
|||
95
Garykom
гуру
13.07.16
✎
15:36
|
(92) Даже в случае всего одного сочетания? Хахаха....
|
|||
96
Это_mike
13.07.16
✎
15:37
|
(95) да
|
|||
97
Garykom
гуру
13.07.16
✎
15:39
|
(96) Эээ. У нас в справочнике всего 2 номенклатуры.
И просто дофуя доков в которых может быть 1, 2 или обе вместе. А еще и кучу дублирующихся строк с одной номенклатурой в доках (кто запрещает то?). В этом случае "перебирать документы" (по варианту 2) слегка смешно, когда единственное сочетание известно. |
|||
98
Garykom
гуру
13.07.16
✎
15:45
|
(97)+ Гм вариант идеальный для (0) это завести себе бложек... тьфу т.е. отдельный регистрик и писать туда при пробитии/проведении все сочетания из текущего дока в +1, а при отмене проведения -1.
И будет Ном1, Ном2, Кол-во доков. Для перестановки номенклатуры только что придумать? Для исключения двойного вывода или требований сложения? Хотя может быть интересно для анализа сначала берут "пюре" а потом "котлету" или наоборот думают про гарнир к "котлете"... |
|||
99
Garykom
гуру
13.07.16
✎
15:53
|
и тишина... ))
|
|||
100
DomovoiNaStraze Pravo
13.07.16
✎
15:54
|
Ты всех сразил наповал)
|
|||
101
KODin1C
13.07.16
✎
15:54
|
Вариант для поиска сочетаний 2-х номенклатур:
ВЫБРАТЬ взДанные.Документ, взДанные.Номенклатура ПОМЕСТИТЬ втДанные ИЗ (ВЫБРАТЬ данные.Документ КАК Документ, данные.Номенклатура КАК Номенклатура ИЗ (ВЫБРАТЬ РеализацияТоваровУслугТовары.Ссылка КАК Документ, РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура ИЗ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары ГДЕ РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ &НачДата И &КонДата СГРУППИРОВАТЬ ПО РеализацияТоваровУслугТовары.Ссылка, РеализацияТоваровУслугТовары.Номенклатура) КАК данные СГРУППИРОВАТЬ ПО данные.Документ, данные.Номенклатура) КАК взДанные ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ взВсяНоменклатура.Номенклатура ПОМЕСТИТЬ втВсяНоменклатура ИЗ (ВЫБРАТЬ втДанные.Номенклатура КАК Номенклатура ИЗ втДанные КАК втДанные СГРУППИРОВАТЬ ПО втДанные.Номенклатура) КАК взВсяНоменклатура ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ взВсеВариантыПар.Номенклатура, взВсеВариантыПар.Номенклатура1 ПОМЕСТИТЬ втВсеВариантыПар ИЗ (ВЫБРАТЬ втВсяНоменклатура.Номенклатура КАК Номенклатура, втВсяНоменклатура1.Номенклатура КАК Номенклатура1 ИЗ втВсяНоменклатура КАК втВсяНоменклатура ВНУТРЕННЕЕ СОЕДИНЕНИЕ втВсяНоменклатура КАК втВсяНоменклатура1 ПО втВсяНоменклатура.Номенклатура.Код > втВсяНоменклатура1.Номенклатура.Код) КАК взВсеВариантыПар ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ взРезультат.Номенклатура, взРезультат.Номенклатура1, взРезультат.КоличествоСовпадений ИЗ (ВЫБРАТЬ ВложенныйЗапрос.Номенклатура КАК Номенклатура, ВложенныйЗапрос.Номенклатура1 КАК Номенклатура1, ВложенныйЗапрос.КоличествоСовпадений КАК КоличествоСовпадений ИЗ (ВЫБРАТЬ ВсеДокументыНоменклатуры.Номенклатура КАК Номенклатура, ВсеДокументыНоменклатуры.Номенклатура1 КАК Номенклатура1, СУММА(1) КАК КоличествоСовпадений ИЗ (ВЫБРАТЬ втВсеВариантыПар.Номенклатура КАК Номенклатура, втВсеВариантыПар.Номенклатура1 КАК Номенклатура1, втДанные.Документ КАК Документ ИЗ втВсеВариантыПар КАК втВсеВариантыПар ВНУТРЕННЕЕ СОЕДИНЕНИЕ втДанные КАК втДанные ПО втВсеВариантыПар.Номенклатура = втДанные.Номенклатура) КАК ВсеДокументыНоменклатуры ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ втВсеВариантыПар.Номенклатура КАК Номенклатура, втВсеВариантыПар.Номенклатура1 КАК Номенклатура1, втДанные.Документ КАК Документ ИЗ втВсеВариантыПар КАК втВсеВариантыПар ВНУТРЕННЕЕ СОЕДИНЕНИЕ втДанные КАК втДанные ПО втВсеВариантыПар.Номенклатура1 = втДанные.Номенклатура) КАК ВсеДокументыНоменклатуры1 ПО ВсеДокументыНоменклатуры.Номенклатура = ВсеДокументыНоменклатуры1.Номенклатура И ВсеДокументыНоменклатуры.Номенклатура1 = ВсеДокументыНоменклатуры1.Номенклатура1 И ВсеДокументыНоменклатуры.Документ = ВсеДокументыНоменклатуры1.Документ СГРУППИРОВАТЬ ПО ВсеДокументыНоменклатуры.Номенклатура, ВсеДокументыНоменклатуры.Номенклатура1) КАК ВложенныйЗапрос) КАК взРезультат |
|||
102
DomovoiNaStraze Pravo
13.07.16
✎
16:01
|
Еще денек покумекать и все будет нормально :) (извините что смеюсь)
|
|||
103
DomovoiNaStraze Pravo
13.07.16
✎
16:02
|
*(в смысле всем колхозом покумекать)
|
|||
104
Это_mike
13.07.16
✎
16:04
|
(97) а мы выберем все пары из документов, в которых они есть, запросом.
а крутить циклы... ну, это от альтернативщины... |
|||
105
ИС-2
naïve
13.07.16
✎
16:09
|
(0) смотри анализ данных. Там есть такой пример
|
|||
106
Garykom
гуру
13.07.16
✎
16:12
|
(104) а что мои 2 варианта пофиг на реализацию же?
Неважно запросы или циклы Вот третий вариант с регистром это тру путь правильного 1Сника и да он перебор документов но в онлайне заранее а не когда уже отчет нужен |
|||
107
PiNHeaD
13.07.16
✎
16:20
|
Простите что долго отвечаю. просто вчитываюсь в каждый коммент)))
|
|||
108
тарам пам пам
13.07.16
✎
18:18
|
(106), угу, "тру" 1Сник - из-за элементарного отчета нужно городить регистр и перепроводить реализацию. А если манагер захочет комбинации длиной 3, еще один регистр добавлять и снова перепроводить реализацию?
(107) посмотри мой запрос в (80), он выводит ровно то, что ты описал в (5) и в (84) |
|||
109
Garykom
гуру
13.07.16
✎
18:27
|
(108) >А если манагер захочет комбинации длиной 3, еще один регистр добавлять и снова перепроводить реализацию?
Заранее подумать и все комбинации сделать. Перепроводить ничего не надо, для новых само, адля старых достаточно написать немного кода по заполнению регистра. Или запросописатели не умеют уже код писать? |
|||
110
тарам пам пам
13.07.16
✎
18:46
|
(109) ок, допустим пришли у нас празднующие толпой и заказали сразу 20 позиций; допустим у нас 4 измерения в регистре. Записей в этот регистр пойдет 20! / (20 - 4)! = 20*19*18*17 = 116280. Насколько увеличится время проведения? И вся эта порнография из-за нежелания использовать запрос в 5 строк?
|
|||
111
Garykom
гуру
13.07.16
✎
18:53
|
(110) Гм, а как сумели стать программистом с такими знаниями математики? Поделитесь а аж завидно... учишь тут учишь а некоторые куяк-куяк и на ставку.
ЗЫ Регистр будет накопительный с 1 измерением и 1 ресурсом числовым целым. Записей в регистре при сочетаниях по 4 из 20 уже до этого есть/было просто дофига. Время проведения увеличится, но останется в разумных пределах, толпы то редко так что ок. А терь честно скажите что сможет отчетик запросом посчитать при таком количестве сочетаний и когда он помрет вместе с сервером? ЗЗЫ А у нас с регистром все рабочее. |
|||
112
Garykom
гуру
13.07.16
✎
18:58
|
(111)+ Но лучше фоновым этот регистр заполнять согласен
|
|||
113
тарам пам пам
13.07.16
✎
19:42
|
(111) Ох, какой же ты упертый.
Первое - намекать, что у меня ошибка в вычислениях и не говорить, в чем именно - некрасиво. Я не гордый и если действительно ошибся, то упираться не буду. Второе - вразуми меня, мастер циклов, что именно ты собираешься писать в регистр с одним измерением и одним ресурсом, чтобы в итоге собрать отчет с комбинациями номенклатуры длиной 3? Вот прям пример для 4 позиций номенклатуры в реализации приведи. Третье - для "отчетика" как раз 100-200 тыс строк - это не так много. И выполняется он раз в месяц, а не при каждом проведении документа. |
|||
114
DomovoiNaStraze Pravo
13.07.16
✎
20:13
|
Парни давайте, вы уже на финишной прямой, осталось чуть-чуть докумекать)
|
|||
115
Garykom
гуру
13.07.16
✎
21:01
|
(113) 1. Число сочетаний (если порядок заказа позиций неважен) из 20 по 4 = 4845.
Вот число размещений (если нужен/важен порядок в котором выбирали/заказывали позиции) из 20 по 4 = 116280 это верно. Но уточнить то забыли и хитрым образом взяли "большее число". Насколько понимаю ТС им пофиг на порядок хотя бы пары знать. 2. Писать можно или строку (составной код, хеш) или ссылку на объект с ТЧ, внутри которой список номенклатуры и даже с порядком если важно. 3. Снова хитрая математика )) теперь уже преуменьшаем, а реально при "вычислении запроса" внутри будут как бы не миллионы обрабатываемых строк. И каким образом в запросе "размещения" в отличие от "сочетаний" находить я пока даже не представляю детально. Позиции присутствующие в документе в нужном порядке не обращая внимания или обращая на другие позиции в промежутках. Тут кстати тоже интересно сочетания/размещения то нужны все рядом подряд или не обязательно рядом, главное в одном документе. |
|||
116
KODin1C
14.07.16
✎
06:22
|
(108) > посмотри мой запрос в (80)
У тебя не учитывается несколько нюансов. "Болт - Болт" - это не пара. "Болт - Гайка" и "Гайка - Болт" - это одно и тоже, а тебя будут разными. Стоит добавить условие как у меня: втВсяНоменклатура.Номенклатура.Код > втВсяНоменклатура1.Номенклатура.Код И ты не учитываешь, что одну и ту же номенклатуру могут два раза в документе прописать. |
|||
117
тарам пам пам
14.07.16
✎
07:59
|
(116) >"Болт - Болт" - это не пара.
>"Болт - Гайка" и "Гайка - Болт" - это одно и тоже, а тебя будут разными. Это сделано намеренно. Просто попробуй свой запрос вывести в кросс-таблицу в отчете, как описано в (5). Если убрать пары "Болт-Болт", то на пересечении "Болт-Болт" у тебя будет 0, у меня будет количество документов, где встречается "Болт". Потому что следующий вопрос менеджера будет вывести не абсолютное количество, а процент - т. е. в каком проценте случаев при заказе "Болт" заказывают "Гайка". Если убрать пары "Болт-Гайка" и "Гайка-Болт", то в таблице числа будут "прыгать" - будет число на пересечении "Болт-Гайка", но не будет на пересечении "Гайка-Болт" (или наоборот). > И ты не учитываешь, что одну и ту же номенклатуру могут два раза в документе прописать. Учитываю, потому что берутся Количество(Различные Ссылка), а не просто Количество(Ссылка). |
|||
118
Лодырь
14.07.16
✎
08:01
|
Везде свои велосипеды изобретают. Чем не устраивает http://v8.1c.ru/overview/Term_000000271.htm#02
|
|||
119
тарам пам пам
14.07.16
✎
09:36
|
(115) >1. Число сочетаний (если порядок заказа позиций неважен) из 20 по 4 = 4845.
По поводу размещений вместо сочетаний - действительно, был не прав, потому как считал количество записей, необходимое для запроса, аналогичного в (80) и не учел, что порядок при хранении не важен. Почему запрос написал именно такой (без исключения пар с одинаковой номенклатурой и разным порядком) - ответил в (117). >3. Снова хитрая математика )) теперь уже преуменьшаем, а реально при "вычислении запроса" внутри будут как бы не миллионы обрабатываемых строк. Цитата из твоего сообщения: "толпы то редко так что ок". >И каким образом в запросе "размещения" в отличие от "сочетаний" находить я пока даже не представляю детально. Встречный вопрос - а как ты собрался избавляться от размещений при записи в регистр? Ну т. е. чтобы у тебя из одного документа не записалось "Гайка-Болт", а из другого "Болт-Гайка" (это приведет к распуханию таблицы итогов и к необходимости избавляться от таких пар в отчете, опять же). Отвечу сам - здесь единственный выход - сортировать колонки (например, по ссылке), т. е. пару "Болт-Гайка" всегда писать именно в таком порядке. Собственно, в запросе для избавления от размещений используется тот же прием, разве что сортировать приходится "вручную" - через сравнение каждого элемента с соседними. Вот тебе пример запроса для комбинаций длины 3, например: ВЫБРАТЬ РАЗЛИЧНЫЕ РеализацияТоваровУслугТовары.Ссылка, РеализацияТоваровУслугТовары.Номенклатура ПОМЕСТИТЬ Товары ИЗ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары ГДЕ РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода И РеализацияТоваровУслугТовары.Ссылка.Проведен ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Товары.Ссылка, ВЫБОР КОГДА Товары.Номенклатура < Товары1.Номенклатура ТОГДА Товары.Номенклатура ИНАЧЕ Товары1.Номенклатура КОНЕЦ КАК Номенклатура, ВЫБОР КОГДА Товары.Номенклатура > Товары1.Номенклатура ТОГДА Товары.Номенклатура ИНАЧЕ Товары1.Номенклатура КОНЕЦ КАК Номенклатура1 ПОМЕСТИТЬ Сочетания2 ИЗ Товары КАК Товары ВНУТРЕННЕЕ СОЕДИНЕНИЕ Товары КАК Товары1 ПО Товары.Ссылка = Товары1.Ссылка И Товары.Номенклатура <> Товары1.Номенклатура ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Сочетания2.Ссылка) КАК КоличествоДокументов, ВЫБОР КОГДА Товары.Номенклатура < Сочетания2.Номенклатура ТОГДА Товары.Номенклатура КОГДА Товары.Номенклатура > Сочетания2.Номенклатура ТОГДА Сочетания2.Номенклатура ИНАЧЕ Товары.Номенклатура КОНЕЦ КАК Номенклатура, ВЫБОР КОГДА Товары.Номенклатура < Сочетания2.Номенклатура ТОГДА Сочетания2.Номенклатура КОГДА Сочетания2.Номенклатура < Товары.Номенклатура И Товары.Номенклатура < Сочетания2.Номенклатура1 ТОГДА Товары.Номенклатура КОГДА Сочетания2.Номенклатура1 < Товары.Номенклатура ТОГДА Сочетания2.Номенклатура1 ИНАЧЕ Товары.Номенклатура КОНЕЦ КАК Номенклатура1, ВЫБОР КОГДА Товары.Номенклатура < Сочетания2.Номенклатура1 ТОГДА Сочетания2.Номенклатура1 ИНАЧЕ Товары.Номенклатура КОНЕЦ КАК Номенклатура2 ИЗ Товары КАК Товары ВНУТРЕННЕЕ СОЕДИНЕНИЕ Сочетания2 КАК Сочетания2 ПО Товары.Ссылка = Сочетания2.Ссылка И Товары.Номенклатура <> Сочетания2.Номенклатура И Товары.Номенклатура <> Сочетания2.Номенклатура1 СГРУППИРОВАТЬ ПО ВЫБОР КОГДА Товары.Номенклатура < Сочетания2.Номенклатура ТОГДА Товары.Номенклатура КОГДА Товары.Номенклатура > Сочетания2.Номенклатура ТОГДА Сочетания2.Номенклатура ИНАЧЕ Товары.Номенклатура КОНЕЦ, ВЫБОР КОГДА Товары.Номенклатура < Сочетания2.Номенклатура ТОГДА Сочетания2.Номенклатура КОГДА Сочетания2.Номенклатура < Товары.Номенклатура И Товары.Номенклатура < Сочетания2.Номенклатура1 ТОГДА Товары.Номенклатура КОГДА Сочетания2.Номенклатура1 < Товары.Номенклатура ТОГДА Сочетания2.Номенклатура1 ИНАЧЕ Товары.Номенклатура КОНЕЦ, ВЫБОР КОГДА Товары.Номенклатура < Сочетания2.Номенклатура1 ТОГДА Сочетания2.Номенклатура1 ИНАЧЕ Товары.Номенклатура КОНЕЦ |
|||
120
тарам пам пам
14.07.16
✎
09:38
|
(118) Про анализ данных еще на первой странице сказали. Ну и как не поспорить, что лучше - велосипед с квадратными или с пятиугольными колесами :)
|
|||
121
Лодырь
14.07.16
✎
09:44
|
(120) Да я видел что упоминали, но так и не ответили, зачем его делать.
|
|||
122
Лодырь
14.07.16
✎
09:45
|
его - это велосипед
|
|||
123
Garykom
гуру
14.07.16
✎
09:47
|
(119) >Встречный вопрос - а как ты собрался избавляться от размещений при записи в регистр? Ну т. е. чтобы у тебя из одного документа не записалось "Гайка-Болт", а из другого "Болт-Гайка" (это приведет к распуханию таблицы итогов и к необходимости избавляться от таких пар в отчете, опять же).
Что такое ХЕШ знаем? Написал же: "2. Писать можно или строку (составной код, хеш) или ссылку на объект с ТЧ, внутри которой список номенклатуры и даже с порядком если важно. Объект это например свой справочник с номенклатурой в ТЧ." Для 20 номенклатур хеш будет длиной 20 бит (3 байта), для 100 номенклатур длиной 100 бит (13 байт). Где каждый бит задает наличие/присутствие в наборе конкретной номенклатуры из пронумерованного списка. И пофиг на кол-во "сочетаний по" хоть 4 хоть 10. Вот хеши для "размещений" они сложнее и в тоже время проще, просто составной код номенклатур в одну строку. |
|||
124
Garykom
гуру
14.07.16
✎
09:49
|
(123)+ хеш функция = СокрЛП(Номенклатура1.Код)+"_"+СокрЛП(Номенклатура2.Код)+"_"+...
|
|||
125
Garykom
гуру
14.07.16
✎
09:50
|
Блин вот как кому то странно что я "хреново" знаю запросы, так и мне дико что "программист" не знает "алгоритмов".
|
|||
126
PiNHeaD
14.07.16
✎
15:01
|
Я все таки решил использовать Анализ данных. Все варианты хороши и имеют место быть.
Как у Яна Арлазорова. "Тебе как посчитать? Быстро или точно? |
|||
127
Korney1222
14.07.16
✎
15:24
|
Здравствуйте все! Очень давно начал заниматься бухгалтерией и не знал многих ее тонкостей. Я сам учился только по интернету и не мог найти достойного материала по этой сфере. Искал я очень долго. И наконец нашел сайт который помогает мне работать.) Кому интересно вот он http://www.pro1c-msk.ru/
|
|||
128
Garykom
гуру
14.07.16
✎
15:35
|
(127) мдя
|
|||
129
Garykom
гуру
14.07.16
✎
15:36
|
(126) Пока скорости анализа данных будет хватать и его возможностей по анализу хватать то конечно его юзай )) сразу ответили же.
Все прочие методы это когда попросят "размещения" по 3 из 500 и т.д. и чтобы мгновенно отчет выдавал |
|||
130
тарам пам пам
14.07.16
✎
19:32
|
(123) Все, надоело спорить, все равно доказать тебе ничего не смогу.
ИМХО, в итоге минусы решения с отдельным регистром (необходимость дорабатывать конфигурацию, увеличение размера базы, увеличение времени транзакции - либо необходимость в регл. задании, которое этот регистр будет заполнять => возможная некоторая неактуальность данных отчета) перевешивают его плюсы (более высокая скорость формирования отчета). P. S. Ради интереса потестировал свой запрос на большом документе. Тестировал размещения длиной 3, формировал только временную таблицу без ее вывода (для вывода просто не хватало памяти на клиенте): 300 строк - на файловой базе 26с, на сервере 6с 400 строк - в файловой базе кончилась память (4Гб), на сервере 14с 500 строк - на сервере 30с Запрос такой (он проще запроса в (119) - сортировать колонки вручную вообще не нужно, достаточно было правильно их соединить; сразу об этом я не подумал): ВЫБРАТЬ РАЗЛИЧНЫЕ РеализацияТоваровУслугТовары.Ссылка КАК Ссылка, РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура ПОМЕСТИТЬ Товары ИЗ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары ГДЕ РеализацияТоваровУслугТовары.Ссылка = &Ссылка ИНДЕКСИРОВАТЬ ПО Ссылка, Номенклатура ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Товары.Ссылка КАК Ссылка, Товары.Номенклатура КАК Номенклатура, Товары1.Номенклатура КАК Номенклатура1 ПОМЕСТИТЬ Длина2 ИЗ Товары КАК Товары ВНУТРЕННЕЕ СОЕДИНЕНИЕ Товары КАК Товары1 ПО Товары.Ссылка = Товары1.Ссылка И Товары.Номенклатура < Товары1.Номенклатура ИНДЕКСИРОВАТЬ ПО Ссылка, Номенклатура1 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Длина2.Ссылка) КАК Ссылка, Длина2.Номенклатура КАК Номенклатура, Длина2.Номенклатура1 КАК Номенклатура1, Товары.Номенклатура КАК Номенклатура2 ПОМЕСТИТЬ Результат ИЗ Длина2 КАК Длина2 ВНУТРЕННЕЕ СОЕДИНЕНИЕ Товары КАК Товары ПО Длина2.Ссылка = Товары.Ссылка И Длина2.Номенклатура1 < Товары.Номенклатура СГРУППИРОВАТЬ ПО Товары.Номенклатура, Длина2.Номенклатура1, Длина2.Номенклатура |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |