|
Алгоритм Разузлование номенклатуры | ☑ | ||
---|---|---|---|---|
0
breezee
05.02.21
✎
17:30
|
Добрый вечер пятницы. Подскажите, как у кого сделано?
У нас через sql программист sql написал хранимую процедуру которая разузловывает за секунду всю ОЧЕНЬ много данных. 1с (мой алгоритм) разузловывает очень долго. У меня весь вечер нехорошее ощущение что 1с - система очень медленная и надо учить sql. Да, я знаю что правилами форума запрещено критиковать 1с, но, я, вроде не критикую, а сравниваю с другой системой. |
|||
1
Ёпрст
05.02.21
✎
17:32
|
(0) продолжайте наблюдение
|
|||
2
Курцвейл
05.02.21
✎
17:32
|
(0) Хранимые процедуры не поддерживают файловую версию СУБД
|
|||
3
Krendel
05.02.21
✎
17:33
|
А если написать на ассембере, то увидишь, что надо учить ассемблер. А по факту это базовое образование не мешало бы получить
|
|||
4
Ёпрст
05.02.21
✎
17:36
|
Ну и твой алгоритм, поди на рекурсии слеплен, или запросом ?
|
|||
5
fisher
05.02.21
✎
17:36
|
(0) Учить SQL надо. Это и для 1С более чем полезно. Глядишь, в процессе и вопросов поубавится.
|
|||
6
breezee
05.02.21
✎
17:39
|
(2) У нас скульная (4) На рекурсии. Как запросом слепить?) Если бы поделились - бысо бы мегакруто) (5) Вообще да, но у нас sql программист работает со скулем а 1с-ников не пускают к скулю. Я думаю, это и правильно, буду учить в нерабочее время
|
|||
7
acht
05.02.21
✎
17:43
|
(0)
> программист sql и >мой алгоритм 1с виновато, однозначно. |
|||
8
Ёпрст
05.02.21
✎
17:44
|
(6) на нимфостарте была статья с примером, как в 1с запросом без рекурсии
|
|||
9
Ненавижу 1С
гуру
05.02.21
✎
18:02
|
Внесите ясность в термин "разузлование"
|
|||
10
shuhard
05.02.21
✎
18:05
|
(0)[1с - система очень медленная и надо учить sql.]
очевидные истины, ни чего нового форум не узнал |
|||
11
Ёпрст
05.02.21
✎
18:13
|
(9) всего лишь постройка дерева
|
|||
12
Ёпрст
05.02.21
✎
18:14
|
И.. в 1с-ине это тоже можно делать быстро, если хранить иерархию отдельно и поддерживать её в актуальном состоянии, при изменении справочника-родителя.
|
|||
13
youalex
05.02.21
✎
18:16
|
(4) или на рекурсии запросом)
|
|||
14
Ненавижу 1С
гуру
05.02.21
✎
18:19
|
(12) согласен. Есть альтернативные более быстрые методы работы с иерархией.
Аналогично периодические регистры сведений. К тому же была бы возможность использовать предикат В ИЕРАРХИИ с нестатичными данными. Например, в соединении. Опять же аналогично проще было бы с срезами на даты |
|||
15
Cthulhu
05.02.21
✎
18:20
|
рекурсия применима только если неважно время выполнения и известно что вложенность будет незначительной.
|
|||
16
polosov
05.02.21
✎
18:26
|
(0) Тебе в руки дали использование Native Api. Можешь писать сверхбыстрые расчеты на с++
|
|||
17
Cthulhu
05.02.21
✎
18:26
|
хотя тета-запрос не намного быстрее...
|
|||
18
rphosts
05.02.21
✎
18:32
|
(0) про транзитивное замыкание ты конечно не слышал?
|
|||
19
2mugik
05.02.21
✎
18:40
|
(18)А оно поможет при постройке дерева?
|
|||
20
rphosts
05.02.21
✎
18:42
|
(19) всех выгребет - уже хорошо.
|
|||
21
2mugik
05.02.21
✎
18:50
|
(20)в этом плане да, согласен.
|
|||
22
breezee
05.02.21
✎
19:54
|
(14) Ага, человек с ником "Ненавижу 1с" пишет про то что для быстрого рекурсивного запроса в 1с надо ДУБЛИРОВАТЬ данные в базе в формате в котором они будут быстро считываться. Кстати, какая структура регистра должна быть?) (18) Да слыша, какой-то хитрый алгоритм. На столько хитрый что не факт что работает. Вы его используете? Программист на sql сказал что он даже не через рекурсию собрал иерархию, а в цикле. А 1с что? Только недавно добавили в запросе возможность преобразовать строку в число. Неужели это настолько сложно?
|
|||
23
breezee
05.02.21
✎
20:02
|
Не. ну реально, не в первый раз же тема поднимается. Реально сложно сделать рекурсию на уровне платформы не скуле? Вот всё есть в 1с, а вот этого нет. С графикой еще 1с не работает, со звуком, но это и не нужно. Внешнее событие на ТСД не считывается - это тоже как-то лечится. А так всё есть, постоянно в работе затык только с рекурсивным разузлованием. И судя по гуглу не только у меня
|
|||
24
breezee
05.02.21
✎
20:02
|
Извините, накипело
|
|||
25
Ненавижу 1С
гуру
05.02.21
✎
20:07
|
(22) иерархия вложенными множествами слышали?
Для периодических данных достаточно хранить отрезок начала и окончания действия. Ничего сложного В обоих случаях требуются события изменения служебных реквизитов |
|||
26
youalex
05.02.21
✎
20:09
|
(22) > возможность преобразовать строку в число.
это где такое было? |
|||
27
breezee
05.02.21
✎
20:14
|
(25)
https://habr.com/ru/post/46659/ > * Рекурсивно печатет дерево на экран > Опять рекурсивный обход дерева Вы серьезно? Опять обход в иерархии? (26) Посмотрите в заметках из зазеркалья, там всё есть) Не буду сюда ссылки кидать, гуглится, не об этом тема |
|||
28
breezee
05.02.21
✎
20:15
|
||||
29
Ненавижу 1С
гуру
05.02.21
✎
20:17
|
(28) там нет строки в число
|
|||
30
breezee
05.02.21
✎
20:17
|
(25) Кстати, данные не периодические. Надо просто от готовой продукции до сырья разузловать продукцию по спецификации.
Конкретно - колбасу с учетом аналогов до сырья. Аналоги могут быть на любом уровне - хранятся в отдельном регистре. Уровней может быть до 20 (условно, на практики не проверял) |
|||
31
breezee
05.02.21
✎
20:18
|
(29) Хорошо, там есть
> Строка(String) – преобразует значение в примитивного типа в строку с учетом национальных установок. Это уже большой шаг. Не об этом сейчас |
|||
32
Ненавижу 1С
гуру
05.02.21
✎
20:20
|
(27) вы изучили подход nested sets?
|
|||
33
Ненавижу 1С
гуру
05.02.21
✎
20:20
|
(31) ну то есть не в теме даже, ок
|
|||
34
Ненавижу 1С
гуру
05.02.21
✎
20:22
|
(30) Кстати, данные не периодические
Вы две разные вещи не смешивайте. Иерархия и периодика. Бывает и хуже. Когда А и Б можно заменить на М и Н. Но только вместе. Отдельно заменить нельзя |
|||
35
Ненавижу 1С
гуру
05.02.21
✎
20:24
|
SQL прекрасен, но в прикладной области склоняюсь у чему-то типа LINQ
|
|||
36
breezee
05.02.21
✎
20:30
|
(32) К сожалению, не до конца (сегодня в 1 раз узнал об этом). Посмотрел http://professia1c.ru/ierarhicheskie-struktury/sposoby-hraneniya-ierarhii-v-tablitsah/ - как хранить понятно. Как запросом получать не понятно. Я знаю про методы между и я знаю как подучить для каждого этапа разузлования получить строки которые будут между ключей. Но я получу выборку и для следующего уровня мне опять нужно будет использовать рекурсию? Может у вас есть пример запроса к таким данным, пожалуйста? Спасибо большое, кстати, за наводку, я правда благодарен.
(34) Это слишком непонятный для меня пост, извините, но я его не понял и буду игнорировать. (35) Ну что у нас есть то и используем) К сожалению, данный механизм я рассматривать в рабочей среде пока не могу, так как есть достаточный механизм для получения данных без суперзатрат (а именно запрос нашео программиста sql) |
|||
37
breezee
06.02.21
✎
17:36
|
А где в ерп проихсодит разузлование по спецификациям? Я по слову разузлования поискал - нашел для себестоимости разузлование общего модуля. Разузлование как я понял реурсивное, с кэшем спецификаций. Но в гугле говорилось что разузлование в ЕРП на СКД. Подскажите, пожалуйста, действительно ли это так и где это найти?)
|
|||
38
NorthWind
06.02.21
✎
17:43
|
(0) ну Америку вы не открыли, ни разу. 1С никогда не была мегабыстродействующей системой. Ее козыри - удобство разработки за счет мощной библиотеки прикладных объектов и работоспособная трехуровневая модель работы с данными. При этом удобство и универсальность часто играют достаточно злую шутку, например, с оптимальностью запросов, которые приходится выполнять SQL-серверу...
|
|||
39
breezee
06.02.21
✎
17:46
|
(38) Это да) Но теперь я хочу понять как сделано в ерп)
|
|||
40
МихаилМ
06.02.21
✎
18:10
|
||||
41
d4rkmesa
06.02.21
✎
18:11
|
(39) Были же темы. Рекурсивное разузлование на СКД Что там точно в ERP, не знаю, наверное вариация метода, и вряд ли там открыли Америку в плане производительности. Плюс куча тем на Инфостарте, но некоторые требуют стартмани.
|
|||
42
breezee
06.02.21
✎
18:16
|
(40) Про это слышал, спасибо. (уточню что и про сами СЛАУ и про решение в 1с) н это же не разузлование)
(41) Спасибо большое! Нашел https://start1c.blogspot.com/2017/01/blog-post.html. Попробую Верите или нет - не гуглилось то что Вы скинули. Я правда гуглили, наверное не те ключенвые слова |
|||
43
МихаилМ
06.02.21
✎
20:51
|
(42) тоже самое умеет построитель запроса
|
|||
44
breezee
06.02.21
✎
20:57
|
(43) Построитель - не модно))
|
|||
45
Злопчинский
06.02.21
✎
21:24
|
" от готовой продукции до сырья разузловать продукцию по спецификации.
Конкретно - колбасу с учетом аналогов до сырья." . и получите с учетом аналогов N вариантов наборов исходного сырья, так? . а в чем проблема 1Синой разузловать? или разузловывается сотня готовых изделий по 100 раз в минуту? |
|||
46
breezee
06.02.21
✎
22:13
|
(45) Очень долго разузловывается, технологи хотят пол базы разузловывать за 10 секунд, а сейчас это происходит минут за 20, их это не устраивает.
Подскажите, пожалуйста. По примеру на статье на СКД получил запрос ВЫБРАТЬ Т.Спецификация КАК СпецификацияПриемник, Т.Ссылка КАК Спецификация ИЗ Справочник.СпецификацииНоменклатуры.ИсходныеКомплектующие КАК Т ГДЕ Т.Спецификация В(&СписокСпецификаций) ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ЗНАЧЕНИЕ(Справочник.СпецификацииНоменклатуры.ПустаяСсылка), &Спецификация Со связями: https://imgur.com/a/fEKuO5b И это работает. И я понимаю как это работает. Выбираем спецификацию а потом в цикле ищем спецификации основания. А вот как сделать то что мне надо не пойму( А надо мне ...Спецификации.ИсходныеКомплектующие -> Спецификации.ВыходныеИзделия связь по ссылке -> Спецификации.ИсходныеКомплектующие свяpь по номенклатуре -> Спецификации.ВыходныеИзделия связь по ссылке -> Спецификации.ИсходныеКомплектующие свяpь по номенклатуре... Не могу понять как написать. Может у кого-то есть идеи, пожалуйста?) |
|||
47
breezee
06.02.21
✎
22:14
|
То есть связь не по спецификации, а по номенклатуре
|
|||
48
Злопчинский
06.02.21
✎
22:53
|
(46) "технологи хотят пол базы разузловывать за 10 секунд,"
какой в этом ПРАКТИЧЕСКИЙ смысл если ты в общем случае (с учетом аналогов) получишь на 300 ГП суммарно несколько тысяч (а то и на порядок больше) возможных спецификаций (по куче спецификаций на одну ГП)..? . или по этому набору спецификаций считается себестоимость и выбирается лучшая спецификация? . в чем проблема что считается 20 минут? в том что технологи после просчета - смотярт на нескольо тысяч спецификаций, или пусть даже на на "лучшие" спецификации по каждой ГП и типа не, так нехорошо.. давай мяса положим поменьше а соевого заменитеял побольше..? и заново считают чтобы добиться нужного результата? сразу на "полбазы" номенклатуры? я хз конечно в производстве, но я СИЛЬНО СОМНЕВАЮСЬ что для многократной ручной подгонки считается полбазы. А на ручную подгонку просчитать одну ГП разузловать - это быстро будет. . я хз в производстве, но интересно... что с таким объемом "полбазы" насчитанных они регулярно пересчитывают так часто что их "20 минут" не устраивает... |
|||
49
Cthulhu
06.02.21
✎
23:59
|
ну вообще-то для оценки потребностей все варианты для одной продукции с учетом аналогов нафик не нужны. вариантов "с аналогаи" получится слишком много (формула сочетаний дает очень быстрый рост). аналоги можно и нужно оценивать в процессе пост-обработки одного списка сырья (результата разузлования по продукции) - с анализом по аналогам каждой сырьевой позиции.
и - лучше без рекурсии обойтись вложенным циклом с условием выхода из внешнего по не-увеличению списка комплектующих, формируемого во внутреннем цикле. потому что почти любая(!) рекурсия - это выделение ресурса и полное копирование контекста, что и медленно и ресурсоемко. хоть в 1с хоть не в 1с. |
|||
50
breezee
07.02.21
✎
08:12
|
(48) Там у них хитрый механизм в который я не сильно погружен. Вообще, у меня скорее всего в алгоритме из-за аналогов зацикливание и в этом проблема)) (49) Сложно) Я с утра наверное еще не проснулся)) И всё же, может есть гуру скд, которые знаю как сделать (46) ?) Я пока еще не понял(
|
|||
51
Исновая
07.02.21
✎
09:16
|
Спешишь куда?
|
|||
52
breezee
07.02.21
✎
09:48
|
(51) Не, не спешу, в понедельник подумаю как лучше сделать. Просто интересно)
|
|||
53
Новиков
07.02.21
✎
12:31
|
||||
54
breezee
08.02.21
✎
09:17
|
Разобрался. Если кому кому надо будет запрос
ВЫБРАТЬ СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура КАК НоменклатураИсходная, СпецификацииНоменклатурыИсходныеКомплектующие.Ссылка ПОМЕСТИТЬ ВТ_СпецификацийИсходных ИЗ Справочник.СпецификацииНоменклатуры.ИсходныеКомплектующие КАК СпецификацииНоменклатурыИсходныеКомплектующие ГДЕ СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура = &НоменклатураПараметр ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СпецификацииНоменклатурыВыходныеИзделия.Номенклатура КАК НоменклатураВыходная, ВТ_СпецификацийИсходных.НоменклатураИсходная, ВТ_СпецификацийИсходных.Ссылка ИЗ ВТ_СпецификацийИсходных КАК ВТ_СпецификацийИсходных ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.СпецификацииНоменклатуры.ВыходныеИзделия КАК СпецификацииНоменклатурыВыходныеИзделия ПО ВТ_СпецификацийИсходных.Ссылка = СпецификацииНоменклатурыВыходныеИзделия.Ссылка А связях наборо данных Выражение источник = НоменклатураВыходная Выражение приемник = НоменклатураИсходная Параметр = НоменклатураПараметр Условие связи пустое В режиме предерпяите надо указать номенклатуру которая сырье |
|||
55
d4rkmesa
08.02.21
✎
09:22
|
(54) Что по скорости получилось?
|
|||
56
breezee
08.02.21
✎
09:24
|
(55) Вроде шустро) Выводит только долго. по конкретным данным не сравнивал - некогда. Но на ощущении - намного быстрее чем в цикле разузловывать
|
|||
57
d4rkmesa
08.02.21
✎
09:33
|
(56) Крутотень )
|
|||
58
breezee
08.02.21
✎
17:39
|
Подскажите, пожалуйста. Решил сделать для собственного регистра где хранится соответствия сырья к продукции такой же запрос
Вот сам запрос ВЫБРАТЬ Прослеживаемость.НоменклатураПродукции, Прослеживаемость.НоменклатураСырья, Прослеживаемость.СерияПродукции, Прослеживаемость.СерияСырья ИЗ РегистрСведений.Прослеживаемость КАК Прослеживаемость ГДЕ Прослеживаемость.СерияПродукции =&СерияПродукцииПараметр Вот связи параметров: https://imgur.com/a/Ss94CTe И ВСЁ работает! Быстро и круто. Но если я переделываю запрос на Прослеживаемость.СерияПродукции В (&СерияПродукцииПараметр) И в параметрах указываю несколько серий номенклатуры - ничего не выводит вообще. Подскажите, пожалуйста, где я ошибся? В связях параметров указывал "список параметров" - что с галкой что без галки не работает. Ничего не понимаю. В парамтерах тоже указывал список и в режими предприятия заполнял - тоже не работает. Куда копать не знаю) Платформа 1С:Предприятие 8.3 (8.3.13.1513) |
|||
59
breezee
09.02.21
✎
03:02
|
ап)
|
|||
60
Bigbro
09.02.21
✎
04:27
|
а вытащить хранимку из sql показать алгоритм - можно?
любопытно же как сделано что полбазы за секунду считает. |
|||
61
breezee
09.02.21
✎
06:57
|
(60) Не, к сожалению не могу. Не я программист sql. Просить его об этом как-то странно)
Ну алгоритм такой же как у меня - рекурсивно по регистру стоит дерево |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |