Вход | Регистрация
 

Алгоритм Разузлование номенклатуры

Алгоритм Разузлование номенклатуры
Я
   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) Хранимые процедуры не поддерживают файловую версию СУБД
   Krendel
 
3 - 05.02.21 - 17:33
А если написать на ассембере, то увидишь, что надо учить ассемблер. А по факту это базовое образование не мешало бы получить
   Ёпрст
 
4 - 05.02.21 - 17:36
Ну и твой алгоритм, поди на рекурсии слеплен, или запросом ?
   fisher
 
5 - 05.02.21 - 17:36
(0) Учить SQL надо. Это и для 1С более чем полезно. Глядишь, в процессе и вопросов поубавится.
   breezee
 
6 - 05.02.21 - 17:39
(2) У нас скульная (4) На рекурсии. Как запросом слепить?) Если бы поделились - бысо бы мегакруто) (5) Вообще да, но у нас sql программист работает со скулем а 1с-ников не пускают к скулю. Я думаю, это и правильно, буду учить в нерабочее время
   acht
 
7 - 05.02.21 - 17:43
(0)
> программист sql
и
>мой алгоритм

1с виновато, однозначно.
   Ёпрст
 
8 - 05.02.21 - 17:44
(6) на нимфостарте была статья с примером, как в 1с запросом без рекурсии
   Ненавижу 1С
 
9 - 05.02.21 - 18:02
Внесите ясность в термин "разузлование"
   shuhard
 
10 - 05.02.21 - 18:05
(0)[1с - система очень медленная и надо учить sql.]
очевидные истины, ни чего нового форум не узнал
   Ёпрст
 
11 - 05.02.21 - 18:13
(9) всего лишь постройка дерева
   Ёпрст
 
12 - 05.02.21 - 18:14
И.. в 1с-ине это тоже можно делать быстро, если хранить иерархию отдельно и поддерживать её в актуальном состоянии, при изменении справочника-родителя.
   youalex
 
13 - 05.02.21 - 18:16
(4) или на рекурсии запросом)
   Ненавижу 1С
 
14 - 05.02.21 - 18:19
(12) согласен. Есть альтернативные более быстрые методы работы с иерархией.
Аналогично периодические регистры сведений.
К тому же была бы возможность использовать предикат В ИЕРАРХИИ с нестатичными данными. Например, в соединении.
Опять же аналогично проще было бы с срезами на даты
   Cthulhu
 
15 - 05.02.21 - 18:20
рекурсия применима только если неважно время выполнения и известно что вложенность будет незначительной.
   polosov
 
16 - 05.02.21 - 18:26
(0) Тебе в руки дали использование Native Api. Можешь писать сверхбыстрые расчеты на с++
   Cthulhu
 
17 - 05.02.21 - 18:26
хотя тета-запрос не намного быстрее...
   rphosts
 
18 - 05.02.21 - 18:32
(0) про транзитивное замыкание ты конечно не слышал?
   2mugik
 
19 - 05.02.21 - 18:40
(18)А оно поможет при постройке дерева?
   rphosts
 
20 - 05.02.21 - 18:42
(19) всех выгребет - уже хорошо.
   2mugik
 
21 - 05.02.21 - 18:50
(20)в этом плане да, согласен.
   breezee
 
22 - 05.02.21 - 19:54
(14) Ага, человек с ником "Ненавижу 1с" пишет про то что для быстрого рекурсивного запроса в 1с надо ДУБЛИРОВАТЬ данные в базе в формате в котором они будут быстро считываться. Кстати, какая структура регистра должна быть?) (18) Да слыша, какой-то хитрый алгоритм. На столько хитрый что не факт что работает. Вы его используете? Программист на sql сказал что он даже не через рекурсию собрал иерархию, а в цикле. А 1с что? Только недавно добавили в запросе возможность преобразовать строку в число. Неужели это настолько сложно?
   breezee
 
23 - 05.02.21 - 20:02
Не. ну реально, не в первый раз же тема поднимается. Реально сложно сделать рекурсию на уровне платформы не скуле? Вот всё есть в 1с, а вот этого нет. С графикой еще 1с не работает, со звуком, но это и не нужно. Внешнее событие на ТСД не считывается - это тоже как-то лечится. А так всё есть, постоянно в работе затык только с рекурсивным разузлованием. И судя по гуглу не только у меня
   breezee
 
24 - 05.02.21 - 20:02
Извините, накипело
   Ненавижу 1С
 
25 - 05.02.21 - 20:07
(22) иерархия вложенными множествами слышали?
Для периодических данных достаточно хранить отрезок начала и окончания действия. Ничего сложного

В обоих случаях требуются события изменения служебных реквизитов
   youalex
 
26 - 05.02.21 - 20:09
(22) > возможность преобразовать строку в число.
это где такое было?
   breezee
 
27 - 05.02.21 - 20:14
(25)  
https://habr.com/ru/post/46659/
> * Рекурсивно печатет дерево на экран
> Опять рекурсивный обход дерева
Вы серьезно? Опять обход в иерархии?
(26) Посмотрите в заметках из зазеркалья, там всё есть) Не буду сюда ссылки кидать, гуглится, не об этом тема
   breezee
 
28 - 05.02.21 - 20:15
   Ненавижу 1С
 
29 - 05.02.21 - 20:17
(28) там нет строки в число
   breezee
 
30 - 05.02.21 - 20:17
(25) Кстати, данные не периодические. Надо просто от готовой продукции до сырья разузловать продукцию по спецификации.
Конкретно - колбасу с учетом аналогов до сырья.
Аналоги могут быть на любом уровне - хранятся в отдельном регистре. Уровней может быть до 20 (условно, на практики не проверял)
 
 Рекламное место пустует
   breezee
 
31 - 05.02.21 - 20:18
(29) Хорошо, там есть
> Строка(String) – преобразует значение в примитивного типа в строку с учетом национальных установок.
Это уже большой шаг. Не об этом сейчас
   Ненавижу 1С
 
32 - 05.02.21 - 20:20
(27) вы изучили подход nested sets?
   Ненавижу 1С
 
33 - 05.02.21 - 20:20
(31) ну то есть не в теме даже, ок
   Ненавижу 1С
 
34 - 05.02.21 - 20:22
(30) Кстати, данные не периодические

Вы две разные вещи не смешивайте. Иерархия и периодика.

Бывает и хуже. Когда А и Б можно заменить на М и Н. Но только вместе. Отдельно заменить нельзя
   Ненавижу 1С
 
35 - 05.02.21 - 20:24
SQL прекрасен, но в прикладной области склоняюсь у чему-то типа LINQ
   breezee
 
36 - 05.02.21 - 20:30
(32) К сожалению, не до конца (сегодня в 1 раз узнал об этом). Посмотрел http://professia1c.ru/ierarhicheskie-struktury/sposoby-hraneniya-ierarhii-v-tablitsah/ - как хранить понятно. Как запросом получать не понятно. Я знаю про методы между и я знаю как подучить для каждого этапа разузлования получить строки которые будут между ключей. Но я получу выборку и для следующего уровня мне опять нужно будет использовать рекурсию? Может у вас есть пример запроса к таким данным, пожалуйста? Спасибо большое, кстати, за наводку, я правда благодарен.
(34) Это слишком непонятный для меня пост, извините, но я его не понял и буду игнорировать.
(35) Ну что у нас есть то и используем) К сожалению, данный механизм я рассматривать в рабочей среде пока не могу, так как есть достаточный механизм для получения данных без суперзатрат (а именно запрос нашео программиста sql)
   breezee
 
37 - 06.02.21 - 17:36
А где в ерп проихсодит разузлование по спецификациям? Я по слову разузлования поискал - нашел для себестоимости разузлование общего модуля. Разузлование как я понял реурсивное, с кэшем спецификаций. Но в гугле говорилось что разузлование в ЕРП на СКД. Подскажите, пожалуйста, действительно ли это так и где это найти?)
   NorthWind
 
38 - 06.02.21 - 17:43
(0) ну Америку вы не открыли, ни разу. 1С никогда не была мегабыстродействующей системой. Ее козыри - удобство разработки за счет мощной библиотеки прикладных объектов и работоспособная трехуровневая модель работы с данными. При этом удобство и универсальность часто играют достаточно злую шутку, например, с оптимальностью запросов, которые приходится выполнять SQL-серверу...
   breezee
 
39 - 06.02.21 - 17:46
(38) Это да) Но теперь я хочу понять как сделано в ерп)
   МихаилМ
 
40 - 06.02.21 - 18:10
   d4rkmesa
 
41 - 06.02.21 - 18:11
(39) Были же темы. Рекурсивное разузлование на СКД Что там точно в ERP, не знаю, наверное вариация метода, и вряд ли там открыли Америку в плане производительности. Плюс куча тем на Инфостарте, но некоторые требуют стартмани.
   breezee
 
42 - 06.02.21 - 18:16
(40) Про это слышал, спасибо. (уточню что и про сами СЛАУ и про решение в 1с) н это же не разузлование)
(41) Спасибо большое! Нашел https://start1c.blogspot.com/2017/01/blog-post.html. Попробую Верите или нет - не гуглилось то что Вы скинули. Я правда гуглили, наверное не те ключенвые слова
   МихаилМ
 
43 - 06.02.21 - 20:51
(42) тоже самое умеет построитель запроса
   breezee
 
44 - 06.02.21 - 20:57
(43) Построитель - не модно))
   Злопчинский
 
45 - 06.02.21 - 21:24
" от готовой продукции до сырья разузловать продукцию по спецификации.
Конкретно - колбасу с учетом аналогов до сырья."
.
и получите с учетом аналогов N вариантов наборов исходного сырья, так?
.
а в чем проблема 1Синой разузловать? или разузловывается сотня готовых изделий по 100 раз в минуту?
   breezee
 
46 - 06.02.21 - 22:13
(45) Очень долго разузловывается, технологи хотят пол базы разузловывать за 10 секунд, а сейчас это происходит минут за 20, их это не устраивает.

Подскажите, пожалуйста. По примеру на статье на СКД получил запрос
ВЫБРАТЬ
    Т.Спецификация КАК СпецификацияПриемник,
    Т.Ссылка КАК Спецификация
ИЗ
    Справочник.СпецификацииНоменклатуры.ИсходныеКомплектующие КАК Т
ГДЕ
    
     Т.Спецификация В(&СписокСпецификаций)

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    
    ЗНАЧЕНИЕ(Справочник.СпецификацииНоменклатуры.ПустаяСсылка),
    &Спецификация
    
Со связями:
https://imgur.com/a/fEKuO5b

И это работает. И я понимаю как это работает. Выбираем спецификацию а потом в цикле ищем спецификации основания. А вот как сделать то что мне надо не пойму(
А надо мне ...Спецификации.ИсходныеКомплектующие -> Спецификации.ВыходныеИзделия связь по ссылке -> Спецификации.ИсходныеКомплектующие свяpь по номенклатуре -> Спецификации.ВыходныеИзделия связь по ссылке -> Спецификации.ИсходныеКомплектующие свяpь по номенклатуре...

Не могу понять как написать. Может у кого-то есть идеи, пожалуйста?)
   breezee
 
47 - 06.02.21 - 22:14
То есть связь не по спецификации, а по номенклатуре
   Злопчинский
 
48 - 06.02.21 - 22:53
(46) "технологи хотят пол базы разузловывать за 10 секунд,"
какой в этом ПРАКТИЧЕСКИЙ смысл если ты в общем случае (с учетом аналогов) получишь на 300 ГП суммарно несколько тысяч (а то и на порядок больше) возможных спецификаций (по куче спецификаций на одну ГП)..?
.
или по этому набору спецификаций считается себестоимость и выбирается лучшая спецификация?
.
в чем проблема что считается 20 минут? в том что технологи после просчета - смотярт на нескольо тысяч спецификаций, или пусть даже на на "лучшие" спецификации по каждой ГП и типа не, так нехорошо.. давай мяса положим поменьше а соевого заменитеял побольше..? и заново считают чтобы добиться нужного результата? сразу на "полбазы" номенклатуры? я хз конечно в производстве, но я СИЛЬНО СОМНЕВАЮСЬ что для многократной ручной подгонки считается полбазы. А на ручную подгонку просчитать одну ГП разузловать - это быстро будет.
.
я хз в производстве, но интересно... что с таким объемом "полбазы" насчитанных они регулярно пересчитывают так часто что их "20 минут" не устраивает...
   Cthulhu
 
49 - 06.02.21 - 23:59
ну вообще-то для оценки потребностей все варианты для одной продукции с учетом аналогов нафик не нужны. вариантов "с аналогаи" получится слишком много (формула сочетаний дает очень быстрый рост). аналоги можно и нужно оценивать в процессе пост-обработки одного списка сырья (результата разузлования по продукции) - с анализом по аналогам каждой сырьевой позиции.
и - лучше без рекурсии обойтись вложенным циклом с условием выхода из внешнего по не-увеличению списка комплектующих, формируемого во внутреннем цикле.
потому что почти любая(!) рекурсия - это выделение ресурса и полное копирование контекста, что и медленно и ресурсоемко. хоть в 1с хоть не в 1с.
   breezee
 
50 - 07.02.21 - 08:12
(48) Там у них хитрый механизм в который я не сильно погружен. Вообще, у меня скорее всего в алгоритме из-за аналогов зацикливание и в этом проблема)) (49) Сложно) Я с утра наверное еще не проснулся)) И всё же, может есть гуру скд, которые знаю как сделать (46) ?) Я пока еще не понял(
   Исновая
 
51 - 07.02.21 - 09:16
Спешишь куда?
   breezee
 
52 - 07.02.21 - 09:48
(51) Не, не спешу, в понедельник подумаю как лучше сделать. Просто интересно)
   Новиков
 
53 - 07.02.21 - 12:31
   breezee
 
54 - 08.02.21 - 09:17
Разобрался. Если кому кому надо будет запрос
ВЫБРАТЬ
    СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура КАК НоменклатураИсходная,
    СпецификацииНоменклатурыИсходныеКомплектующие.Ссылка
ПОМЕСТИТЬ ВТ_СпецификацийИсходных
ИЗ
    Справочник.СпецификацииНоменклатуры.ИсходныеКомплектующие КАК СпецификацииНоменклатурыИсходныеКомплектующие
ГДЕ
    СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура = &НоменклатураПараметр
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    СпецификацииНоменклатурыВыходныеИзделия.Номенклатура КАК НоменклатураВыходная,
    ВТ_СпецификацийИсходных.НоменклатураИсходная,
    ВТ_СпецификацийИсходных.Ссылка
ИЗ
    ВТ_СпецификацийИсходных КАК ВТ_СпецификацийИсходных
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.СпецификацииНоменклатуры.ВыходныеИзделия КАК СпецификацииНоменклатурыВыходныеИзделия
        ПО ВТ_СпецификацийИсходных.Ссылка = СпецификацииНоменклатурыВыходныеИзделия.Ссылка

А связях наборо данных

Выражение источник = НоменклатураВыходная
Выражение приемник = НоменклатураИсходная
Параметр = НоменклатураПараметр
Условие связи пустое

В режиме предерпяите надо указать номенклатуру которая сырье
   d4rkmesa
 
55 - 08.02.21 - 09:22
(54) Что по скорости получилось?
   breezee
 
56 - 08.02.21 - 09:24
(55) Вроде шустро) Выводит только долго. по конкретным данным не сравнивал - некогда. Но на ощущении - намного быстрее чем в цикле разузловывать
   d4rkmesa
 
57 - 08.02.21 - 09:33
(56) Крутотень )
   breezee
 
58 - 08.02.21 - 17:39
Подскажите, пожалуйста. Решил сделать для собственного регистра где хранится соответствия сырья к продукции такой же запрос
Вот сам запрос
ВЫБРАТЬ
    Прослеживаемость.НоменклатураПродукции,
    Прослеживаемость.НоменклатураСырья,
    Прослеживаемость.СерияПродукции,
    Прослеживаемость.СерияСырья
ИЗ
    РегистрСведений.Прослеживаемость КАК Прослеживаемость
ГДЕ
    Прослеживаемость.СерияПродукции   =&СерияПродукцииПараметр

Вот связи параметров:
https://imgur.com/a/Ss94CTe

И ВСЁ работает! Быстро и круто.
Но если я переделываю запрос на 
Прослеживаемость.СерияПродукции  В (&СерияПродукцииПараметр)

И в параметрах указываю несколько серий номенклатуры - ничего не выводит вообще. Подскажите, пожалуйста, где я ошибся?
В связях параметров указывал "список параметров" - что с галкой что без галки не работает. Ничего не понимаю.
В парамтерах тоже указывал список и в режими предприятия заполнял - тоже не работает. Куда копать не знаю)

Платформа 1С:Предприятие 8.3 (8.3.13.1513)
   breezee
 
59 - 09.02.21 - 03:02
ап)
   Bigbro
 
60 - 09.02.21 - 04:27
а вытащить хранимку из sql показать алгоритм - можно?
любопытно же как сделано что полбазы за секунду считает.
 
 Рекламное место пустует
   breezee
 
61 - 09.02.21 - 06:57
(60) Не, к сожалению не могу. Не я программист sql. Просить его об этом как-то странно)
Ну алгоритм такой же как у меня - рекурсивно по регистру стоит дерево


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.