Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 12:10

Синхронизация внешней системы с 1С

Автор andy, 25 мар 2017, 14:11

0 Пользователей и 1 гость просматривают эту тему.

andy

Всем привет!

Так получилось, что передо мной поставили задачу синхронизации данных в нашей системе с данными из 1С. Проблема в том, что моя специализация - Web-разработка, поэтому я не знаю про 1С вообще ничего. Очень надеюсь, что здесь мне смогут помочь.

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

На данный момент у меня накопился вот такой список вопросов к знающим людям:

1. Могу ли я воспользоваться "Планом обмена"? Вроде как по описанию очень похоже на то, что мне нужно. Правда встречал упоминания о том, что этот механизм достаточно медленно работает. Также пока не могу понять как это вообще настраивается (может кто поделится ссылкой на хорошую статью?);

2. Если "План обмена" не совсем подходит, то как вообще реализуются подобные вещи? Особенно интересует момент с гарантированием доставки данных до конечного узла, "План обмена" предоставляет это из коробки. Если я буду реализовывать своими силами, то какие сущности для этого можно использовать? Как сохранить набор сформированных данных в какую-нибудь внутреннюю БД?

Пока что я набросал следующий вариант: через "Подписку на событие" отслеживаю изменения в справочнике "СотрудникиОрганизации". Функция обратного вызова размещается в отдельном общем модуле. Там мы сериализуем полученные данные в JSON и отправляем по HTTP. В принципе с помощью такого подхода можно будет подписаться на все необходимые события, разработать сериализацию данных в нужном мне виде и отправлять их. Но совсем непонятно что делать, если данные сервер не принял (это снова вопрос из п.2)

3. Где хранятся различные константы, являющиеся настройками? Причем чтобы простые пользователи системы даже не подозревали об их существовании. Конкретно в данном случае меня интересует где правильнее будет разместить авторизационные данные к моему внешнему сервису;

4. Непонятно как я потом смогу выдать клиентам изменения конфигурации 1С. Очень расчитывал на механизм "Внешних расширений", но он не позволяет мне создавать в расширении нужные мне сущности, и его польза из-за этого устремляется к 0. То есть видимо придется редактировать типовую конфигурацию? В таком случае насколько страшно то, что ее придется частично снимать с поддержки? Ну и как это пользователям доставить? Можно каким-то образом получить только мои изменения в виде файла?


Спасибо!

alex0402

Цитата: andy от 25 мар 2017, 14:11Постановка задачи примерно следующая: в 1С был добавлен новый сотрудник, эта информация отправляется нам, и мы создаем соответствующего пользователя. Сотрудник был переведен в другой отдел, его перевод осуществляется и в нашей системе итп. Таким образом, синхронизация должна быть только в одну сторону (1С -> внешняя система).

Какая конфигурация 1С?
Цитата: andy от 25 мар 2017, 14:111. Могу ли я воспользоваться "Планом обмена"? Вроде как по описанию очень похоже на то, что мне нужно. Правда встречал упоминания о том, что этот механизм достаточно медленно работает. Также пока не могу понять как это вообще настраивается (может кто поделится ссылкой на хорошую статью?);
Думаю можно. Нужно, что бы ваша система формировала ответы в формате xml. Скорость зависит от объема данных. Если квитанции о доставке пакетов приходят своевременно, то данных не много и обмен производится быстро.
Спасибо за Сказать спасибо

ef0din

Вполне вероятно, что в 1с реализован типовой механизм, если версия не слишком старая. Среди планов обмена поищите подходящий по названию.
Добавлено: 27 мар 2017, 14:05


"Но совсем непонятно что делать, если данные сервер не принял (это снова вопрос из п.2)" -  в смысле, если данные выгрузились из 1с, но не загрузились на сайт? Получается, что у Вас есть список данных, которые зарегистрированы на обмен. При выгрузке из 1с в файл записываются все зарегистрированные данные. Когда сайт данные загружает себе - он выгружает свой файл, в котором указывает: какие данные были успешно загружены. 1с в свою очередь этот файл загружает и снимает с регистрации те объекты, которые ,как указано в файле, были уже успешно загружены на сайт. 
Таким образом, даже если Вы ничего не выгружаете с сайт в 1с, нужен "рабочий" файл, благодаря которому 1с снимает с регистрации на обмен объекты, которые уже не нужны.
Но это я описываю механизм по аналогии с обменами, которые реализованы между разными базами 1с.

alex0402

Цитата: ef0din от 27 мар 2017, 13:47в смысле, если данные выгрузились из 1с, но не загрузились на сайт?

сайт каким-то образом должен генерировать ответ в виде xml. Если только подтверждение доставки, то xml небольшой.
Спасибо за Сказать спасибо

andy

Цитата: alex0402 от 25 мар 2017, 19:43
Какая конфигурация 1С?
Зарплата и кадры 2.5

Цитата: alex0402 от 25 мар 2017, 19:43
Цитата: andy от 25 мар 2017, 14:111. Могу ли я воспользоваться "Планом обмена"? Вроде как по описанию очень похоже на то, что мне нужно. Правда встречал упоминания о том, что этот механизм достаточно медленно работает. Также пока не могу понять как это вообще настраивается (может кто поделится ссылкой на хорошую статью?);
Думаю можно. Нужно, что бы ваша система формировала ответы в формате xml. Скорость зависит от объема данных. Если квитанции о доставке пакетов приходят своевременно, то данных не много и обмен производится быстро.
А не подскажете статью, где описано как это настраивается? Пока всё, что я смог сделать - это создать план обмена и в клиенте добавить в него узел. Хоть и пометил данные на автоматическую регистрацию, все равно при изменений справочников, данных в плане обмена я не наблюдаю
Добавлено: 27 мар 2017, 20:23


Цитата: ef0din от 27 мар 2017, 13:47
Вполне вероятно, что в 1с реализован типовой механизм, если версия не слишком старая. Среди планов обмена поищите подходящий по названию.
Добавлено: 27 мар 2017, 14:05


"Но совсем непонятно что делать, если данные сервер не принял (это снова вопрос из п.2)" -  в смысле, если данные выгрузились из 1с, но не загрузились на сайт? Получается, что у Вас есть список данных, которые зарегистрированы на обмен. При выгрузке из 1с в файл записываются все зарегистрированные данные. Когда сайт данные загружает себе - он выгружает свой файл, в котором указывает: какие данные были успешно загружены. 1с в свою очередь этот файл загружает и снимает с регистрации те объекты, которые ,как указано в файле, были уже успешно загружены на сайт. 
Таким образом, даже если Вы ничего не выгружаете с сайт в 1с, нужен "рабочий" файл, благодаря которому 1с снимает с регистрации на обмен объекты, которые уже не нужны.
Но это я описываю механизм по аналогии с обменами, которые реализованы между разными базами 1с.
Да, Вы меня правильно поняли - если данные 1С сформировал, но внешний сайт, допустим, недоступен.
Не совсем понял мысль - то есть данные для синхронизации мы можем положить только в какой-то внешний файл на диске? Нельзя это как-то в БД сохранить (или справочник может отдельный создать?) и потом выбирать с помощью запросов?

ef0din

Цитата: andy от 27 мар 2017, 20:21
Да, Вы меня правильно поняли - если данные 1С сформировал, но внешний сайт, допустим, недоступен.
Не совсем понял мысль - то есть данные для синхронизации мы можем положить только в какой-то внешний файл на диске? Нельзя это как-то в БД сохранить (или справочник может отдельный создать?) и потом выбирать с помощью запросов?

У Вас ведь данные сайта в СУБД какой-то хранятся? Тогда можно подключиться к этой СУБД напрямую, добавлять/изменять данные. Это Вы имеете  в виду?
В 1с в стандартных механизмах обмена реализована регистрация объектов на обмен. И тогда может есть смысл регламентным заданием реализовать подключение к СУБД сайта, выгрузку туда данных, зарегистрированных на обмен, и снятие их с регистрации при успешной выгрузке.

andy

Цитата: ef0din от 28 мар 2017, 13:33
Цитата: andy от 27 мар 2017, 20:21
Да, Вы меня правильно поняли - если данные 1С сформировал, но внешний сайт, допустим, недоступен.
Не совсем понял мысль - то есть данные для синхронизации мы можем положить только в какой-то внешний файл на диске? Нельзя это как-то в БД сохранить (или справочник может отдельный создать?) и потом выбирать с помощью запросов?

У Вас ведь данные сайта в СУБД какой-то хранятся? Тогда можно подключиться к этой СУБД напрямую, добавлять/изменять данные. Это Вы имеете  в виду?
В 1с в стандартных механизмах обмена реализована регистрация объектов на обмен. И тогда может есть смысл регламентным заданием реализовать подключение к СУБД сайта, выгрузку туда данных, зарегистрированных на обмен, и снятие их с регистрации при успешной выгрузке.

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

ef0din

Цитата: andy от 28 мар 2017, 16:19
Нет, это к сожалению точно не вариант. Во-первых планируется, что данное решение будет инсталлироваться у различных пользователей нашей системы, т.е фактически нужно будет выдавать доступ к нашей СУБД на их стороне - не безопасно. Во-вторых, опять же не обрабатывается ситуация, когда наш сервис просто не отвечает (тьфу тьфу тьфу, конечно, но вдруг сервер полностью упал). В 1С при этом данные меняются, к СУБД подключиться не смогли - данные пропали, получили неконсистентность. Поэтому я и хотел бы сохранять данные именно на той стороне, где они генерируются.

Так, если подключиться не удалось к СУБД - тогда данные с регистрации не снимаем и в след. раз 1с так же пытается их выгрузить. И так до удачной попытки. Ну то есть сначала пытаемся подключиться к СУБД, добавить/изменить данные и, при удачной попытке регистрацию на обмен для объекта убираем, иначе оставляем.
"Поэтому я и хотел бы сохранять данные именно на той стороне, где они генерируются." - вот тут все таки не совсем понял: о каких данных идет речь. Данные которые пользователь изменил/добавить на стороне 1с - так они там уже записаны. Данные, которые нужно выгрузить - тут, как писал выше, можно попытаться воспользоваться типовым механизмом регистрации на обмен. Ну или, если очень хочется, добавить свой регистр, в который будем добавлять ссылки на объекты, которые нужно выгрузить. И удалять, когда выгрузка объекта уже прошла.

Иногда через COM, OLE объекты с одной базы 1с к другой подключаются. Но я, откровенно говоря, почти не работал с данными объектами, да и с сайтостроением не очень знаком, непонятно насколько это возможно в данном случае. Да и, опять таки, небезопасно это.

Остается, наверно, только через XML. У клиентов Ваших данные выгружаются в файл, а Вы уже этот файл с данными загружаете. И пароли, логины все при Вас остаются.

andy

Цитата: ef0din от 28 мар 2017, 16:45
Остается, наверно, только через XML. У клиентов Ваших данные выгружаются в файл, а Вы уже этот файл с данными загружаете. И пароли, логины все при Вас остаются.

Да, через XML для меня было бы наиболее удобным вариантом. В целом я вижу примерно такую схему: план обмена собирает изменения по интересующим меня справочникам, я их конвертирую в формат, удобный моему приложению и пытаюсь отправить по HTTP. Но у меня так и не получилось настроить кастомный план обмена, поэтому очень был бы признателен, если кто-нибудь объяснит как это сделать.
И вот еще такой момент мне непонятен - я отредактировал конфигурацию, нажал "F5", она запустилась в тестовом режиме. Далее я захожу в "Операции -> План обмена" и добавляю новый узел в мой созданный план. Если в 1С у меня несколько пользователей, у каждого из которых на личном компьютере установлен свой клиент 1С, то эту процедуру мне нужно проделать на каждом из клиентов, или все-таки эти изменения будут зафиксированы на сервере? Надеюсь из моих объяснений хоть что-то можно понять)

Владимир Смирнов

Я думаю что автору нужен на оборот самый простой вариант.. а не подключение напрямую к СУБД и настройки планов обмена...
Самый простой вариант хотя наверное и не самый правильный это такой. Человека можно принять на работу только 2 способами в  1с. Это Договор на выполнения работ с физ лицом и стандартная это Прием на работу в организацию.. При создании этого документа и проведении, сделать процедуру, которая будет выгружать данные в любом удобном для вас виде хоть txt хоть xml хоть экскель хоть что.  и в любое удобное для вас место...и как угодно хоть на сайт хоть на сервер хоть куда.
Опять же подразделение(отдел) сотрудника можно изменить только "кадровым перемещением организации" (если организация правильно работает) опять же точно так же.. после создания документа и проведение, выгружать данные в файл и так же куда угодно и как угодно из записывать. И все это можно сделать непосредственно кодом 1с.
И ни какие подписки на события и проверки не нужны.

Думаю это самый простой вариант (но как я уже сказал, может и не самый правильный) средствами 1с после того или иного документа формировать файл с нужными данными и слать/отправлять/загружать его куда угодно.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск