1C глубокая интеграция, как сделать запись в базу?
Есть у нас задача по реализации глубокой интеграции сайта(интернет-магазин) с 1С.
1С имеет очень .. специфическую организацию, но с чтением данных из 1С мы разобрались.
Теперь необходимо передавать в 1С данные.
Поскольку - со структурой БД на чтении мы разобрались - идеальным вариантом нам кажется - писать напрямую в базу данных 1С.
Писать нужно заказы и клиентов.
Поток заказов большой и хочется держать 1С в максимально актуальном состоянии, например - операторы, по историческим причинам - работают именно с базой 1С, а не базой сайта, а клиенты часто звонят сразу с уточнениями по заказу, которого в базе "еще" нет по причине работы через "выгрузки".
С записью в 1С есть пока одна конкретная видимая проблема - генерация _IDref происходит по каким-то внутренним алгоритмам, совсем непонятным нам.
Как можно безопасно сгенерировать этот ID?
Какими способами можно вообще решать эту проблему?
Какие может еще есть интерфейсы для синхронного взаимодействия 1С и внешних систем?
Какие есть подводные камни в попытке реализовать синхронное взаимодействие 1С с сайтом?
>> идеальным вариантом нам кажется - писать напрямую в базу данных 1С.
Это очень, очень плохо. Во-первых, вам трудно будет контролировать ссылочную целостность. Во-вторых, любые изменения в структуре метаданных 1С нужно будет программировать отдельно. В-третьих возможны взаимоблокировки. В-четвертых такой код трудно поддерживать.
>> Какие может еще есть интерфейсы для синхронного взаимодействия 1С и внешних систем?
1. Веб-сервисы в 1С.
2. Http-сервисы в 1С.
3. Отдельные таблицы в БД: База клиентов -> База 1С и наоборот. В таблицу выгружать изменения и со стороны 1С проверять раз в n времени, если что-то там есть, то считывать и удалять считанное.
Если у вас нагрузка не бешеная, то первый и второй вариант подойдут. Правда нужно уточнить как будут лицензии расходоваться в таком случае.
Мы работаем с некой версией "1C Сrm". Есть ли все это в ней же?
На счет лицензий - для компании что-то купить - не проблема, проблема, если новая лицензия = новая версия, куда нужно будет переносить все доработки текущей.
1C Сrm - это конфигурация, а эти инструменты зависят от платформы. В 8.2 (не уверен, что с первой версии) есть веб-сервисы. В 8.3 появились http-сервисы. Конечно, все это нужно будет программировать на стороне 1С, но это проще и надежнее.
p4s8x: Я имел ввиду, что при создании подключения к веб-сервису расходуется лицензия. После окончания она освобождается. Если у вас будет несколько потоков делать это одновременно - то понадобится по лицензии на поток. Если работать с этими сервисами 1С одним потоком, то нужна будет максимум 1 дополнительная лицензия.
Для использования варианта с дополнительными таблицами лицензий не нужно, но платформа, кажется только недавно, в версии 8.3, научилась записывать данные во внешние базы. Это называется внешние источники данных.
В принципе можно и файлы записывать/удалять, конечно.
Как работает лицензирование при переходе с одной версии платформы на другую, я не знаю.
Соглашусь с Александром
использовать выгрузку на сайт. Например, через драйвер ODBC:
Соединение = Новый COMОбъект("ADODB.Connection");
СтрокаКоннекта = "DRIVER={MySQL ODBC 5.2 Unicode Driver}; SERVER="+СокрЛП(Сервер)+";DataBase="+СокрЛП(ИмяБазы)+"; UID="+СокрЛП(Логин)+";PWD="+СокрЛП(Пароль)+ ";OPTION=" + "3" + ";STMT=SET CHARACTER SET UTF-8";
Попытка
Соединение.Open(СтрокаКоннекта);
Сообщить("соединились");
Исключение
Сообщить("Невозможно установить соединение с бд! " + ОписаниеОшибки()+"!!!");
Возврат;
КонецПопытки;