Имя: Пароль:
1C
 
Алгоритм Разузлование номенклатуры
, ,
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. Просить его об этом как-то странно)
Ну алгоритм такой же как у меня - рекурсивно по регистру стоит дерево
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс