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