|   |   | 
| 
 | Установка цен номенклатуры (оптимизированный алгоритм загрузки) | ☑ | ||
|---|---|---|---|---|
| 0
    
        on2 15.01.20✎ 14:14 | 
        Привет мальчики!
 Такая задача: нужно оптимизировать загрузку данных по ценам. Смысл. Есть файл - в нем номер артикула и цена. Нужно найти в справочнике номенклатура (там 200 000 позиций) все номенклатуры с указанным артикулом из файла и все их прописать в документе "Установка цен номенклатуры". Кто что думает? какие мысли? файлы бывают для загрузки по 500 000 строк))))) | |||
| 1
    
        Krendel 15.01.20✎ 14:15 | 
        Звони Мане     | |||
| 2
    
        Krendel 15.01.20✎ 14:16 | 
        Или призывай Маню в ветку, но его опять забанили, был под Вдовой клюко 13 года     | |||
| 3
    
        on2 15.01.20✎ 14:19 | 
        Маняяяяяяяяяяяяяяяяяяяяяя!!!!!     | |||
| 4
    
        seevkik 15.01.20✎ 14:32 | 
        Секунду, не понял, файл для загрузки 500к строк, справочник номенклатуры 200к, мы про 1с говорим?)     | |||
| 5
    
        on2 15.01.20✎ 14:34 | 
        (4) да все правильно думаешь((((     | |||
| 6
    
        seevkik 15.01.20✎ 14:39 | 
        Ну-с, начнемс. Конфа?     | |||
| 7
    
        GreyK 15.01.20✎ 14:41 | 
        (0) А в чём проблема? Ну добавьте обработку табличной части для установки цен, она прочитает файлик и всё разложит по полочкам, всего то делов.     | |||
| 8
    
        seevkik 15.01.20✎ 14:43 | 
        А почему файлик на 500к, а справочник на 200к? Не все данные грузятся или там дубли?     | |||
| 9
    
        sdf 15.01.20✎ 14:44 | 
        +не забыть что в табличной части документа может быть только 100 тыс строк     | |||
| 10
    
        bolero 15.01.20✎ 14:47 | 
        (9) и открывается в клиенте такая установка цен (99к строк) на моем железе около 5 минут
 мысли о том, чтобы его из клиента заполнять, не то что посмотреть открыть - даже не возникает | |||
| 11
    
        Bober 15.01.20✎ 14:48 | 
        (0) загружать из файла по 99999 значений в тз, тз в запрос, результат запроса в тч документа установка цен.     | |||
| 12
    
        Bober 15.01.20✎ 14:49 | 
        (10) да, в типовых оч прекрасная форма документа установки цен.     | |||
| 13
    
        bolero 15.01.20✎ 14:51 | 
        (0) если прям вот руки чешутся автоматизировать, чтобы человекам и не надо было исправлять цены вручную, то рекомендую думать в сторону создания другого документа, ВнешняяУстановкаЦенНоменклатуры, у которого будут только движения в РС.ЦеныНоменклатуры, но не будет отображения номенклатуры и цен в клиенте (максимум в виде простой статичной таблицы)
 Причина тормозов стандартного документа в том, что он слишком универсальный. | |||
| 14
    
        seevkik 15.01.20✎ 14:54 | 
        (13) без отображения это хорошо, статичная таблица это плохо, заколебется программа представления показывать)
 Тс, надо копать в эту сторону | |||
| 15
    
        edwin 15.01.20✎ 14:55 | ||||
| 16
    
        bolero 15.01.20✎ 14:55 | 
        (8) когда-то имел дело с автозапчастями (TecDoc) так там объемы прайс-листов измерялись несколькими DVD-дисками
 поставщик шлет все цены, а не только на те запчасти, которые продаются в данном магазине моя задача как раз была в том, чтобы помножить эти DVD на ассортимент магазина менее чем за неделю, которую они тратили вручную на это | |||
| 17
    
        GreyK 15.01.20✎ 15:00 | 
        (9) А пользователь на что? Ручками могут поделить на 5 файлов :)
 Ну или сделать обработку, которая будет делать 5 установок цен. | |||
| 18
    
        Krendel 15.01.20✎ 15:02 | 
        (0) Я бы забивал построчно     | |||
| 19
    
        Йохохо 15.01.20✎ 15:02 | 
        (17) но там может быть до 499999 дублей!!1     | |||
| 20
    
        GreyK 15.01.20✎ 15:13 | 
        (19) Ну, дубли отработать - это ваще не вопрос!     | |||
| 21
    
        unenu 15.01.20✎ 15:14 | 
        у нас более 200К номенклатуры.
 могу сказать, что в подобных задачах критичны в контексте затрат времени по приоритетам 1. поиск номенклатуры способ оптимизации: перед операцией загрузки запросом выбираем(УИД потом получаем) из номенклатуры два поля ссылка и "ключ поиска". Ключом поиска может быть УИД, Артикул, ... Далее формируем соответствие где клчю - наш ключ, а занчение ссылка. можно сохранить это ств в файл потом получить их файла не суть, можно сразу в память. тогда поиск номенклатуры идет очень быстро тСсылка = Ств.Получить(тУИД); тСсылка = Ств.Получить(тАртикул); 2. при загрузке данные бъем на порции и обрабатываем в несколько фоновых потоков Тут мне лень детализировать... Думаю хватит и п.1. чтобы мир стал светлее. | |||
| 22
    
        mikecool 15.01.20✎ 15:32 | 
        (3) готовь 75к )))     | |||
| 23
    
        mikecool 15.01.20✎ 15:33 | 
        (0) а что делал или что думаешь делать?     | |||
| 24
    
        on2 15.01.20✎ 15:55 | 
        (23) делала....
 из экселя грузила все 500 тыс строк в ТЗ потом голову долго ломала как сделать быстрее - тупо поискПо реквизиту не спасает (он первый находит) -другой вариант думаю временные таблицы сделать клеит ТЗ1 и ТЗ2 по артикулу, где ТЗ1 - это артикул и цена из файла, а ТЗ2- артикул из справочника | |||
| 25
    
        Bober 15.01.20✎ 16:12 | 
        (3)  за что 75к?     | |||
| 26
    
        bolobol 15.01.20✎ 17:02 | 
        (25) Там - за всё!"     | |||
| 27
    
        GreyK 15.01.20✎ 17:11 | 
        (24) Закинь ТЗ в запрос и подыщи номенклатуру для артикулов.     | |||
| 28
    
        Tatitutu 15.01.20✎ 17:14 | 
        (1) Маня уже не с нами (((     | |||
| 29
    
        unenu 15.01.20✎ 17:43 | 
        (27) процесс может быть циклический.
 допустим, мы получит извне файл с 500К записей или 5КК - не суть, очень много. сразу после получения в один проход получаем артикулы из нее далее по данным из базы приемника в один проход сохраняем на диск соответствие. далее, как писал, при циклических загрузках, обрывах и т.д. грузим данные по этим эти 5КК в приемник с мгновенным поиском товара в приемнике СтвПоИсточнику.Получить(тАртикулИзИсточника) и не насилуем приемник раз за разом запросами, вт и прочим это реально быстрее. | |||
| 30
    
        GreyK 15.01.20✎ 18:20 | 
        (29) Так не делайте его циклическим, левое соединение по артикулу отработает быстрее чем отдельные запросы по каждой строке, а фильтр по неопределено (нет такого артикула в базе) упростит код.     | |||
| 31
    
        Garykom гуру 15.01.20✎ 18:29 | 
        (0) Я думаю что надо нанять программиста.
 Можно и Маню если лишние $ есть. | |||
| 32
    
        Garykom гуру 15.01.20✎ 18:32 | 
        А так простейшая задачка, 500к файлик закидываем в sqlite внешнюю базу, подрубаем ее к 1С и тупо делаем запрос в цикле по номенклатуре из 1С.
 В смысле берем каждую нашу номенклатуру в 1С и ищем ее запросом в sqlite, если нашли то пишем в документу. На практике надо подобрать (оно зависит от много чего вплоть до погоды на улице) некий параметр N, по сколько записей номенклатуры брать разово для поиска запросом в sqlite и записи в документу установки цен. | |||
| 33
    
        Garykom гуру 15.01.20✎ 18:34 | 
        (32)+ Можно кроме файлика 500к выкинуть и всю номенклатуру в 200к в sqlite и сделать кроссзапрос между этими табличками.
 Тут проблема что (в отличие от выше) если частая установка цен, то каждый раз всю номенклатуру обновлять в sqlite а это долго. | |||
| 34
    
        H A D G E H O G s 15.01.20✎ 18:40 | 
        Как обычно Гариком пишет хрень.     | |||
| 35
    
        Garykom гуру 15.01.20✎ 18:57 | 
        (34) Это не хрень а нормальное по скорости работы решение.
 Все прочее если поиск/сопоставление делать внутри 1С сильно тормозней. | |||
| 36
    
        Garykom гуру 15.01.20✎ 19:00 | 
        (35)+ Да при наличии серверной 1С можно запустить параллельно фоновыми с его помощью, но нагрузка будет охеренная.
 Подходит только для крупный контор, но в подобных конторах вопросами типа как ТС и не заморачиваются. | |||
| 37
    
        RomanYS 15.01.20✎ 19:04 | 
        (0) Варианта два
 - пихать в ВТ и соединять (возможно файл брать порциями) - номенклатуру в соответствие и цикл по файлу | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |