|   |   | 
| 
 | Алгоритм Разузлование номенклатуры | ☑ | ||
|---|---|---|---|---|
| 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. Просить его об этом как-то странно)
 Ну алгоритм такой же как у меня - рекурсивно по регистру стоит дерево | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |