Автоматическая выгрузка данных 1С 8.3 в Yandex Datalens / Apache Superset (БД Clickhouse)

0. Техподдержка 15.11.22 12:50
Готовое решение для автоматизированной выгрузки данных из 1С 8.3 в базу данных ClickHouse для работы с данными 1С в Yandex Datalens, Apache Superset (и не только)
Хочу представить вашему вниманию нашу новую разработку - "Экстрактор данных 1С в BI".
Решение отлично работает со всеми типовыми (и не только) конфигурациями 1С 8.3 для управляемых форм.
И позволяет автоматизировать работу бизнес-аналитика по ежедневной выгрузке данных из 1С в БД ClickHouse для последующей работы с этой БД в Yandex Datalens

Перейти к публикации

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. SP2000 27 15.11.22 14:19 Сейчас в теме
Обычное приложение поддерживается?
2. Техподдержка 15.11.22 14:22
(1)
Обычное приложение поддерживается?


Пока не поддерживается (Еще не было запросов)
Если Ваша конфигурация в принципе допускает запуск в управляемых формах, то наше Расширение будет доступно и будет работать и так
(некоторые так пользуются)

Если напишете какой релиз конфигурации и платформу 1С используете, посмотрим что можно сделать
3. 1spectr 15.11.22 19:56 Сейчас в теме
А выгрузка всегда полная или поддерживается инкремент?
4. Техподдержка 15.11.22 20:02
(3)
А выгрузка всегда полная или поддерживается инкремент?


В таблицу - приемник делается сейчас полная выгрузка (в 99% в 1С нельзя определить, что за этот период времени вот эти вот данные изменились, если конечно вы не используете планы обмена, но даже с планами обмена не все просто)

Обычно мы делаем так:
0. Делаем два набора данных и соответственно две таблицы- приемника в clickHouse (генерация таблиц у нас реализована)
1. "Таблица_ИсторическиеДанные" - сюда разово загружаем данные до определенной даты (например до 01/01/2022) (просто ручками тыкаем кнопку один раз)
2. "Таблица_Текущая" - а здесь по расписанию данные перезаписываем созданным ранее регламентным заданием
3. а на уровне ClickHouse делаем такой код (пример):

Cre ate View Таблица_ВСЯ
as
sel ect * from Таблица_ИсторическиеДанные
uni on all
sel ect * fr om Таблица_Текущая

4. Далее, в Datalens уже используем для работы созданную View = "Таблица_ВСЯ"
5. 1spectr 15.11.22 20:11 Сейчас в теме
(4) те получается, что текущий период(текущий год) все равно придётся перегружать полностью и далее руками сдвигать «окно»(на следующий год)?
6. Техподдержка 15.11.22 20:35
(5)
те получается, что текущий период(текущий год) все равно придётся перегружать полностью и далее руками сдвигать «окно»(на следующий год)?

Ну это первый вариант, который на поверхности
Другой вариант - в Наборах данных Экстрактора 1С привязываться к дате закрытия периода или еще к какому то реквизиты для секционирования данных

Изначально мы думали над автоматическим секционированием таблиц-приемников по годам/месяцам, но любовь 1С-пользователей к правкам "задним периодом" все эти схемы ломает на раз-два.
К примеру, вот 10 января - это уже новый год. А правки пользователи будут вносить еще половину всего прошлого года. Одно дело, если база небольшая, можно перегружать текущий и прошлый год, а если в базе сотни тысяч документов, то такой подход уже не подходит.
В общем пока вся история с автосекционированием - это, как мне кажется, индивидуально подбираемое решение для каждого конкретного Заказчика

Если у Вас есть какая-то идея по автоматическому сдвигу "окна", то давайте обсудим и если это будет достаточно универсально, то мы включим это в один из ближайших релизов
7. 1spectr 15.11.22 21:56 Сейчас в теме
(6) Универсального решения нет, но если работаем с более менее большими данными, то эффективность более приоритетна чем универсальность.
Если мы берем за аксиому, что данное решение для небольших(база не более 300-500гб) инсталляций 1С(так как на больших системах все сильно сложнее)

Задачи которые необходимо решить
1) Обеспечить консистентность данных с приемлемой задержкой(так как реалтайм для аналитике в целом не нужен).

2) Минизировать "пропадание" данных при обновлении данных(Clickhouse это не реляционная база и update в классическом смысле там нет).
Как я понимаю сейчас в момент выгрузки данные в таблице стираются и записываются заново(возможно я не прав)?

3) Минимизировать нагрузку при синхронизации, так как чем больше данных тем больше требуется напрягать базу данных для получения этих данных и сервер приложений для конвертации(json или tsv(csv) самые простые для 1С) перед выгрузкой/


Варианты решения.
Вариант с планом обмена(или его аналогами)
Есть таблицы с функциональностью которая позволяет удалять дубликаты по сочетанию измерений ReplacingMergeTree
ReplacingMergeTree
Те в данную таблицу можно получая изменения из плана обмена отправлять актуальные данный и ch сам удалит дубликаты и оставит только одну последнюю запись(есть нюансы, но для небольших данных(10ки миллионов строк) пойдет)

Другой вариант
Предполагаем что в таблице есть Период(или любое другое поле с Датой), так как вопрос выгрузки Справочников это отдельная тема
Предположим что мы не знаем, что именно пользователи поменяли, но можем понять что в данном документе произошло изменение(стандартная логика регистрации в плане обмена)
В таком случае мы можем создать таблицу которая будет партиционирована, например по дням. Далее получаем из плана обмена записи, по ним определяем день в котором данные были изменены, удаляем партицию с этим днем в ch(удаление партиции равно по ресурсам удалению одного файла, те очень быстрое и дешевое) и записываем полностью этот день заново.
Если мы хотим чтобы никто не заметил что произошло обновление данных, то мы создаем таблицу аналогичной структуры записываем в нее данные и потом "подменяем" партиции в таблицах(операция атомарная поэтому никто не заметит пропажи).
8. Техподдержка 15.11.22 23:14
(7)
Как я понимаю сейчас в момент выгрузки данные в таблице стираются и записываются заново(возможно я не прав)

Да, сейчас именно так

Минимизировать нагрузку при синхронизации, так как чем больше данных тем больше требуется напрягать базу данных для получения этих данных и сервер приложений для конвертации(json или tsv(csv) самые простые для 1С) перед выгрузкой

Да, есть два варианта выгрузки:
1. insert.... values (...), (...)
2.через файл - вариант более быстрый и предпочтительный (используется по умолчанию)

С вами где-то согласен.
Но построение выгрузки на Плане обмена или регистрации дней/месяцев, когда данные были изменены - это уже кастомное решение под Заказчика, так как зависит от бизнес-задачи и конкретной конфигурации.
Мы не знаем, на какой раздел учета обратит внимание аналитик и пожелает выгружать:
- хоз.операции в бухучете,
- Регистры продаж
- или регистры расчета в ЗУП (вариантов масса)

Поэтому ваши, безусловно верные, методы регистрации изменений и доставки изменений в ClickHouse к сожалению не универсальны, в том числе, если рассматривать 1С в файловом (а не клиент-серверном) варианте (ведь такие пользователи тоже есть, не у всех есть "большие" данные)
Также, предполагаю, что в ваших вариантах, для некоторых конфигураций и платформ 1С придется встраиваться в саму конфигурацию клиента, а не оставаться в рамках "расширения" (тут наверное больше скажут наши программисты, нежели я)

На мой взгляд, если объемы данных велики и нужен "реалтайм", то лучше уже тогда идти по пути "прямого" доступа к БД 1С (через View), нежели используя механизм регистрации изменений и выгрузок средствами 1С платформы

В целом, спасибо за конструктивное замечание. Продукту есть куда развиваться.

Ну и это уже вопрос "кастомного" индивидуального решения под вас (готовы обсуждать)
9. 1spectr 15.11.22 23:36 Сейчас в теме
(8) Мы эти вопросы уже решили, иначе я не смог бы не написал то что написал )
В вашем решении не хватает инкремента, так как в текущей реализации есть только прикольный конструктор мапинга полей и в целом на этом все красивое заканчивается и начинаются минусы которые не позволяют использовать полноценно решение в проектах.

1) Полная перегрузка данных, те аналитики должны подстраиваться под технологическое окно обновления так как пока 1С выгружает данные, в DL данных нет, либо они есть, но неполные данные хуже полного отсутствия.

2) Нагрузка при выгрузке, это важный момент, так как выгружается все таки ощутимый объем данных.

3) Решение с перегрузкой текущего периода уменьшает нагрузку, но не решает 1 пункта и оно требует компетенции которой обладают далеко не все.

Но концептуально я придираюсь )
Хорошее решение для небольших организаций(1с у них и так есть, а ch в облаке стоит несколько тысяч рублей в месяц) которое позволит им выйти за пределы отчетов которые дает 1С и с минимальными усилиями воспользоваться современными low code инструментами аналитики.
10. Техподдержка 16.11.22 08:42
(9)
рикольный конструктор мапинга полей и в целом на этом все красивое заканчивается и начинаются минусы которые не позволяют использовать полноценно решение в проектах.


Не совсем так:
В нашем решении есть:
1.создание наборов данных (запрос или объект [в ближайшее время опишу уже выпущенный релиз])
2. автосоздание, модификация таблиц в ClickHouse с маппингом полей по Набору данных (ведь это же боль - генерировать руками таблицы-приемники)
3. добавление вычисляемых полей, параметров, отборов для удобства с повторным использованием одного Набора данных в разных выгрузках
4. создание и модификация регламентного задания по перезаполнению таблиц в ClickHouse
5. Плюс ко всему - наше решение еще и универсально по отношению к большинству конфигураций 1С, присутствующих на рынке

Спасибо вам за идею, по поводу работы с партишенами на уровне дня в базе Clickhouse. Думаю, это можно обыграть (взяли на обдумывание)


Что касается, что у нас хорошее решение для "небольших организаций" - немного нет так :)
У нас отличное решение для относительно небольших баз данных, к коим можно отнести огромное количество заводов, оптовых компаний, ритейла среднего размера, предприятий питания или сферы услуг. Т.е. сама организация может быть весьма крупной, просто в ее 1С нет сотен миллионов транзакций (это свойственно больше крупному ритейлу).
А для мега крупного ритейла из нашего решения можно сделать кастомный вариант, который будет очень быстро и красиво работать


Самое главное - наше решение (вы правы) - это возможность, используя данные 1С, перейти на работу с современным BI (Yandex Datalens)
11. Техподдержка 17.11.22 14:23
(9)
В вашем решении не хватает инкремента, так как в текущей реализации есть только прикольный конструктор мапинга полей и в целом на этом все красивое заканчивается и начинаются минусы которые не позволяют использовать полноценно решение в проектах.


Спасибо большое за комментарии.
Обдумали возможные пути решения.
Думаю, до конца года сможем реализовать достаточно универсальную схему по регистрации изменений до уровня "Месяц/день", а значит и реализовать инкрементальную загрузку "Наборов данных" в Clickhouse.

Вы натолкнули нас на достаточно элегантное решение :)
12. Техподдержка 09.01.23 18:29
Текущие изменения:
1. поработали над интерфейсом (теперь он удобнее и проще)
2. добавили логирование
3. исправили пару досадных недочетов
4. выполнили несколько проектов и окончательно убедились, что проект востребован и нужен, а также весьма и весьма удобен для работы с выгрузкой из 1С в Clickhouse
13. DenDSMG 15 16.01.23 14:43 Сейчас в теме
в запросах можно использовать временные таблицы ?
Можно передавать параметром Текущую дату ? (чтобы в запросе была возможность выгружать определенный период от сегодняшней даты)
14. Техподдержка 16.01.23 18:22
(13)
в запросах можно использовать временные таблицы ?
Можно передавать параметром Текущую дату ? (чтобы в запросе была возможность выгружать определенный период от сегодняшней даты)


1. В Запросах можно использовать и временные таблицы. (штатный же функционал)
2. Параметром Текущую дату пока передать нельзя (для этого пока клиенты используют сейчас "Отборы"), записано в план доработки на этот квартал. Но, если надо быстрее, то данную функциональность поставим в план на ближайший релиз, если выкупите лицензию
Оставьте свое сообщение
Вакансии
Аналитик 1С
Москва
зарплата от 110 000 руб. до 130 000 руб.
Полный день

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

Руководитель группы разработки
Краснознаменск (Московская обл.)
зарплата от 180 000 руб. до 300 000 руб.
Полный день

Инженер 1С
Ессентуки
зарплата от 120 000 руб. до 144 000 руб.
Полный день

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