Как работает план обмена в 1с. Организация обмена с базой филиала (розничного магазина) в торговой сети через XML (универсальный обмен). Настройка важных моментов в обмене данными между УТ и БП

Инструкция по настройке обмена данными между 1С и интернет-магазином на платформе CS-Cart или Multi-Vendor.

Для этого запустите файл “1сv8.exe”, в открывшемся окне выберите базу данных, с которой будет производиться обмен, и нажмите на кнопку “1С:Предприятие”.

После запуска необходимо выбрать пользователя и ввести пароль (если у пользователя задан пароль).


Если пользователь и пароль введены правильно, откроется окно “Демонстрационная база”.


Также необходимо ввести имя пользователя интернет-магазина и его пароль.

Для проверки соединения нажмите кнопку “Проверить соединение”. Если все параметры заполнены корректно, будет показано сообщение “Соединение успешно установлено”. В противном случае необходимо проверить корректность введеного адреса и параметров доступа.

Если проверка соединения проходит неудачно, обмен работать не будет.

“Выгружать в каталог на диске” - для выгрузки данных в файл.

Если выбранно данное назначение, то необходимо указать путь к каталогу, куда будут выгружаться данные.

Выберите контроль изменений:
  • “Полная выгрузка” - выгрузка всех товаров и заказов, соответствующих условиям выгрузки.
  • “Выгружать только измененные объекты” - выгрузка объектов, измененых с момента последней удачной выгрузки.
“Использовать периодический обмен данными”

Для автоматического обмена данными включите “Использовать периодический обмен данными” и настройте расписание обмена, чтобы обмен запускался автоматически когда это необходимо.


Примечание

Панель администратора → Верхнее меню → Модули → Управление модулями → “Русская локализация - Экспорт, импорт в 1С”

После установки модуля откройте его настройки.

Окно “Настройки модуля” содержит вкладки:

  • Общие настройки,
  • Настройки параметров и опций
  • Параметры доставки
  • Установка видов цен
  • Ограничение заказов

Общие настройки

Вкладка “Общие настройки” содержит следующие поля:


Осуществлять обмен с компанией Поле со списком компаний, в котором необходимо выбрать компанию, с которой будет производиться обмен.
Использовать в названии товара

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

  • Наименование
  • Полное наименование
Использовать в артикуле товара

Определяет какие данные будут записываться в поле артикула товара:

  • Артикул номенклатуры
  • Код номенклатуры
Использовать изготовителя Будет выгружен изготовитель номенклатуры. Изготовитель будет добавлен в характеристику товаров “Бренд/Производитель”.
Скрывать товары с нулевым остатком. Будут скрыты товары с нулевым количеством.
Добавлять налог к товарам.

Товарам будут добавлены налоги, используемые в 1С.

Настройки выгрузки налогов доступны на странице:

Примечание

Модули → 1С → Цены и налоги из 1С.


Для настройки выгрузки налогов необходимо указать соответствия налогов в CS-Cart и процентной ставкой в 1С.

Использовать название страницы Параметр, определяющий будет ли использоваться название страницы “Наименование номенклатуры”
Источник промо текста

Параметр, определяющий какие данные будут записываться в промо-текст:

  • Полное наименование
  • Описание
  • Свойство номеклатуры
Наименование свойства Наименование свойства, значение которого будет записываться в поле “Промо-текст”, если в параметре “Источник промо текста” выбрано значение “Свойство номенклатуры”.

Настройка параметров и опций

Вкладка “Настройка параметров и опций” содержит следующие настройки:


Имя опции

Название выгружаемой опции для комбинации характеристик номенклатуры (для стандартного отображения характеристик номенклатуры)

Значение по умолчанию: “Варианты”.

Создавать комбинацию с нулевым количеством. Будут созданы комбинации товаров с нулевым остатком.
Способы отображения характеристик из 1С

Необходимо выбрать способ отображения характеристик номенклатуры.

  • Стандартный способ - создается опция по комбинациям характеристик.
  • “По свойствам объекта” - создаются опции по каждой характеристике номенклатуры.

Параметры доставки

Вкладка “Параметры доставки” настраивает загрузку дополнительных реквизитов номенклатуры (в одном поле можно указать несколько реквизитов для каждого вида номенклатуры с новой строки) и содержит следующие настройки:


Включать отдельно стоимость доставки заказа для 1С Доставка будет определена как отдельная номенклатура.
Реквизит веса в 1С Выгружаемый
Отображать вес как характеристику По весу товара будет создана характеристика, для фильтра товаров по характеристикам.
Бесплатная доставка Выгружаемый дополнительный реквизит номенклатуры. Тип значения реквизита в 1С - Булево.
Отображать бесплатную доставку как характеристику По параметру “Бесплатная доставка товара” будет создана характристика товара.
Стоимость доставки Дополнительный реквизит номенклатуры. Тип значения реквизита в 1С - Число.
Количество штук в коробке Дополнительный реквизит номенклатуры. Тип значения реквизита в 1С - Число.
Длина коробки Дополнительный реквизит номенклатуры. Тип значения реквизита в 1С - Число.
Ширина коробки Дополнительный реквизит номенклатуры. Тип значения реквизита в 1С - Число.
Высота коробки Дополнительный реквизит номенклатуры. Тип значения реквизита в 1С - Число.

Виды цен

Вкладка “Установка видов цен” предназначена для возможности выгрузки нескольких видов цен и содержит следующие поля:


Выберите настройку Использовать эту функцию для выгрузки нескольких цен (Базовая цена, Рекомендованная цена, Оптовые цены).

Выгрузка нескольких цен реализована с помощью цен для групп пользователей. Вы можете задать для каждой группы пользователей (Опт, Розница, Золотой клиент) свою цену на товар.

Для настройки выгрузки цен и соответствия цен группам пользователей в CS-Cart перейдите на страницу “Цены и налоги из 1С”.

Примечание

Верхнее меню → Модули → 1С → Цены и налоги из 1С.

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

Окно “Цены из 1С” содержит поля:

  • “Цена из 1С” - это цена, которая будет доступна для указанной группы пользователей;
  • “Базовая цена” - это цена товара по умолчанию для всех групп пользователей;
  • “Рекомендованная цена” - это рекомендованная цена товара в разделе “Ценообразование/наличие”.

Для проверки введенных названий цен (соглашений) в модуле предусмотрено тестирование выгружаемых цен. Для тестирования:

Обмен данными между 1С и CS-Cart

Обмен данными между 1С и CS-Cart можно осуществлять одним из способов:

    Автоматический запуск

    Для автоматического запуска обмена достаточно настроить расписание автоматического обмена данными в форме узла обмена данными.

    Ручной запуск

    Для запуска обмена данными откройте созданный узел обмена и нажмите на кнопку “Синхронизация данных - Выполнить обмен данными”, будет запущен процесс обмена, по окончании которого будет выдано соответствующее сообщение.


Для анализа результатов обмена используется журнал регистрации «1С: Предприятия».

Для просмотра событий выгрузки данных в окне созданного узла обмена необходимо нажать кнопку “Синхронизация данных - События выгрузки данных”, откроется окно “Журнал регистрации”.


В форме “Журнал регистрации” для просмотра истории обмена открываются строки журнала и анализируется содержащаяся в них информация. Для быстрого просмотра протокола обмена по строке журнала достаточно нажать на поле “Комментарий” и откроется окно “Событие”:


Для просмотра и удаления объектов, зарегистрированных для выгрузки, в окне созданного узла обмена нажмите на кнопку “Синхронизация данных - Показать зарегистрированные изменения”. В форме отображаются группы (виды) объектов: Товары, Файлы и Заказы. Если необходимо отменить (удалить) регистрацию конкретного объекта, необходимо выбрать его и нажать на кнопку [x]:

Возникла необходимость настроить обмен между базами 1С центрального компании и торговых филиалов. РИБ не подошел, из-за чувствительности к изменениям конфигурации, особенно к динамическим обновлениям. А также из-за того, что требуется обмен по определенным правилам: вся информация должна идти в одну сторону - из центра в филиал. Т.е. если кто-то изменит в базе филиала справочник номенклатуры случайно, это не должно попадать в центральную базу.

Из центральной базы в филиал выгружаются:

  • каталог товаров,
  • цены только по некоторым видам цен,
  • заказы из интернет-магазина.

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

На основе этих требований было решено попробовать обмен через формат EnterpriseData.

Краткая справка по обмену в формате EnterpriseData

Модуль менеджера обмена - это модуль конфигурации 1С, который собственно реализует правила конвертации для обмена. Будет располагаться во внешней обработке, которую мы будем подключать к узлу плана обмена.

ПКС - правила конвертации свойств

Создание плана обмена

Для удобства создадим подсистему "ECom_ОбменСФилиалами". Все новые объекты будем добавлять в эту подсистему. Изменения в типовые модули будем выносить в расширение (при подключении расширения надо будет снять галочки "безопасный режим", т.к. будут затрагиваться серверные модули).

Копируем план обмена "СинхронизацияДанныхЧерезУниверсальныйФормат", называем новый план обмена "ECom_ОбменСФилиалами".

В настройках состава плана обмена делаем Действия - Выключить все, а потом добавляем справочники:

  • ВидыЦен
  • Номенклатура

и документы:

  • ЗаказКлиента
  • УстановкаЦенНоменклатуры

Заходим в модуль менеджера. В процедуре ПолучитьВерсииФорматаОбмена необходимо изменить название плана обмена в запросе.

Также удобно добавить возможность отладки модуля менеджера обмена (внешней обработки), как это сделать, описано тут:

Процедура ОпределитьНастройки определяет, как наш план обмена обмена будет появляться в меню настройки синхронизации.

Процедура ОпределитьНастройки

Процедура ОпределитьНастройки(Настройки, ИдентификаторНастройки = "") Экспорт Настройки.ПредупреждатьОНесоответствииВерсийПравилОбмена = Истина; Настройки.ПутьКФайлуКомплектаПравилНаПользовательскомСайте = "https://users.v8.1c.ru/distribution/project/Trade110"; Настройки.ПутьКФайлуКомплектаПравилВКаталогеШаблонов = "\1c\trade"; Настройки.Вставить("ЗаголовокКомандыДляСозданияНовогоОбменаДанными", НСтр("ru = "Обмен с филиалами"")); Настройки.Вставить("ЗаголовокПомощникаСозданияОбмена", НСтр("ru = "Обмен с филиалами"")); Настройки.Вставить("ЗаголовокУзлаПланаОбмена", НСтр("ru = "Обмен с филиалами"")); Настройки.Вставить("ЭтоПланОбменаXDTO", Истина); КонецПроцедуры

А также необходимо в общем модуле ОбменДаннымиУТУП в процедуре СписокПлановОбмена добавить наш план обмена

ПланыОбменаПодсистемы.Добавить(Метаданные.ПланыОбмена.ECom_ОбменСФилиалами);

В результате появится возможность настраивать обмен по нашему плану обмена:

Чтобы запускать обмен типовыми средствами необходимо еще в общих командах

  • НастроитьПараметрыТранспортаСообщенийОбмена
  • Синхронизировать
  • СоставОтправляемыхДанных

В свойстве "Тип параметра" отметить наш план обмена

Копируем типовые подписки на события:

  • СинхронизацияДанныхЧерезУниверсальныйФорматРегистрация
  • СинхронизацияДанныхЧерезУниверсальныйФорматРегистрацияДокумента

Указываем наши объекты, входящие в состав нашего плана обмена.

Копируем типовой модуль ОбменДаннымиСобытияУТ, в полученном модуле в процедурах меняем имя плана обмена с СинхронизацияДанныхЧерезУниверсальныйФормат на наш ECom_ОбменСФилиалами.

В созданных подписках указываем обработчики - процедуры из нашего нового модуля.

Также добавим в этот модуль функцию ЭтоЦентральнаяБаза(), которая нам потребуется в дальнейшем. Признаком центральной базы будем считать код узла, соответствующего текущей базе ("этот узел"), равным "ЦБ".

Функция ЭтоЦентральнаяБаза() Экспорт

Функция ЭтоЦентральнаяБаза() Экспорт Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ВЫБОР | КОГДА ECom_ОбменСФилиалами.Код = ""ЦБ"" | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ КАК ЭтоЦентральнаяБаза |ИЗ | ПланОбмена.ECom_ОбменСФилиалами КАК ECom_ОбменСФилиалами |ГДЕ | ECom_ОбменСФилиалами.ЭтотУзел" ; Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда Возврат Выборка.ЭтоЦентральнаяБаза; Иначе Возврат Ложь; КонецЕсли; КонецФункции // ЭтоЦентральнаяБаза()

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

Создание правил регистрации

Для создания правил регистрации нам потребуется конфигурация Конвертация Данных v2.

Я для изучения вопроса использовал вот эту статью:

С помощью обработки MD83Exp.epf, входящей в состав поставки Конвертации 2, необходимо выгрузить структуру нашей конфигурации в файл.

Затем необходимо загрузить полученную структуру конфигурации в Конвертацию 2.

Создаем правила регистрации.

Выбираем нашу конфигурацию и наш план обмена.

И заходим в настройку правил регистрации.

Создаем правила регистрации для наших объектов:

Т.к. мы хотим, чтобы у нас был односторонний обмен (только из центра в филил), в настройку правил по каждому объекту надо добавить в обработчик "Перед обработкой" наш фильтр:

Отказ = Не ECom_ОбменДаннымиПовтИсп.ЭтоЦентральнаяБаза();

На "Заказ клиента" накладываем дополнительный фильтр по организации и по дате начала выгрузки:

Для документа "Установка цен номенклатуры" так же добавляем отбор по дате. Плюс к этому в обработчик "При обработке" добавляем фильтр по виду цен.

ИспользоватьКэш = Ложь; ВидыЦен = Объект.ВидыЦен.ВыгрузитьКолонку("ВидЦены"); ПараметрыЗапроса.Вставить("ВидыЦен", ВидыЦен); ТекстЗапроса = "ВЫБРАТЬ | ECom_ОбменСФилиалами.Ссылка КАК Ссылка |ИЗ | ПланОбмена.ECom_ОбменСФилиалами.ВидыЦенНоменклатуры КАК ECom_ОбменСФилиаламиВидыЦенНоменклатуры | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланОбмена.ECom_ОбменСФилиалами КАК ECom_ОбменСФилиалами | ПО ECom_ОбменСФилиаламиВидыЦенНоменклатуры.Ссылка = ECom_ОбменСФилиалами.Ссылка | И (ECom_ОбменСФилиаламиВидыЦенНоменклатуры.ВидЦенНоменклатуры В (&СвойствоОбъекта_ВидыЦен)) | И (ECom_ОбменСФилиалами.ЭтотУзел = ЛОЖЬ)" ;

Этот обработчик с помощью запроса позволяет определить список узлов, в которых будет произведена регистрация объекта. Почему-то хотя наш параметр запроса называется "ВидыЦен", в запросе мы должны писать "СвойствоОбъекта_ВидыЦен".

На справочник "Виды цен" также накладываем фильтр:

Сохраняем правила регистрации во внешний файл:

Полученный XML-файл необходимо загрузить в макет "Правила регистрации" нашего плана обмена:

Отметим, что при работе конфигурации правила регистрации берутся вовсе не из этого макета, а из правил, хранящихся в регистре сведений "ПравилаДляОбменаДанными". А в этот регистр правила загружаются как раз из макета, зашитого в конфигурацию - при создании настройки синхронизации. Это приводит к тому, если у нас уже создана настройка синхронизации, а нам по каким-то причинам потребовалось поменять правила регистрации - после изменения правил в макете конфигурации нужно обновить их также в этом регистре:

Правила конвертации

Для создания правил конвертации нам потребуется конфигурация Конвертация Данных v3. Лучше пользоваться чистой базой. Например, разрабатывая конвертацию для формата данных EnterpriseData 1.3, для некоторых объектов почему-то требовалось задавать реквизиты (ПКС), не являющиеся казалось бы обязательными. Оказалось, что они обязательны в версии 1.2, и простое наличие в базе Конвертации загруженного описания этого формата уже сбивало логику работы программы. Поэтому берем чистую базу, и грузим в нее все "с нуля".

Очень здорово работа с конвертацией 3.0 описана тут:

Загружаем структуру конфигурации из файла, выгруженного ранее (в Конвертации 2).

Выгружаем из УТ 11 XDTO-пакет EnterpriseData_1_3_8 в файл

Загружаем полученный файл в Конвертацию 3

Создаем конвертацию

Версия формата менеджера обмена указывается в зависимости от конфигурации. Например для УТ 11.3 это "1", для УТ 11.4 - "2".

Что такое конвертация? Для выгрузки и загрузки объекта нам нужно:

  1. Правило отправки данных - тут мы можем накладывать фильтр на объекты и применять разные правила конвертации (например, для папок номенклатуры и элементов указываются разные правила конвертации из-за разного набора реквизитов)
  2. Правило конвертации "из 1С в XML" - тут данные 1С преобразуются в данные формата EnterpriseData (например, можно документ "Реализация" сконвертировать в документ "Поступление")
  3. Правило конвертации "из XML в 1С"
  4. Правило получения данных

Если объект участвует в плане обмена - для него обязательно необходимо создать правило отправки данных. В нашем случае это:

  • Виды цен
  • Номенклатура
  • Заказ клиента
  • Установка цен номенклатуры

Как себя будут вести реквизиты этих объектов ссылочного типа? Например, реквизит "Организация". У каждого "объектных" типов в формате EnterpriseData (например, Справочник.Контрагенты) есть так называемые ключевые свойства. Так вот, когда мы выгружаем заказ, в правилах конвертации мы указываем реквизит "Организация". При выгрузке этого реквизита выгружаются и его ключевые свойства. Мы не будем создаваться создавать правила отправки для справочника "Организации", потому что эти данные в работающей системе меняются крайне редко, мы просто пропишем алгоритм, который при получении заказа правильно подставит уже существующую в базе филиала организацию.

Итак, правила отправки мы пишем для часто меняющихся объектов, "статичные" же объекты мы лучше однократно (и повторно при необходимости) выгрузим через универсальную выгрузку-загрузку.

Создаем правило конвертации для отправки номенклатуры.

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

Итак, указываем правила конвертации свойство для номенклатуры:

Как видим, у нас появилось несколько реквизитов "сложного" типа, для них также необходимо создать "Правила конвертации объектов", иначе в при выгрузке будет выходить такое сообщение в ошибках: "Структура объекта "/ЕдиницаИзмерения" не соответствует типу".

Правила конвертации для перечислений, и прочих предопределенных (в конфигураторе) данных создаются на вкладке:

Для этих (и некоторых других) данных удобно, чтобы правило работало сразу и отправку, и на получение.

Указываем созданные правила в ПКС для номенклатуры:

Теперь создадим правило конвертации для "Заказа клиента".

Добавим правила конвертации для табличной части "Товары". Для начала укажем соответствие реквизитов в ПКС. Необходимо проставить галочку "Используется алгоритм", т.к. значения табличной части будут формироваться не "сами", нужно еще написать небольшой алгоритм. При использовании алгоритма нам не обязательно указывать реквизиты объекта из 1С, т.к. значения для выгрузки в файл XML все равно будут формироваться алгоритмом. Необходимо также указывать правило конвертации свойства для "сложных" типов.

Теперь нужно добавить алгоритм заполнения табличной части в обработчик "При отправке".

#Область Товары // Табличные части Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Товары.НомерСтроки КАК НомерСтрокиДокумента, | Товары.Номенклатура КАК Номенклатура, | ВЫБОР | КОГДА НоменклатураСправочник.НаименованиеПолное = """" | ТОГДА НоменклатураСправочник.Наименование | ИНАЧЕ НоменклатураСправочник.НаименованиеПолное | КОНЕЦ КАК НоменклатураНаименование, | ЕСТЬNULL(НоменклатураСправочник.ЕдиницаИзмерения, ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)) КАК ЕдиницаИзмерения, | ВЫРАЗИТЬ(""СобственныеТовары"" КАК СТРОКА(18)) КАК ТипЗапасов, | Товары.Количество, | Товары.Цена КАК Цена, | Товары.Сумма, | Товары.СтавкаНДС, | Товары.СуммаНДС |ИЗ | Документ.ЗаказКлиента.Товары КАК Товары | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК НоменклатураСправочник | ПО Товары.Номенклатура = НоменклатураСправочник.Ссылка |ГДЕ | Товары.Ссылка = &Ссылка | И Товары.Отменено = ЛОЖЬ" ; Запрос.УстановитьПараметр("Ссылка", ДанныеИБ.Ссылка); ДанныеXDTO.Вставить("Товары", Запрос.Выполнить().Выгрузить()); #КонецОбласти

В правилах конвертации при получении заказа нужно прописать алгоритм, который выполняет обратную операцию

Алгоритм заполняет ПолученныеДанные.ДополнительныеСвойства.Товары, которые потом автоматически записываются в табличную часть "Товары" загружаемого объекта.

МассивСтрокТовары = Новый Массив; ПравилаЗаполнения = Новый Соответствие; ПравилаЗаполнения.Вставить("Номенклатура", "Номенклатура"); ПравилаЗаполнения.Вставить("Количество", "Количество"); ПравилаЗаполнения.Вставить("Сумма", "Сумма"); ПравилаЗаполнения.Вставить("Цена", "Цена"); ПравилаЗаполнения.Вставить("СтавкаНДС", "СтавкаНДС"); ПравилаЗаполнения.Вставить("СуммаНДС", "СуммаНДС"); ПравилаЗаполнения.Вставить("Склад", "Склад"); Если ДанныеXDTO.Свойство("Товары") И ЗначениеЗаполнено(ДанныеXDTO.Товары) Тогда Для Каждого Строка Из ДанныеXDTO.Товары Цикл СтруктураДанныхСтроки = Новый Структура; Для Каждого ПравилоЗаполнения Из ПравилаЗаполнения Цикл СтруктураДляПереносаЗначения = Новый Структура(ПравилоЗаполнения.Ключ, Неопределено); ЗаполнитьЗначенияСвойств(СтруктураДляПереносаЗначения, Строка); Значение = СтруктураДляПереносаЗначения[ПравилоЗаполнения.Ключ]; Если Значение <> Неопределено Тогда СтруктураДанныхСтроки.Вставить(ПравилоЗаполнения.Значение, Значение); КонецЕсли; КонецЦикла; СтруктураДанныхСтроки.Вставить("КоличествоУпаковок", СтруктураДанныхСтроки.Количество); Если ДанныеXDTO.Свойство("Склад") Тогда СтруктураДанныхСтроки.Вставить("Склад", ДанныеXDTO.Склад); КонецЕсли; МассивСтрокТовары.Добавить(СтруктураДанныхСтроки); КонецЦикла; КонецЕсли; Если МассивСтрокТовары.Количество() > 0 Тогда ПолученныеДанные.ДополнительныеСвойства.Вставить("Товары", МассивСтрокТовары); КонецЕсли;

Теперь реализуем такой механизм обмена контрагентами (покупателями): при загрузке заказа в базу филиала ищем существующего клиента по телефону (например, клиент что-то купил в филиале, зарегистрировался, а потом решил приобрести что-то в интернет-магазине, и заказ попал в центральную базу). Если клиент по телефону найден, то подставляем в заказ его, если же нет - создаем нового. Для этого нам необходимо будет вмести с заказом передавать номер телефона клиента. В типовые поля заказа в формате EnterpriseData телефон не входит, чтобы его передать, можно воспользоваться полем AdditionalInfo, куда можно записывать дополнительную информацию. Мы будем передавать дополнительную информацию в виде структуры с необходимыми полями. Через AdditionalInfo можно передавать и структуры, и таблицы значений. В обработчик "При отправке" в правила конвертации заказа при отправке

добавляем код:

Текст обработчика "При отправке"

СтруктДопДанные = Новый Структура; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПартнерыКонтактнаяИнформация.НомерТелефона |ИЗ | Справочник.Партнеры.КонтактнаяИнформация КАК ПартнерыКонтактнаяИнформация |ГДЕ | ПартнерыКонтактнаяИнформация.Ссылка = &Партнер | И ПартнерыКонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ТелефонПартнера)" ; Запрос.УстановитьПараметр("Партнер", ДанныеИБ.Партнер); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда структДопДанные.Вставить("НомерТелефона", Выборка.НомерТелефона); КонецЕсли; ДанныеXDTO.Вставить("Additionalinfo", структДопДанные);

Соответственно, в обработчик "При конвертации данных XDTO" в найстройку конвертации при получении

Добавляем код:

Текст обработчика "При конвертации данных XDTO"

Если ДанныеXDTO.Свойство("AdditionalInfo") Тогда Если ДанныеXDTO.AdditionalInfo.Свойство("НомерТелефона") Тогда НомерТелефона = ДанныеXDTO.AdditionalInfo.НомерТелефона; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПартнерыКонтактнаяИнформация.Ссылка КАК Партнер, | Контрагенты.Ссылка КАК Контрагент |ИЗ | Справочник.Партнеры.КонтактнаяИнформация КАК ПартнерыКонтактнаяИнформация | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты | ПО ПартнерыКонтактнаяИнформация.Ссылка = Контрагенты.Партнер | И (ПартнерыКонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ТелефонПартнера)) | И (ПартнерыКонтактнаяИнформация.НомерТелефона = &НомерТелефона)" ; Запрос.УстановитьПараметр("НомерТелефона", НомерТелефона); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда ПолученныеДанные.Партнер = Выборка.Партнер; ПолученныеДанные.Контрагент = Выборка.Контрагент; Иначе ПартнерОбъект = Справочники.Партнеры.СоздатьЭлемент(); ПартнерОбъект.Наименование = ДанныеXDTO.Контрагент.Наименование; ПартнерОбъект.НаименованиеПолное = ПартнерОбъект.Наименование; ПартнерОбъект.Клиент = Истина; ПартнерОбъект.ЮрФизЛицо = Перечисления.КомпанияЧастноеЛицо.ЧастноеЛицо; НоваяСтрока = ПартнерОбъект.КонтактнаяИнформация.Добавить(); НоваяСтрока.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон; НоваяСтрока.Вид = Справочники.ВидыКонтактнойИнформации.ТелефонПартнера; НоваяСтрока.НомерТелефона = НомерТелефона; НоваяСтрока.Представление = НомерТелефона; НоваяСтрока.ЗначенияПолей = УправлениеКонтактнойИнформациейСлужебныйВызовСервера.КонтактнаяИнформацияXMLПоПредставлению(НоваяСтрока.Представление, Перечисления.ТипыКонтактнойИнформации.Телефон); ПартнерОбъект.ОбменДанными.Загрузка = Истина; ПартнерОбъект.Записать(); КонтрагентОбъект = Справочники.Контрагенты.СоздатьЭлемент(); КонтрагентОбъект.Наименование = ПартнерОбъект.Наименование; КонтрагентОбъект.НаименованиеПолное = КонтрагентОбъект.Наименование; КонтрагентОбъект.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо; КонтрагентОбъект.Партнер = ПартнерОбъект.Ссылка; КонтрагентОбъект.ОбменДанными.Загрузка = Истина; КонтрагентОбъект.Записать(); ПолученныеДанные.Партнер = ПартнерОбъект.Ссылка; ПолученныеДанные.Контрагент = КонтрагентОбъект.Ссылка; КонецЕсли; КонецЕсли; КонецЕсли;

В выгрузке цен номенклатуры есть несколько интересных моментов:

  • документ установки цен может содержать несколько видов цен, а нам нужно выгружать только те, которые подпадают под фильтр.
  • В формате EnterpriseData документ "Установка цен номенклатуры" имеет только один тип цен. Т.е. один документ в 1С должен выгружаться как несколько объектов EnterpriseData.

Для реализации фильтра нам потребуется где-то хранить выгружаемые виды цен, установленные в настройках узла обмена. Для этого нам потребуются "Параметры конвертации":

А также обработка события "Перед конвертацией":

В правилах обработки данных для документа "Установка цен номенклатуры" нам необходимо отключить использование конвертации "в типовом" варианте, а вместо этого генерировать объект XDTO "на ходу":

Для этого мы обратимся напрямую к методу ОбменДаннымиXDTOСервер.ВыгрузкаОбъектаВыборки. Преобразуем документ в массив необходимых нам структур с одним типом цен, и уже каждую эту структуру отдельно выгрузим через правила конвертации. Выглядит, конечно, запутанно.

Текст обработчика "При обработке"

Если ТипЗнч(ДанныеИБ) = Тип("Структура") Тогда Возврат; КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЦеныНоменклатуры.ВидЦены КАК ТипЦен, | ЦеныНоменклатуры.Номенклатура КАК Номенклатура, | ЦеныНоменклатуры.Цена КАК Цена |ИЗ | Документ.УстановкаЦенНоменклатуры.Товары КАК ЦеныНоменклатуры |ГДЕ | ЦеныНоменклатуры.Ссылка = &Ссылка | И ЦеныНоменклатуры.Цена <> 0 | И ЦеныНоменклатуры.ВидЦены В(&ВидыЦенНоменклатуры) |ИТОГИ ПО | ТипЦен"; Запрос.УстановитьПараметр("Ссылка", ДанныеИБ.Ссылка); Запрос.УстановитьПараметр("ВидыЦенНоменклатуры", КомпонентыОбмена.ПараметрыКонвертации.ВидыЦенНоменклатуры); ТаблицаТоваров = Новый ТаблицаЗначений(); ТаблицаТоваров.Колонки.Добавить("Номенклатура"); ТаблицаТоваров.Колонки.Добавить("Цена"); ВыборкаВидЦены = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); ПравилоУстановкаЦенОтправка = КомпонентыОбмена.ПравилаОбработкиДанных.Найти("Документ_УстановкаЦенНоменклатуры", "Имя"); Если Не ПравилоУстановкаЦенОтправка = Неопределено Тогда Пока ВыборкаВидЦены.Следующий() Цикл Если НЕ ЗначениеЗаполнено(ВыборкаВидЦены.ТипЦен) Тогда Продолжить; КонецЕсли; ДанныеИБСтруктура = Новый Структура("Дата, Номер, Ссылка"); ЗаполнитьЗначенияСвойств(ДанныеИБСтруктура, ДанныеИБ); ВыборкаДетали = ВыборкаВидЦены.Выбрать(); ТаблицаТоваров.Очистить(); Пока ВыборкаДетали.Следующий() Цикл СтрокаТовары = ТаблицаТоваров.Добавить(); ЗаполнитьЗначенияСвойств(СтрокаТовары, ВыборкаДетали); КонецЦикла; ДанныеИБСтруктура.Вставить("ТипЦен", ВыборкаВидЦены.ТипЦен); ДанныеИБСтруктура.Вставить("Товары", ТаблицаТоваров); ОбменДаннымиXDTOСервер.ВыгрузкаОбъектаВыборки(КомпонентыОбмена, ДанныеИБСтруктура, ПравилоУстановкаЦенОтправка); КонецЦикла; КонецЕсли; ИспользованиеПКО.Документ_УстановкаЦенНоменклатуры = Ложь;

В правило конвертации в ПКС необходимо добавить свойство "ТипЦен". При этом надо выбирать способ выбора свойств "Вручную".

Настройка синхронизации

Необходимо задать значение константы "Префикс информационной базы" - "ЦБ":

Создаем новую настройку синхронизации

Зададим в настройках фильтр по дате документов, организации, виду цен:

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

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

Префикс информационной базы задаем "ФЛ" и настраиваем синхронизацию, аналогично центральной базе.

Дополнительные файлы со сквозным примером.

Состав файлов, приложенных к данной статье:

  • cf-файл "Доп. объекты конфигурации.cf" для объединения с основной конфигурацией УТ 11, содержащий разработанный план обмена
  • cfe-файл с расширением конфигурации, для корректировки модулей конфигурации
  • xml-файл "Правила регистрации.xml"
  • epf-файл "МенеджерДемо.epf"

Порядок установки плана обмена. В конфигураторе запускаем операцию сравнения и объединения с "Доп. объекты конфигурации.cf". Снимаем галочки со всех объектов:

Выбираем "Действия - отметить по подсистемам файла", отмечаем только "ECom_ОбменСФилиалами"

Добавляем расширение из файла "ECom_ОбменДаннымиСФилиалами.cfe", снимаем галочки про безопасность:

Для корректировки правил регистрации вложенный файл "Правила регистрации.xml" можно загрузить в Конвертацию 2. Предварительно необходимо загрузить структуру конфигурации, как описано .

Для корректировки правил конвертации вложенный файл "МенеджерДемо.epf" можно загрузить в Конвертацию 3. Предварительно необходимо создать описание конвертации, как описано .

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

Обработчики и алгоритмы пишутся на языке той платформы, в которой они будут выполняться при обмене.

Если это платформа «1С: Предприятие 7.7», то код обработчиков интегрируется в код обработки выгрузки или загрузки. Соответственно, каждый обработчик или алгоритм выделяется в отдельную функцию и доступен для отладки при обмене.

Если выгрузка или загрузка происходят на платформе «1С: Предприятие 8», то код обработчиков не интегрируется в код обработки обмена данными, а выгружается в файл правил обмена. В процессе обмена данными код обработчиков или алгоритмов берется из файла правил и выполняется непосредственно в контексте оператора «Выполнить». Для отладки кода обработчиков и алгоритмов можно воспользоваться обработкой «Универсальный обмен данными XML».

Планы обмена в 1С 8.3 — объект метаданных конфигурации, служащий для реализации синхронизации данных в системе 1С 8.

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

Обычно обмен в 1С построен с использованием специальных правил обмена, которые формируются с помощью конфигурации .

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

Как работать с планом обмена

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

  1. Изменяем данные (справочники, документы и т.д) в базе — план обмена запоминает изменения. Либо авторегистрацией, либо программным кодом (например метод ПланыОбмена.ЗарегистрироватьИзменения).
  2. Когда приходит время, получаем список измененных элементов — метод ПрочитатьИзменения(), выгружаем эти данные.
  3. При выгрузке/загрузке для исключения коллизий сверяем номера сообщений у плана обмена. Если они не совпадают, отменяем обмен данными, если совпадают, снимаем регистрацию изменений и увеличиваем номер сообщения.

Получите 267 видеоуроков по 1С бесплатно:

Распределенная информационная база

Если этот флаг установлен в настройках, то данный план обмена является распределенной информационной базой (РИБ).

— территориально распределенная система на основе одинаковой конфигурации 1С 8.3. РИБ помимо изменений данных умеет передавать и изменений конфигурации, что очень удобно, например, при обновлении релиза конфигурации.

Состав плана обмена

Настройка, с помощью которой разработчик управляет набором объектов для обмена:

В составе плана обмена может быть 3 состояния объекта:

  1. Не включен в план обмена — соответственно, никаким образом для такого объекта Вы не сможете настроить обмен данными по этому плану обмена.
  2. Авторегистрация Запретить — это значит, что регистрировать изменения для данного узла необходимо только программным кодом по какому-то условию, как правило, . Используется метод ПланыОбмена.ЗарегистрироватьИзменения().
  3. Авторегистрация Разрешить — если установлена данная галка, то любые изменения элемента автоматически попадут в список изменений плана обмена.

Планы обмена и производительность 1С

Из-за системных особенностей реализации планов обмена не рекомендуется злоупотреблять выгрузкой изменений по планам обмена. Дело в том, что при чтении изменений блокируются все таблицы изменений. Т.е. при выгрузке план обмена не дает записать новые изменений, а следовательно, блокирует и сами элементы — справочники, документы и т.д.

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

Обмен данными будем настраивать односторонний , из УТ ---> БП. Также возможно настроить двухсторонний обмен, но на практике это не так часто требуется, поэтому в нашем примере мы его рассматривать не будем.

Подготовительные действия для настройки обмена в БП

Давайте приступим к настройке синхронизации, сначала зайдем в базу 1С "Бухгалтерия предприятия 3.0" (приемник), нам необходимо проверить включена ли синхронизация для этой базы, для того чтобы это сделать нам нужно сначала зайти в базу. Как только база откроется переходим на вкладку "Администрирование" ---> "Настройки синхронизации данных"

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

Продолжаем настройку синхронизации данных в УТ

После того как мы сделали все необходимые действия в базе приемнике (БП 3.0), для продолжения настройки обмена данными нам необходимо открыть базу источник (УТ 11.1). Заходим на вкладку "Администрирование", слева в меню выбираем пункт "Настройки синхронизации данных" . Если синхронизация не включена, то включаем ее с помощью флажка, также не забываем указать префикс базы источника. Как только мы выполнили все пункты 1-4 как показано на изображении ниже, необходимо нажать на гиперссылку "Синхронизация данных" (пункт 5).

В новом отобразившемся окне необходимо нажать на зеленый плюсик (Настроить синхронизацию данных), в выпавшем меню выбираем пункт "Бухгалтерия предприятия 3.0".

Настройка важных моментов в обмене данными между УТ и БП

Теперь мы видим окно с настройкой синхронизации данных в 1С, выбираем пункт "Указать настройки вручную" и жмем "Далее".

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

На следующей странице мы должны заполнить правила отправки и получения данных из конфигурации БП 3.0 (приемник). Жмем "изменить правила выгрузки данных".

Перед нами открылось окно "Правила отправки данных", в нем мы задаем следующие параметры:

  • Какая НСИ будет отправляться (в нашем примере нас интересуют только документы и НСИ используемая в них, поэтому мы бырали соответствующий пункт, если выбрать первый пункт "Отправлять всю" то вместе с документами будут перегружаться и все справочники, зачастую если информация не используется в документах то она бесполезна для приемника, ведь она никак не влияет на учет)
  • С какой даты отправлять всю информацию (ручную синхронизацию мы в этой статье рассматривать не будем)
  • По какой или каким организациям выполнять отправку данных (в нашем примере мы выбрали одну организацию ИП "Предприниматель")
  • Правила формирования договоров
  • Обобщенный склад
  • Сворачивать ли документы по складу

После того как мы сделали настройки нажимаем "Записать и закрыть".

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

В новом окне нам предлагается настроить правила для базы приемника (БП). В пункте 1 называем обзываем как-нибудь нашу базу, задаем ей префикс. ПРЕФИКС должен быть таким же каким мы его задавали в самой базе БП в начале этой статьи, если префиксфы будут отличаться синхронизация данных в программе 1С работать не будет. После этого жмем пункт 2, а потом пункт 3.

В пункте 3 нам необходимо разрешить проведение документов при их загрузке в базу. Нажимаем "Записать и закрыть".

Теперь окно должно иметь примерно такой вид как показано ниже, жмем "Далее".

В этом окне находится справочная информация о создаваемой синхронизации в 1С. Просто жмем кнопку "Далее". Если при настройке синхронизации данных у Вас программа вывела ошибку, значит Вам необходимо связаться с нами, чтобы наш специалист 1С оказал Вам помощь прямо сейчас !

На следующем шаге программа предложит выполнить синхронизацию сразу после создания настройки обмена данными . Согласимся с этим и нажмем "Готово".

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

Давайте рассмотрим пример, допустим в УТ есть контрагент с наименованием "ООО ФармГрупп" и ИНН 1234567, а в БП также есть контрагент с ИНН 1234567, но наименованием "ФармГрупп", если мы при сопоставлении данных на этапе синхронизации не сопоставить эти два объекта, то после синхронизации в приемнике (Бухгалетрия предприятия 3.0) мы будем иметь два контрагента с ИНН 1234567 и двумя наименованиями "ООО ФармГрупп" и "ФармГрупп" соответственно. Для того чтобы не возникало подобных ситуаций и был изобретен механизм сопоставления объектов.

В нашем примере база приемник пустая, и поэтому окна сопоставления объектов у нас не открывалось. Зато после выполнения некоторых операций система обязательно предложит пользователю добавить некоторые дополнительные данные и выведет следующее окно. Никаких дополнительных данных нам передавать не требуется, все что нужно мы уже настроили раньше, поэтому на этом шаге выбираем "Не добавлять документы к отправке". Жмем "Далее".

Заключительный этап выполнения обмена данными между 1С

На заключительном этапе программа отобразит следующее окно, в нем пользователя проинформируют о том, что синхронизация была проведена успешно, жмем "Готово". На этом синхронизация между базами в одностороннем обмене из "Управлении торговлей 11.1" (УТ) в "Бухгалтерию предприятия 3.0" (БП) завершена.