В статье будет рассмотрена доработка и настройка на примере конфигураций ERP (2.4.12.109) БСП (3.1.2.500) и УПП (1.3.72.2) БСП (1.2.4.1), платформа 8.3.16.1148, думаю что решение может быть использовано на любых конфигурациях с использованием БСП от 3.1.2.500. Основная цель показать как можно быстро разработать собственный регулярный обмен на современных конфигурациях. В моем случае была задача разработать односторонний обмен справочниками из ERP в УПП.
Разработка на стороне ERP. Добавляем новый план обмена, определяем для него необходимые права доступа, определяем его состав, обязательно включаем в состав:
Регистры сведений:
СоответствияОбъектовИнформационныхБаз
включаем в общие команды:
Общие команды в которые нужно включить план обмена.
Добавляем созданный план обмена в процедуру "ПолучитьПланыОбмена" общего модуля "ОбменДаннымиПереопределяемый" таким образом:
Добавление плана обмена в общем модуле "ОбменДаннымиПереопределяемый".
Процедура ПолучитьПланыОбмена(ПланыОбменаПодсистемы) Экспорт
//++ НЕ ГОСИС
ОбменДаннымиЛокализация.ПолучитьПланыОбмена(ПланыОбменаПодсистемы);
//-- НЕ ГОСИС
// Доработка +
ПланыОбменаПодсистемы.Добавить(Метаданные.ПланыОбмена.Доработка_НовыйПланОбмена);
// Доработка -
КонецПроцедуры
Прописываем процедуру в модуль менеджера нового плана обмена.
Процедура ПриПолученииНастроек(НастройкиПланаОбмена) Экспорт
КонецПроцедуры
Добавляем макеты к новому плану обмена "ПравилаОбмена", "ПравилаОбменаКорреспондента" тип текстовый документ, туда в дальнейшем вставим текст правил обмена, если правила будут подгружаться из файла то можно не заполнять макеты.
Разработка на стороне УПП. Добавляем новый план обмена (с таким же именем что в источнике), определяем для него необходимые права доступа, для старых версий БСП нужно создать управляемую форму. Определяем его состав, обязательно включаем в состав:
Регистры сведений:
СоответствияОбъектовИнформационныхБаз
включаем в общие команды:
Общие команды в которые нужно включить план обмена.
Добавляем созданный план обмена в процедуру "ПолучитьПланыОбмена" общего модуля "ОбменДаннымиПереопределяемый" таким образом:
Добавление плана обмена в общем модуле "ОбменДаннымиПереопределяемый".
Процедура ПолучитьПланыОбмена(ПланыОбменаПодсистемы) Экспорт
ПланыОбменаПодсистемы.Добавить(Метаданные.ПланыОбмена.ОбменРозницаУправлениеПредприятием);
ПланыОбменаПодсистемы.Добавить(Метаданные.ПланыОбмена.ОбменУправлениеПроизводственнымПредприятиемДокументооборот);
//ПланыОбменаПодсистемы.Добавить(Метаданные.ПланыОбмена.ОбменУправлениеПроизводственнымПредприятиемДокументооборот20);
// Доработка +
ПланыОбменаПодсистемы.Добавить(Метаданные.ПланыОбмена.Доработка_НовыйПланОбмена);
// Доработка -
КонецПроцедуры
Прописываем в модуль менеджера нового плана обмена.
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
////////////////////////////////////////////////////////////////////////////////
// ПРОГРАММНЫЙ ИНТЕРФЕЙС
// Возвращает имя файла настроек по умолчанию;
// В этот файл будут выгружены настройки обмена для приемника;
// Это значение должно быть одинаковым в плане обмена источника и приемника.
//
// Параметры:
// Нет.
//
// Возвращаемое значение:
// Строка, 255 - имя файла по умолчанию для выгрузки настроек обмена данными
//
Функция ИмяФайлаНастроекДляПриемника() Экспорт
Возврат "";
КонецФункции
// Возвращает структуру отборов на узле плана обмена с установленными значениями по умолчанию;
// Структура настроек повторяет состав реквизитов шапки и табличных частей плана обмена;
// Для реквизитов шапки используются аналогичные по ключу и значению элементы структуры,
// а для табличных частей используются структуры,
// содержащие массивы значений полей табличных частей плана обмена.
//
// Параметры:
// Нет.
//
// Возвращаемое значение:
// СтруктураНастроек - Структура - структура отборов на узле плана обмена
//
Функция НастройкаОтборовНаУзле(ВерсияКорреспондента, ИмяФормы) Экспорт
СтруктураНастроек = Новый Структура;
//СтруктураНастроек.Вставить("ИсточникКадровыхСведенийРегламентированныйУчет", Ложь);
Возврат СтруктураНастроек;
КонецФункции
// Возвращает структуру значений по умолчанию для узла;
// Структура настроек повторяет состав реквизитов шапки плана обмена;
// Для реквизитов шапки используются аналогичные по ключу и значению элементы структуры.
//
// Параметры:
// Нет.
//
// Возвращаемое значение:
// СтруктураНастроек - Структура - структура значений по умолчанию на узле плана обмена
//
Функция ЗначенияПоУмолчаниюНаУзле(ВерсияКорреспондента, ИмяФормы) Экспорт
Возврат Неопределено;
КонецФункции
// Возвращает строку описания ограничений миграции данных для пользователя;
// Прикладной разработчик на основе установленных отборов на узле должен сформировать строку описания ограничений
// удобную для восприятия пользователем.
//
// Параметры:
// НастройкаОтборовНаУзле - Структура - структура отборов на узле плана обмена,
// полученная при помощи функции НастройкаОтборовНаУзле().
//
// Возвращаемое значение:
// Строка, Неогранич. - строка описания ограничений миграции данных для пользователя
//
Функция ОписаниеОграниченийПередачиДанных(НастройкаОтборовНаУзле, ВерсияКорреспондента) Экспорт
Результат = НСтр("ru = 'Выгружается Номенклатура, Характеристики.'");
Результат = Результат + Символы.ПС + НСтр("ru = '");
//Если НастройкаОтборовНаУзле.ИсточникКадровыхСведенийРегламентированныйУчет Тогда
// Результат = Результат + НСтр("ru = 'регламентированный учет.'");
//Иначе
// Результат = Результат + НСтр("ru = 'управленческий учет.'");
//КонецЕсли;
Возврат Результат;
КонецФункции
// Возвращает строку описания значений по умолчанию для пользователя;
// Прикладной разработчик на основе установленных значений по умолчанию на узле должен сформировать строку описания
// удобную для восприятия пользователем.
//
// Параметры:
// ЗначенияПоУмолчаниюНаУзле - Структура - структура значений по умолчанию на узле плана обмена,
// полученная при помощи функции ЗначенияПоУмолчаниюНаУзле().
//
// Возвращаемое значение:
// Строка, Неогранич. - строка описания для пользователя значений по умолчанию
//
Функция ОписаниеЗначенийПоУмолчанию(ЗначенияПоУмолчаниюНаУзле, ВерсияКорреспондента) Экспорт
Возврат "";
КонецФункции
// Возвращает представление команды создания нового обмена данными.
//
// Возвращаемое значение:
// Строка, Неогранич - представление команды, выводимое в пользовательском интерфейсе.
//
// Например:
// Возврат НСтр("ru = 'Создать обмен в распределенной информационной базе'");
//
Функция ЗаголовокКомандыДляСозданияНовогоОбменаДанными() Экспорт
Возврат НСтр("ru = 'Создать обмен с конфигурацией ""ERP Обмен НСИ""'");
КонецФункции
// Определяет, будет ли использоваться помощник для создания новых узлов плана обмена.
//
// Возвращаемое значение:
// Булево - признак использования помощника.
//
Функция ИспользоватьПомощникСозданияОбменаДанными() Экспорт
Возврат Истина;
КонецФункции
// Возвращает пользовательскую форму для создания начального образа базы.
// Эта форма будет открыта после завершения настройки обмена с помощью помощника.
// Для планов обмена не РИБ функция возвращает пустую строку
//
// Возвращаемое значение:
// Строка, Неогранич - имя формы
//
// Например:
// Возврат "ПланОбмена._ДемоРаспределеннаяИнформационнаяБаза.Форма.ФормаСозданияНачальногоОбраза";
//
Функция ИмяФормыСозданияНачальногоОбраза() Экспорт
Возврат "";
КонецФункции
// Возвращает массив используемых транспортов сообщений для этого плана обмена
//
// 1. Например, если план обмена поддерживает только два транспорта сообщений FILE и FTP,
// то тело функции следует определить следующим образом:
//
// Результат = Новый Массив;
// Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FILE);
// Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FTP);
// Возврат Результат;
//
// 2. Например, если план обмена поддерживает все транспорты сообщений, определенных в конфигурации,
// то тело функции следует определить следующим образом:
//
// Возврат ОбменДаннымиСервер.ВсеТранспортыСообщенийОбменаКонфигурации();
//
// Возвращаемое значение:
// Массив - массив содержит значения перечисления ВидыТранспортаСообщенийОбмена
//
Функция ИспользуемыеТранспортыСообщенийОбмена() Экспорт
Результат = Новый Массив;
Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.COM);
Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FILE);
//Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FTP);
//Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL);
//+Владимир Ч. (заявка 22632) 25.02.2020
Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.WS);
//==Владимир Ч. (заявка 22632) 25.02.2020
Возврат Результат;
КонецФункции
// Возвращает признак использования плана обмена для организации обмена в модели сервиса.
// Если признак установлен, то в сервисе можно включить обмен данными
// с использованием этого плана обмена.
// Если признак не установлен, то план обмена будет использоваться только
// для обмена в локальном режиме работы конфигурации.
//
Функция ПланОбменаИспользуетсяВМоделиСервиса() Экспорт
Возврат Ложь;
КонецФункции
// Возвращает признак того, что план обмена поддерживает обмен данными с корреспондентом, работающим в модели сервиса.
// Если признак установлен, то становится возможным создать обмен данными когда эта информационная база
// работает в локальном режиме, а корреспондент в модели сервиса.
//
Функция КорреспондентВМоделиСервиса() Экспорт
Возврат Ложь;
КонецФункции
// Возвращает имена реквизитов и табличных частей плана обмена,
// перечисленных через запятую, которые являются общими для пары обменивающихся конфигураций.
// Например, если для плана обмена предусмотрено ограничение миграции данных по организациям в обе стороны,
// то табличная часть плана обмена, в которой перечислены разрешенные организации, считается общей.
// Возвращает пустую строку, если общие данные узлов не предусмотрены.
//
Функция ОбщиеДанныеУзлов(ВерсияКорреспондента, ИмяФормы) Экспорт
Возврат "";
КонецФункции
// Возвращает краткую информацию по обмену, выводимую при настройке синхронизации данных.
//
Функция КраткаяИнформацияПоОбмену() Экспорт
ПоясняющийТекст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Позволяет синхронизировать данные между конфигурациями ""%1"" и ""ERP"".
|Синхронизация данных выполняется в одностороннем режиме на уровне справочной информации.'"),
Метаданные.Синоним);
Возврат ПоясняющийТекст;
КонецФункции
// Возвращаемое значение: Строка - Ссылка на подробную информацию по настраиваемой синхронизации,
// в виде гиперссылки или полного пути к форме
Функция ПодробнаяИнформацияПоОбмену() Экспорт
//Возврат "ПланОбмена.ОбменУправлениеПроизводственнымПредприятиемДокументооборот.Форма.ПодробнаяИнформация";
Возврат "";
КонецФункции
// Возвращает имя обработки выгрузки в составе конфигурации
//
Функция ИмяОбработкиВыгрузки() Экспорт
Возврат "";
КонецФункции
// Возвращает имя обработки загрузки в составе конфигурации
//
Функция ИмяОбработкиЗагрузки() Экспорт
Возврат "";
КонецФункции
////////////////////////////////////////////////////////////////////////////////
// Обработчики событий для обмена без использования правил обмена
// Обработчик события коллизий изменений объектов.
// Условие возникновения:
// Событие возникает при загрузке данных,
// в случае коллизии изменений загружаемого объекта.
// Коллизия изменений возникает, когда в информационной базе
// зарегистрированы изменения для загружаемого объекта.
//
// Параметры:
// УзелИнформационнойБазы – ПланОбменаСсылка – узел плана обмена для которого выполняется загрузка данных.
// Объект – объект, для которого возникла коллизия изменений.
//
// Возвращаемое значение:
// Тип: Булево. Истина – загружаемый объект будет записан в информационную базу;
// Ложь – загружаемый объект записан не будет.
//
Функция ПрименитьОбъектПриКоллизииИзменений(УзелИнформационнойБазы, Объект) Экспорт
Возврат Ложь;
КонецФункции
////////////////////////////////////////////////////////////////////////////////
// Для работы через внешнее соединение
// Возвращает структуру отборов на узле плана обмена базы корреспондента с установленными значениями по умолчанию;
// Структура настроек повторяет состав реквизитов шапки и табличных частей плана обмена базы корреспондента;
// Для реквизитов шапки используются аналогичные по ключу и значению элементы структуры,
// а для табличных частей используются структуры,
// содержащие массивы значений полей табличных частей плана обмена.
//
// Параметры:
// Нет.
//
// Возвращаемое значение:
// СтруктураНастроек - Структура - структура отборов на узле плана обмена базы корреспондента
//
Функция НастройкаОтборовНаУзлеБазыКорреспондента(ВерсияКорреспондента, ИмяФормы) Экспорт
СтруктураНастроек = Новый Структура;
Возврат СтруктураНастроек;
КонецФункции
// Возвращает структуру значений по умолчению для узла базы корреспондента;
// Структура настроек повторяет состав реквизитов шапки плана обмена базы корреспондента;
// Для реквизитов шапки используются аналогичные по ключу и значению элементы структуры.
//
// Параметры:
// Нет.
//
// Возвращаемое значение:
// СтруктураНастроек - Структура - структура значений по умолчанию на узле плана обмена базы корреспондента
//
Функция ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента(ВерсияКорреспондента, ИмяФормы) Экспорт
Возврат Неопределено;
КонецФункции
// Возвращает строку описания ограничений миграции данных для базы корреспондента, которая отображается пользователю;
// Прикладной разработчик на основе установленных отборов на узле базы корреспондента должен сформировать строку описания ограничений
// удобную для восприятия пользователем.
//
// Параметры:
// НастройкаОтборовНаУзле - Структура - структура отборов на узле плана обмена базы корреспондента,
// полученная при помощи функции НастройкаОтборовНаУзлеБазыКорреспондента().
//
// Возвращаемое значение:
// Строка, Неогранич. - строка описания ограничений миграции данных для пользователя
//
Функция ОписаниеОграниченийПередачиДанныхБазыКорреспондента(НастройкаОтборовНаУзле, ВерсияКорреспондента) Экспорт
Результат = НСтр("ru = 'Выгружается Заявка .'");
Возврат Результат;
КонецФункции
// Возвращает строку описания значений по умолчанию для базы корреспондента, которая отображается пользователю;
// Прикладной разработчик на основе установленных значений по умолчанию на узле базы корреспондента должен сформировать строку описания
// удобную для восприятия пользователем.
//
// Параметры:
// ЗначенияПоУмолчаниюНаУзле - Структура - структура значений по умолчанию на узле плана обмена базы корреспондента,
// полученная при помощи функции ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента().
//
// Возвращаемое значение:
// Строка, Неогранич. - строка описания для пользователя значений по умолчанию
//
Функция ОписаниеЗначенийПоУмолчаниюБазыКорреспондента(ЗначенияПоУмолчаниюНаУзле, ВерсияКорреспондента) Экспорт
Возврат "";
КонецФункции
// Процедура предназначена для получения дополнительных данных, используемых при настройке обмена в базе-корреспонденте.
//
// Параметры:
// ДополнительныеДанные – Структура. Дополнительные данные, которые будут использованы
// в базе-корреспонденте при настройке обмена.
// В качестве значений структуры применимы только значения, поддерживающие XDTO-сериализацию.
//
Процедура ПолучитьДополнительныеДанныеДляКорреспондента(ДополнительныеДанные) Экспорт
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
// Константы и проверка параметров учета
// Возвращает пояснение о последовательности действий пользователя для настройки параметров учета в текущей информационной базе.
//
Функция ПояснениеДляНастройкиПараметровУчета() Экспорт
Возврат "";
КонецФункции
// Возвращает пояснение о последовательности действий пользователя для настройки параметров учета в базе-корреспонденте.
//
Функция ПояснениеДляНастройкиПараметровУчетаБазыКорреспондента(ВерсияКорреспондента) Экспорт
Возврат "";
КонецФункции
Процедура ОбработчикПроверкиПараметровУчета(Отказ, Получатель, Сообщение) Экспорт
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
// Обработчики событий
// Обработчик события при подключении к корреспонденту.
// Событие возникает при успешном подключении к корреспонденту и получении версии конфигурации корреспондента
// при настройке обмена с использованием помощника через прямое подключение
// или при подключении к корреспонденту через Интернет.
// В обработчике можно проанализировать версию корреспондента и,
// если настройка обмена не поддерживается с корреспондентом указанной версии, то вызвать исключение.
//
// Параметры:
// ВерсияКорреспондента (только чтение) – Строка – версия конфигурации корреспондента, например, "2.1.5.1".
//
Процедура ПриПодключенииККорреспонденту(ВерсияКорреспондента) Экспорт
КонецПроцедуры
// Обработчик события при отправке данных узла-отправителя.
// Событие возникает при отправке данных узла-отправителя из текущей базы в корреспондент,
// до помещения данных узла в сообщения обмена.
// В обработчике можно изменить отправляемые данные или вовсе отказаться от отправки данных узла.
//
// Параметры:
// Отправитель – ПланОбменаОбъект, Структура – узел плана обмена, от имени которого выполняется отправка данных.
// Игнорировать – Булево – признак отказа от выгрузки данных узла.
// Если в обработчике установить значение этого параметра в Истина,
// то отправка данных узла выполнена не будет. Значение по умолчанию – Ложь.
//
Процедура ПриОтправкеДанныхОтправителя(Отправитель, Игнорировать) Экспорт
КонецПроцедуры
// Обработчик события при получении данных узла-отправителя.
// Событие возникает при получении данных узла-отправителя,
// когда данные узла прочитаны из сообщения обмена, но не записаны в информационную базу.
// В обработчике можно изменить полученные данные или вовсе отказаться от получения данных узла.
//
// Параметры:
// Отправитель – ПланОбменаОбъект, Структура – узел плана обмена, от имени которого выполняется получение данных.
// Игнорировать – Булево – признак отказа от получения данных узла.
// Если в обработчике установить значение этого параметра в Истина,
// то получение данных узла выполнена не будет. Значение по умолчанию – Ложь.
//
Процедура ПриПолученииДанныхОтправителя(Отправитель, Игнорировать) Экспорт
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
// Переопределяемая настройка дополнения выгрузки
// Предназначена для настройки вариантов интерактивной настройки выгрузки по сценарию узла.
// Для настройки необходимо установить значения свойств параметров в необходимые значения.
//
// Параметры:
// Получатель - ПланОбменаСсылка - Узел, для которого производится настройка
// Параметры - Структура - Параметры для изменения. Содержит поля:
//
// ВариантБезДополнения - Структура - настройки типового варианта "Не добавлять".
// Содержит поля:
// Использование - Булево - флаг разрешения использования варианта. По умолчанию Истина.
// Порядок - Число - порядок размещения варианта на форме помощника, сверху вниз. По умолчанию 1.
// Заголовок - Строка - позволяет переопределить название типового варианта.
// Пояснение - Строка - позволяет переопределить текст пояснения варианта для пользователя.
//
// ВариантВсеДокументы - Структура - настройки типового варианта "Добавить все документы за период".
// Содержит поля:
// Использование - Булево - флаг разрешения использования варианта. По умолчанию Истина.
// Порядок - Число - порядок размещения варианта на форме помощника, сверху вниз. По умолчанию 2.
// Заголовок - Строка - позволяет переопределить название типового варианта.
// Пояснение - Строка - позволяет переопределить текст пояснения варианта для пользователя.
//
// ВариантПроизвольныйОтбор - Структура - настройки типового варианта "Добавить данные с произвольным отбором".
// Содержит поля:
// Использование - Булево - флаг разрешения использования варианта. По умолчанию Истина.
// Порядок - Число - порядок размещения варианта на форме помощника, сверху вниз. По умолчанию 3.
// Заголовок - Строка - позволяет переопределить название типового варианта.
// Пояснение - Строка - позволяет переопределить текст пояснения варианта для пользователя.
//
// ВариантДополнительно - Структура - настройки дополнительного варианта по сценарию узла.
// Содержит поля:
// Использование - Булево - флаг разрешения использования варианта. По умолчанию Ложь.
// Порядок - Число - порядок размещения варианта на форме помощника, сверху вниз. По умолчанию 4.
// Заголовок - Строка - название варианта для отображения на форме.
// ИмяФормыОтбора - Cтрока - Имя формы, вызываемой для редактирования настроек.
// ЗаголовокКомандыФормы - Cтрока - Заголовок для отрисовки на форме команды открытия формы настроек.
// ИспользоватьПериодОтбора - Булево - флаг того, что необходим общий отбор по периоду. По умолчанию Ложь.
// ПериодОтбора - СтандартныйПериод - значение периода общего отбора, предлагаемого по умолчанию.
//
// Отбор - ТаблицаЗначений - содержит строки с описанием подробных отборов по сценарию узла.
// Содержит колонки:
// ПолноеИмяМетаданных - Строка - полное имя метаданных регистрируемого объекта, отбор которого описывает строка.
// Например "Документ._ДемоПоступлениеТоваров". Можно использовать специальные
// значения "ВсеДокументы" и "ВсеСправочники" для отбора соответственно всех
// документов и всех справочников, регистрирующихся на узле Получатель.
// ВыборПериода - Булево - флаг того, что данная строка описывает отбор с общим периодом.
// Период - СтандартныйПериод - значение периода общего отбора для метаданных строки, предлагаемого по умолчанию.
// Отбор - ОтборКомпоновкиДанных - отбор по умолчанию. Поля отбора формируются в соответствии с общим правилами
// формирования полей компоновки. Например, для указания отбора по реквизиту
// документа "Организация", необходимо использовать поле "Ссылка.Организация"
//
Процедура НастроитьИнтерактивнуюВыгрузку(Получатель, Параметры) Экспорт
КонецПроцедуры
// Возвращает представление отбора для варианта дополнения выгрузки по сценарию узла.
// См. описание "ВариантДополнительно" в процедуре "НастроитьИнтерактивнуюВыгрузку"
//
// Параметры:
// Получатель - ПланОбменаСсылка - Узел, для которого определяется представление отбора
// Параметры - Структура - Характеристики отбора. Содержит поля:
// ИспользоватьПериодОтбора - Булево - флаг того, что необходимо использовать общий отбор по периоду.
// ПериодОтбора - СтандартныйПериод - значение периода общего отбора.
// Отбор - ТаблицаЗначений - содержит строки с описанием подробных отборов по сценарию узла.
// Содержит колонки:
// ПолноеИмяМетаданных - Строка - полное имя метаданных регистрируемого объекта, отбор которого описывает строка.
// Например "Документ._ДемоПоступлениеТоваров". Могут быть использованы специальные
// значения "ВсеДокументы" и "ВсеСправочники" для отбора соответственно всех
// документов и всех справочников, регистрирующихся на узле Получатель.
// ВыборПериода - Булево - флаг того, что данная строка описывает отбор с общим периодом.
// Период - СтандартныйПериод - значение периода общего отбора для метаданных строки.
// Отбор - ОтборКомпоновкиДанных - поля отбора. Поля отбора формируются в соответствии с общим правилами
// формирования полей компоновки. Например, для указания отбора по реквизиту
// документа "Организация", будет использовано поле "Ссылка.Организация"
//
// Возвращаемое значение:
// Строка - описание отбора
//
Функция ПредставлениеОтбораИнтерактивнойВыгрузки(Получатель, Параметры) Экспорт
Возврат ""
КонецФункции
#КонецЕсли
Прописываем в модуль объекта нового плана обмена.
Перем мМонопольныйРежимПередЗаписью;
Перем мЭтоНовыйЭлемент;
Функция СообщитьИнформациюПользователюПослеСозданияНовогоУзла() Экспорт
НужноПерезапуститьВсеПодключенияКИБ = Ложь;
Если мЭтоНовыйЭлемент
И НЕ ПараметрыСеанса.ИспользованиеРИБ
И НЕ мМонопольныйРежимПередЗаписью Тогда
НужноПерезапуститьВсеПодключенияКИБ = Истина;
КонецЕсли;
Если НужноПерезапуститьВсеПодключенияКИБ Тогда
Если мМонопольныйРежимПередЗаписью Тогда
ПолныеПрава.ОпределитьФактИспользованияРИБ();
Возврат "";
Иначе
Возврат "Для корректной работы механизма обмена данными необходимо завершить работу всех пользователей и перезапустить текущий сеанс работы 1С:Предприятия.";
КонецЕсли;
Иначе
Если мЭтоНовыйЭлемент Тогда
ПолныеПрава.ОпределитьФактИспользованияРИБ();
КонецЕсли;
Возврат "";
КонецЕсли;
КонецФункции
Процедура ПередЗаписью(Отказ)
мЭтоНовыйЭлемент = ЭтоНовый();
мМонопольныйРежимПередЗаписью = ОбщегоНазначения.ОпределитьТекущийРежимРаботыМонопольный();
КонецПроцедуры
Процедура ПриЗаписи(Отказ)
СтрокаСообщенияПользователю = СообщитьИнформациюПользователюПослеСозданияНовогоУзла();
#Если Клиент Тогда
Сообщить(СтрокаСообщенияПользователю);
#КонецЕсли
КонецПроцедуры
Процедура ОпределитьТипОтправкиДанных(ЭлементДанных, ОтправкаЭлемента) Экспорт
КонецПроцедуры
Функция ВыгрузитьИзмененияДанныхДляУзла(УзелОбмена,КоличествоЭлементовВТранзакции, ЗаписьXML) Экспорт
Возврат ПроцедурыОбменаДанными.ВыгрузитьИзмененияДляУзлаВФайлОбмена(УзелОбмена,КоличествоЭлементовВТранзакции, ЗаписьXML);
КонецФункции
Функция ЗагрузитьИзмененияДанныхДляУзла (УзелОбмена,КоличествоЭлементовВТранзакции, ЗаписьXML) Экспорт
Возврат ПроцедурыОбменаДанными.ЗагрузитьИзмененияДляУзлаИзФайлаОбмена(УзелОбмена,КоличествоЭлементовВТранзакции, ЗаписьXML);
КонецФункции
Процедура ПриОтправкеДанныхГлавному(ЭлементДанных, ОтправкаЭлемента)
//Если ТипЗнч(ЭлементДанных) = мТипСправочникРегОтчеты Тогда
//
// ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать;
//
//КонецЕсли;
КонецПроцедуры
Добавляем макеты к новому плану обмена "ПравилаОбмена", "ПравилаОбменаКорреспондента" тип текстовый документ, туда в дальнейшем вставим текст правил обмена, если правила будут подгружаться из файла то можно не заполнять макеты.
Добавляем реквизит в план обмена даже если он не нужен, например "РежимВыгрузкиПриНеобходимости", тип "ПеречислениеСсылка.РежимыВыгрузкиОбъектовОбмена", это необходимо для того чтобы при открытии настроек обмена через меню "Сервис - Обмен данными с продуктами на платформе 1С:Предприятие 8.2 - Обмены данными" не возникала такая ошибка:
Ошибка открытия настроек обмена данными.
Далее пишем правила обмена с использованием КД 2.1 из источника в приемник и обратно из приемника в источник, если из приемника ничего не должно выгружаться то достаточно написать правила для справочника например "Валюты" поля поиска "Код" без поиска по внутреннему идентификатору.
Сохраняем готовые правила обмена следующим образом (пример):
1) Создаем папки: "Правила обмена данными ERP УПП", "Правила обмена данными УПП ERP".
2) В папку "Правила обмена данными ERP УПП" сохраняем правила обмена из ERP в УПП с названием "ExchangeRules.xml", а правила из УПП ERP с названием "CorrespondentExchangeRules.xml", аналогично проделываем и для папки "Правила обмена данными УПП ERP", только уже правила УПП ERP будут называться "ExchangeRules.xml", а ERP УПП "CorrespondentExchangeRules.xml"
3) Запаковываем при помощи zip папки: "Правила обмена данными ERP УПП", "Правила обмена данными УПП ERP".
На этом разработка закончилась, переходим к настройкам.
Настройка обмена.
1. Настройка на стороне ERP.
Включаем константы:
Использовать синхронизацию данных
Использовать синхронизацию данных в локальном режиме
Открываем новый план обмена через меню "Все функции - Новый план обмена". Заполняем предопределенный узел (код, наименование, например ERP), добавляем новый узел с которым будем обмениваться например "УПП". Загружаем правила обмена (можно использовать типовые, но для общего понимания опишу):
Важно! Через меню все функции идем в регистр сведений (если нет записи то добавляем), устанавливаем признак "Настройка завершена" по узлу приемнику:
Настройка завершена в регистре сведений.
Либо 2-й вариант создать форму узла плана обмена и прописать в модуле формы код:
&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
ОбменДаннымиСервер.ФормаУзлаПриЗаписиНаСервере(ТекущийОбъект, Отказ);
КонецПроцедуры
Настройка автоматического обмена для управляемых форм. Открываем карточку узла приемника по кнопке изменить (F2), выбираем пункт меню "Сценарии синхронизации":
Пример настройки сценария управляемые формы.
2. Настройки обмена на стороне УПП.
Включаем константы:
Использовать синхронизацию данных
Использовать синхронизацию данных в локальном режиме
Через меню «Операции – Планы обмена– Новый план обмена», добавляем новый узел с которым будет идти обмен (например ERP) и корректно переименуем предопределенный (например УПП). Проведем 2-е настройки:
Вызов нужных настроек в УПП.
2-е в данном случае обмен через интернет, поэтому базу источник нужно опубликовать.
Важно! Последним ключевым моментом в настройке будет запись в регистр сведений «Параметры подключения», обязательно по узлу корреспондента должен стоять флаг "Использовать передачу большого объема данных".
Либо 2-й вариант переносим этот ресурс в форме записи регистра сведений (требуются доработки, но более надежный т.к. при повторной записи свойство гарантировано будет установлено):
Доработка в части свойства "Использовать передачу большого объема данных".
Настройка автоматического обмена для обычных форм. Заходим в пункт меню "Сервис - Обмен данными с продуктами на платформе 1С:Предприятие 8.2 - Сценарии обменов данными":
Пример настройки сценария обычные формы.
В качестве примера показал настройки регламентных заданий как на обычных так и на управляемых формах, на практике если обмен идет через "Интернет" или "Прямое подключение" достаточно настроить их на одной стороне, с двух сторон настраиваются если обмен идет через "Локальный или сетевой каталог".
На этом все, обмен настроен, приятного пользования. Если что-то упустил прошу оставить комментарий, но у меня работал и после таких доработок.
Также предлагаю решения вашему вниманию:
Применение cтандартов и методик разработки конфигураций на практике
Шаблоны для применения cтандартов и методик разработки конфигураций 1С
Универсальный отчет для сравнения записей регистров накопления между базами.
Универсальная выгрузка и загрузка зарегистрированных справочников и документов по узлу.
Загрузка данных из унифицированных форм УПД и ТОРГ-12.
Список документов и их количество в базе.