ребят вопрос на логику у кого какие идеи

1. santa56 6 25.05.17 14:45 Сейчас в теме
2. В большом ритейл-холдинге существуют «не 1С» системы в магазинах (100 шт) и центральная база на 1С. Каждый магазин утром выгружает данные о продажах в текстовый файл и выкладывает на общий ресурс, из которого затем происходит загрузка в 1С. Загрузка выполняется полностью в автоматическом режиме. Файл с одного магазина загружается 5 минут, таким образом, общая длительность загрузки – более 8 часов. Как ускорить эту процедуру? Считаем, что код процедуры загрузки уже оптимален.
По теме из базы знаний
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
6. starik-2005 3033 25.05.17 14:50 Сейчас в теме
(1)
Считаем, что код процедуры загрузки уже оптимален.
В несколько потоков - и будет счастье. 100 потоков - 5 минут + накладные расходы на взаимоблокировки при кривой архитектуре.
serg_gres; dmpas; корум; DarkAn; vadim1011985; +5 Ответить
8. vadim1011985 99 25.05.17 14:51 Сейчас в теме
(6) только хотел предложить данный вариант
22. Biilsun 25.05.17 16:49 Сейчас в теме
(1)
2. В большом ритейл-холдинге существуют «не 1С» системы в магазинах (100 шт) и центральная база на 1С. Каждый магазин утром выгружает данные о продажах в текстовый файл и выкладывает на общий ресурс, из которого затем происходит загрузка в 1С. Загрузка выполняется полностью в автоматическом режиме. Файл с одного магазина загружается 5 минут, таким образом, общая длительность загрузки – более 8 часов. Как ускорить эту процедуру? Считаем, что код процедуры загрузки уже оптимален.

Многопоточность! Несколько фоновых заданий на загрузку, например каждое фоновое задание грузит 10 или 5 магазинов
32. portwein 25.05.17 19:59 Сейчас в теме
(22) То же самое хотел предложить. Разделить магазины на группы и настроить не сколько фоновых - по одному на группу. Чем больше групп - тем больше фоновых. Главное найти золотую середину между количеством групп и нагрузкой на сервер.
41. pm74 199 22.08.17 13:26 Сейчас в теме
(1) может через фоновые задания ?
2. KazanKokos 10 25.05.17 14:46 Сейчас в теме
5 минут или на загрузку одного файла 5 минут выделено по будильнику?
3. BackinSoda 25.05.17 14:49 Сейчас в теме
Рядом тема про риб - 200 , там много вариантов в коментах http://forum.infostart.ru/forum86/topic160457/
4. santa56 6 25.05.17 14:49 Сейчас в теме
5 минут загружается файл 1 го магазина
34. корум 287 26.05.17 11:23 Сейчас в теме
(4)
5 минут загружается файл 1 го магазина

Всё же есть сомнения в (1) "Считаем, что код процедуры загрузки уже оптимален."
Посмотри, что творится в процедуре загрузки.
2-3 минуты можно сэкономить...
5. santa56 6 25.05.17 14:50 Сейчас в теме
не РИБ к примеру УТ 11.3 и на местах ФРОНТОЛ
7. santa56 6 25.05.17 14:51 Сейчас в теме
1- УТ 11.3 и 100 магазинов с Фронтол к примеру
9. santa56 6 25.05.17 14:58 Сейчас в теме
вариант супер будем изучать следующий вапрос

1. Дана некоторая таблица данных в MS Excel, информацию из которой требуется разово загрузить в некий справочник в 1С, структура которой не совсем простая, поэтому типовой обработкой «Загрузка из табличного документа» воспользоваться нельзя. Каким образом решить эту задачу наиболее быстро?
12. necropunk 9 25.05.17 15:35 Сейчас в теме
(9) Инструментами разработчика загрузить файл в ТЗ как параметр запроса, преобразить как удобнее писать в справочник, в процедуре обработки результата запроса написать код заполнения справочника.
15. корум 287 25.05.17 15:48 Сейчас в теме
(9)
скорее всего,
(11) имел в виду вот эту статью

а может,вот эту

или вот, тоже про параллельность.

потому что наверно не имелся в виду этот теоретический материал.

(14) поле задано - инфостарт, не хабр ;)
16. herfis 498 25.05.17 16:02 Сейчас в теме
(15) Не. Вспоминается что-то универсально-красивенькое, с процессом-координатором, достойное БСП.
17. корум 287 25.05.17 16:25 Сейчас в теме
(16) Такого не найдено.
Ну что ж, садись, пиши ;)
19. корум 287 25.05.17 16:30 Сейчас в теме
21. herfis 498 25.05.17 16:44 Сейчас в теме
(19) Да нет же. Говорю - универсальный механизм был. Процесс-координатор управляет процессами-воркерами, контролирует пул потоков, собирает результаты, перезапускает задачи при сбоях... По-идее и очередь задач должна присутствовать, но в упор не помню ее реализацию.
26. zarucheisky 25.05.17 17:43 Сейчас в теме
(21) Это схема из wiki по Erlang.
Предлагалась давно, еще когда снеговики были худыми
23. starik-2005 3033 25.05.17 17:08 Сейчас в теме
10. spe1c 5 25.05.17 15:07 Сейчас в теме
поэтому типовой обработкой «Загрузка из табличного документа" воспользоваться нельзя


Значит нужно написать свою обработку. Лучше не через СОМ а через http://infostart.ru/public/163640/ попробовать.
11. herfis 498 25.05.17 15:33 Сейчас в теме
Где-то в дебрях инфостарта можно найти публикацию с готовой подсистемой для параллельного выполнения задач. Грамотно построенную грамотным человеком, явно прочитавшим пару книжек по concurrency. К сожалению, навскидку не вспомню ее примет :)
14. comptr 30 25.05.17 15:45 Сейчас в теме
13. santa56 6 25.05.17 15:44 Сейчас в теме
18. v3rter 25.05.17 16:27 Сейчас в теме
Запускать несколько фоновых задач с разными параметрами и мониторить результаты?

Или перевести магазины на вечернюю выгрузку файлов, ночи как раз хватит для их загрузки.
20. SyachinS 25.05.17 16:37 Сейчас в теме
Управляемые блокировки и асинхронные процедуры, другого варианта я не вижу
24. ipoloskov 162 25.05.17 17:33 Сейчас в теме
Архивировать текстовый файл?
25. v3rter 25.05.17 17:37 Сейчас в теме
Мне, как админу, чисто для себя интересно: "обертывание" загрузки в транзакцию ускоряет процесс или тормозит?
29. starik-2005 3033 25.05.17 18:29 Сейчас в теме
(25)
"обертывание" загрузки в транзакцию ускоряет процесс или тормозит
В 7.7 ускоряло, причем значительно (в файловой базе). В 8.Х субъективно одинаково что в транзакции, что без нее. Там все-равно при записи объекта транзакция начинается и фиксируется.
31. herfis 498 25.05.17 19:29 Сейчас в теме
(25) Зависит от объема данных исходных транзакций. Это же своего рода буферизация. Если кучу мелких заворачиваешь в одну большую - то экономишь на накладных расходах. Но в сильно большую нельзя - пойдут лишние операции с диском и с какого-то порога получишь падение производительности. Обычно оптимальный размер (количество исходных транзакций заворачиваемых в одну) подбирается эмпирически. Если транзакции изначально "большие", то смысла обертывать почти нет.
27. zarucheisky 25.05.17 17:43 Сейчас в теме
5 минут это очень долго.
28. VmvLer 25.05.17 18:15 Сейчас в теме
подобную задачу решаем на HTTP-сервисе

на второстепенных базах работают регламентные задания по отправке данных в Json-формате в HTTP-сервис базы Центр.

сом-соединения, xml и txt обмены не конкурентны с этим способом.
30. starik-2005 3033 25.05.17 18:33 Сейчас в теме
(28)
подобную задачу решаем на HTTP-сервисе
По-сути это и есть многопоточность, только инициируется она клиентами, а не регламентом сервера. Но если 100 клиентов одновременно ломанутся что-то там грузить в базу, то она может и сдохнуть от нагрузки, поэтому лучше обрабатывать данные в многопоточной процедуре, чтобы не запускать потоков больше, чем есть ресурсов у сервера, да и юзерам нужно немного оставить для работы.

ЗЫ: Вообще, множество одновременных запросов к базе - это DDoS. Тут все упираетя в мощность сервера. Если тянет 100 потоков загрузки - можно и сервисом, а если не потянет - может и умереть.
33. KazanKokos 10 26.05.17 09:22 Сейчас в теме
А в конце концов перейти на УТ11 или Розницу с 1С-Сервер на вебклиентах не вариант? Ну или РИБ
100 магазинов конечно круто. Работал в сети из 20 магазинов на ут11.2. работало без проблем и с ТО и со скоростью
35. user731275 26.05.17 12:23 Сейчас в теме
Выкладывают на общий ресурс в центре?
36. DAL 26.05.17 13:03 Сейчас в теме
Итак,
1. 5 минут загружается файл с одного магазина.
2. Код процедуры загрузки оптимален.

Задача - ускорить процесс загрузки.

Включаем логику:

Если файл одного магазина загружается 5 минут, то варианта три:
1. Либо ну очень большие обороты в магазине (порядка 20 000 строк загрузки по практике грузятся не более 2-3 минут)
2. Либо все-таки код не оптимален. Нужно смотреть, каким образом происходит идентификация номенклатуры (вот чует мое сердце, что куча разыменований).и создание документов.
3. Либо комп тормозной.

Кроме того, чтобы ускорить процедуру, можно рассмотреть вариант не последовательной, а пакетной загрузки:

- Предварительную свертку всех файлов в один пул
- Общую обработку.

Т.е., опять таки оптимизацию процедуры загрузки.
37. herfis 498 26.05.17 15:44 Сейчас в теме
(36)
Нужно смотреть, каким образом происходит идентификация номенклатуры (вот чует мое сердце, что куча разыменований)

Вот да - вероятность косяка в этом моменте очень высока.
порядка 20 000 строк загрузки по практике грузятся не более 2-3 минут

Господи, да откуда минутам взяться? Разве что это время включает тормозное проведение.
38. DAL 26.05.17 15:50 Сейчас в теме
(37)

(37)
Господи, да откуда минутам взяться? Разве что это время включает тормозное проведение.


1. Читаем текстовый документ (100% с разделителями).
2. Начинаем парсить строку, получаем реквизиты сравнения, ищем соответствие объектов по справочникам (дай бог, чтобы одна номенклатура была, а то еще характеристики, серии, номера ГТД, единицы измерения различные).
3. При отсутствии оных - создаем, записываем, проводим.

В итоге не более 2-3 минут занимает.
39. herfis 498 26.05.17 15:52 Сейчас в теме
У меня сотни тысяч документов (простых) затягиваются из внешних СУБД и сопоставляются с данными 1С секунд за 15 (но это без записи).
40. birgom 22.08.17 12:45 Сейчас в теме
Этот вопрос на собеседовании задают.
Раз написано, что код процедуры загрузки уже оптимален, то считаю что загрузку трогать нельзя.
Мой вариант ответа - перевести все сто магазинов на учет в 1С :)
Другой вариант созрел уже позже - выгружать продажи по факту или чаще по регламенту. Только это не ускорит)
43. d.baranov 07.04.19 15:29 Сейчас в теме
"Этот вопрос на собеседовании задают."
Тоже столкнулся. Собеседование не прошел. Так что не знаю правильно ли я предложил.
Я предложил одновременно грузить фоновыми заданиями на разных процессах. Если ресурсов сервера не хватает - разнести на несколько серверов.
Кто-нибудь знает правильный ответ?
44. Aleksk75 23.04.20 13:39 Сейчас в теме
(43) Нужно использовать объект "Внешний источник данных"
42. North1 19.02.19 15:24 Сейчас в теме
Что тут не так??? Заказчиком была поставлена задача учета в типовой конфигурации УТ отгружаемых товаров в разрезе кладовщиков, которые этот товар непосредственно выдали покупателю. Исполнителем для решения этой задачи было добавлено новое измерение «Кладовщик» в регистр накопления «ПартииТоваровНаСкладах», которое заполняется из реквизита «Ответственный» документа «Реализация товаров и услуг». Работоспособность системы сохранилась, а Заказчик получил отчеты по новой информации в требуемом виде.
Кратко прокомментируйте этот способ реализации и последствия, которые возникнут.
Предложите свой способ решения этой задачи.
45. mr_sav 91 21.08.20 22:25 Сейчас в теме
(42) При такой реализации не будут закрываться остатки, т.к. этот РН исходя из своего названия имеет тип Остатки и его регистратором является множество документов.

Следует сделать всё тоже самое, но только с оборотным регистром в котором регистрируются именно продажи. Либо воспользоваться уже готовым вариантом как в УТ 11, это реквизит документа «Реализация товаров и услуг» и измерение в РН «ВыручкаИСебестоимостьПродаж» - «Менеджер». Либо, если менеджер и кладовщик различаются в этой организации по своей роли, то добавить в этот РН измерение «Кладовщик» и заполнять его из соответствующего реквизита документа (ответственный).

Ну а вообще, дано очень малоинформативное описание. Возникает сразу вопрос, если документ заводит некий кладовщик, именно то лицо, которое просто выдает товар со склада и не связан с оформлением и взаиморасчетами, то всё-таки правильнее было бы, чтобы в этой организации применялась ордерная схема учета, а в таком случае, тогда нужно будет уже отталкиваться от использования кладовщиком документа «Расходный ордер на товары». А для этого документа не назначен ни один оборотный регистр накопления, который соответствовал бы требуемой логике. Поэтому придётся создать свой РН с видом Обороты и написать обработку его заполнения при проведении этого документа. Ну и в итоге, дабы требование заказчика узреть в отчете, то для этого в УТ 11 есть типовой отчет «ТоварыКОтгрузке», в котором можно доработать запрос и, например, добавить новый вариант этого отчета с измерением «Кладовщик», и желательно через расширение, если УТ на типовой поддержке и периодически обновляется. Ну или можно свой новый отчет сделать, тут уж всё зависит от множества деталей, которых естественно нет в таком, еще раз повторюсь, малоинформативном описании.
Оставьте свое сообщение
Вакансии
Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день

Программист 1C
Волгоград
зарплата от 200 000 руб.
Полный день

Аналитик
Санкт-Петербург
зарплата от 200 000 руб. до 250 000 руб.
Полный день