1

Тема: Передання данних з сайту (My SQL) до CRM

Доброго дня.
Маємо CRM з системою управління базою даних Microsoft Access, є сайт з базою даних на My SQL.
Потрібно, щоб замовлення та дані про клієнтів потрапляли з сайту до ЦРМ.
І у ЦРМ і у сайта є функція імпорту/експорту.
Але просто через файл це робити заважає те що, у ЦРМ свої ID клієнтів та замовлень, а у сайта свої.

В загалі-то шукаємо фахівця, який би виконав роботи по організації цього процесу потрапляння інформації в ЦРМ. Можна тільки на боці ЦРМ (бо до кого звернутися по сайту знайдемо).

Але якщо ні, то, будь ласка, допоможіть сформулювали завдання для цієї роботи. Чи нам потрібен якийсь скрипт, чи що?

Цитую довідку ЦРМ (вибачаюсь, що московською. укр.варіанта довідки немає, а перекладати не ризикнула, бо можу щось не те наперекладати)

"Возможна ли интеграция с другими системами?

Да, возможна. Применяемая нами стандартная СУБД Microsoft Access (или MS SQL Server) является хорошо знакомой многим специалистам. Она легко и удобно интегрируется с другими системами. В интерфейсе программы вы можете добавлять пользовательские кнопки на панель инструментов любой таблицы или формы для редактирования, создавать пользовательские пункты меню, использовать триггеры, напоминания, срабатывающие при определенном условии или событии, и запускающие какие-то SQL-выражения, внутренние команды или произвольные файлы: EXE-файлы или файлы-скрипты .VBS с кодом на языке VBScript. Скрипт может открывать текущую БД, БД другой системы, делать запросы к данным, изменять их, синхронизировать, переливать данные из одной БД в другую и прочее. Также можно создавать объекты каких-то других систем методом CreateObject, вызывать методы этих объектов, совершающие какие-то определенные действия (например, печать чека, показ какой-то специальной формы, включение солярия, запуск компрессора, инициация телефонного звонка и т.д. в зависимости от типа объекта). В рабочей папке программы есть ряд файлов-скриптов .VBS (ScriptExample1.vbs и другие .vbs), которые можно открыть в Блокноте и посмотреть примеры несложного кода с подробными комментариями. Имеется возможность экспорта данных из таблиц БД в текстовый файл формата CSV, XML, Excel. В других системах можно импортировать данные из этого файла. И наоборот - если сторонняя система обладает экспортом в XML, то можно сделать импорт в нашу систему.
Стандартная СУБД по выбору Microsoft Access® или Microsoft SQL Server®"

2

Re: Передання данних з сайту (My SQL) до CRM

nnnata написав:

через файл це робити заважає те що, у ЦРМ свої ID клієнтів та замовлень, а у сайта свої

Ви самі відповіли на своє запитання, який має бути перший крок - і тут м'яч на вашому боці.
Скласти таблицю відповідності ID. Це замість вас ніхто не зробить, бо неясно чи "матч" робити за назвою, чи за сукупністю певних колонок (полів).

Цитати мовою окупанта не толеруються і не пробачаються - якщо ви вважаєте інакше, то ви прийшли не на той форум.

3

Re: Передання данних з сайту (My SQL) до CRM

nnnata написав:

Цитую довідку ЦРМ

Чи доступна довідка іншими мовами ?

  • Якшо так, то дайте посиланя на публічну сторінку.

  • Якшо ні, то не варто зливати дані до програм ворога.

4

Re: Передання данних з сайту (My SQL) до CRM

Сайт та база містять дані більш ніж за 10 років, це пара десятків тисяч клієнтів/замовлень.
Нас влаштує, якщо наступні клієнти/замовлення почнуть завантажуватися в ЦРМ, як нові. І з цього моменту почнеться формування таблиці відповідності ID (я сподіваюсь, воно якось автоматично може формуватися?). Нам підійде "матч" за номером телефону.

Але, що робити далі? Що потрібно для того, щоб дані з сайту потрапили у ЦРМ?

Переклад цитати з довідки ЦРМ

Чи можлива інтеграція з іншими системами?

Так, можлива. Застосовувана нами стандартна СУБД Microsoft Access (або MS SQL Server) є добре знайомою багатьом фахівцям. Вона легко і зручно інтегрується з іншими системами.  В інтерфейсі програми ви можете додавати користувацькі кнопки на панель інструментів будь-якої таблиці або форми для редагування, створювати пункти меню, використовувати тригери, нагадування, що спрацьовують за певної умови або події, і запускають якісь SQL-вирази, внутрішні команди або довільні файли:  EXE-файли або файли-скрипти .VBS з кодом мовою VBScript. Скрипт може відкривати поточну БД, БД іншої системи, робити запити до даних, змінювати їх, синхронізувати, переливати дані з однієї БД до іншої та інше. Також можна створювати об'єкти якихось інших систем методом CreateObject, викликати методи цих об'єктів, які здійснюють певні дії (наприклад, друк чека, показ якоїсь спеціальної форми, включення солярію, запуск компресора, ініціація телефонного дзвінка і т.д. залежно від типу об'єкта). У робочій папці програми є ряд файлів-скриптів .VBS (ScriptExample1.vbs та інші .vbs), які можна відкрити в Блокноті і переглянути приклади нескладного коду з докладними коментарями. Є можливість експорту даних із таблиць БД у текстовий файл формату CSV, XML, Excel. В інших системах можна імпортувати дані з цього файлу. І навпаки - якщо стороння система має експорт у XML, то можна зробити імпорт у нашу систему.
Стандартна СУБД на вибір Microsoft Access® або Microsoft SQL Server®

5

Re: Передання данних з сайту (My SQL) до CRM

leofun01 написав:
nnnata написав:

Цитую довідку ЦРМ

Чи доступна довідка іншими мовами ?

  • Якшо так, то дайте посиланя на публічну сторінку.

  • Якшо ні, то не варто зливати дані до програм ворога.

переклала у попередньому своєму посту. якщо потрібна якась додаткова інформація з довідки, будь ласка, кажіть, буду шукати.

Подякували: leofun011

6

Re: Передання данних з сайту (My SQL) до CRM

Нам підійде "матч" за номером телефону.

А він унікальний? Тобто чи існує декілька записів для того ж номеру телефону? Якщо так, тоді я вас розчарую - вам доведеться подумати ще. Повинен бути унікальний "матч".

7

Re: Передання данних з сайту (My SQL) до CRM

frz написав:

Нам підійде "матч" за номером телефону.

А він унікальний? Тобто чи існує декілька записів для того ж номеру телефону? Якщо так, тоді я вас розчарую - вам доведеться подумати ще. Повинен бути унікальний "матч".

він унікальний

8

Re: Передання данних з сайту (My SQL) до CRM

nnnata написав:
frz написав:

Нам підійде "матч" за номером телефону.

А він унікальний? Тобто чи існує декілька записів для того ж номеру телефону? Якщо так, тоді я вас розчарую - вам доведеться подумати ще. Повинен бути унікальний "матч".

він унікальний

Ви так думаєте, чи хтось дійсно вивантажив дані і зробив перевірку хоча би елементарною формулою в екселі на унікальність?

9

Re: Передання данних з сайту (My SQL) до CRM

frz написав:
nnnata написав:
frz написав:

А він унікальний? Тобто чи існує декілька записів для того ж номеру телефону? Якщо так, тоді я вас розчарую - вам доведеться подумати ще. Повинен бути унікальний "матч".

він унікальний

Ви так думаєте, чи хтось дійсно вивантажив дані і зробив перевірку хоча би елементарною формулою в екселі на унікальність?

я це знаю. телефони у ЦРМ унікальні - стоїть перевірка цього поля на унікальність (в нас є така функція - можна включити або вимкнути до будь-якого поля).

10

Re: Передання данних з сайту (My SQL) до CRM

MS Access - це пародія бази даних, для цієї халтурки може підійти програміст-студент з третього курсу.

Але для студента потрібно чітко описати що саме потрібно. Тут вже зайшла мова про клієнтів та замовлення. Це вже дві таблиці мінімум. Можливо, я припускаю, є ще допоміжна таблиця щось про "типи замовлень", також інша про всі можливі продукти. На цих всіх таблицях потрібно знати яка колонка (поле) визначено як унікальний ключ, які взаємозв'язки (foreign key) між таблицями.

Те саме, але можливо там все інакше побудовано - на сайті в базі MySQL.

Коротше, потрібна "схема даних" в MS Access i MySQL - таблиці, їхні унікальні ключі і взаємозв'язки (foreign key).

11

Re: Передання данних з сайту (My SQL) до CRM

frz написав:

MS Access - це пародія бази даних, для цієї халтурки може підійти програміст-студент з третього курсу.

Але для студента потрібно чітко описати що саме потрібно. Тут вже зайшла мова про клієнтів та замовлення. Це вже дві таблиці мінімум. Можливо, я припускаю, є ще допоміжна таблиця щось про "типи замовлень", також інша про всі можливі продукти. На цих всіх таблицях потрібно знати яка колонка (поле) визначено як унікальний ключ, які взаємозв'язки (foreign key) між таблицями.

Те саме, але можливо там все інакше побудовано - на сайті в базі MySQL.

Коротше, потрібна "схема даних" в MS Access i MySQL - таблиці, їхні унікальні ключі і взаємозв'язки (foreign key).

Вважаю, я можу це зробити. Десь так воно буде:

Прихований текст

ЦРМ
Таблиці:
1. qdfMain (Клієнти)
- унікальний ключ ID
2. qdfInvoices (Рахунки)
- унікальний ключ ID
3. tblInvoicesProducts (Продукти за рахунком)
- унікальний ключ ID
Допоміжні таблиці:
1. tblProducts (Продукти)

Зв'язки:
1. ClientID from qdfInvoices =  ID from qdfMain
2. InvoiceID from qdfInvoicesProducts = ID from qdfInvoices
3. ClientID from qdfInvoicesProducts = ID from qdfMain
4. Product from qdfInvoicesProducts = Products from tblProducts

САЙТ
Таблиці
1. virtuemart_orders
- унікальний ключ virtuemart_order_id
2. virtuemart_order_userinfos
- унікальний ключ virtuemart_order_userinfo_id
3. virtuemart_order_items
- унікальний ключ virtuemart_order_item_id
Допоміжні таблиці
1. virtuemart_products
- унікальний ключ virtuemart_product_id 

Зв'язки:
1. virtuemart_order_id from virtuemart_order_userinfos =  virtuemart_order_id from virtuemart_orders
2. virtuemart_order_id from virtuemart_order_items = virtuemart_order_id from virtuemart_orders

12

Re: Передання данних з сайту (My SQL) до CRM

frz написав:

MS Access - це пародія бази даних, для цієї халтурки може підійти програміст-студент з третього курсу.

Але для студента потрібно чітко описати що саме потрібно. Тут вже зайшла мова про клієнтів та замовлення. Це вже дві таблиці мінімум. Можливо, я припускаю, є ще допоміжна таблиця щось про "типи замовлень", також інша про всі можливі продукти. На цих всіх таблицях потрібно знати яка колонка (поле) визначено як унікальний ключ, які взаємозв'язки (foreign key) між таблицями.

Те саме, але можливо там все інакше побудовано - на сайті в базі MySQL.

Коротше, потрібна "схема даних" в MS Access i MySQL - таблиці, їхні унікальні ключі і взаємозв'язки (foreign key).


Добрий день. А що далі робити?

13

Re: Передання данних з сайту (My SQL) до CRM

Далі шукати когось типу студента-програміста з третього курсу, показати йому що запропонував чат ґпт на підставі наданих описів таблиць і зв'язків:

чат ґпт

Покрокова інструкція для одноразової синхронізації даних із MySQL (джерело) до MS Access (ціль), з урахуванням наданих описів таблиць і зв’язків.

---

Мета — витягнути дані з таблиць MySQL, трансформувати їх у відповідності до структури Access, і вставити в Access у правильному порядку, зберігаючи зв’язки між таблицями.

---

## ????️ Відповідність таблиць

| MySQL                         | MS Access               | Коментар |
|------------------------------|-------------------------|----------|
| virtuemart_order_userinfos   | qdfMain (Клієнти)       | Інформація про замовника |
| virtuemart_orders            | qdfInvoices (Рахунки)   | Інформація про замовлення |
| virtuemart_order_items       | tblInvoicesProducts     | Продукти в замовленні |
| virtuemart_products          | tblProducts             | Список продуктів |

---

## ???? Послідовність синхронізації

1. **Крок 1: Клієнти (`qdfMain`)** 
   З таблиці `virtuemart_order_userinfos` — вставити нових клієнтів у `qdfMain`. 
   Важливо зберегти відповідність `virtuemart_order_userinfo_id` ↔ `ID`.

2. **Крок 2: Рахунки (`qdfInvoices`)** 
   З таблиці `virtuemart_orders`. 
   Для кожного замовлення знайти відповідного клієнта (через `virtuemart_order_id`) і встановити `ClientID`.

3. **Крок 3: Продукти (`tblProducts`)** *(опційно)* 
   Можна попередньо завантажити продукти з `virtuemart_products`, якщо їх ще немає в Access.

4. **Крок 4: Продукти замовлень (`tblInvoicesProducts`)** 
   З таблиці `virtuemart_order_items`. 
   Потрібно:
   - зв'язати з рахунком (`InvoiceID`)
   - зв'язати з клієнтом (`ClientID`)
   - зв'язати з продуктом (`Product`)

---

## ???? Приклад: логіка на Python

```python
import mysql.connector
import pyodbc

# Підключення до MySQL
mysql_conn = mysql.connector.connect(
    host='localhost', user='root', password='пароль', database='назва_бд'
)
mysql_cursor = mysql_conn.cursor(dictionary=True)

# Підключення до Access (через ODBC)
access_conn = pyodbc.connect(r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=шлях\до\файлу.accdb;')
access_cursor = access_conn.cursor()

# Крок 1: Синхронізація клієнтів
mysql_cursor.execute("SELECT * FROM virtuemart_order_userinfos")
clients = mysql_cursor.fetchall()

for client in clients:
    access_cursor.execute("""
        INSERT INTO qdfMain (ID, FirstName, LastName, Email)
        VALUES (?, ?, ?, ?)
    """, client['virtuemart_order_userinfo_id'], client['first_name'], client['last_name'], client['email'])

access_conn.commit()
```

---

## ???? Увага

- Якщо в Access використовуються **автоматичні ID (AutoNumber)**, треба зберігати відповідність між MySQL ID та Access ID (використовувати `SELECT @@IDENTITY` або `cursor.lastrowid`).
- Дотримуйтесь **послідовності вставки**: Спочатку клієнти, потім рахунки, потім продукти в рахунках.
- Рекомендується працювати з **тимчасовими словниками** чи `dict`, щоб зберегти відповідності ID між джерелом і ціллю.

---

## ???? Результат

Після завершення:
- Дані з MySQL успішно перенесені до MS Access
- Всі зв’язки між таблицями збережені
- Доступно для звітів чи подальшої обробки в Access

14

Re: Передання данних з сайту (My SQL) до CRM

frz написав:

Далі шукати когось типу студента-програміста з третього курсу, показати йому що запропонував чат ґпт на підставі наданих описів таблиць і зв'язків:

чат ґпт

Покрокова інструкція для одноразової синхронізації даних із MySQL (джерело) до MS Access (ціль), з урахуванням наданих описів таблиць і зв’язків.

---

Мета — витягнути дані з таблиць MySQL, трансформувати їх у відповідності до структури Access, і вставити в Access у правильному порядку, зберігаючи зв’язки між таблицями.

---

## ????️ Відповідність таблиць

| MySQL                         | MS Access               | Коментар |
|------------------------------|-------------------------|----------|
| virtuemart_order_userinfos   | qdfMain (Клієнти)       | Інформація про замовника |
| virtuemart_orders            | qdfInvoices (Рахунки)   | Інформація про замовлення |
| virtuemart_order_items       | tblInvoicesProducts     | Продукти в замовленні |
| virtuemart_products          | tblProducts             | Список продуктів |

---

## ???? Послідовність синхронізації

1. **Крок 1: Клієнти (`qdfMain`)** 
   З таблиці `virtuemart_order_userinfos` — вставити нових клієнтів у `qdfMain`. 
   Важливо зберегти відповідність `virtuemart_order_userinfo_id` ↔ `ID`.

2. **Крок 2: Рахунки (`qdfInvoices`)** 
   З таблиці `virtuemart_orders`. 
   Для кожного замовлення знайти відповідного клієнта (через `virtuemart_order_id`) і встановити `ClientID`.

3. **Крок 3: Продукти (`tblProducts`)** *(опційно)* 
   Можна попередньо завантажити продукти з `virtuemart_products`, якщо їх ще немає в Access.

4. **Крок 4: Продукти замовлень (`tblInvoicesProducts`)** 
   З таблиці `virtuemart_order_items`. 
   Потрібно:
   - зв'язати з рахунком (`InvoiceID`)
   - зв'язати з клієнтом (`ClientID`)
   - зв'язати з продуктом (`Product`)

---

## ???? Приклад: логіка на Python

```python
import mysql.connector
import pyodbc

# Підключення до MySQL
mysql_conn = mysql.connector.connect(
    host='localhost', user='root', password='пароль', database='назва_бд'
)
mysql_cursor = mysql_conn.cursor(dictionary=True)

# Підключення до Access (через ODBC)
access_conn = pyodbc.connect(r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=шлях\до\файлу.accdb;')
access_cursor = access_conn.cursor()

# Крок 1: Синхронізація клієнтів
mysql_cursor.execute("SELECT * FROM virtuemart_order_userinfos")
clients = mysql_cursor.fetchall()

for client in clients:
    access_cursor.execute("""
        INSERT INTO qdfMain (ID, FirstName, LastName, Email)
        VALUES (?, ?, ?, ?)
    """, client['virtuemart_order_userinfo_id'], client['first_name'], client['last_name'], client['email'])

access_conn.commit()
```

---

## ???? Увага

- Якщо в Access використовуються **автоматичні ID (AutoNumber)**, треба зберігати відповідність між MySQL ID та Access ID (використовувати `SELECT @@IDENTITY` або `cursor.lastrowid`).
- Дотримуйтесь **послідовності вставки**: Спочатку клієнти, потім рахунки, потім продукти в рахунках.
- Рекомендується працювати з **тимчасовими словниками** чи `dict`, щоб зберегти відповідності ID між джерелом і ціллю.

---

## ???? Результат

Після завершення:
- Дані з MySQL успішно перенесені до MS Access
- Всі зв’язки між таблицями збережені
- Доступно для звітів чи подальшої обробки в Access


Дякую. пішла перетравлювати.