Как загружать 1 млн объектов в день и не сойти с ума

02.09.25

Интеграция - Внешние источники данных

Событийный подход к интеграции дает множество преимуществ, обеспечивая отказоустойчивость, гарантию доставки и гибкую маршрутизацию сообщений. Но одновременно требует адаптации системы 1С к высоконагруженным обменам – настройки многопотока, унификации правил обмена и самонастраиваемого мониторинга. Расскажем о том, какие архитектурные подходы позволили решить эти проблемы.

Меня зовут Максим Сильванский, я являюсь архитектором 1С в компании Vi.Tech.

В последнее время мы всё чаще слышим о событийном подходе к интеграции, Kafka и RabbitMQ. И действительно, такой подход дает много преимуществ. Но важно понимать, что ваша архитектура и ландшафт 1С должны быть к этому готовы, в противном случае эти инструменты легко превращаются из решения в источник новых проблем и «бутылочное горлышко» всей системы.

Мой доклад – это своего рода компиляция опыта, советов и даже «граблей», которые мы собрали при построении нашей собственной подсистемы обмена. Сейчас эта система уже позволяет загружать более миллиона объектов в день, и объем постоянно растет. При этом мы уверены, что ограничений по масштабированию практически нет: решение гибкое, расширяемое и устойчивое.

Чтобы вы лучше представляли предпосылки, почему мы выбрали именно такой путь развития наших инструментов интеграции, начну с небольших вводных по нашему ИТ-ландшафту – тому, как мы понимаем архитектуру обменов, и как к ним подходим.

 

Vi.Tech – это дочерняя компания «ВсеИнструменты.ру».

  • Мы создаем ИТ-продукты для одного из крупнейших игроков на рынке e-commerce.

  • ИТ-штат компании в 2023 году – около 500 человек.

  • 1С-отдел чуть поменьше – 22 человека.

На слайде вы можете видеть приблизительный ИТ-ландшафт нашей компании. 1С – это желтый блок снизу.

Каждый гекс на данном слайде– это отдельный сервис. Количество гексов-сервисов постоянно растет, и вместе с этим растет количество и объем обменов между ними.

До внедрения собственной подсистемы обмена у нас не было централизованного решения, позволяющего универсально управлять всем этим «зоопарком» разнородных интеграций – у нас были обмены по API, через COM, прямые подключения к базам данных и прочие варианты.

Осознав эту ситуацию, мы задались вопросом наподобие того, который часто задают на собеседованиях: «Где вы видите себя через 5 лет?» И поняли, что если ничего не менять, то через 5 лет мы видим себя в не очень хорошем месте.

 

Проблемы и цели подсистемы обмена

 

Мы решили очертить круг проблем и определить для себя подходы к их решению:

  • Главной проблемой для нас на тот момент была низкая скорость обмена и отсутствие контроля. Стандартные подходы к обмену в 1С редко обеспечивают высокую производительность. Да, их можно оптимизировать, но это трудоемко, негибко и сложно поддерживать. Поэтому первым требованием к новой подсистеме стала именно скорость.

  • Второй нашей проблемой стало масштабирование средств обмена. Представьте, что одномоментно по щелчку в вас полетело в 2-3 раза больше данных. Что с этим делать? Как не упасть? Нам было важно обеспечить быструю, легкую и удобную масштабируемость – не так, чтобы на увеличение мощности в 2-3 раза уходил целый месяц.

  • Третья проблема – падения обменов и восстановление консистентности данных. Обмены, особенно на COM, имеют свойство падать. Нам была важна отказоустойчивость, чтобы таких вопросов вообще не возникало.

  • Четвертая проблема – повторное получение сообщений или получение накопленных после простоя. Если система временно не читает сообщения (например, во время технологического окна или пересчета итогов), нужно обеспечить гарантию их доставки – возможность получить позже, причем в правильной последовательности, потому что есть обмены, для которых порядок доставки важен. Этот пул проблем мы озаглавили как гарантия и порядок доставки.

  • При стандартных подходах к обмену мы имели множество точек входа и большое количество повторных чтений – внешние системы приходили за одними и теми же данными, иногда даже вставали в блокировки, пытаясь читать одно и то же. Чтобы избежать этих проблем, нам нужна была легкая маршрутизация сообщений в обменах.

  • Еще одной проблемой была высокая стоимость добавления и изменения интеграций. Затраты на поддержку, создание, обслуживание, отладку обменов постоянно росли. Система переставала быть гибкой: разные разработчики, разные обмены – все это приводило к нарастанию снежного кома роста издержек. Этот пул проблем мы озаглавили как гибкость. Нужно было быстро создавать новые либо менять имеющиеся обмены.

  • И «вишенкой на торте» стало отсутствие контроля состояния интеграций и необходимость ручной подготовки мониторинга. Нужен был механизм, способный в автоматическом режиме отслеживать, все ли выгружается корректно, фиксировать ошибки и всплески активности, предсказывать момент, когда объем данных превысит возможности системы. На эти вопросы должен был ответить автоматический и самоактуализирующийся мониторинг.

 

Решение проблем с помощью Kafka

Существенную часть этих проблем (3 из 7) мы смогли решить с помощью Kafka. В число решенных вопросов вошли:

  • Отказоустойчивость. Мы развернули Kafka в “трёхЦОДовом” кластере с SLA 99,999% и просто забыли про то, что обмены могут падать.

  • Гарантия и порядок доставки. В Kafka есть параметр – offset, его еще называют смещением. Это порядковый номер каждого сообщения, известный и Kafka, и приложению. Благодаря ему мы в любой момент можем точно понять, какие сообщения прочитали. И откуда нам читать заново, если в обмене произошел сбой. При необходимости можно даже перечитать сообщения немного загодя, чтобы быть уверенными. Плюс Kafka хранит сообщения на ту глубину, на которую мы не готовы терять данные. Например, если мы даем себе время простоя 4 часа, Kafka должна хранить сообщение больше, чем на 4 часа.

  • Самый важный плюс, который мы получили при внедрении Kafka – это маршрутизация. Простой пример: мы являемся мастер-системой по банковским платежкам. Когда бухгалтер отражает в системе событие оплаты, сообщение об этом уходит в Kafka. А дальше нам все равно, сколько систем его читает – две или двадцать, и каким образом. Никаких дублирующих точек входа. Мы просто публикуем сообщение о событии и на этом наша ответственность заканчивается.

Какие вопросы Kafka не решила?

  • Масштабируемость.

  • Гибкость.

  • Система мониторинга.

Частично была решена скорость.

Но из-за того, что вместе с внедрением Kafka мы перешли на событийный подход к интеграции, мы получили дополнительные проблемы, о которых я говорил. Простой пример: заказы к нам приходят из внешней системы, где по каждому клику менеджера в заказе создаются сообщения в Kafka – объем данных даже вырос.

И в целом прирост производительности заключался не в ускорении, а в том, что Kafka обрабатывает сообщения равномерно и непрерывно 24/7, что делает обмен более стабильным относительно стандартных подходов.

 

Подготовка 1С к высоконагруженным обменам

 

На этих предпосылках мы переходим к основной теме доклада: как же все-таки подготовить 1С к высоконагруженным обменам, используя событийный подход и Kafka.

 

Первым делом мы разделили весь поток сообщений из Kafka на два типа:

  • универсальный однопоточный, который стал единой точкой входа всех обменов;

  • и отложенный многопоточный, в котором сообщения приходят в точку входа в обмен не сразу, а через какое-то время и уже будучи разделенными на потоки.

 

В отложенном многопоточном механизме основную роль играет отложенная очередь – простой регистр сведений, где для каждого сообщения хранится его подписка, уникальный идентификатор, дата и текст.

Сообщения, прежде чем отправиться в Kafka, без каких-либо проверок массово льются в этот регистр, а затем раскладываются по потокам с заданной для каждой подписки задержкой.

 

Настройки многопотока для конкретных подписок – количество потоков, размер порции, задержка (лаг) – мы вынесли в отдельную консоль. Это позволило нам гибко реагировать на всплески нагрузки и в целом на изменение конъюнктуры обмена.

Например, если данных вдруг стало лететь в 2–3 раза больше, мы можем просто увеличить количество потоков, изменить размер порций и уменьшить задержку. В итоге обмен не простаивает, данные обрабатываются, а у нас есть время разобраться, почему такое произошло – нормально это или ненормально.

 

Полезные советы для оптимизации использования событийного подхода

 

В ходе обкатки системы мы выделили 4 основных приема, которые значительно повысили производительность и стабильность.

  • Буферизация через замещение. Как я уже говорил, мы решили сначала загружать сообщения в регистр отложенной очереди, где при поступлении сообщения с тем же уникальным идентификатором, которое еще не было передано в рабочий поток, оно замещалось. Таким образом мы организовали своеобразную буферизацию, которая как раз решила проблему при работе менеджера с заказом – когда он накликал 20 изменений, а мы загружаем только последнее сохраненное состояние (то, что вписалось в лаг, в задержку). Понятно, что если все изменения в лаг не вписываются, мы загружаем заказ несколько раз, но это все равно меньше, чем количество кликов менеджера. Одно такое решение снизило объем входящих сообщений в 5-6 раз.

  • Проверка необходимости загрузки – похожее решение. Иногда дешевле проверить, изменился ли объект по ключевым реквизитам, чем обрабатывать его целиком. Пример: в CRM поменяли ответственного менеджера у контрагента, а для 1С это несущественно – если по ключевым реквизитам контрагент не изменился, мы не грузим это сообщение. Для очереди контрагентов это изменение позволило сократить объем обрабатываемых сообщений в 2-3 раза.

  • Непрерывное чтение и очередь ошибок – об этом я подробнее расскажу в следующем разделе.

  • Распределение потоков одним главным заданием и проверка существования сообщения – это тоже рассмотрим чуть позже.

 

Непрерывное чтение и очередь ошибок

 

Типовой режим работы с очередью в Kafka – это чтение сообщений до ошибки. При возникновении ошибки чтение останавливается: сообщения начинают скапливаться, обмен отстает, а в техподдержку поступают жалобы – на вас, на обмен, на жизнь, на все.

Учитывая, что нас всего 22 человека, и все хотят спать по ночам, мы стали складывать ошибки в отдельный регистр ошибочных сообщений. При этом мы заметили, что около 80% случаев связаны с временным рассинхроном. Например: передается сообщение о заказе, а контрагент к этому моменту еще не загрузился. В итоге заказ падает в ошибку, но чуть позже контрагент появляется. Запустив регламент на повторные попытки обработки таких сообщений, мы добились того, что заказ догружался автоматически спустя небольшой промежуток времени.

Данное решение позволило избавиться от 80% ошибок. Оставшиеся 20% – это ошибки, которые будут всегда: кто-то накосячил, где-то неправильные данные, где-то что-то мы неправильно написали. Они будут всегда. И стопать из-за них чтение очереди не совсем корректно.

На наших объемах для каждой очереди осталось где-то 20-30 ошибок в месяц. Мы разбираем их постфактум, потому что они почти все требуют ручных изменений. Отправляем пользователям сообщение с пояснением, что нужно поправить. После исправлений данные догружаются без проблем.

 

Распределение потоков одним главным заданием и проверка существования сообщения

 

При работе в многопоточном режиме всегда есть риск дублей и блокировок. Чтобы подстраховаться, мы реализовали классическую схему:

  • Мастер-задание читает регистр и распределяет задачи между рабочими потоками.

  • Рабочие потоки не накладывают блокировок – единственная блокировка возникает на уровне мастер-задания в момент раздачи сообщений. Рабочие потоки просто передают данные.

Дополнительный лайфхак: если вспомнить, что сообщения могут заменяться более свежими версиями, рабочий поток дополнительно проверяет, не ждет ли новая версия сообщения своей очереди к обработке – тогда текущему потоку это сообщение обрабатывать не надо.

 

Правила обмена. Обработка входящих сообщений

 

 

Мы разобрались с входящим потоком обменов, научились гибко реагировать на возрастающую нагрузку и грамотно работать с ошибками, организовали буферизацию, проверяем, нужно ли грузить сообщение.

Переходим к обработке входящих сообщений.

 

Для этой цели мы разработали систему настроек «Правила обмена». По сути, это доработанная идея «Конвертации данных», в которой есть два типа правил обмена – для загрузки и для выгрузки.

Вкладки здесь тоже имеют примерно такую же функциональность, как в «Конвертации». Например, для правила загрузки доступны вкладки:

  • «Поиск» – либо ищем, либо создаем, если не нашли.

  • «Перед обменом» – здесь мы можем указать алгоритмы для подготовительных действий и проверок.

 

 

Алгоритмы, которые мы выбираем на вкладках «Перед обменом», «После обмена» и «После записи» – это основная логическая единица обмена. Они представляют собой просто строки кода, но для удобства каталогизации, переиспользования и выбора в правилах завернуты в справочник.

Когда правило обмена доходит до алгоритма, оно вытягивает из него эти строки кода и скармливает их методу «Выполнить()». Да, это не безопасно, но это супер универсально и супер удобно – на текущий момент дает больше профита, чем рисков.

 

Пробежимся по остальным вкладкам:

  • «Вспомогательные параметры» – переменные, которые доступны в контексте всего правила.

  • «Соответствие реквизитов» – то, как внешние реквизиты транслируются в реквизиты 1С.

    • Есть несколько режимов заполнения: «Строка» – это простое присвоение, «Дата» – это сериализация даты, «Алгоритм» – это то, что я ранее описывал.

    • Есть возможность работать с табличными частями. Там, естественно, все в цикле и ровно те же режимы заполнения.

 

  • Моя любимая вкладка – «Реквизиты по умолчанию». Я как человек ленивый, не люблю, когда нужно искать значения реквизитов по коду, по наименованию либо писать для их установки алгоритм. На этой вкладке можно накликать значение из того, что у вас есть в базе. Например, можно выбрать конкретное значение организации, как на слайде. Это работает и для табличных частей – можно сразу проставить варианты обеспечения или единицы измерения и не писать для этого код.

 

  • «После обмена» – доп. заполнения и доп. проверки после обработки, но до записи объекта

  • «После записи» – работа с уже записанным объектом (есть ссылка). Здесь можно вызвать разные алгоритмы по заполнению доп. свойств, по созданию дочерних объектов и пр.

 

  • «Пример входных данных» – отладочная сервисная вкладка. Сюда можно вставить текст в формате JSON и прогнать через правило – это очень удобно для разработки или отладки.

    • Можно загружать в транзакции – тогда будет выведено уведомление, что обмен прошел успешно, но в базе никаких объектов создано не будет, все откатится как было.

    • Или можно загрузить как обычный обмен.

 

При выгрузке вкладок меньше, потому что выгрузка чуть проще – нужно просто сериализовать объект 1С в JSON.

  • На вкладке «Пример входных данных» у вас объект выгрузки. При успешной выгрузке выдается JSON, а в случае ошибки – ее описание.

  • И на остальных вкладках все наоборот – реквизиты 1С сериализуются в JSON.

 

Проведение и оптимизация

 

 

Мы научились гибко обрабатывать поток входящих сообщений и получили некий low-code инструмент для обработки входящих данных при обмене, которым могут пользоваться и аналитики, и программисты, может даже и руководители, как бы страшно мне от этого иногда ни было.

Но на этом процесс не заканчивается – все документы, которые мы загрузили и обработали, нужно провести.

 

Проведение, как правило – самая ресурсоемкая операция во всей транзакции обмена. Для нас было логично вынести ее в отдельный процесс. В итоге мы ее полностью изолировали и получилось, что за обменом мы следим отдельно, и за проведением тоже отдельно.

Внимательные читатели могли заметить, что слайд называется «Отложенная обработка» и есть вид обработки. На самом деле в какой-то момент нам так понравилось проведение, что мы добавили:

  • распроведение;

  • проведение и распроведение без даты запрета;

  • техническое проведение с повышенным приоритетом;

  • постобработки (например, для заказов), которые вообще не связаны с проведением.

Как и в многопоточности, здесь есть настройки: «Количество потоков», «Порция», которые можно менять на лету. Если случился резкий всплеск нагрузки или массовое перепроведение – просто увеличиваем параметры и система обрабатывает данные быстрее без значительного отставания.

Также здесь есть «Алгоритмы» – очень удобная возможность что-то сделать: либо до проведения, либо после.

 

Полезные советы для оптимизации проведения

 

Для обработки и проведения мы также выделили основные моменты, которые, возможно, будут полезны:

  • «Правила обмена» можно использовать не только для обмена Kafka и не только для обмена вообще. Например, у нас в совокупности с многопотоком происходит создание сотен тысяч счетов-фактур, и это очень удобно делать именно через правила обмена, хоть они так и называются.

  • Еще один лайфхак. Отложенное проведение можно использовать для оптимизации. Представьте – к вам приходит руководитель или заказчик и говорит: «Платежки в ERP проводятся пять секунд, а мне нужно, чтобы проводились за секунду». Можно оптимизировать код, но это долго и дорого. Мы пошли иначе: заменили стандартное проведение на отложенное. Для пользователя все выглядит так: он нажал «Провести и закрыть» и документ закрылся мгновенно, а проведение выполняется в фоне.

  • Всегда нужно помнить, что бесконтрольное увеличение потоков проведения не всегда дает положительный результат. Вы можете получить обратную ситуацию – чем больше потоков, тем меньше объектов успевает обработаться из-за ожиданий на блокировках. А узнать об этом можно только из анализа технологического журнала. Причем иногда при увеличении числа потоков обмена даже в ТЖ никаких проблем не видно и ресурсы вроде есть, но начинается деградация rphost – все операции в два раза медленнее. Не говоря уже про то, что могут происходить падения rphost, возникать неоптимальные траты ресурсов и так далее.

  • Мы долго пытались «лечить» эти проблемы оптимизацией – тратили на это много времени, но практически безрезультатно. Тогда мы пошли простым путем – просто изолировали фоновые задания на другие рабочие сервера. На одном из решений у нас сейчас, например, три рабочих сервера обслуживают клиентов и кластер, а пять работают только под фоновые задания. В результате клиенты никогда не чувствуют падение rphost, деградации и так далее – у них тихая, спокойная гавань. На серверах с фоновыми заданиями бывает разное, мы с этим разбираемся, но главное, что это не затрагивает пользователей, и у нас больше времени на реакцию.

 

Мониторинг

 

 

Мы научились ловить весь входящий поток сообщений, обрабатывать его и даже проводить. Теперь это нужно было полирнуть мониторингом.

 

Мониторинг у нас построен на двух подходах: APDEX и Grafana.

APDEX. Есть единая универсальная точка входа, куда встроен замер. Программно добавляем типы операций и всегда имеем актуальный мониторинг. Если кто-то добавил новый обмен, я могу об этом даже не знать, но он автоматически отразится в этом мониторинге.

Выглядит примерно так, как на слайде. Используется в основном для подсчета количества операций и контроля скорости.

 

Вторая часть мониторинга построена на связке Prometheus + Grafana.

 

Здесь мы используем отдельный регистр, куда регламентным заданием собираем данные, которые хотим мониторить. Причем регламентное задание у нас настроено средствами БСП с помощью обычной внешней обработки – это тоже сделано для удобства, чтобы без обновления конфигурации на лету менять его логику.

Данными для мониторинга являются все те регистры, о которых я рассказывал: регистр отложенной очереди, регистр ошибочных сообщений, регистр обработки входящих сообщений и прочее.

Мы их агрегируем, группируем по нужным критериям и в итоге получаем самоактуализирующийся мониторинг, который подхватывает все изменения и отображает по ним проблемы.

 

Выглядит этот мониторинг примерно так, как на слайде

 

Итоги

Итоги:

  • Проблему скорости мы решили за счет многопотока, Kafka и правильной работы с ошибками.

  • Масштабируемость мы получили за счет изоляции фоновых заданий и их горизонтального масштабирования на отдельные рабочие сервера.

  • В отказоустойчивости, гарантии доставки и маршрутизации нам помогла Kafka.

  • Гибкость нам дала наша подсистема настроек «Правила обмена».

  • А автоматический актуализирующийся мониторинг – заслуга правильной архитектуры и наглядных средств визуализации.

Надеюсь, что мой доклад вдохновит вас на создание подобной системы. Каждый из описанных подходов по отдельности несложен, а вместе они позволяют построить надежный и эффективный обмен, которым можно по-настоящему гордиться.

 

Вопросы и ответы

 

Насколько, на ваш взгляд, оправдан ваш подход как замена стандартного механизма РИБ? Имеет ли смысл отказаться от РИБ и рассматривать каждый объект как отдельное сообщение?

В моем понимании наш подход более стабильный – и именно это его основной плюс. Конечно, стандартные механизмы РИБ, обмены по COM или через файлы в формате «Конвертации данных» тоже можно применять и поддерживать, но на больших объемах, как показывает практика, стабильность критична. А типовые решения часто работают нестабильно.

Как при отложенном проведении быть с регистрами, которым нужна актуализация данных в момент проведения? Допустим, мы не можем провести реализацию, не проконтролировав остатки.

Согласен, отложенное проведение подходит не для всех случаев. Мы это используем, потому что у нас есть документы, которые приходят тысячами в день. Плюс мы не контролируем складские остатки в оперативном режиме, поэтому можем позволить себе такой подход. Но вы правы – универсальным его назвать нельзя.

Сама Kafka сколько потоков у вас читает – один или больше?

Пока в один. Kafka читает быстрее, чем 1С успевает обрабатывать даже в несколько потоков (прим. ред. в 2025 появились очереди в несколько десятков млн событий в сутки и появилось многопоточное чтение)

Используете ли вы Schema Registry для валидации данных?

Пробовали Avro Schema Registry, но не прижилось. Сейчас рассматриваем Protobuf, но пока ответственность за структуру данных лежит на конечных пользователях. Почему Avro не взлетела? Думаю, дело в частых коллизиях, которые оказалось проще решать через правила.

Как у вас организован запуск потоков?

Мастер-задание ставит блокировку на регистр отложенной очереди, получает из него порции по установленному в настройках количеству сообщений и рассчитывает границы порции через функцию ТекущаяУниверсальнаяДатаВМиллисекундах() – на слайде, где показана структура регистра, это видно. Дальше выдает информацию по границам отдельным рабочим потокам – поток получает запись, читает ее, проверяет, что она за это время не была изменена, обрабатывает и удаляет.

Мастер-поток постоянно отслеживает количество активных рабочих потоков, сравнивает его с количеством, установленным в настройках, и при необходимости стартует новые.

Вы убираете ошибки в отдельный регистр. Не случалось ли такого, что этот регистр начинал стремительно расти, потому что каждая ошибка плодила следующие? Насколько я знаю, это одна из причин, почему типовой обмен Kafka и вообще интеграция, построенная на событийном подходе, при ошибке останавливается, чтобы не плодить их каскадом.

У нас есть алерты на резкие всплески ошибок. Если фиксируется всплеск, мы останавливаем конкретный обмен и разбираемся. На этапе внедрения такие проблемы встречались часто, но сейчас по очереди за месяц набегает максимум 20-30 ошибок, т.е. с каскадным ростом мы уже давно не сталкивались.

 

*************

Статья написана по итогам доклада (видео), прочитанного на конференции INFOSTART TECH EVENT.

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Внешние источники данных Программист Бизнес-аналитик Пользователь 1С v8.3 Управляемые формы Анализ и прогнозирование 1C:Бухгалтерия Узбекистан Беларусь Кыргызстан Молдова Россия Казахстан Платные (руб)

Готовое решение для автоматической выгрузки данных из 1С 8.3 в базу данных ClickHouse, PostgreSQL или Microsoft SQL для работы с данными 1С в BI-системах. «Экстрактор данных 1С в BI» работает со всеми типовыми и нестандартными конфигурациями 1С 8.3 и упрощает работу бизнес-аналитиков. Благодаря этому решению, специалистам не требуется быть программистами, чтобы легко получать данные из 1С в вашей BI-системе.

28500 руб.

15.11.2022    26230    29    49    

43

Внешние источники данных Программист Бизнес-аналитик 1С v8.3 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Розница 3.0 Платные (руб)

Обработка для выгрузки данных из подготовленных СКД в фоновом режиме в базу ClickHouseDB, PostgreSQL, MySQL, REST (CSV, JSON, SQL) и локальные папки (CSV, JSON, XLS, XLSX). Это дополнительная подключаемая обработка.

18000 руб.

21.08.2024    4078    11    4    

10

Розничная торговля Внешние источники данных Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Бухгалтерский учет 1С:Бухгалтерия 3.0 Фармацевтика, аптеки Россия Бухгалтерский учет Платные (руб)

Внешняя обработка загрузки данных из файла-выгрузки, сформированного в программе F3 TAIL версии 3.4 (и выше) или еФарма версии 2.1, в базу конфигурации 1С: Бухгалтерия предприятия 8, ред. 3.0 (базовая, ПРОФ, КОРП, ФРЕШ).

13200 руб.

19.12.2016    50496    104    106    

75

Производство готовой продукции (работ, услуг) Внешние источники данных 1С v8.3 1С:Управление нашей фирмой 1.6 Лесное и деревообрабатывающее хозяйство Россия Управленческий учет Платные (руб)

Обработка предназначена для загрузки файлов, выгруженных из системы Базис-мебельщик, в справочник 1С "Спецификации" для последующих процессов учета и диспетчирования полуфабрикатов и изделий.

10200 руб.

24.06.2021    23329    58    55    

41

Внешние источники данных Банковские операции Бухгалтер 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия государственного учреждения Россия Бухгалтерский учет Платные (руб)

Обработки для загрузки данных из УРМ "Криста" в бухгалтерию государственного учреждения редакция 2.0. Есть Демо доступ на вкладке Бесплатные файлы на 1 месяц со дня получения демонстрационного ключа регистрации. Поддерживает ПО "Web-исполнение" от НПО "Криста".

4800 руб.

19.06.2013    41266    143    108    

36
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. user-z99999 76 02.09.25 09:56 Сейчас в теме
Как загружать 1 млн объектов в день

Может вообще это делать не нужно?

Или у вас на другой стороне кладовщик, который читает со скоростью 10 млн. строк в секунду?
2. VKuser16257268 21 02.09.25 10:45 Сейчас в теме
(1) Не совсем понял вопроса, как видно из статьи - большая часть ландшафта не 1С и, банально, первичка рождается вне 1С и указанный объем, это реальный объем данных организации, т.е. заказы, реализации, поступления, контрагенты и т.д. который нужно грузить и который естественно не просматривает какой-то человек.
3. DmitryKSL 175 02.09.25 10:50 Сейчас в теме
(2) Это в одной базе, или суммарно по группе баз? Сколько из этого миллиона документов?
7. VKuser16257268 21 02.09.25 11:07 Сейчас в теме
(3) В одной, документов около 80%, но приведённые подходы хорошо тиражируются и мы их используем на всем остальном 1С ландшафте, в остальных базах, просто там нагрузка кратно меньше.
14. DmitryKSL 175 02.09.25 11:30 Сейчас в теме
(7)
документов около 80%

т.е. 800тысяч в день? И сколько времени вы их проводите? Это должны быть совсем простые, которые не требуют остатков при проведении. Иначе я что-то не понимаю, пусть один док одна секунда, тогда больше 200 часов на проведение дня получается.
16. VKuser16257268 21 02.09.25 11:42 Сейчас в теме
(14) Да, проводим по упр регистрам по мере поступления. Отражаем в БУ\НУ по ночам.
Оба компонента многопоточно + переписаны некоторые типовые места, которые рождали блокировки.
В разделе "Проведение и оптимизация" как раз скриншот консоли управления с примером как работаем с объемом на проведение
20. DmitryKSL 175 02.09.25 11:56 Сейчас в теме
(16) Если не секрет, и сколько Тб у вас база?
21. VKuser16257268 21 02.09.25 12:06 Сейчас в теме
8. user-z99999 76 02.09.25 11:07 Сейчас в теме
(2) Можно обойтись без дублирования информации в вашем ландшафте?
Отказаться от 1с, или отказаться от другой системы.

Вы копируете 1 млн. объектов, чтобы остатки смотреть правильные?
Может быть использовать http сервисы, и получать только то, что нужно?
11. RustIG 1901 02.09.25 11:23 Сейчас в теме
(8) логичный вопрос.
постепенно подходим к процессам и постановке изначальной задачи...
15. VKuser16257268 21 02.09.25 11:37 Сейчас в теме
(8) Всё можно =)
Наверное можно сделать один огромный монолит, который закроет все задачи огромной компании и это прям отдельный любимый многими холивар монолит-микросервисы.
Но нам кажется проще держать баланс и дробить домены и в них выбирать наиболее оптимальные решения, для сдачи отчётности - нам таковым видится 1С, для оперативного контура, сайта и т.д. где важны скорость и другие критерии - не 1С, а Go сервисы.

Мы не копируем, а скорее трансформируем данные оперативного учета в регламентный и управленческий.

Кажется, что загрузить в базу большой объем данных и например посчитать себестоимость, НДС, фин рез и пр. проще и дешевле, чем написать подобное "на лету" с использованием http.
5. RustIG 1901 02.09.25 11:05 Сейчас в теме
(1) Давайте считать, молодой человек :)
1 млн объектов / день
Один документ = 20-30 объектов в обмене - пусть в среднем 25 объектов.
Магазинов у ВсеИнструменты = больше 200 - не смог более точно оценить на сайте.
Один заказ - это как минимум два-три документа - счет/заказ + накладная/платежка. (маркетплейс + оффлайн).
Итого 1 млн / 25 / 200 / 2 = 100 заказов в день в одном магазине.
При 12 часовом режиме работы магазина это 8 заказов в час.
13. VKuser16257268 21 02.09.25 11:28 Сейчас в теме
(5)
дин документ = 20-30 объектов в обмене

тут сразу закралась ошибка, мы хоть и используем событийные обмены стараемся как я и писал их агрегировать в итоге до объекта, иначе мы получаем лишнюю нагрузку, так как не нужна супер оперативность.
По факту именно событий мы обрабатываем в разы больше, а в заголовке речь именно про объекты.

По магазинам считать не очень корректно, основной канал появления заказа почти у всех e-commerce сейчас не магазины\ПВЗ.
По b2b в рамках одного заказа некоторые контрагенты могут работать несколько месяцев(несколько реализаций в рамках заказа)

Иначе говоря что-то посчитать можно, но картины это никакой не дает =)
17. RustIG 1901 02.09.25 11:48 Сейчас в теме
(5) а если учесть повторные попытки 2-3 раза, то 100 заказов /день делим на 3 = 33 заказа в день... и так далее
4. RustIG 1901 02.09.25 10:59 Сейчас в теме
(0) Спасибо Инфостарт за предоставленный кейс.
Люблю подобные решения - не все так скрупулезно подходят к своему делу.

В итоге заказ падает в ошибку, но чуть позже контрагент появляется. Запустив регламент на повторные попытки обработки таких сообщений, мы добились того, что заказ догружался автоматически спустя небольшой промежуток времени.


+

Проверка необходимости загрузки – похожее решение. Иногда дешевле проверить, изменился ли объект по ключевым реквизитам, чем обрабатывать его целиком. Пример: в CRM поменяли ответственного менеджера у контрагента, а для 1С это несущественно – если по ключевым реквизитам контрагент не изменился, мы не грузим это сообщение


=

Выгружаем связанные справочники и документы по уникальным идентификаторам (поиск не по полям, а по уникал. иден.) + Прописываем проверку работы с выгруженным документом (чтобы все необходимые ключевые поля были заполнены) - нельзя открыть, провести, распечатать. То есть к обмену это уже не относится. Цель - снизить нагрузку на обменные процессы - перестать зависеть от повторных попыток выгрузок.
9. VKuser16257268 21 02.09.25 11:19 Сейчас в теме
(4)
Выгружаем связанные справочники и документы по уникальным идентификаторам (поиск не по полям, а по уникал. иден.)

В настоящее время по точкам, где часто возникают рассинхроны, так и сделано. Тут больше старался передать мысль что такой подход позволяет, до поры до времени, не обращать внимания на корнер кейсы различных ошибок и рассинхронов из-за обширности ландшафта и асинхронности. Но когда по датчикам мы перелимичиваем по ошибкам, мы тратим ресурсы - и чиним именно первопричину.
12. RustIG 1901 02.09.25 11:25 Сейчас в теме
(9) хорошо, принято.
полезно еще послушать пример какой-нибудь подобной ошибки с именами/явками :)
10. RustIG 1901 02.09.25 11:21 Сейчас в теме
(4)
повторные попытки

+повторные попытки оставить только в промежутках времени, когда кол-во заказов снижено (вечер, ночь, утро)
+отчеты/обработки доработать на проверку заполненных полей (ключевых полей)
18. VKuser16257268 21 02.09.25 11:50 Сейчас в теме
(10) В целом вы как раз предугадываете детали, которые я опускал, чтобы не перегрузить доклад =)
повторные попытки действительно работают не очень часто, чтобы не словить условный крэшлуп, эмпирически мы пришли к расписанию раз в час - это позволяет не "проспать" аномалию в ошибках и не создавать лишнюю нагрузку при повторных попытках. По хорошему еще нужно сделать счетчик попыток настраиваемый, но ошибок у нас сейчас остаётся достаточно мало по сравнению с 2023 и никак не дойдут руки.
Не совсем понял про отчеты\обработки, если речь про валидацию входа, то мы и проверяем на входе в правиле обмена и складываем в ошибку в случае чего. Если речь про реконсиляцию с ландшафтом, то да, есть отчеты, которые позволяют свериться и догрузить расхождения массово
19. RustIG 1901 02.09.25 11:56 Сейчас в теме
(18)
Не совсем понял про отчеты\обработки

мой совет выше не был бы полным , если я ограничился только доработкой "входа" -
"выходные" отчеты и обработки, которые используются в процессе работы тоже нужно доработать на проверку ключевых полей.

само понятие "ключевых" полей нужно пронести сквозь всю систему учета: от входа до выхода...
в типовых конфигурациях 1с никто так не заморачивается, а особенности учета и процессов в каждой фирме именно требуют учитывать ключевые поля при обменах.
VKuser16257268; +1 Ответить
6. RustIG 1901 02.09.25 11:06 Сейчас в теме
такие кейсы надо на уроках информатики преподавать - настраивает на правильное мышление программирования
22. gybson 02.09.25 19:20 Сейчас в теме
Было бы это на КД3, было бы интереснее. Ну и сомнительный json. Сейчас бы везде в энтерпрайзе стартап изображать.
24. d4rkmesa 03.09.25 16:46 Сейчас в теме
(22) Обмены на планах обмена с КД3 развиваются куда-то не туда, дорабатывать и мониторить их не так просто. Но, многие используют компоненты этой подсистемы из БСП для своих обменов на очередях, к примеру, обработку КонвертацияОбъектовИнформационныхБаз, которой удобно подсовывать правила на КД2 (функционал КД при этом может быть встроен в конфу, как в этом докладе).
26. gybson 04.09.25 09:21 Сейчас в теме
(24) КД3 позволяет задать каноническую модель данных и алгоритмы конвертации, которые встраиваются в модули менеджеров объектов. Составные ключи объектов и прочее. Даже для не 1С систем стандартизированный обмен и xsd будут лучше самописки.

У нас есть аж конфигурация в которой создаются объекты обмена и из нее создаются xsd - единый формат объекта для всех систем.
25. qwinter 684 04.09.25 08:56 Сейчас в теме
(22)
Ну и сомнительный json
Использовать xml во внутренних обменах маразный идиотизм.
27. gybson 04.09.25 09:21 Сейчас в теме
(25) Интересная техническая деталь.
28. qwinter 684 04.09.25 09:34 Сейчас в теме
(27) Что в ней интересного? Выбор между xml и json строится исключительно на том, кто будет отвечать за разбор инцидентов. XLM когда условный "приемник" никак не участвует в разборе, из за чего нужна валидация, json когда это не имеет значение. При внутренних обменах деньги компании в любом случае будут потрачены, поэтому не имеет значения какая из команд будет искать ошибку, при этом на xml тратиться значительно больше всех ресурсов (разработка, поддержка, железо).
d4rkmesa; +1 Ответить
29. gybson 04.09.25 13:05 Сейчас в теме
(28) Разумеется нет. Интернет завален статьями почему json для студентов, а xml для корпораций.
Платформе вообще все-равно во что сериализация идет, но типизированный json в результате менее читаемый, чем xml
23. qwinter 684 03.09.25 13:28 Сейчас в теме
Отличный доклад.

Ну и комменты конечно радуют))))
30. Cyberhawk 136 08.09.25 09:06 Сейчас в теме
загружать в транзакции – тогда будет выведено уведомление, что обмен прошел успешно, но в базе никаких объектов создано не будет
А есть ли у вас в базе запуск фоновых заданий в коде обработчиков событий
ПередЗаписью / ПриЗаписи / ОбработкаПроведения
?
31. VKuser16257268 21 08.09.25 09:43 Сейчас в теме
(30) За всю базу не поручусь, но касательно подсистемы обмена точно нет. В целом стараемся проектировать подсистемы независимыми. Не должны запуск\работа одной подсистемы зависеть от другой.
Для отправки сообщения требуется регистрация/авторизация