Асинхронный обмен между базами 1С на практике

20.03.26

Интеграция - Перенос данных 1C

Асинхронный обмен между базами 1С, практическое руководство.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Асинхронный обмен между базами 1С на практике:
.zip 543,50Kb
2 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • Поиск от одного разработчика до ИТ-команд под проект.
  • Обмен любыми контактами разрешён.
  • 0% комиссии, допускаются расчёты напрямую.

Это вторая часть, первая здесь

 

1. Введение

В первой статье мы рассмотрели архитектуру асинхронного обмена, в этой статье рассмотрим практический пример.

 

2. Архитектура практического решения

2.1 Общая схема взаимодействия

[1С-Отправитель] → [Broker] → очередь → [1С-Получатель]

Кратко:

* отправитель просто отдает
* брокер получает, хранит, передаёт дальше по запросу, гарантирует доставку
* получатель периодически опрашивает брокера, получает, воспроизводит

 

3. Формирование сообщения в 1С

3.1 Структура передаваемого сообщения

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

{
    "exchange_id": "ИдентификаторОбменаУникальныйВнутриКанала",
    "channel": "ИмяКанала",
    "data": "ПередаваемыеДанные",
    "proirity": "Приоритет"
}

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

3.2 Архитектура отправителя

Для реализации функции отправителя понадобится регистр сведений Очередь следующей стркутуры:
Измерения:

- Ссылка, тип ДокументСсылка, СправочникСсылка

Ресурсы:

- exchange_id
- data
- Статус
- Приоритет

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

Регистрацию объекта в очереди можно производить либо в событии ПриЗаписи/ПриПроведении, либо периодически брать из таблицы изменений плана обмена, в рассматриваемом примере данные помещаются обработкой, это сделано в демонстрационных целях.
Json-данные объекта и его exchange_id лучше (но не обязательно) генерировать сразу, при помещении в очередь, так нагрузка на систему будет равномерно распределена во времени. Пример формата exchange_id я приводил в первой статье, продублирую ещё раз:

```
guid#version#type
```

Пример:

```
ad178c88-1b07-4234-11f1-063fc697887f#AAAA-BFAA#Документ.ПриходнаяНакладная
```

Теперь займёмся генерацией data. Рассмотрим формирование data на максимально простом примере - на справочнике Склады, в котором есть только стандартные реквизиты Код и Наименование. код следующий:

Функция Справочник_Склады(Знач ЭлементСсылка) Экспорт
  Запрос = Новый Запрос;
  Запрос.УстановитьПараметр("Ссылка", ЭлементСсылка);
  Запрос.УстановитьПараметр("ИмяТаблицы", "Справочник.Склады");
  
  Запрос.Текст = 
  "ВЫБРАТЬ
  | Спр.Ссылка КАК Ссылка,
  | &ИмяТаблицы КАК typ,
  | Спр.ВерсияДанных КАК ver,
  | ПРЕДСТАВЛЕНИЕ(УНИКАЛЬНЫЙИДЕНТИФИКАТОР(Спр.Ссылка)) КАК uid,
  | Спр.Код КАК Код,
  | Спр.Наименование КАК Наименование
  |ИЗ
  | Справочник.Склады КАК Спр
  |ГДЕ
  | Спр.Ссылка = &Ссылка";
  Пакет = Запрос.ВыполнитьПакет();
  
  Если Пакет[0].Пустой() Тогда
    Возврат Неопределено;
  КонецЕсли;
  
  ДанныеОбъекта = Новый Структура;
  
  // Шапка
  Шапка = Новый Массив;
  
  Выборка = Пакет[0].Выбрать();
  Пока Выборка.Следующий() Цикл
    Структура = Новый Структура;
    Структура.Вставить("typ");
    Структура.Вставить("ver");
    Структура.Вставить("uid");
    
    Структура.Вставить("Код");
    Структура.Вставить("Наименование");
    Структура.Вставить("Комментарий");
    ЗаполнитьЗначенияСвойств(Структура, Выборка);
    
    Шапка.Добавить(Структура);
  КонецЦикла;
  
  ДанныеОбъекта.Вставить("Шапка", Шапка);
  
  Возврат Новый Структура("exchange_id, data, channel, priority", 
  exchange_id(Шапка[0].uid, Шапка[0].ver, Шапка[0].typ),
  ИСТ_Сериализация.ТиповойСериализаторJSON(ДанныеОбъекта),
  ИСТ_ОбщийМодульПовтИсп.ИмяКанала(),
  0);
КонецФункции

Поля запроса uid, ver и typ используются для формирования exchange_id. Если нет необходимости отправлять каждую версию получателю, то в качестве ver можно всегда указывать 0 или любую другую константу. Если брокер увидит exchange_id, который был получен ранее, то он его проигнорирует и не передаст получателю, что избавит получателя от лишних телодвижений. На выходе в data получается примерно такой json:

{
    "Шапка": [
        {
            "typ": "Справочник.Склады",
            "uid": "c6978878-063f-11f1-ad17-8c881b074234",
            "ver": "AAAABwAAAAA=",
            "Код": 1,
            "Наименование": "Склад 1"
        }
    ]
}

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

3.3 Код отправки из 1С

Отправка сообщений производится через WebSocket-соединение. Код следующий:

Процедура ОтправитьСообщенияНаСервере() Экспорт
  ДанныеКОтправке = ДанныеДляОтправки();
  Если ДанныеКОтправке.Пустой() Тогда
    Возврат;
  КонецЕсли;
  
  Клиент = WebSocketКлиенты.НайтиПредопределенный(Метаданные.WebSocketКлиенты.WebSocketSender);
  Если Клиент = Неопределено Тогда
    Возврат;
  КонецЕсли;
  ТекущееСоединение = Клиент.Подключить();
  Если ТекущееСоединение = Неопределено Тогда
    Возврат;
  КонецЕсли;
  
  СостояниеСоединения = Клиент.ПолучитьСостояниеСоединения();
  КоличествоПопыток = 5;
  Пока КоличествоПопыток > 0 И СостояниеСоединения <> СостояниеWebSocketСоединения.Открыто Цикл
    ИСТ_ВебСокетыВызовСервера.Пауза(1000);
    КоличествоПопыток = КоличествоПопыток - 1;
    СостояниеСоединения = Клиент.ПолучитьСостояниеСоединения();
  КонецЦикла;
  
  Если СостояниеСоединения <> СостояниеWebSocketСоединения.Открыто Тогда
    Возврат;
  КонецЕсли;
  
  ИСТ_ВебСокетыВызовСервера.ЗаписатьВЛог("ОтправитьСообщенияНаСервере", Клиент.Ключ, Новый Структура("Описание", "Старт: " + ТекущаяДатаСеанса()));
  
  СтатусОтправлен = Перечисления.ИСТ_СтатусыОчереди.Отправлен;
  
  Выборка = ДанныеКОтправке.Выбрать();
  Пока Выборка.Следующий() Цикл
    ТекущееСоединение.ОтправитьСообщение(Выборка.data);
    РегистрыСведений.ИСТ_Очередь.ИзменитьСтатус(Выборка.Ссылка, СтатусОтправлен);
  КонецЦикла;
  
  ИСТ_ВебСокетыВызовСервера.ЗаписатьВЛог("ОтправитьСообщенияНаСервере", Клиент.Ключ, Новый Структура("Описание", СтрШаблон("Финиш: %1, отправлено: %2", ТекущаяДатаСеанса(), Выборка.Количество())));
КонецПроцедуры

 

4. Приём сообщений на стороне брокера

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

 

5. Обработка на стороне получателя (1С)

5.1 Схема работы получателя

При получении сообщения получатель не пытается его сразу же парсить, а просто складывает в регистр сведений СообщенияКЗагрузке, с примерно такой структурой:

Измерения:
- ИдентификаторСообщения (exchange_id)

Ресурсы:
- Сообщение (Сипрка - data в виде json-строки)
- Загружено (Булево)
- Приоритет (Число)

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

5.2 Код получения

Сначала отправляется приглашение на приме сообщений:

Процедура ЗапроситьСообщенияНаСервере() Экспорт
  Клиент = WebSocketКлиенты.СоздатьКлиента(Метаданные.WebSocketКлиенты.WebSocketReceiver, ИСТ_ОбщийМодульПовтИсп.ИмяКанала());
  Если Клиент = Неопределено Тогда
    Возврат;
  КонецЕсли;
  
  ТекущееСоединение = Клиент.Подключить();
  Если ТекущееСоединение = Неопределено Тогда
    Возврат;
  КонецЕсли;
  
  СостояниеСоединения = Клиент.ПолучитьСостояниеСоединения();
  КоличествоПопыток = 20;
  Пока КоличествоПопыток > 0 И СостояниеСоединения <> СостояниеWebSocketСоединения.Открыто Цикл
    ИСТ_ВебСокетыВызовСервера.Пауза(1000);
    КоличествоПопыток = КоличествоПопыток - 1;
    СостояниеСоединения = Клиент.ПолучитьСостояниеСоединения();
  КонецЦикла;
  
  Если СостояниеСоединения <> СостояниеWebSocketСоединения.Открыто Тогда
    Возврат;
  КонецЕсли;
  
  ИСТ_ВебСокетыВызовСервера.ЗаписатьВЛог("ЗапроситьСообщенияНаСервере", Клиент.Ключ, Новый Структура("Описание", "Старт: " + ТекущаяДатаСеанса()));
  
  ТекущееСоединение.ОтправитьСообщение(СтрШаблон("ReadyForReceiving:%1", ИСТ_ОбщийМодульПовтИсп.ИмяКанала()));
КонецПроцедуры

Далее, в обработчике события при получении сообщения происходит загрузка:

Процедура ПриПолученииСообщения_TestChannel(Соединение, Сообщение) Экспорт
  Если СтрНайти(Сообщение, "{") > 0 Тогда
    АтрибутыСообщения = ИСТ_Сериализация.ТиповойДесериализаторJSON(Сообщение);
    ИСТ_ВебСокетыВызовСервера.ДобавитьСообщениеКЗагрузке(АтрибутыСообщения);
  Иначе
    ИСТ_ВебСокетыВызовСервера.ЗаписатьВЛог("ИСТ_ОбработчикиСобытийПолучателя.ПриПолученииСообщения_TestChannel", Соединение.Ключ, Сообщение);
  КонецЕсли;
КонецПроцедуры

Воспроизведение (загрузка) объектов

После очередной порции сообщений получатель всегда пытается загрузить то что получил.

&НаСервереБезКонтекста
Процедура ЗагрузитьСообщенияНаСервере()
  Запрос = Новый Запрос;
  Запрос.УстановитьПараметр("channel", ИСТ_ОбщийМодульПовтИсп.ИмяКанала());
  
  Запрос.Текст = 
  "ВЫБРАТЬ
  | ИСТ_СообщенияКЗагрузке.exchange_id КАК exchange_id,
  | ИСТ_СообщенияКЗагрузке.data КАК data
  |ИЗ
  | РегистрСведений.ИСТ_СообщенияКЗагрузке КАК ИСТ_СообщенияКЗагрузке
  |ГДЕ
  | НЕ ИСТ_СообщенияКЗагрузке.Загружено
  | И ИСТ_СообщенияКЗагрузке.channel = &channel
  |
  |УПОРЯДОЧИТЬ ПО
  | ИСТ_СообщенияКЗагрузке.priority";
  
  Выборка = Запрос.Выполнить().Выбрать();
  
  Пока Выборка.Следующий() Цикл
    Если СообщениеЗагружено(Выборка.data) Тогда
      РегистрыСведений.ИСТ_СообщенияКЗагрузке.СообщениеЗагружено(Выборка.exchange_id);
    КонецЕсли;
  КонецЦикла;
КонецПроцедуры

&НаСервереБезКонтекста
Функция СообщениеЗагружено(Знач Сообщение)
  Чтение = Новый ЧтениеJSON;
  Чтение.УстановитьСтроку(Сообщение);
  
  Структура = ПрочитатьJSON(Чтение);
  Если Не Структура.Свойство("Шапка") Тогда
    Возврат Ложь;
  КонецЕсли;
  
  Данные = Структура.Шапка[0];
  Если Данные.typ = "Справочник.Контрагенты" Тогда
    Возврат ИСТ_ЗагрузкаСообщений.ЗагрузитьКонтрагента(Структура);
  ИначеЕсли Данные.typ = "Справочник.Номенклатура" Тогда
    Возврат ИСТ_ЗагрузкаСообщений.ЗагрузитьНоменклатуру(Структура);
  ИначеЕсли Данные.typ = "Справочник.Склады" Тогда  
    Возврат ИСТ_ЗагрузкаСообщений.ЗагрузитьСклад(Структура);
  ИначеЕсли Данные.typ = "Документ.ПриходнаяНакладная" Тогда
    Возврат ИСТ_ЗагрузкаСообщений.ЗагрузитьПриходнуюНакладную(Структура);
  Иначе
    Возврат Ложь;
  КонецЕсли;
  
КонецФункции

...

Функция ЗагрузитьСклад(Знач Структура) Экспорт
  РеквизитыШапки = Структура.Шапка[0];
  
  УИД = Новый УникальныйИдентификатор(РеквизитыШапки.uid);
  
  ЭлементСсылка = Справочники.Склады.ПолучитьСсылку(УИД);
  Если СсылкаСуществует(ЭлементСсылка) Тогда
    Возврат Истина;
  КонецЕсли;
  
  ЭлементОбъект = Справочники.Склады.СоздатьЭлемент();
  ЭлементОбъект.УстановитьСсылкуНового(Справочники.Склады.ПолучитьСсылку(УИД));
  ЭлементОбъект.Наименование = РеквизитыШапки.Наименование;
  ЭлементОбъект.Записать();
  
  Возврат Истина;
КонецФункции

 

6. Работа с зависимостями, идемпотентность и защита от дублей, роль брокера

Тезисно проговорю ещё раз архитектуру, если где-то повторюсь, заранее приношу извинения:

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

 

7. Производительность

Для тестирования производительности выгрузки в демонстрационной конфигурации были созданы:
- Приходные накладные - 1000 шт
- Количество строк в одном документе - 50
Все значения ссылочных типов были заполнены рандомно

Выгрузка

Выгрузка в файл:
23 сек

Выгрузка брокеру:
3 сек

Запрос сообщений

Запрос сообщений (получение от брокера):
2 сек

Загрузка в базе-получателе

Из регистра сообщений к загрузке:
2 сек

Из файла:
17 сек

Как видно, разница достаточно ощутимая, на больших данных она может иметь решающее значение.
Это всё, что я хотел показать, исходники брокера можно взять [здесь](https://github.com/edex-dev/edex), база, на которой велась разработка и тестирование, приложена к статье.

 

Как попробовать?

Брокер (должен быть установлен Go, лучше последней версии):

1. Скачиваем репоизторий
2. Собираем с помощью Makefile, либо командой:
3. Запускаем edex.exe

go build -o edex.exe

Можно запустить без предварительной сборки:

go run .

1С-отправитель:

1. Скачиваем, создаём демо-базу
2. Заполняем тестовыми данными (Основное - Сервис - Управление тестовыми данными)
3. Создаем сообщения на отправку (Отправка - Сервис - Обмен сообщения через WebSocket - Создать сообщения на отправку)
4. Отправляем сообщений (Отправка - Сервис - Обмен сообщения через WebSocket - Отправить сообщения)

1С-получатель:

1. Создаём ещё одну демо-базу
2. Запрашиваем сообщения (Отправка - Сервис - Обмен сообщения через WebSocket - Запросить сообщения). На этом шаге заполнится регистр сведений "Сообщения к загрузке"
3. Загружаем сообщения (Отправка - Сервис - Обмен сообщения через WebSocket - Загрузить сообщения)

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

брокер обмен сообщения асинхронность

См. также

Перенос данных 1C Программист 1С:Предприятие 8 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос документов, начальных остатков и справочной информации из УПП 1.3 в ERP 2 | из УПП 1.3 в УТ 11 | из УПП в КА 2 | Правила конвертации (КД 2) | Более 360 предприятий выполнили переход с использованием этого продукта! | Сэкономьте время - используйте готовое решение для перехода! | Позволяет перенести из УПП 1.3 в ERP / УТ 11 / КА 2 всю возможную информацию | В переносе есть фильтр по организации и множество других опциональных параметров выгрузки | Есть несколько алгоритмов выгрузки остатков на выбор

58000 руб.

04.08.2015    186415    438    301    

447

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

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена | Можно выполнить переход с УПП на БП 3 или запускать выгрузку данных за выбранный период времени | Переносятся документы, начальные остатки и вся справочная информация | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

50050 руб.

25.02.2015    187618    356    288    

416

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

27633 руб.

12.06.2017    159811    960    317    

481

SALE! 10%

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

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.267.x) и БП 3.0 (3.0.194.x). Правила подходят для версии ПРОФ и КОРП.

38000 34200 руб.

15.12.2021    33635    250    64    

190

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Платные (руб)

Правила переноса кадровых и расчетных данных и справочной информации из "1С:УПП1.3" или "1С:КА 1.1" в "1С:ЗУП 3.1 | Разработан в формате КД 2 (правила конвертации данных) | При выгрузке есть фильтр по организациям | Обновляется при выходе новых релизов 1С | Развитие алгоритмов | Расчетные документы переносятся в документ "Перенос данных" | Создаются документы "Начальная штатная расстановка" и "Начальная задолженность по зарплате", переносятся кадровые документы

58000 руб.

29.10.2018    62444    80    131    

79

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Управление торговлей 10 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.88.x) и УТ 11.5 (11.5.25.x).

38000 34200 руб.

23.07.2020    67534    313    94    

251

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой

58000 руб.

15.04.2019    83355    222    174    

161

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием Россия Платные (руб)

Регулярный обмен, выгрузка, перенос из КА 1.1, УПП 1.3, УТ 10.3 для обмена с любыми конфигурациями, поддерживающими обмен в формате EnterpriseData (КД3) - БП 3.0, ERP, КА 2, УТ 11, Розница 3, УНФ 3 и другими. Правила для старых и доработанных конфигураций не требуют синхронного обновления и совместимы с новыми и будущими конфигурациями. Обмен по расписанию, через папку, FTP, почту.

16531 руб.

18.02.2016    202282    671    543    

562
Для отправки сообщения требуется регистрация/авторизация